C++編程指南學(xué)習(xí)(一)

字號(hào):

一、編程老手與高手的誤區(qū)
    自從計(jì)算機(jī)問(wèn)世以來(lái),程序設(shè)計(jì)就成了令人羨慕的職業(yè),程序員在受人寵愛之后容易發(fā)展成為毛病特多卻常能自我臭美的群體。
    如今在 Internet 上流傳的“真正”的程序員據(jù)說(shuō)是這樣的:
    (1) 真正的程序員沒有進(jìn)度表,只有討好領(lǐng)導(dǎo)的馬*精才有進(jìn)度表,真正的程序員會(huì)讓領(lǐng)導(dǎo)提心吊膽。
    (2) 真正的程序員不寫使用說(shuō)明書,用戶應(yīng)當(dāng)自己去猜想程序的功能。
    (3) 真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當(dāng)然也很難讀。
    (4) 真正的程序員不畫流程圖,原始人和文盲才會(huì)干這事。
    (5) 真正的程序員不看參考手冊(cè),新手和膽小鬼才會(huì)看。
    (6) 真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。
    (7) 真正的程序員認(rèn)為自己比用戶更明白用戶需要什么。
    (8) 真正的程序員不接受團(tuán)隊(duì)開發(fā)的理念,除非他自己是頭頭。
    (9) 真正的程序員的程序不會(huì)在第一次就正確運(yùn)行,但是他們?cè)敢馐刂鴻C(jī)器進(jìn)行若干個(gè) 30 小時(shí)的調(diào)試改錯(cuò)。
    (10) 真正的程序員不會(huì)在上午 9:00 到下午 5:00 之間工作,如果你看到他在上午 9:00 工作,這表明他從昨晚一直干到現(xiàn)在。
    ……
    具備上述特征越多,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點(diǎn)竟然可以被當(dāng)作優(yōu)點(diǎn)來(lái)欣賞。就象在武俠小說(shuō)中,那些獨(dú)來(lái)獨(dú)往、不受約束且?guī)c(diǎn)邪氣的高手最令人崇拜。我曾經(jīng)也這樣信奉,并且希望自己成為那樣的“真正”的程序員,結(jié)果沒有得到好下場(chǎng)。
    我從讀大學(xué)到博士畢業(yè)十年來(lái)一直勤奮好學(xué),累計(jì)編寫了數(shù)十萬(wàn)行 C++/C 代碼。有這樣的苦勞和疲勞,我應(yīng)該稱得上是編程老手了吧?
    我開發(fā)的軟件都與科研相關(guān)(集成電路 CAD 和 3D 圖形學(xué)領(lǐng)域),動(dòng)輒數(shù)萬(wàn)行程序,技術(shù)復(fù)雜,難度頗高。這些軟件頻頻獲獎(jiǎng),有一個(gè)軟件獲得首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。在 1995 年開發(fā)的一套圖形軟件庫(kù)到 2000 年還有人買。羅列出這些“業(yè)績(jī)”,可以說(shuō)明我算得上是編程高手了吧?
    可惜這種個(gè)人感覺不等于事實(shí)。
    讀博期間我曾用一年時(shí)間開發(fā)了一個(gè)近 10 萬(wàn)行 C++ 代碼的 3D 圖形軟件產(chǎn)品,我內(nèi)心得意表面謙虛地向一位真正的軟件高手請(qǐng)教。他雖然從未涉足過(guò) 3D 圖形領(lǐng)域,卻在幾十分鐘內(nèi)指出該軟件多處重大設(shè)計(jì)錯(cuò)誤。讓人感覺那套軟件是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個(gè)洞。我目瞪口呆地意識(shí)到這套軟件毫無(wú)實(shí)用價(jià)值,一年的心血白化了,并且害死了自己的軟件公司。
    人的頓悟通常發(fā)生在最心痛的時(shí)刻,在沮喪和心痛之后,我作了深刻反省,“面壁”半年,重新溫習(xí)軟件設(shè)計(jì)的基礎(chǔ)知識(shí)。補(bǔ)修“內(nèi)功”之后,又覺得腰板硬了起來(lái)。博士畢業(yè)前半年,我曾到微軟中國(guó)研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫函數(shù) strcpy 的代碼。
    這么一個(gè)小不點(diǎn)的函數(shù),他從三個(gè)方面考查:
    ( 1 )編程風(fēng)格;
    ( 2 )出錯(cuò)處理;
    ( 3 )算法復(fù)雜度分析(用于提高性能)。