这是最后一次的读书笔记了。
学习完整本书之后,收获颇丰。每一个tip拿出来都可细细咀嚼。
比如在读第六章,我们常常使用向导生成漂亮的界面和背后的大量代码,只要再加入具体的应用功能,软件就可以交付了,但这往往是愚弄自己,除非我们真的理解那些替我们制作的代码,否则就是在靠巧合编程。向导是一条“单行道”——它们为你制作代码,然后就走了,如果它们制作的代码不完全正确,或者情形变了,需要改变代码,那么就只能靠我们自己了。我们不是在反对向导,但如果你真的使用向导,就要理解它制作出的所有代码,这样才能很好地控制并维护自己的应用。
虽说除了依赖我们不理解的向导,我们也在依赖其它很多不理解的事物,比如集成电路的量子力学、处理器的中断结构、用于进程调度的算法、系统提供的API等。但向导与它们是有区别的,因为向导生成的代码变成了我们应用的组成部分,它们一行一行地与我们编写的功能交织在一起,最后它不再是向导的代码,而变成了我们自己的代码,没有人应该制作自己不完全理解的代码。所以不要使用你不理解的向导代码。
最后一章提到了代码的注释:
注释应该讨论为何要做某事、它的目标等。代码已经说明了它是怎样完成的,所以再为此加注释是多余的,而且也违反了DRY原则。
注释中也适合记录工程上的权衡、为何要做某些决策、放弃了哪些替代方案等等。
变量名应该精心选择,并且有意义。匈牙利命名法(包括了变量类型信息)在面向对象的系统中并不合适。
比无意义的名称更糟糕的是误导人的名称。
代码应该有代码作者、版权信息等内容,这些可以让编辑器自动生成。
剩下的tip
Minimize Coupling Between Modules
使模块的之间的耦合减少
Configure, Don’t Integrate
要配置, 不要集成
Put Abstractions in Code, Details in Metadata
将抽象放进代码, 细节放进元数据
Analyze Workflow to Improve Concurrency
分析工作流, 以改善并发性
Design Using Services
用服务进行设计
Always Design for Concurrency
总是为并发设计
Separate Views from Models
使视图与模型分离
Use Blackboards to Coordinate Workflow
用黑板协调工作流
Don’t Program by Coincidence
不要靠巧合编程
Estimate the Order of Your Algorithms
估算你算法的阶
Test Your Estimates
测试你的估算
Refactor Early, Refactor Often
早重构, 常重构
Design to Test
为测试而设计
Test Your Software, or Your Users Will
测试你的软件, 否则你的用户就得测试
Don’t Use Wizard Code You Don’t Understand
不要使用你不理解的向导代码
Don’t Gather Requirements — Dig for Them
不要搜集需求 — 挖掘它们
Work with a User to Think Like a User
与用户一同工作, 以像用户一样思考
Abstractions Live Longer than Details
抽象比细节活得更长久
Use a Project Glossary
使用一个项目词汇表
Don’t Think Outside the Box — Find the Box
不要在盒子外面思考 — 要找到盒子
Listen to Nagging Doubts — Start When You’re Ready
倾听反复出现的疑虑 — 等你准备好再开始
Some Things Are Better Done than Described
对有些事情”做”胜于”描述”
Don’t Be a Slave to Formal Methods
不要做形式的奴隶
Expensive Tools Do Not Produce Better Designs
昂贵的工具不一定能制作出更好的设计
Organize Around Functionality, Not Job Functions
围绕功能, 而不是工作职务进行组织
Don’t Use Manual Procedures
不要使用手工流程
Test Early. Test Often. Test Automatically.
早测试, 常测试, 自动测试.
Coding Ain’t Done ‘Til All the Tests Run
要到通过全部的测试, 编码才算完成
Use Saboteurs to Test Your Testing
通过”蓄意破坏”测试你的测试
Test State Coverage, Not Code Coverage
测试状态覆盖, 而不是代码覆盖
Find Bugs Once
一个 bug 只抓一次
Treat English as Just Another Programming Language
把英语当作又一种编程语言
Build Documentation In, Don’t Bolt It On
把文档建在里面, 不要栓在外面
Gently Exceed Your User’s Expectations
温和地超过用户的期望
Sign Your Work
在你的作品上签名
原文:https://www.cnblogs.com/Aming-/p/12079528.html