最近,看了微软亚洲研究院研究员刘未鹏老师的文章《编程的首要原则》(http://mindhacks.cn/2009/03/09/first-principles-of-programming/),感觉那些答案都蛮有意思的。作为一个准程序员,我也想说两句。
在这篇文章中,作者就“你们认为编程的首要原则是什么?”与网友展开了讨论,共给出了5种答案,包括:获得最多认同的答案;获得第二认同的答案;一些众所不一定周知的答案;一些众所很可能周知的答案和最幽默的答案。其中,“KISS”(Keep It Simple Stupid)挺有意思的,它要求程序要尽量简单,越简单越好。
在有关程序设计语言(像《C程序设计》)和算法(像《算法设计与分析》)这类书上,前辈们总结了好的算法或程序需要具备的几个特性,有:正确性、简明性、效率和最优性,而正确性是排在最前面的。因此,不管怎样,我觉得,“编程的首要原则”是要确保程序的正确性,非简单性。
作为菜鸟级程序员,我们不可能有多么高超的编程技巧,这时首要的就是要保证自己编出来的程序是正确的,要让人能够看懂。在水平有所提升以后,除了正确性之外,再考虑其它方面的东西,像简单或最优等。
大家都经历过很多考试,在考试之前,我们都会接触到很多解题的技巧,都会用好几种方法来解答一道题目。但上了考场之后,才发现时间根本不够用(特别简单的考试除外),做完题都难,还不要说用技巧了,这时就要首先确保正确性,要保证高的正确率。编程也一样,每个人的任务都很多,时间也比较的紧迫,有时能够编出来都难,更不要说要让程序简单、优化了。
因此,正确性才是编程的首要原则!
---------------------------------------------------------------------------------------------
2015年4月2日修改:
最近重读了这篇三年多之前写的文章,似乎明白了为什么很多软件产品越做越差,最终走向了“万劫不复的深渊”。因为很多人编写程序的想法和我当时的想法一样:先保证程序正确、功能正常,其它的以后再说。
在我参与过的软件开发项目中,有些时候,版本的开发时间非常的紧。在最初的会议上,开发经理就明确要求优先保证功能的实现,其它的留待以后优化。而当软件版本发布之后,就再也没有人提程序优化的事情了。下次有新需求的时候,大家才会发现上一个版本的程序写得是多么的糟糕。但没有人想到要先对程序进行优化甚至重构之后再实现新的需求,而是“破罐子破摔”,继续在低质量的代码上编写低质量的代码。如此一个恶性循环,最后的程序是千疮百孔,已无力回天。
那为什么要提倡“KISS”(Keep It Simple Stupid)呢?“KISS”意味着程序有以下特征:
1) 排版工整、变量命名规范、注释得当。
2) 逻辑清晰、接口定义清楚、函数封装得体。
3) 可扩展性强、便于维护。
“KISS”同时也是实现程序“正确性”的最佳途径,因为简单意味着无错,或者是即使有错误也能够被及早发现。遵循“KISS”原则,那么设计程序时采用的便是最简单直接的方法,逻辑清晰,不管是对于作者本人,还是对程序进行评审的人而言,都能够迅速理解程序实现的功能,bug很难生存。
如何检验一套程序是否是好的程序?我认为,如果一个新手能够很快将程序看懂并理清程序的逻辑,那么这个程序就是好程序。
“第一次就将事情做好”,每个开发人员都应该将这句话牢记心中。Duang,说起来容易,做起来难。确实,大家在实践中去学习吧。