`

程序员常犯的5个非技术性错误

阅读更多

 英文原文:5 top non-technical mistakes made by programmers备用链接

  一个好的软件开发人员需要培养两种技能:技术技能和非技术技能。不幸的是一些开发者只注重技术的部分,以致养成一些陋习,下面是最常犯的5个非技术性错误:

  0. 缺乏自律

  Jim Rohn曾经说过:自律是目标和成果之间的桥梁。我一直认为,不论是成为一名软件开发人员,亦或是想在生活的其它任何领域取得成功,自律都是最珍贵的技能之一。事实上,很少有人兼具智慧和自律。

  Steve Pavlina强调了自律的5个基本原则“……容忍(Acceptance)、毅力(Willpower)、努力(Hard Work)、勤勉(Industry)以及坚持不懈(Persistence)。将每一个单词的首字母提出,构成一个缩略词:鞭子(A WHIP)。这样更便于记忆,因为很多人总是把自律和鞭策自我联系在一起。……” 我力荐大家阅读Steve Pavlina写的关于自律的一系列文章

  正如我以前的文章每天写出好代码的5个建议中解释的一样,对于自律,我的个人做法是每天遵循以下步骤

  • 将一天要做的事情列成清单。
  • 一次只做一件事。
  • 正确做事。
  • 不要半途而废。
  • 与其道歉,不如补救,而放弃最不可取。

  1. 自我意识过甚

  据我的经验,程序员有点自我意识过甚,但凡过于自我的人都很难意识到这点,以下几个指标可以帮助你认识到自己是否自我意识过甚。

  • 你认为自己是最棒的程序员。
  • 你抵触交流。
  • 你要求检查代码,是为了炫耀而不是为获得建设性的建议。

  网上有很多关于程序员及其自我主义的文章,我在此推荐两篇,一篇是来自Mike Bernat的《无私的程序设计(Egoless programmin)》,另一篇是来自stackoverflow.com与此相关的讨论“你如何控制自大”。

  2. 不善沟通交流

  Woodrow Wilson说:“我若要说上十分钟,须花一个星期准备;若是十五分钟,需三天;若是半个小时,需两天;若是一个小时,我现在就能准备好。”

  沟通是我们人类的主要活动。做一个优秀的交流者,这不容易,但就我们的职业而言,却是必不可少的技能。对于设计、代码、同行评估、文档编写、试着去说服别人自己的设计是最好的、编写代码等等,我们总在交流意见。

  擅长沟通的人通常会像这样阐述事情:

  • 专注 - 他们只说需要理解的内容。
  • 清晰 - 容易理解。
  • 简洁 - 增一分则太过,减一分则不足。

  对成为一个更好的沟通者,我有两个建议:

  • 如果自认不是个好的沟通者,事先做好充分的准备直到达到集中、清晰、简洁的要求。
  • 交谈之中,首先倾听,思考妥当后再说出自己的看法。

  在我先前发布的文章《在开发团队中做出决定的七个最佳惯例》中,有更多关于提高交际能力的小窍门。

  3. 忽略用户

  “如果我们不关心用户,自有他人关心。”你在此的唯一原因就是服务用户,但有时候很容易忘记这一信条。我曾经所在的团队只注重于技术和平台,而不是令用户满意。我们花费一个多月的时间创造一个构架,却未能给用户带来任何价值;到开始使用的时候,我们发现它完全不适应用户的需要。

  4. 不能合理安排工作

  开发者们总是为自己镀金,他们研究新的或更有趣的技术;做所有觉得更酷的工程处理方法。这样无疑妨碍到了项目,但我并不是说时不时投入到别的活动中是不正常的。诚然我们都需要分散注意力,但是你若发现自己老是处于前面所提到的状态,那么你有必要重新考虑自己优先处理工作的方式。我再次推荐你读每天写出好代码的5个建议这篇文章。

6
3
分享到:
评论
3 楼 lastthelast 2011-08-31  
搞爷,哈哈
2 楼 zhouyong1828 2011-08-31  
程序员一定要善于沟通,这点很重要!
1 楼 dessertcheck 2011-08-31  

相关推荐

    程序员最常犯的五大非技术性错误

    程序员最常犯的五大非技术性错误

    菜鸟取经·程序员面试(第1期)

    1.13 编程技术面试的五大要点 1.14 让面试失败的十个坏习惯 1.15 面试中要避免的肢体语言 1.16 面试后须做的五件事 1.17 5 种求职者面试难成功 1.18 7 大迹象预示面试成功 1.19 HR 对应届生的简历建议,请慎用英语!...

    代码大全中文版

    但是直到现在,这些技术中的大部分仍然没有在软件编程中广泛采用,其主要原因是这些研究成果主要发表在高度专业性的学术刊物中,普通的程序员们无心顾及。Sridhar Raghavan 和 Donald Chand(1989)的研究表明,一...

    The Black Book of the Programmer 2nd Edition pdf

    但是,软件开发人员并没有利用所有机会来完成一个成功的职业生涯,一遍又一遍地犯同样的错误。一个好的软件项目必须在创造性和艺术技能方面做得更多,而不是技术技能。程序员的黑皮书展示了新手程序员与专业程序员的...

    C#微软培训资料

    11.3 静态和非静态的方法.129 11.4 方法的重载.130 11.5 操作符重载.134 11.6 小 结.137 第十二章 域 和 属 性 .139 12.1 域 .139 12.2 属 性 .143 12.3 小 结 .146 第十三章 事件和索引指示器 .148 ...

    网站架构的设计方案.doc

    有很多程序员都是在非表现层代码里完成数据的获取 和截断,然后赋值给表现层模板,这样的代码最直接的缺点就是同样一段数据,在这个 页面我可能想显示前10个字,再另一个页面我可能想显示前15个字,而一旦我们在程序...

    嵌入式系统/ARM技术中的探讨指针、结构体、联合体的安全规范

    在信息工程中指针是一个用来指示一个内存地址的计算机语言的变量或中央处理器(CPU)中... 然而,精华并不意味着完美,C语言在赋予程序员足够灵活性的同时,也给了程序员很多犯错误的机会。C语言是一种计算机程序设计

    c/C++面试题大全--96页

    本文的写作目的并不在于提供C/C++程序员求职面试指导,而旨在从技术上分析面试题的内涵。文中的大多数面试题来自各大论坛,部分试题解答也参考了网友的...这是许多程序员常犯的错误,其根源在于不理解变量的生存期。

    敏捷软件开发.pdf

     2.2.1犯错误  2.2.2宁可失败也要选择保守  2.2.3创新而不研究  2.2.4不能始终如一的习惯动物  2.2.5使用纪律和容忍来应对  2.3以一些更好的方式工作  2.3.1具体化  2.3.2实物  2.3.3在某些东西的基础上...

    操作系统(内存管理)

    文将对 Linux™ 程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半...

    内存管理内存管理内存管理

    程序员可以使用的内存管理技术进行概述,虽然关注的重点是 C 语言,但同样也适用于其他语言。文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理...

    leetcode粘贴不了-algorithmic-problem-solving:算法和数据结构内容

    许多程序员犯的两个错误是过快地跳入代码或过早开始考虑代码优化。 这两种错误都会大大增加解决问题所需的时间并增加挫败感。 为避免这种情况,我们建议采取以下步骤: 1. 花时间了解问题 在你深入解决问题之前,...

    sesvc.exe 阿萨德

    Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ...

    Python 2.5

    如果人工来做,这会是一个很繁琐而且容易犯错误的过程,你总会遗漏东西,到头来你还得重做以前的工作。Python对列表和字典的本地支持使复杂的数据转换更加容易。而且这种交互式模式可以让编程人员在转换过程的每一...

    Accelerated C++ PDF 中英文版

    希望这些标注可以帮助读者更快地消化重要概念,避免犯常见错误。为了更易于理解各种特征或概念间的关系,书中大量使用了前后交叉引用。.. 对于某些重要概念和C++新手最头疼的问题,我们进行了额外的讨论和解释。这...

    Accelerated C++源代码

    希望这些标注可以帮助读者更快地消化重要概念,避免犯常见错误。为了更易于理解各种特征或概念间的关系,书中大量使用了前后交叉引用。.. 对于某些重要概念和C++新手最头疼的问题,我们进行了额外的讨论和解释。这...

    JAVA自学之路

    提醒一句,要理解代码思路之后再跟着敲 ,背着敲,千万不要左边摆着别人的程序,右边自己一个一个子母的写,这就不再是程序员了,成了打字员了。 纸上得来终觉浅,所以:别问那么多,别想那么多,动手写吧。 ...

    传智播客扫地僧视频讲义源码

    本教程共分为5个部分,第一部分是C语言提高部分,第二部分为C++基础部分,第三部分为C++进阶部分,第四部分为C、C++及数据结构基础部分,第五部分为C_C++与设计模式基础,内容非常详细. 第一部分 C语言提高部分目录...

Global site tag (gtag.js) - Google Analytics