1、敏捷开发——在一个高度协作的环境中,不断地使用反馈进行自我调整和完善
2、阅读代码的频率越高越好
3、使用单元测试
4、迭代和增量式的学习
5、跟踪技术变化——你不需要精通所有技术,但需要清楚知道行业的方向,从而规划你的项目和职业生涯
6、CRCC即类—职责—协作—的设计方法
7、不要在前期做大量的设计
8、不需要开发你能下载到的东西
9、防止提交破坏系统的代码——(1)在本地运行测试;(2)检出最新代码;(3)提交代码
10、保证你的系统随时可以编译、运行、测试并立即部署
11、增量开发——发布带有最小却可用功能块的产品,每个增量开发中,使用1~4周左右的迭代周期
12、确保测试是可重复的;测试你的边界条件;不要放过任何一个失败的测试。
13、TDD测试驱动开发——编程之前先写测试,测试失败要么是因为测试的方法不存在,要么是因为方法的逻辑还不足以让测试通过
14、任何一个设计都可以被改进
15、不同的环境就有不同的问题
16、硬件比开发人员的时间便宜
17、关键业务逻辑必须要独立进行严格的测试
18、FIT——集成测试框架
19、专注于你的方向
20、编写内聚的代码
21、PIE原则——代码应该意图清晰,表达明确
22、对于类中的每个方法,说明目的、需求(前置条件)、承诺(后置条件)、异常
23、没有最佳解决方案(动态评估权衡)
24、增量式编程可以精炼并结构化你的代码
25、内聚性——用来评估一个组件(包、模块或配件)中成员的功能相关性,如果一个类的方法和属性共同完成了一个功能(或一系列紧密相关的功能),这个类是内聚的
26、让类的功能尽量集中,让组件尽量小
27、将命令与查询分离开来
28、面向过程的代码取得信息,然后做出决策;面向对象的代码让别的对象去做事情
29、相对基类的对应方法,派生类服务(方法)应该不要求更多,不承诺更少,要可以进行自由的替换
30、针对is-a关系使用继承,针对has-a或use-a关系使用委托
31、通过替换遵循接口契约的类,来添加并改进功能特性,要多使用委托而不是继承
32、维护一个问题及其解决方案的日志
33、将警告视为错误
34、用原型进行分离
35、在解决问题时,要将问题域与其周边隔离开,特别是在大型应用中
36、处理或是向上传播所有的异常
37、当问题发生时,可以详细研究问题的细节描述和发生上下文
38、绝不要提交尚未完成的代码
39、经验是通过实施了某项技术促进了思维的改变
40、代码,一次编写,多次阅读
41、重构应该越少越好
42、写文档的过程比文档本身更重要
43、软件设计需要取舍和权衡,如时间换空间,空间换时间,TCP或UDP,同步或异步,数据冗余还是不冗余
44、50%-70%的时间来思考,尝试和权衡各种设计和实现;30%-50%的时间来编码,调试和测试
45、内政就是程序的处理流程,数据加工算法,并发控制;外交就是网络通信,I/O,数据库访问,以及通过各种协议和其他系统进行交互
46、代码是文档的最终形式
47、重构部分代码
48、TDD、迭代、原型,只关注功能性需求,其不会关注性能问题,高可用性问题,系统维护问题(模块的耦合问题)
49、考虑——需求和未来可能的变化;调查一下实现的技术难点和细节;讨论并推敲一下架构和设计;思考设计上的缺陷
50、模板是重用代码的利器