程序越長水平越高嗎?

 很多年前我剛拿到駕照不久,到了農村的叔叔家,請他把他的小車給我開一下。他問我會開嗎?我說我有駕照。他又問我開了多少公里?我回答找了兩次陪駕大概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公里後,駕駛員會開車子了,但是會開車子並不意味駕駛員就能成爲賽車手,成爲賽車手需要其他的專業訓練,才能又快又好完成行駛路程。

從總的方面來看,程序員尤其是新程序員編寫的程序越長越好,越多越好。但是,在具有一定編程積累後,程序員要學會編寫精練的程序,程序越短越好,程序的精練程度也是影響程序員水平高低的重要因數。精練的語句永遠是程序員追求的目標,程序員可以寫長篇小說、可以寫短篇小說、但能寫出詩來纔是最好的。

下篇:《功能和界面那個更重要》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章