这里我使用了聪明,懒惰和程序员这几个词。我说的这几个词的意思是:

- 程序员:有积极活力的,专注于用代码解决真实世界里的问题, 不是指那些梦想家,那些永远只想不做的人
- 聪明:能够周全的思考问题(不是那些耍小聪明的人)
- 懒惰:就像是程序中的lazy-loading,是指延后写代码的时间(而不是无所事事的人)。
正确的软件开发应该是懒惰式开发,也被称作忍耐式开发;这种开发方式的表现是,在真正动手写代码前,程序员要花大量的时间通盘考虑所有可能的解决方案和途径。这可以看作是延缓写代码,在没有完全理解问题前绝不动手写代码。先把问题理解清楚,确保将要写的代码能真正的解决问题,这将会避免之后写出大量无用的代码。

- 真正的理解需求,让产品部门(业务分析部门)弄清楚他们真正需求的是什么。
- 这些部门通常不给足够的时间来整理需求
- 他们经常不是请教问题领域专家,而是顺从领导的意见
- 他们通常无法提供前后一致或完整的需求意见。
- 清楚跟团队中的其它程序员或其他团队中的程序员需要那些交互,如何交互,这包括:
- 使用白板交流
- 画流程图(UML或Visio)
你需要花大量的时间调研,来确保需求符合实情,来做工作让你和同事的交流有共同的语言语义。然而,程序员都喜欢立刻冲上去编程,喜欢在电脑前不停的敲代码。

如果一个程序员总是在电脑前编码,这绝对是一个不好的信号。
高效的程序员总是不断检查他对需求的理解,确保他们的代码和需求是同步的。高效的程序员是频繁的和产品经理/业务人员沟通交流,你可以经常看到他们使用白板与同事和架构师交流讨论。程序员的阅历和经验都是用来提高开发效率,这最优秀的程序员:
- 他们思考代码的时间增加而写代码时间减少
- 对问题的透彻理解使调试代码的速度更快
- 深思熟虑后的代码速度更快
- 代码长度更短
程序员从心理上讲都是喜爱自己的代码的。

优秀的程序员经常也会写出烂代码,但他们能看到那些代码需要优化,哪些需要重写。优秀的程序员和不优秀的程序员的区别就在于对有问题的代码的态度,优秀的程序员的做法是:
- 如果代码整体上好的,那就重构代码。
- 如果代码整体上有问题,那就重新代码

如果脑子里没想清楚,那就懒一些,把写代码的时间往后推。