by 鲍捷 2017-01-17
代码是写给人读的,只是偶尔被机器执行。{
代码体现的是人的知识。代码的管理本质上是一种知识管理。
程序猿也是裸猿,继承了裸猿在认知和通讯能力上的一切先天弱点。这些弱点需要通过一些可重复的知识管理best practices来约束。结对,敏捷,用户故事,模块化,风格统一,代码演讲会,都是知识管理的方法。
}
在如下场合,表面上的软件的失败本质上都是知识管理的失败。{
- 4个空格还是8个空格之争
- 花括号是否新起一行之争
- 为变量命名撕逼
- 一个函数有1000行
- 一个文件有10000行
- 大量的copy+paste代码
- 谁也看不懂的代码
- 乱成一团的控制流程
- 过度的对象抽象
- 当软件在版本迭代时,下一版本难以重用上一版本的基础
- 代码审查贯彻不下去
- 找不到以前的代码
- 无法测试
- …………
}
知识管理的核心是降低成本,降低成本的核心是隔离世界观的冲突。这一点对于代码管理也是一样的。{
为什么要做代码的风格(Coding style)统一?通过语法的要求,在潜移默化中培养一致的世界观。而且统一的风格能塑造统一的记忆存根。
为什么要有代码高亮(Code highlighting)?因为灵长类作为视觉动物,有独特的色彩敏感,色彩作为信息味道,帮助程序猿快速信息分类。
为什么要做代码的演示(Code presentation)?通过公开的演讲,强迫程序猿把代码变成故事,让其他的猿理解。
为什么要在所有的层面强调代码的模块化(Modularization)?因为人的记忆力和关注力有限,在草原上的时候就没法同时关注8头狮子
为什么又要强调不要过份预先优化(Pre-mature optimization)?因为这极大增加了未来世界观冲突的可能性。consensus是在过程中形成的,通常不是计划出来的。
为什么要提倡可读代码(Readable code)的艺术?因为软件工程最大的成本不是机器执行不快,而是别人看不懂。
为什么代码需要版本管理(Version)?因为思考需要断点,人的短期记忆实在是太短了。
为什么代码库搜索引擎是极端重要的?因为知识必须分级存储,在大脑中只应该存放记忆存根,需要多级的检索和联想。
为什么use case, test case是比读代码本身更容易理解代码?因为它们更简洁而接近于故事。理解故事是6万年以来的能力(写进基因的),理解逻辑只是最近几百年的能力。
为什么要用看板?(省略其他原因)因为复杂的世界观难以调和,但是结构简单的知识碎片流更容易在不同世界观的猿之间传播和重复利用。
为什么说在招聘的时候,同等条件下要优先招文笔好的猿(而不是多学了几个类库的猿)?因为清晰的故事能力意味着未来更容易解决的世界观的冲突(不是说没有冲突,而是更易于用知识管理的方法解决)
}
return “请把代码作为知识来管理“;
发表回复