編程老手與高手的誤區

 編程老手與高手的誤區

 

自從計算機問世以來,程序設計就成了令人羨慕的職業,程序員在受人寵愛之後容易發展成爲毛病特多卻常能自我臭美的羣體。

如今在Internet上流傳的“真正”的程序員據說是這樣的:

(1)    真正的程序員沒有進度表,只有討好領導的馬屁精纔有進度表,真正的程序員會讓領導提心吊膽。

(2)    真正的程序員不寫使用說明書,用戶應當自己去猜想程序的功能。

(3)    真正的程序員幾乎不寫代碼的註釋,如果註釋很難寫,它理所當然也很難讀。

(4)    真正的程序員不畫流程圖,原始人和文盲纔會幹這事。

(5)    真正的程序員不看參考手冊,新手和膽小鬼才會看。

(6)    真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。

(7)    真正的程序員認爲自己比用戶更明白用戶需要什麼。

(8)    真正的程序員不接受團隊開發的理念,除非他自己是頭頭。

(9)    真正的程序員的程序不會在第一次就正確運行,但是他們願意守着機器進行若干個30小時的調試改錯。

(10)真正的程序員不會在上午9:00到下午5:00之間工作,如果你看到他在上午9:00工作,這表明他從昨晚一直幹到現在。

……

具備上述特徵越多,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點竟然可以被當作優點來欣賞。就象在武俠小說中,那些獨來獨往、不受約束且帶點邪氣的高手最令人崇拜。我曾經也這樣信奉,並且希望自己成爲那樣的“真正”的程序員,結果沒有得到好下場。

 

我從讀大學到博士畢業十年來一直勤奮好學,累計編寫了數十萬行C++/C代碼。有這樣的苦勞和疲勞,我應該稱得上是編程老手了吧?

我開發的軟件都與科研相關(集成電路CAD3D圖形學領域),動輒數萬行程序,技術複雜,難度頗高。這些軟件頻頻獲獎,有一個軟件獲得首屆中國大學生電腦大賽軟件展示一等獎。在1995年開發的一套圖形軟件庫到2000年還有人買。羅列出這些“業績”,可以說明我算得上是編程高手了吧?

可惜這種個人感覺不等於事實。

 

讀博期間我曾用一年時間開發了一個近10萬行C++代碼的3D圖形軟件產品,我內心得意表面謙虛地向一位真正的軟件高手請教。他雖然從未涉足過3D圖形領域,卻在幾十分鐘內指出該軟件多處重大設計錯誤。讓人感覺那套軟件是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個洞。我目瞪口呆地意識到這套軟件毫無實用價值,一年的心血白化了,並且害死了自己的軟件公司。

 

人的頓悟通常發生在最心痛的時刻,在沮喪和心痛之後,我作了深刻反省,“面壁”半年,重新溫習軟件設計的基礎知識。補修“內功”之後,又覺得腰板硬了起來。博士畢業前半年,我曾到微軟中國研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫函數strcpy的代碼。

太容易了吧?

錯!

這麼一個小不點的函數,他從三個方面考查:

1)編程風格;

2)出錯處理;

3)算法複雜度分析(用於提高性能)。

在大學裏從來沒有人如此嚴格地考查過我的程序。我化了半個小時,修改了數次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進“考場”,大汗淋漓地出“考場”。這“高手”當得也太窩囊了。我又好好地反省了一次。

 

我把反省後的心得體會寫成文章放在網上傳閱,引起了不少軟件開發人員的共鳴。我因此有幸和國產大型IT企業如華爲、上海貝爾、中興等公司的同志們廣泛交流。大家認爲提高質量與生產率是軟件工程要解決的核心問題。高質量程序設計是非常重要的環節,畢竟軟件是靠編程來實現的。

我們心目中的老手們和高手們能否編寫出高質量的程序來?

不見得都能!

 

就我的經歷與閱歷來看,國內大學的計算機教育壓根就沒有灌輸高質量程序設計的觀念,教師們和學生們也很少自覺關心軟件的質量。勤奮好學的程序員長期在低質量的程序堆中滾爬,吃盡苦頭之後纔有一些心得體會,長進極慢,我就是一例。

現在國內IT企業擁有學士、碩士、博士文憑的軟件開發人員比比皆是,但他們在接受大學教育時就“先天不足”,豈能一到企業就突然實現質的飛躍。試問有多少軟件開發人員對正確性、健壯性、可靠性、效率、易用性、可讀性(可理解性)、可擴展性、可複用性、兼容性、可移植性等質量屬性瞭如指掌?並且能在實踐中運用自如?。“高質量”可不是幹活小心點就能實現的!

 

我們有充分的理由疑慮:

1)編程老手可能會長期用隱含錯誤的方式編程(習慣成自然),發現毛病後都不願相信那是真的!

2)編程高手可以在某一領域寫出極有水平的代碼,但未必能從全局把握軟件質量的方方面面。

 

       事實證明如此。我到上海貝爾工作一年來,陸續面試或測試過近百名“新”“老”程序員的編程技能,質量合格率大約是10%。很少有人能夠寫出完全符合質量要求的if語句,很多程序員對指針、內存管理一知半解,……

領導們不敢相信這是真的。我做過現場試驗:有一次部門新進14名碩士生,在開歡迎會之前對他們進行“C++/C編程技能”摸底考試。我問大家試題難不難?所有的人都回答不難。結果沒有一個人及格,有半數人得零分。競爭對手公司的朋友們也做過試驗,同樣一敗塗地。 高質量C++/C編程指南http://wenku.it168.com/d_000064676.shtml

 

 

 

 

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