OOP代碼的格局婿屹,是和別的編程模式不同的:首先要有一個(gè)構(gòu)造函數(shù);基類(lèi)里只定義了函數(shù)的形式屈张,可以隨時(shí)通過(guò)派生增加不同的實(shí)現(xiàn)。那些程序員們袱巨,每每學(xué)會(huì)了繼承和多態(tài)阁谆,便可以接一個(gè)項(xiàng)目,——這是十年前的事愉老,現(xiàn)在至少要懂得設(shè)計(jì)模式场绿,——靠柜臺(tái)外站著,寫(xiě)些代碼換一個(gè)雞蛋灌餅吃嫉入;倘若懂一些多線程的知識(shí)焰盗,便可以在雞蛋灌餅里加火腿腸璧尸,或者里脊了,如果懂得語(yǔ)言的實(shí)現(xiàn)原理熬拒,那就能做一些底層代碼的優(yōu)化爷光,換一盤(pán)炒菜。但這些程序員澎粟,多是初級(jí)水平蛀序,大抵沒(méi)有這樣深入。只有懂得內(nèi)存模型的活烙,才能接一些底層的項(xiàng)目徐裸,打開(kāi)調(diào)試器和剖析器,慢慢的坐著優(yōu)化代碼啸盏。
我從十二歲起重贺,便在村口的githoverflow工廠里當(dāng)學(xué)徒,師傅說(shuō)宫补,我邏輯思維太差檬姥,怕學(xué)不會(huì)靜態(tài)類(lèi)型語(yǔ)言曾我,就寫(xiě)些shell腳本吧粉怕。shell腳本雖然容易寫(xiě),但語(yǔ)法容易含混不清的地方也不少抒巢。字符串和數(shù)組的功能很弱贫贝,條件判斷的語(yǔ)法也很奇特,有時(shí)要對(duì)特殊字符手動(dòng)做兩重轉(zhuǎn)義蛉谜,然后通過(guò)稚晚。在這種情況下,寫(xiě)腳本也很為難型诚。所以過(guò)了幾天客燕,師傅又說(shuō)我干不了這事。幸虧薦頭的情面大狰贯,辭退不得也搓,便改為專(zhuān)管測(cè)試的一種無(wú)聊職務(wù)了。
我從此便整天的站在測(cè)試機(jī)前涵紊,專(zhuān)管運(yùn)行測(cè)試腳本傍妒。雖然沒(méi)有什么失職,但總覺(jué)得有些單調(diào)摸柄,有些無(wú)聊颤练。師傅是一副兇臉孔,程序員也沒(méi)有好聲氣驱负,教人活潑不得嗦玖;只有夕甲甲到廠里患雇,才可以笑幾聲,所以至今還記得宇挫。
夕甲甲是站著編程而手動(dòng)管理內(nèi)存的唯一的程序員庆亡。他用的開(kāi)發(fā)語(yǔ)言語(yǔ)法臃腫;結(jié)構(gòu)雜亂捞稿,代碼間時(shí)常夾些#ifdef又谋;一堆亂蓬蓬的充當(dāng)接口的.h文件。雖然是手動(dòng)管理內(nèi)存娱局,可是經(jīng)常出現(xiàn)野指針彰亥,要么忘了初始化,要么釋放后沒(méi)有設(shè)置成NULL衰齐。他寫(xiě)的代碼任斋,總是滿(mǎn)屏的奇技淫巧,叫人半懂不懂的耻涛。因?yàn)樗障Ψ峡幔挚傆X(jué)得自己的技術(shù)天下第一,別人便用“甲乙丙丁”的第一個(gè)字抹缕,替他取下一個(gè)綽號(hào)澈蟆,叫做夕甲甲。夕甲甲一到廠卓研,所有的程序員便都看著他笑趴俘,有的叫道,“夕甲甲奏赘,你的代碼又出新bug了寥闪!”他不作答,對(duì)柜里說(shuō)磨淌,“來(lái)兩個(gè)雞蛋灌餅疲憋,一杯豆?jié){×褐唬”便把Thinkpad擺好缚柳。他們又故意的高聲嚷道,“你一定又把人家的內(nèi)存搞泄漏了敛纲!”夕甲甲睜大眼睛說(shuō)喂击,“你怎么這樣憑空污人清白……”“什么清白?我前天親眼見(jiàn)你搞崩了Windows的內(nèi)存淤翔,吊著打翰绊。”夕甲甲便漲紅了臉,額上的青筋條條綻出监嗜,爭(zhēng)辯道谐檀,“內(nèi)存沒(méi)釋放不能算泄漏……沒(méi)釋放!……程序員的事裁奇,能算泄漏么桐猬?”接連便是難懂的話(huà),什么“new/delete配對(duì)使用”刽肠,什么“誰(shuí)申請(qǐng)誰(shuí)釋放”之類(lèi)溃肪,引得眾人都哄笑起來(lái):廠內(nèi)外充滿(mǎn)了快活的空氣。
聽(tīng)人家背地里談?wù)撘粑澹准自瓉?lái)也讀過(guò)CS博士惫撰,但終于沒(méi)有去做學(xué)術(shù),又不會(huì)營(yíng)生躺涝;于是愈過(guò)愈窮厨钻,弄到將要討飯了。幸而還會(huì)寫(xiě)點(diǎn)代碼坚嗜,便替人家做幾個(gè)游戲夯膀,換一碗飯吃〔允撸可惜他又有一樣壞毛病诱建,便是內(nèi)存泄漏。運(yùn)行不到幾秒银室,便連程序帶數(shù)據(jù)涂佃,一齊崩掉。如是幾次蜈敢,叫他寫(xiě)游戲的人也沒(méi)有了。夕甲甲沒(méi)有法汽抚,便只好做些最簡(jiǎn)單的外包項(xiàng)目抓狭。但他在我們廠里,品行卻比別人都好造烁,就是從不留bug否过;雖然間或一時(shí)不能解決,暫時(shí)記在wiki上惭蟋,但不出一月苗桂,定然修復(fù),從wiki上刪去了夕甲甲的名字告组。
夕甲甲寫(xiě)過(guò)半頁(yè)代碼煤伟,漲紅的臉色漸漸復(fù)了原,旁人便又問(wèn)道,“夕甲甲便锨,你當(dāng)真會(huì)寫(xiě)代碼么围辙?”夕甲甲看著問(wèn)他的人,顯出不屑置辯的神氣放案。他們便接著說(shuō)道姚建,“你怎的連半行代碼也沒(méi)有貢獻(xiàn)給linux內(nèi)核呢?”夕甲甲立刻顯出頹唐不安模樣吱殉,臉上籠上了一層灰色掸冤,嘴里說(shuō)些話(huà);這回可是全是“狗屎Linus”之類(lèi)友雳,一些不懂了贩虾。在這時(shí)候,眾人也都哄笑起來(lái):店內(nèi)外充滿(mǎn)了快活的空氣沥阱。
在這些時(shí)候缎罢,我可以附和著笑,師傅是決不責(zé)備的考杉。而且?guī)煾狄?jiàn)了夕甲甲策精,也每每這樣問(wèn)他,引人發(fā)笑崇棠。夕甲甲自己知道不能和他們談天咽袜,便只好向孩子說(shuō)話(huà)。有一回對(duì)我說(shuō)道枕稀,“你學(xué)過(guò)編程么询刹?”我略略點(diǎn)一點(diǎn)頭。他說(shuō)萎坷,“學(xué)過(guò)編程凹联,……我便考你一考。const int *和int const *哆档,有什么區(qū)別蔽挠?”我想,討飯一樣的人瓜浸,也配考我么澳淑?便回過(guò)臉去,不再理會(huì)插佛。夕甲甲等了許久杠巡,很懇切的說(shuō)道,“不知道罷雇寇?……我教給你氢拥,記著蚌铜!這些語(yǔ)法應(yīng)該記著。將來(lái)做程序員的時(shí)候兄一,寫(xiě)代碼要用厘线。”我暗想我和程序員的等級(jí)還很遠(yuǎn)呢出革,而且我們師傅也從不用裸指針造壮;又好笑,又不耐煩骂束,懶懶的答他道耳璧,“誰(shuí)要你教,兩個(gè)沒(méi)區(qū)別展箱,都是指向常量的指針旨枯。如果你想用指針常量,要寫(xiě)int * const混驰∨矢簦”夕甲甲顯出極高興的樣子,將手里的破鼠標(biāo)敲著電腦桌栖榨,點(diǎn)頭說(shuō)昆汹,“對(duì)呀對(duì)呀!……const有四種用法婴栽,你知道么满粗?”我愈不耐煩了,努著嘴走遠(yuǎn)愚争。夕甲甲剛在Visual Studio里新建一個(gè)空文件映皆,想在里面寫(xiě)代碼,見(jiàn)我毫不熱心轰枝,便又嘆一口氣捅彻,顯出極惋惜的樣子。
有幾回狸膏,鄰居孩子聽(tīng)得笑聲沟饥,也趕熱鬧,圍住了夕甲甲湾戳。他便給他們一人寫(xiě)了一個(gè)Hello World。孩子看完广料,仍然不散砾脑,眼睛都望著屏幕。夕甲甲著了慌艾杏,伸開(kāi)五指將屏幕罩住韧衣,彎腰下去說(shuō)道,“error了,編譯器報(bào)error了畅铭∈鲜纾”直起身又看一看屏幕,自己搖頭說(shuō)硕噩,“error error假残!哀乎哉?error也炉擅』岳粒”于是這一群孩子都在笑聲里走散了。
夕甲甲是這樣的使人快活谍失,可是沒(méi)有他眶俩,別人也便這么過(guò)。
有一天快鱼,大約是程序員節(jié)前的兩三天颠印,師傅正在慢慢的release代碼,打開(kāi)wiki抹竹,忽然說(shuō)线罕,“夕甲甲長(zhǎng)久沒(méi)有來(lái)了。還有十九個(gè)bug沒(méi)修復(fù)呢柒莉!”我才也覺(jué)得他的確長(zhǎng)久沒(méi)有來(lái)了闻坚。一個(gè)喝酒的人說(shuō)道,“他怎么會(huì)來(lái)兢孝?……他打折了腿了窿凤。”師傅說(shuō)跨蟹,“哦雳殊!”“他總?cè)耘f是搞崩內(nèi)存。這一回窗轩,是自己發(fā)昏夯秃,竟搞崩了GFW的內(nèi)存。他家的內(nèi)存痢艺,搞得的嗎仓洼?”“后來(lái)怎么樣?”“怎么樣堤舒?先是去喝茶色建,后來(lái)是打,打了大半夜舌缤,再打折了腿箕戳∧巢校”“后來(lái)呢?”“后來(lái)打折了腿了陵吸〔J”“打折了怎樣呢?”“怎樣壮虫?……誰(shuí)曉得澳厢?許是死了≈贾福”師傅也不再問(wèn)赏酥,仍然慢慢的做他的release。
程序員節(jié)過(guò)后谆构,函數(shù)式編程是一天比一天熱門(mén)裸扶,看看連Java都開(kāi)始支持lambda表達(dá)式;我整天的做測(cè)試搬素,也須了解什么是閉包了呵晨。一天的下半天,沒(méi)有一個(gè)要測(cè)試的項(xiàng)目熬尺,我正合了眼坐著摸屠。忽然間聽(tīng)得一個(gè)聲音,“來(lái)一個(gè)雞蛋灌餅粱哼〖径”這聲音雖然極低,卻很耳熟揭措】柘希看時(shí)又全沒(méi)有人。站起來(lái)向外一望绊含,那夕甲甲便在柜臺(tái)下對(duì)了門(mén)檻坐著桑嘶。他臉上黑而且瘦,已經(jīng)不成樣子躬充;帶一本破Thinkpad逃顶,盤(pán)著兩腿,下面墊一個(gè)電腦包充甚,用草繩在肩上掛滓哉;見(jiàn)了我伴找,又說(shuō)道妙蔗,“來(lái)一個(gè)雞蛋灌餅〗澹”師傅也伸出頭去眉反,一面說(shuō),“夕甲甲么穆役?你還有十九個(gè)bug沒(méi)修呢寸五!”夕甲甲很頹唐的仰面答道,“這……下回修罷耿币。這一回是現(xiàn)場(chǎng)通過(guò)梳杏,雞蛋要好⊙徒樱”師傅仍然同平常一樣十性,笑著對(duì)他說(shuō),“夕甲甲塑悼,你又內(nèi)存泄漏了劲适!”但他這回卻不十分分辯,單說(shuō)了一句“不要取笑厢蒜!”“取笑霞势?要是不泄漏,怎么會(huì)打斷腿斑鸦?”夕甲甲低聲說(shuō)道愕贡,“跌斷,跌巷屿,跌……”他的眼色固以,很像懇求師傅,不要再提嘱巾。此時(shí)已經(jīng)聚集了幾個(gè)人憨琳,便和師傅都笑了。我煎了雞蛋灌餅浓冒,拿出去栽渴,放在門(mén)檻上。他打開(kāi)電腦開(kāi)始寫(xiě)代碼稳懒,見(jiàn)他滿(mǎn)手是泥闲擦,原來(lái)他便用這手走來(lái)的。不一會(huì)场梆,他提交代碼墅冷,通過(guò)了測(cè)試和review,便又在旁人的說(shuō)笑聲中或油,坐著用這手慢慢走去了寞忿。
自此以后,又長(zhǎng)久沒(méi)有看見(jiàn)夕甲甲顶岸。到了Rust 1.0發(fā)布的時(shí)候腔彰,師傅打開(kāi)wiki說(shuō)叫编,“夕甲甲還有十九個(gè)bug呢!”到Golang 2.0發(fā)布的時(shí)候霹抛,又說(shuō)“夕甲甲還有十九個(gè)bug呢搓逾!”到Scala 3.0發(fā)布的時(shí)候可是沒(méi)有說(shuō),再到Rust又演進(jìn)了一個(gè)版本也沒(méi)有看見(jiàn)他杯拐。
我到現(xiàn)在終于沒(méi)有見(jiàn)——大約夕甲甲的確死了霞篡。
寫(xiě)于二零一五年夏
來(lái)自 http://www.cnblogs.com/aquastone/p/kongyiji-cpp.html