1. 太惧怕学不会新的工具、语言和框架程序员
通常的程序员会墨守他们最喜欢的工具,而不但愿学习新的,由于他们认为,离开了那些语言和工具,多年的经验就会付诸东流。而强大的程序员会拥抱那些挑战和机会,积极地学习新的工做方式。web
2. 直到特性“完成”的时候才会提交。(但永远都不会完成!)编程
他在MarkedUp公司中把这种行为叫作“囤积提交(commit hoarding)”。有些程序员没有足够的信心来承受团队中其余成员的批评和审查,所以会把本身的工做藏起来,直到“完成”状态才提交。多线程
这种开发者会损害团队中其余人员的生产力,由于团队看不到他天天的成果,并且他也不会在正常开发的过程当中寻求帮助,这样就会形成不少“最后一分钟”的缺陷,从而让交付延迟。而强大的程序员会知道,代码并非他们本身,所以会把代码常常自信地呈如今其余团队成员的眼前,得到批评和建议。框架
3. 只是“知其然”会很危险asp.net
在这里Aaron举了微软最近在C# 5.0中引入的async和await关键字为例,这两个关键字会让建立和管理异步调用变得很容易,可是也会形成上下文切换、对共享资源进行多线程访问的成本,仅仅对此有基本了解的程序员会盲目地使用这些特性,把全部I/O调用都封装成C#中的Task对象,这会建立出危险的、不可预测的并且很是难以测试的代码。异步
好的开发者不只“知其然”,并且会了解为何这么作以及应该在什么样的条件下使用。async
4. 分析瘫痪(Analysis paralysis)工具
分析瘫痪是指在程序开发初期进行系统分析,常由于太过执着于控制全部可能的变化和意外,而形成大量时间的浪费,裹足不前。这是一种很经典的问题,会影响不少通常的程序员。它一般是由过分分析形成的,可是Aaron认为其根本缘由在于不敢作出坏的决定。通常的程序员会担忧犯错,只想一次成功。单元测试
而强大的程序员不会惧怕,他们会编写很烂的代码,对其进行单元测试,若是认为没法达到目的,就会在45分钟以内把它抛弃。强大的程序员会积极地限制用来研究的时间,由于他们知道那是个陷阱——看起来是有效的,但常常都无效。
5. 没有对工具和开发过程投入
若是你想要成为天才程序员,那么就须要投入时间提高技能和知识,而将你和普通的代码工人区分开来的是快速编写出生产级别代码的能力。你能够同时拥有好的代码和速度,可是你须要先对你用于构建的过程投入。
通常的程序员不会对工具、过程和环境投入,只会使用大量的时间学习新的语言特性和API如何工做,但那并不会改变什么。
一般,你做为程序员所可以作出的最大改进并非专一于你所编写的代码,而是优化你编写代码的过程。
6. 羞于请求帮助
通常的程序员羞于或者不想让人知道本身不懂,因此他们装做什么都知道,但这样就有可能提交某种很是可怕的代码到库中。说“我不知道怎么作。”没什么错,强大的程序员知道这一点,因此当被问题难住的时候就会请求帮助。
7. 不知道如何让其余程序员更容易使用你的代码
在全部技术团队中,工做很重要的一部分就是人员的并行(human parallelism),也就是多我的可以同时对同一代码库工做的能力。可是对于团队来讲,可以异步工做也很重要,当你不在的时候我能够修改你的代码,反之亦然。
通常的开发者并不这么认为,他们会开始对一项任务编写代码,认为他们会永远拥有这段代码。而强大的开发者会知道技术债务的说法,从而试图经过设计代码来对其限制,让它尽量可维护和自解释。
编写可读的代码须要程序员改变他们的见解——你的代码要比你在组织中存在的时间长。
8. 不知道如何阅读其余人的代码(或者不想读)
当一位通常程序员看到用他所不熟悉的语言或框架编写的代码库时,就想马上重写,而不考虑业务价值或者推向市场的时间。而强大的程序员会接受这样的观点,重写所致使的业务成本一般是不可接受的,因此应该避免这种行为。他们会试图坐在计算机前,理解、学习而后修改现有的代码。
阅读代码要比编写代码还难,可是强大的程序员会投入时间来学习如何超越。
9. 不能从最终用户的角度编码(你考虑的范围太狭窄)
有句话说得好:做为程序员,你的工做不是解决技术问题,你之因此解决技术问题,是为了解决业务问题。
通常的程序员只会陷在技术问题之中,而不知道最初是为何要解决这个问题。更严重的是,通常程序员没法从头开始建立出具备业务价值的东西。当被要求基于简单的用户设计新特性的时候,他们会死板地、照着字面对故事或者说明书作出解释,这样交付的产品用户根本没法使用。由于他们不会考虑相关的用例;不会考虑最终用户的体验;而且在作面向用户的内容时,设计都会很笨重。这致使他们没法编写业务应用,只能作产品。
好的程序员会从最终用户的角度来看他们的代码。我怎样才能让它更轻松地解决用户的问题呢?故事的文字内容以外有哪些方面会让这个特性给用户带来更多收益呢?
10. 没法判断任何编程任务的业务价值
这个问题和上一个是相关的,不少技术上很强的程序员之因此没法意识到本身的潜力,是由于他们不会停下来,从业务或者组织自己的角度去看一下他们的工做。
强大的程序员可以自我管理,对选择如何投入时间作出很好的业务决定,他们会问这样的问题:这是我如今应该作的最有价值的事情吗?我应该为之投入多少时间?离交付日期有两个星期,我如今能作什么,从而更容易知足那个日期呢?
通常的程序员不会,他们只会拿着说明书,而后盲目地实现,直到结束,不关心他们的工做和公司的业务目标有什么关系,以及对其余团队和业务组会产生什么样的影响。这样,他们就会在业务价值很低的技术任务上浪费大量开发时间。