- 并不存在容易的答案,也不存在最佳的解决方案,一种东西,无论是工具还是语言,还是OS,只是在某些特定情境下更为适应。
- 你不应该局限于任何特定的技术,而是应该拥有足够广博的背景和经验基础,以便在特定的情境下选出最佳的解决方案。背景源自于对计算机科学基本原理的理解,经验来自于广泛的项目。
- 优秀的程序员不仅要完成工作还要完成的漂亮。他们能够超越直接的问题去思考,他们对他们所做的每件事情负
第一章 注重实效的哲学
一、 我的代码让猫给吃了
1.在所有的弱点中,最大的弱点就是害怕暴露自己的弱点。
2.优秀的程序员对自己的职业生涯负责,并且不害怕承认无知和错误。出现问题的时候要想办法提供解决方案而不是借口。
3.在你告诉别人坏消息之前,是否还有其他可以试一试的办法。不要说事情做不到,要说明能够做什么来挽回局面。
二、软件的熵
1.不要让你的软件中出现破窗效应。
三、 石头汤与煮青蛙
- 不要像青蛙一样只留心大图景,要持续不断的观察周围发生的事情,而不只是你自己在做的事。
四、 足够好的软件
- 许多用户宁愿在今天用上有一些“毛边”的软件,也不愿等待一年后的多媒体版本。
五、 你的知识资产
- 知识上的投资总能得到最好的回报。
- 你的知识和经验是你最重要的职业财富。随着你知识价值的降低,对于你的公司或客户来说,你的价值也在降低,我们要阻止这样的事情发生,绝不让他发生。
- 你必须定期为你的知识资产投资,即使投资量很小,习惯自身和总量一样重要。
- 你知道的不同事情越多,你就越有价值。
- 每年至少学习一种新语言,每季度至少阅读一本技术书籍,也要阅读非技术书籍。
- 与世隔绝可能对你的职业生涯是致命的,打听一下你们公司以外的人都在做什么。
- 批判的思考你所听到的和得到的,你需要确保你的资产中的知识是准确的。
- 在网络时代,许多人似乎已经忘记了满是研究资料和工作人员的真实图书馆。
六、 交流
- 我相信,被打量比被忽略要好。
- 交流的基本步骤:明白你要说什么、了解交流的对象、选择适当的时机、选择风格(口头、纸面)、让文档美观一些、让听众参与文档的制作、把会议变成对话,做倾听者。
- 你说什么和你怎么说同样重要。
第二章 注重实效的途径
七、重复的危害
1.DRY原则:Don’t repeat yourself。系统中的每一项知识都必须具有单一、无歧义、权威的表示。
八、正交性
1.“正交性”是来自于几何中的术语,如果两条直线相交成直角,他么就是正交的。这两条直线相互不依赖,你如果沿着某条直线移动,投影到另一条直线上的位置不变。计算技术中,“正交性”指的是两个事物高度解耦,互不影响。如,改动界面不会影响数据库,改动数据库不会影响界面。
2.维持正交的几个策略:
2.1让代码保持解耦
2.2避免使用全局数据,每当代码使用全局数据时,他都把自己与共享该数据的其他组件绑定在了一起。
九、可撤销性
1.如果某个想法是你唯一的想法,再没有什么比这更危险的事情了。
2.要把决策视为写在沙滩上的,而不要把他们刻在石头上,大浪随时可能到来,把他们抹去。
3.不存在最终决策。
十、曳光弹
1.曳光弹和原型开发很相似,接到需求以后,先快速开发出一个用户能用的东西来,
十一、原型与便签
- 你可以选择通过原型来研究任何带有风险的事物。
- 原型制作是一种学习经验,其价值并不在于所产生的代码,而在于所学到的经验教训,那才是原型制作的要点所在。
十二、领域语言(没看懂说的是什么,好像是关于编译原理的一些知识)
- 语言的界限就像一个人世界的界限。
十三、估算(项目管理)
第三章 基本工具
十四、纯文本的威力(用纯文本来保存数据)
- 作为一个优秀的程序员,我们的基本材料不是木头,不是铁,而是知识。
十五、shell游戏
- GUI的好处是所见即所得,缺点是所见即全部所得。
十六、强力编辑(选择一款好用的编辑器)
十七、源码控制
- 代码的版本管理很重要就像是一个巨大的撤销和重做按钮。
十八、调试
- 调试就是解决问题。
- 在技术方面,你应该专注于修正问题而不是发出指责。
- 最容易欺骗的人是一个人自己。
- 在开始查看bug之前,要确保你是在能够成功编译的代码上运行工作,而且没有警告。把编译器的级别尽可能的调的最高。
- 开始修复bug的最佳途径是让其再现。
- 不要假定,要证明。
- 当你遇到让人吃惊的bug时,除了只是修正它以外,你还要确定先前为什么没有找出这个bug,考虑你是否需要进行单元测试或者是其他测试。
- 参数检查是防止bug的一个重要方法。
十九、文本操纵
二十、代码生成器