「軟件質量是被大多數程序員掛在嘴上而不是放在心上的東西!」—— 這句話道出了行業的痛點。除非你是完全外行或真正的編程大師,初讀本書時,你大概率會感到一陣驚慌:「哇!我以前寫的 C++/C 程序原來有這麼多問題?」
別灰心,作者只是比你早幾年、多經歷幾次這種驚慌罷了。花一兩個小時認真研讀這本「百頁經書」,你將獲益匪淺——這是前 N-1 位讀者的共同建議。
自計算機誕生以來,程序設計一直是令人羨慕的職業,但程序員在受寵若驚後,容易養成「毛病特多卻常自我感覺良好」的壞習慣。網上流傳的所謂「真正程序員」特徵,諸如:
擁有這些特徵越多,似乎水平越高、資歷越老。這就像武俠小說裡獨來獨往、帶點邪氣的高手最令人崇拜。作者曾深信不疑,渴望成為那樣的「真正程序員」,結果卻沒討到好處。
作者從大學到博士畢業十年,累計編寫數十萬行 C++/C 代碼,開發的科研軟件(集成電路 CAD、3D 圖形學)動輒數萬行、技術極其複雜,屢獲大獎,甚至有軟件在 1995 年開發、2000 年仍有人購買。按常理,這算「編程高手」了吧?
可惜個人感覺 ≠ 事實。
讀博期間,作者用一年開發近 10 萬行的 3D 圖形產品,自以為得意地請教一位真正的軟件高手。對方雖未涉足 3D 領域,卻在幾十分鐘內指出多處重大設計錯誤——那套軟件像紙糊的華麗衣服,一扯掉一塊,一戳破個洞。作者當場意識到:一年心血白費,連帶害死自己的軟件公司。
人的頓悟往往發生在最心痛時刻。在沮喪與心痛中,作者「面壁」半年,重溫軟件設計基礎,「補修內功」後再出發。博士畢業前去微軟中國研究院面試,被要求寫 strcpy 函數。看似太簡單?錯!面試官從編程風格、出錯處理、算法複雜度分析三個維度嚴格考查。作者花半個小時改了數次仍不合格,被要求回家好好琢磨。這次「考試」徹底粉碎了作者的「高手」幻覺。
作者將反省心得發文網上,引發大量共鳴,並有幸與華為、上海貝爾、中興等頭部企業廣泛交流。共識是:提高質量與生產率是軟件工程核心問題,高質量程序設計是關鍵環節。
但現實令人憂心:國內大學計算機教育從未灌輸高質量程序設計觀念,教師與學生極少自覺關注軟件質量。勤奮的程序員長期在低質量代碼堆裡打滾,吃盡苦頭才慢慢有心得,成長極慢——作者就是活生生的例子。
現在國內 IT 企業滿是碩博士,但他們在大學就「先天不足」,豈能入職就質變?有多少開發人員能說清正確性、健壯性、可靠性、效率、易用性、可讀性、可擴展性、可復用性、兼容性、可移植性等質量屬性,並靈活運用?「高質量」絕不是「干活小心點」就能實現的!
作者在上海貝爾一年,面試測試近百名「新」「老」程序員,質量合格率約 10%。極少人能寫出完全合規的 if 語句,大量程序員對指針、內存管理一知半解。領導不信,作者做現場實驗:14 名新入職碩士生,眾人覺得考題不難,結果零人及格,半數零分。競對公司同樣慘敗。這不是作者「心狠手辣」,而是從業者對自己要求不夠高。
華為、上海貝爾、中興員工素質已屬國內前列,若連他們代碼質量都如此,中小企業怎麼敢期望產出高質量軟件?連程序都寫不好,談何振興民族軟件產業?
推論:作者寫書前,既非高手,甚至算不上老手。閱讀大量英文著作後越發羞愧——連編程基本功都未全面掌握,頂多二流水平。希望國內土生土長的程序員朋友們能做到:知錯就改、溫故知新、堅持學習,天天向上。
本書大部分內容取材於作者一年前未出版手稿,整理為上海貝爾規範化文件兼培訓教材。C++/C 編程屬眾所周知技術,無秘密可言,好經驗應共享。作者願公開電子文檔:
預計 2002 年 7 月建立切合國情的 CMMI 3 級解決方案,屆時本書在內約 1000 頁規範將嚴格受控。歡迎讀者批評指正。