《程序员修炼之道》读后感(一)【第二章与第三章】

第2章 注重实效的途径

从本章开始,作者终于开始介绍实际开发中将会运用到的技巧及原理,而在阅读中我也发现由于自身的经验不足知识浅薄而对作者提到的许多概念感到十分模糊。

7、 重复的危害:在过去的学习中,关于重复的危害我只认识到会使代码可维护性降低这点程度,而本章则说重复甚至会成为程序的“噩梦”,DRY原则简单又实用,我想起就在上一节java课上的测试中我还使用了很多重复来解决购票问题。作者将重复归为4类:强加的重复、无意的重复、无耐性的重复、开发者之间的重复;对于没有合作开发经验的我们来说,前三种更为常见。对于这些重复最好的解决方案就是严格遵守DRY原则,不断锻炼自身。

8、 正交性:“正交性”是一个几何术语,它表示两条直线相交成直角的状态;从向量角度上来讲,正交的两条直线不会相互影响,沿着某条直线移动不会影响其投影到另一条直线上的位置。对应到软件工程中,正交性指的是某种不相互依赖性,即改动某一或几个方向而不会影响其他方向。作者首先介绍了非正交性所带来的危险,一个系统如果是非正交的,那么其中的一个模块出错将会牵一发而动全身。而正交将会有诸多好处,其一最明显的即是降低风险,正交可以消除无关事物之间的互相影响,在某一部分出错或需要修改时不会影响到其他部分;另一方面,正交性可以显著提升生产率,正交性的系统使得整个工程得以划分为更小的模块,使改动变得局部化。而编程正交性的实现得益于DRY原则,我们要保持代码的解耦性才能使其达到正交,作者还提出了一系列方案,如避免使用全局数据、避免编写相似的函数,这些对于我们这个阶段十分有建设性意义。

9、 可撤销性:我们在编程时经常习惯用简单、单一的方式解决问题,但是如果我们不去考虑将来的撤销的可能性,将会是我们的代码耐用性、可维护性变差,其关键在于我们做出的关键性决策,显然,关键决策是不容易撤销的。如果我们能够严格遵守DRY原则并保证我们的代码具有良好的正交性,那么我们一般是不需要做出关键的、不可逆转的决策,只要我们能保证代码和架构的灵活性,我们就不需要担心这点。

10、            曳光弹:曳光弹这个比喻十分生动,它可以让我们知道距离目标的距离和方向,在有许多未知因素和许多不同的环境中,没人知道要从何处下手,这就到了曳光代码发挥作用的时候了。它有许多有点:它可以让用户及早地看到项目的进展和已实现的功能、它还为开发者构建了一个他们能在其中工作的结构、它能让工作者切实的感受到工作的进展。

11、            原型与便签:原型在很多领域都能发挥作用,我们需要原型是因为原型能够告诉我们项目的整体概貌,它们的成本很低而能为客户展示成效,它们需要忽略细节,这点可以和曳光弹开发互相补足。作者列出了一些值得为其制作原型的事物:架构、已有系统中的新功能、外部数据的结构或内容、第三方工具或组件、性能问题、用户界面设计等。在使用原型时我们可以忽略一下细节:正确性、完整性、健壮性、风格等。原型应该遮盖细节聚焦于所考虑系统的某些具体方面。需要注意的是在构建原型的时候我们应该提醒身边的人这不是一个成品,以防止某些意外和误会。

12、            领域语言:有时我们需要根据用户的要求以及具体的需求,在编程语言中加入一些便于用户理解的术语实现靠近问题的领域编程,领域语言创造一种小型语言使程序具有更高的可读性和可维护性。

13、            估算:估算对于实际工作有着很大的意义,它能使我们对数量级具有直觉性的判断,它能让你知道哪些可行、哪些实际、哪些需要着重处理、哪些可以暂时搁置。对于估算的精准性在不同语境不同环境下有着不同的需求,我们应该在合适的情况下使用合适的用语,要选择能反映你想要传达的精确度的单位。

第3章 基本工具

工具箱的丰富是我们大学生涯的最终目的,精良的工具可以使我们在市场更具竞争力,本章着重探讨如何为自己的工具箱进行投资。

14、            纯文本的威力:纯文本是为了人可以阅读和理解的最基本形式,纯文本更好理解。纯文本也存在着两个主要的缺点:(1)与压缩的二进制格式相比,纯文本所占据的储存空间更大;(2)要解释及处理纯文本文件,计算上的价值可能更昂贵。纯文本的优势也十分明显:它能保证不过时、杠杆作用、更易于测试。

15、            Shell游戏:每个工匠都需要一个好的工作台,而操作文本文件的程序员的工作台就是shell,一个注重实效的程序员需要能够做到GUI可能不支持的操作,因此必须掌握shell命令,shell命令或许晦涩、太过简略,但它的强大值得我们付出精力去学习。

16、            强力编辑:作者认为一个注重实效的程序员最好要精通一种编辑器,并将其用于所有编辑任务:代码、文档、备忘录、系统管理等。如果不使用一种编辑器,工作可能会陷入混乱之中,一种好的编辑器应该具有可配置、可扩展、可编程、语法突显、自动完成、自动缩进、初始代码或文档样板、与帮助系统挂接、类IDE特性等功能。

17、            源码控制:源码控制系统可以追踪我们在源码和文档中做出的每一项变动,它应该支持多级撤销与重做。

18、            调试:作者用了简单明了而又引人共鸣的一句话来形容调试:这是痛苦的事。显然调试容易引人心态爆炸,作者提出了建议:“要接受事实:调试就是解决问题,要据此发动进攻,要修正问题而不是发出责难。在调试时,首先我们应该使自己放松下来,这样才能使大脑和眼睛冷静下来。

19、            文本操纵:文本操纵语言是能赋予我们能力的重要技术,使用它们可以快速构建实用程序、建立原型,使生产力大幅提高。

20、            代码生成器:代码生成器是一种可以编写能编写代码的代码,代码生成器有两种主要类型:1.被动代码生成器只运行一次来生成结果;2.主动代码生成器在每次需要其结果时被使用。

猜你喜欢

转载自www.cnblogs.com/52bb/p/11674009.html