序言:
当看到书本序言的时候,潜意识中,觉得这就是我想要的。序言中,行业人事强烈推荐的书籍,有一句话“这本书应该放在床头,不易外界,时刻翻阅”。书中全部都是经验之谈,正像《程序员的九堂课》中,给人的感觉是是曾相识的感觉。虽然只有一年工作经验的我,遇到了一个好的团队,遇到一个按规范行事领导者,书中的方法及经验,几乎都有涉及。很庆幸自己还能保持。
当然,书中的经验之谈,常用的方法,常谈的单元测试,特别是加粗的字体:注重实效的程序员。一直都在强调注重效率,不论是程序员、领导者。一加一往往可以大于二。书本的有总结书中的关键点,但是还是需要将原文看了一遍,在通过后面的关键点进行回顾。我觉得后面的就足以概括,所以记下来,提醒自己,让自己在正道走,追随前者区域的脚步。
如果你不在乎能否漂亮的开发出软件,你又为何要消耗生命去开发软件呢?
关掉自动驾驶仪,接管操作。不断的批评和评估你的工作。
要提供各种选择,而不是找借口。不要说事情做不到;说明能够做什么。
当你看到糟糕的设计、错误的决策和糟糕的代码时,修正它们。
你不能强迫人们改变。相反,要想他们展示未来可能会怎样,并帮助他们参与对未来的创造。
不要太过于专注细节,以致忘了查看周围正在发生什么。
让你的用户确定项目真正的质量需求。
让学习成为习惯
不要被供应商、媒体炒作、或教条左右。要依照你自己的看法和你的项目的情况去对信息进行分析。
如果你不能有效的向别人传达你了不起的想法,这些想法就好糊用处。
系统中的每一项知识都有事必须具有单一、无歧义、权威的表示。
如果复用很容易,人们就会去复用。创造一个支持复用的环境。
涉及自足、独立、并具有单一、良好定义的目的的组件
没有决策是浇筑在石头上的。相反,要把每项决策都视为是写在沙滩上的,并为变化做好计划。
曳光弹能通过试验各种事物并检查它们离目标多远来让你追踪目标。
原型制作是一种学习经验。其价值并不在于产生所谓的代码,而是在于所学到的经验教训。
用你的用户的语言进行设计和编码。
在着手之前进行评估。你将提前发现潜在的问题。
用你在进行实现时获得的经验提炼项目的时间标度。
纯文本不会过时。它能够帮助你有效的利用你的工作,并简化调试和测试。
当图形界面无能为力时使用shell。
编辑器应该是你的手的延伸;确保你的编辑器是可配置、可拓展和可编程的。
源码控制是你工作的时间机器--你能够回到过去。
Bug是你的过错还是别人的过错,并不是真的很有关系--它仍然是你的问题,它任然需要修正。不要恐慌做一次深呼吸,思考什么可能是bug的原因。
做一次深呼吸,思考什么可能是bug的原因
在OS或者编译器、甚或是第三方产品或库中很少发现bug。bug很可能在应用中。
在实际环境中--使用真正的数据和边界条件--证明你的假定。
你用每天的很大一部分的时间处理文本,为什么不让计算机替你完成部分工作呢?
代码生成器能提高你的生产率,并有助于避免重复。
软件不可能完美。保护你的代码和用户,使它们免于能遇见的错误。
使用合约建立文档,并检验代码所做的事情正好是它声明要做的。
死程序造成的危害通常比有问题的程序要小得多。
断言验证你的各种假定。在一个不确定的世界里,用断言保护你的代码。
异常可能会遭受经典的意大利面条式代码的所有可读性和可维护性问题的折磨。将异常保留给异常的事物。
只要有可能,分配某资源的例程或对象也应该负责解除其分配。
通过编写“羞怯的”代码并应用得墨忒耳法则来避免耦合。
要将应用的各种技术选择实现为配置选项,而不是通过集成或工程方法实现。
为一般情况编程,将细节放在被编译的代码库之外。
利用你的用户的工作流中的并发性。
根据服务--独立的、在良好定义、一致的接口之后的并发对象--进行设计。
容许并发,你将会设计出更整洁、具有更少假定的接口。
要根据模型个视图设计你的应用,从而以低廉的代码获取灵活性。
用黑板斜边完全不同的事实和因素,同时又使各参与方保持独立和隔离。
只依靠可靠的事物。注意偶发的复杂性,不要把幸运的巧合与有目的的计划混为一体。
在你编写代码之前,先大致估算事情需要多长时间。
对算法的数学分析并不会告诉你每一件事情,在你的代码的目标环境中测定它的速度。
就和你会在花园里除草、并重新布置一样,在需要时对代码进行重写、重做和重新架构。要铲除问题的根源。
在你还没有编写代码时就要思考测试问题。
无情的测试。不要让你的用户为你查找bug。
向导代码生成大量代码。在你把它们合并进你的项目之前,确保你理解全部这些代码。
需求很少存在与表面上。它们深深的埋在层层假定、误解个政治手段下面。
要了解系统实际上将如何被使用,这是最好的方法。
“投资”于抽象 ,而不是实现。抽象能在来自不同实现和新技术的变化的“攻击”之下存活下去。
创建并维护项目中使用的专业术语和词汇的单一信息源。
在遇到不可能解决的问题的时候,要确定真正的约束。问问你自己:“它必须要以这种方式完成吗?它真的必须完成吗?”
你的一生都在积累经验。不要忽略反复出现的疑虑。
不要掉进规范的螺旋--在某个时刻,你需要开始编码。
如果你没有把某项技术放进你的开发实践和能力的语境中,不要盲目的采用它。
小心供应商的炒作,行业教条、以及价格标签的诱惑。要根据工具的价值判断它们。
不要把设计师和程序员分开,也不要把测试员和数据建模员分开。按照你的构建代码的方式构建团队。
Shell脚本或批文件会一次次的以同一顺序执行同样的指令。
与呆在书架上的测试计划相比,每次构建时运行的测试要有效得多。
就是这样的。
在单独的软件副本上故意引入bug,以检验测试能够抓住它们。
确定并测试重要的程序状态。只是测试代码行是不够的。
一旦测试员找到一个bug,这应该是测试员最后一次找到它。此后自动测试应该对其进行检查。
像你编写代码一样编写文档:遵守DRY原则、使用元数据、MVC、自动生成,等等。
与代码分离的文档不太可能被修正和更新。
要理解你的用户的期望,然后给他们的东西要多那么一点。
过去时代的手艺人为能在他们的作品上签字而自豪。你也应该如此。
某个对象的方法应该只调用属于以下情形:
在解决不可能解决的问题时,问问你自己: