很多年前我刚拿到驾照不久,到了农村的叔叔家,请他把他的小车给我开一下。他问我会开吗?我说我有驾照。他又问我开了多少公里?我回答找了两次陪驾大概500公里吧。他对我说,那你还不会开车,你只有开了5000公里后,才能说你会开。我当时很不服气,心里想为什么要开到5000公里才算会开车呀!难道开了1000公里、2000公里就不算开车了吗?直到多年后,我才切身体会到他讲的是对的,开了5000公里才能遇到各种各样的行车状况,驾驶员才能懂得去面对和处理这些状况。
回到编程这个话题,程序员成长也是这样。一般一个程序有个几千行语句,有的甚至上万行,一个项目所有的程序加起来有几万,十几万行语句也很平常。对于新程序员来说,要多编程序,尽量遇到编程中的各种问题,这样程序员才能慢慢地成熟起来。编程慢慢地有了感觉,编程有了积累,编程有了可以利用重复语句,编程速度也大大加快了。建议新手找一些较长的程序作为范例,而且这个程序比较完整,具有实用价值,最好这个程序正在投入运行!这样学起来看得见摸得着,容易进入情况。我的经验告诉我,程序员在初期要大量地编写程序,不要管编的好不好,先把编程语句的数量搞上去,水平自然而然就上去了。不编上上万行语句,程序员是很难找到编程的感觉的。
当程序员度过了最初的编程阶段后,程序员就要转变思想,慢慢地把程序的精练性放在重要的位置。我一直是把最短的程序看作我编程的目标,一个几百行的程序那怕能省一行都是我要追求的,我绝不允许自己的程序中有一句废话。早期我曾把自己程序拿出来放话,谁能省一行我就拜他为师。由此可见我对程序精练的追逐之疯狂。
一次我的同事告诉我他读了软件公司的一个应用程序大约有3-4千行语句。碰巧的是我也编了相同功能的程序,我只用了1000多行,他也读了。他说同样的功能为什么会相差这样大呢?是程序长的水平高?还是程度短的水平高?
我的回答是:相同的功能因人不同而程序不同是很正常的。不同主要是由于对功能的理解、功能的算法、编写习惯等方面不同所造成的。因此,程序可长可短。至于水平问题,那就涉及面就很多了,有程序的书写方式和习惯、程序的可读性、程序的逻辑结构、功能算法、编程技巧、运行效率、参数化程度、程序复用程度等等多个方面。但是,有一点是可以肯定的,那就是相同功能编写语句少的,水平相对比较高。当然这个少至少占对比语句的10%以上。如果对比的两个程序一个是100行,一个是104行,两者相差仅4行,就很难在语句多少方面判别程序员之间的水平高低了。程序的精练除了反映在程序总的语句条数上,还反映在程序中的函数的长短上,尤其是在一个函数体内,其语句也是越短越好。我曾看到不少程序中一个函数能写到几百行,甚至上千行。这类程序员往往喜欢一气呵成,把一个功能从头到尾写在一个函数之中。我认为这绝对不是一个好的编程习惯和编程风格,理想中的一个函数大约在20-30条语句是最好的。
随手举个例子吧:我们常常会拼接一个文件名。会用到三条语句(以c语言为例):
Strcopy(file_name,f_name);
Strcat(file_name,”.”);
Strcat(file_name,ext_name)
其中file_name是最终的文件名,f_name是文件名,ext_name是文件的后缀名。
如果,我们编写一个字符串拼接strjion函数。
Strjion(str,str1,str2,str3)
String str,
String str1,str2,str3;
{
Strcpy(str,str1);
Strcat(str,str2);
Strcat(str,str3);
}
这个拼接只要写成一条语句了:
Strjion(file_name,f_name,”.”,ext_name);
如果程序中有100处拼接,原来需要写300条语句,通过一个函数8条语句,就只要100条语句了,节省了200-8条语句。
这仅是个例子,我们也可以用C语言中一个系统函数来实现上述功能的,大家可以猜一猜这个函数是什么。
不少程序员热衷于编写越来越多的程序,放任自己编写不必要的语句,从不注意程序的精练性。导致时间越长,程序员的水平越是没有提高。现实中我们可以看到很多程序员开始的时候,感觉其进步很快,但是几年之后,你依然看到他每天努力地编程序、依然看到他每天都在不进步。而有的程序员每隔半年一年,他们就会发现自己以前编写的程序编的很差。这说明这个程序员始终在努力地提高自己的编程水平,而且具有程序水平的判别能力。一个好的程序员到了一定阶段其编程数量是呈下降趋势的。但是其程序质量和水平却是呈上升趋势的。还是举驾驶员的例子,当驾驶员开满了5000公里后,驾驶员会开车子了,但是会开车子并不意味驾驶员就能成为赛车手,成为赛车手需要其他的专业训练,才能又快又好完成行驶路程。
从总的方面来看,程序员尤其是新程序员编写的程序越长越好,越多越好。但是,在具有一定编程积累后,程序员要学会编写精练的程序,程序越短越好,程序的精练程度也是影响程序员水平高低的重要因数。精练的语句永远是程序员追求的目标,程序员可以写长篇小说、可以写短篇小说、但能写出诗来才是最好的。
下篇:《功能和界面那个更重要》