提供多种选择,不要找接口
出了问题后,要提出各种解决方案的选择,而不是找借口;不要说事情做不到,要说明接下来做什么来挽回局面;
不要容忍破窗户
我们看到过整洁、运行良好的系统,一旦窗户开始破裂,就相当迅速的恶化;
不要留着破窗户不修;发现一个bug就修复一个,如果没有足够的时间进行恰当的修理,就用木板先订起来;或许你可以先把代码注释起来,或是显示“未实现”的消息;采取某种行动防止进一步的损坏,并说明情形在你的控制之下;
投资知识资产
我们喜欢把程序员所知道的关于计算机技术和经验视为他们的知识资产;
你的资产是有时效的资产,会随着新技术、语言和环境的出现而变得过时;
管理知识资产与管理金融资产非常类似:
- 严肃的投资者定期投资-作为习惯
- 多元化是长期成功的关键
- 管理风险;聪明的投资者在保守的投资和高风险的投资之间平衡他们的资产;
- 应周期性的重新评估和平衡资产
投资建议: 每年至少学习一种新语言;
每季度至少阅读一本技术书籍;
也要阅读非技术书籍;
多交流,会交流
与他人交流时,你需要了解你的听众: 你想他们学到什么? 他们对你讲的什么感兴趣? 他们有多富有的经验?
他们想要多少细节?
你如何促使他们听你说话?
遇到程序Bug时,不要一味的指责代码编写者;我们需要的是修正问题,而不是发出指责;
DRY -不要重复你自己
don’t repeat yourself; 系统中的每一项知识都必须具有单一、无歧义、权威的表示; 重复的发生地方: 开发者没有意识到重复;有时,重复来自于设计中的错误;
开发者偷懒、他们重复,因为那样代码似乎更容易修改;
开发者之间的重复:同一团队中几个人重复了同样的信息;处理这个问题的最佳方式就是鼓励交流;一定要阅读他人的代码,并进行代码review;
让复用变得更容易!
你需要营造一种环境,在其中找到并复用已有的东西;如果不容易,大家就不会去复用;而如果不复用,就有了重复的风险;
维持正交性
正交:两个事物中一个发生变化,对其他无影响,这两个事物就是具有正交性;
正交性的好处:
- 提高生存率;
- 降低风险
让代码维持正交性,可以消除无关事物之间的影响;
可撤销,可更换
不存在最终的目标,也没有终极的架构;项目的任何一个模块一个组件都是可撤销,可替换的;不要过度依赖于某个第三方的产品,否则你的项目就被第三方绑架了;
通过灵活的架构,将第三方产品隐藏在良好的抽象接口之后;
无处不在的自动化
多用python、shell等脚本语言,将工作的重复性任务自动化实现; 对于编程中的重复性代码,通过脚本自动生成代码来实现;
在工作中多总结,提炼小系统,让流程、代码都自动化;
linux下的cron是个好东西,让你的自动化任务都在夜深人静时准时执行;
不要靠巧合编程
你所写的代码都是深思熟虑过后的产物,先有设计,然后再产出;想到一处写一处是刚毕业的水平;
按照合约编程,别想着这个地方可以增加多少好功能,画蛇添足的故事太多,过多的超过用户期望未必有好的结果,可能就成了用户不想要的;
测试的重要性
测试重要,大家都知道;但单元测试,有多少个项目能认真的做过;没有质量高、覆盖好的单元测试,哪来的勇气去重构一个个庞然大物似的老项目?
这句话很精辟:测试你的软件,否则用户就得测试;
新方法和新工具
有个新工具或新方法想在项目组中推广,这事挺好;但不要低估采用新工具和新方法的代价,可能你的项目需要花上太多精力来熟悉这个方法,而第一个采用这个方法的项目,可能就只能是实验品;
批判的看待方法学,从中提炼适用团队的精华;
木书架网