读了前田约翰的《简单的法则》 ,我自己也总结了一下软件开发中的10条简单法则。
1) 信心
无论做什么事,信心都是最重要的。我一直信奉两条广告语,一句是李宁的“Anything is Possible”,依据是Adidas的“Impossible is Nothing”。只要你有信心,你就成功了一半。软件开发本来就是复杂性的游戏,抗拒这种复杂性,无论是对个人还是团队,信心都尤为重要。从大的方面讲,很多根本问题都已经被前辈们解决了,各种软件开发技术都成熟了,你没理由恐惧。信心使软件开发变得简单。
2)思考
思考是人类区别于动物的主要特征。不思考,你就不会找到根本问题,也不会找到根本原因,更不会找到问题的解决办法。软件开发中主要的工作就是思考,其次才是敲键盘。它就像多米诺骨牌,你不能让中间断掉。你必须仔细思考每一个设计环节,让他们契合。关于设计的可预见性,参考我的文章可预见性(Prodictability)——设计之美 ,程序员的结构化思维方法——一个思维脑图模板 ,思考让一切变得简单。
3)学习
软件开发是一个知识密集型的工作。环境在变,技术在变,问题在变,唯一不变的就是变化。所有这些,使你必须不断的更新你的知识。学习使你拥有新工具,新手段,新思路,新方法。用学习来的新手段,思考你现在的处境,然后去实践。关于如何学习,请看我的文章如何从小工到专家——Dreyfus模型应用 。学习让软件开发变得简单。
4)沟通
由于软件本身的复杂性,不可能由一个人来完成。当多人共同完成时,沟通常常会成为一个制约工作效率的主要瓶颈。做需求的和客户沟通少;做分析和设计的同需求负责人沟通的少;做开发的和开发负责人沟通的少,有问题也不汇报,也不明确说明自己需要多长时间,遇到问题自己研究,不请求他人帮助;做开发的和需求,设计沟通的少,导致对需求的理解不同,开发出的软件不能用。和最终用户沟通的少,导致软件做出来不能满足需求,需要返工。这种事情太多了,请看我的关于沟通方面的文章。沟通是个大问题——协作化软件开发 。沟通让信息通畅,让软件开发变得简单。
5)协作
Alistair Cockburn说,软件开发就是协作者的游戏,我越来越对这句话有感触。你不是一个人在战斗,团队是软件开发的最小单位。敏捷软件开发很多这方面的实践,计划游戏,结对编程,每日站立会议,反思会议。在高度协作的团队中,每个人都是某一方面的专家。通过紧密高效的配合,完成任务。众人拾柴火焰高,协作让软件开发变得简单。
6)组织
google有效的组织了信息,让信息获取变得简单。信息只有被组织才能够有效的分享,可以参考我的另外一篇文章。可理解性(Understandability)——一个扩展视角 , 通讯录模式(AddressListPattern) 。另外一方面,当资源充足的时候,如何组织,避免浪费,高效的利用资源对于团队效率的提升也是非常重要的。田忌赛马是一个很好的例子,软件开发中对开发人员的分工和调配也是非常重要的。组织让软件开发变得更加简单。
7)细节
这是一个通用的原则。很多开发人员都有这样的调试经历,往往很难发现的错误,源于一个很小的细节。要么是配置文件问题,要么是半角分号,打成了全角。以前写javascript代码尤其这样,一堆的alert。我说过,软件开发就是逻辑游戏,很多措施可以避免犯错误,代码写好了,自己仔细看几遍。写几个单元测试,证明组装之前,代码是可以运行的。最后,功能开发好了,自己自测一下,保证程序可以跑。不要想当然,一定要亲自证明它可以工作。这些难做到吗?很多程序员却做不到。一个注重细节的程序员一定是个优秀的程序员,一个注重细节的团队也一定是个优秀高效的团队。注重细节让一切变得简单。
8)背景
了解任何事物,一定了解它的背景。学习web编程,你一定要了解它背后的http协议。学习精益软件开发,你一定要了解酝酿它的丰田生产方式。开发软件,你一定了解它背后的业务知识。事物和问题往往都是联系在一起的,为了更好的了解他,你必须了解他的背景,其实一个更好的词是上下文(Context)。
9)问题
曾子曰:“吾日三省吾身”。通过不断的问题,你能获得更多的信息,你能了解问题的本质原因。问题始终使你保持清醒,而不是盲目乐观。你写好程序时,你可以问一句“我如何测试它呢?”,“还能适应更多的变化吗?”,“还有坏味道吗?”,"那样做是不是扩展性更强?"。关于这个,请看我的这篇文章ProblemAttack。 问题越多,你思考越多,事情变得更加简单。
10)开放
开放是一种心态,一种思想,一种哲学。我很喜欢开源软件,如今的互联网网站,大部分都是建立的开源软件之上。作为java来讲,我么经常用的框架,大部分都是开源的,它让软件开发变得更加简单,让所有开发人员的智慧和力量凝聚起来。开放的另外一层含义是,没有隔阂。一个程序员应该具有开放的心态,接受新事物,新方法。犯了错误,要坦诚的承认。拥有开放的心态,你就会积极的分享你的所学,同时你可以可以从别人那里学到更多,让你进步更快。
change log:
2009-03-23: 感谢jindw的提示,修改所有链接。