夕甲甲——孔乙己之C++版

Hext123發表於2018-06-14

OOP程式碼的格局,是和別的程式設計模式不同的:首先要有一個建構函式;基類裡只定義了函式的形式,可以隨時通過派生增加不同的實現。那些程式設計師們,每每學會了繼承和多型,便可以接一個專案,——這是十年前的事,現在至少要懂得設計模式,——靠櫃檯外站著,寫些程式碼換一個雞蛋灌餅吃;倘若懂一些多執行緒的知識,便可以在雞蛋灌餅里加火腿腸,或者裡脊了,如果懂得語言的實現原理,那就能做一些底層程式碼的優化,換一盤炒菜。但這些程式設計師,多是初級水平,大抵沒有這樣深入。只有懂得記憶體模型的,才能接一些底層的專案,開啟偵錯程式和剖析器,慢慢的坐著優化程式碼。

我從十二歲起,便在村口的githoverflow工廠裡當學徒,師傅說,我邏輯思維太差,怕學不會靜態型別語言,就寫些shell指令碼吧。shell指令碼雖然容易寫,但語法容易含混不清的地方也不少。字串和陣列的功能很弱,條件判斷的語法也很奇特,有時要對特殊字元手動做兩重轉義,然後通過。在這種情況下,寫指令碼也很為難。所以過了幾天,師傅又說我幹不了這事。幸虧薦頭的情面大,辭退不得,便改為專管測試的一種無聊職務了。

我從此便整天的站在測試機前,專管執行測試指令碼。雖然沒有什麼失職,但總覺得有些單調,有些無聊。師傅是一副凶臉孔,程式設計師也沒有好聲氣,教人活潑不得;只有夕甲甲到廠裡,才可以笑幾聲,所以至今還記得。

夕甲甲是站著程式設計而手動管理記憶體的唯一的程式設計師。他用的開發語言語法臃腫;結構雜亂,程式碼間時常夾些#ifdef;一堆亂蓬蓬的充當介面的.h檔案。雖然是手動管理記憶體,可是經常出現野指標,要麼忘了初始化,要麼釋放後沒有設定成NULL。他寫的程式碼,總是滿屏的奇技淫巧,叫人半懂不懂的。因為他姓夕,又總覺得自己的技術天下第一,別人便用“甲乙丙丁”的第一個字,替他取下一個綽號,叫做夕甲甲。夕甲甲一到廠,所有的程式設計師便都看著他笑,有的叫道,“夕甲甲,你的程式碼又出新bug了!”他不作答,對櫃裡說,“來兩個雞蛋灌餅,一杯豆漿。”便把Thinkpad擺好。他們又故意的高聲嚷道,“你一定又把人家的記憶體搞洩漏了!”夕甲甲睜大眼睛說,“你怎麼這樣憑空汙人清白……”“什麼清白?我前天親眼見你搞崩了Windows的記憶體,吊著打。”夕甲甲便漲紅了臉,額上的青筋條條綻出,爭辯道,“記憶體沒釋放不能算洩漏……沒釋放!……程式設計師的事,能算洩漏麼?”接連便是難懂的話,什麼“new/delete配對使用”,什麼“誰申請誰釋放”之類,引得眾人都鬨笑起來:廠內外充滿了快活的空氣。

聽人家背地裡談論,夕甲甲原來也讀過CS博士,但終於沒有去做學術,又不會營生;於是愈過愈窮,弄到將要討飯了。幸而還會寫點程式碼,便替人家做幾個遊戲,換一碗飯吃。可惜他又有一樣壞毛病,便是記憶體洩漏。執行不到幾秒,便連程式帶資料,一齊崩掉。如是幾次,叫他寫遊戲的人也沒有了。夕甲甲沒有法,便只好做些最簡單的外包專案。但他在我們廠裡,品行卻比別人都好,就是從不留bug;雖然間或一時不能解決,暫時記在wiki上,但不出一月,定然修復,從wiki上刪去了夕甲甲的名字。

夕甲甲寫過半頁程式碼,漲紅的臉色漸漸復了原,旁人便又問道,“夕甲甲,你當真會寫程式碼麼?”夕甲甲看著問他的人,顯出不屑置辯的神氣。他們便接著說道,“你怎的連半行程式碼也沒有貢獻給linux核心呢?”夕甲甲立刻顯出頹唐不安模樣,臉上籠上了一層灰色,嘴裡說些話;這回可是全是“狗屎Linus”之類,一些不懂了。在這時候,眾人也都鬨笑起來:店內外充滿了快活的空氣。

在這些時候,我可以附和著笑,師傅是決不責備的。而且師傅見了夕甲甲,也每每這樣問他,引人發笑。夕甲甲自己知道不能和他們談天,便只好向孩子說話。有一回對我說道,“你學過程式設計麼?”我略略點一點頭。他說,“學過程式設計,……我便考你一考。const int *和int const *,有什麼區別?”我想,討飯一樣的人,也配考我麼?便回過臉去,不再理會。夕甲甲等了許久,很懇切的說道,“不知道罷?……我教給你,記著!這些語法應該記著。將來做程式設計師的時候,寫程式碼要用。”我暗想我和程式設計師的等級還很遠呢,而且我們師傅也從不用裸指標;又好笑,又不耐煩,懶懶的答他道,“誰要你教,兩個沒區別,都是指向常量的指標。如果你想用指標常量,要寫int * const。”夕甲甲顯出極高興的樣子,將手裡的破滑鼠敲著電腦桌,點頭說,“對呀對呀!……const有四種用法,你知道麼?”我愈不耐煩了,努著嘴走遠。夕甲甲剛在Visual Studio裡新建一個空檔案,想在裡面寫程式碼,見我毫不熱心,便又嘆一口氣,顯出極惋惜的樣子。

有幾回,鄰居孩子聽得笑聲,也趕熱鬧,圍住了夕甲甲。他便給他們一人寫了一個Hello World。孩子看完,仍然不散,眼睛都望著螢幕。夕甲甲著了慌,伸開五指將螢幕罩住,彎腰下去說道,“error了,編譯器報error了。”直起身又看一看螢幕,自己搖頭說,“error error!哀乎哉?error也。”於是這一群孩子都在笑聲裡走散了。

夕甲甲是這樣的使人快活,可是沒有他,別人也便這麼過。

有一天,大約是程式設計師節前的兩三天,師傅正在慢慢的release程式碼,開啟wiki,忽然說,“夕甲甲長久沒有來了。還有十九個bug沒修復呢!”我才也覺得他的確長久沒有來了。一個喝酒的人說道,“他怎麼會來?……他打折了腿了。”師傅說,“哦!”“他總仍舊是搞崩記憶體。這一回,是自己發昏,竟搞崩了GFW的記憶體。他家的記憶體,搞得的嗎?”“後來怎麼樣?”“怎麼樣?先是去喝茶,後來是打,打了大半夜,再打折了腿。”“後來呢?”“後來打折了腿了。”“打折了怎樣呢?”“怎樣?……誰曉得?許是死了。”師傅也不再問,仍然慢慢的做他的release。

程式設計師節過後,函數語言程式設計是一天比一天熱門,看看連Java都開始支援lambda表示式;我整天的做測試,也須瞭解什麼是閉包了。一天的下半天,沒有一個要測試的專案,我正合了眼坐著。忽然間聽得一個聲音,“來一個雞蛋灌餅。”這聲音雖然極低,卻很耳熟。看時又全沒有人。站起來向外一望,那夕甲甲便在櫃檯下對了門檻坐著。他臉上黑而且瘦,已經不成樣子;帶一本破Thinkpad,盤著兩腿,下面墊一個電腦包,用草繩在肩上掛住;見了我,又說道,“來一個雞蛋灌餅。”師傅也伸出頭去,一面說,“夕甲甲麼?你還有十九個bug沒修呢!”夕甲甲很頹唐的仰面答道,“這……下回修罷。這一回是現場通過,雞蛋要好。”師傅仍然同平常一樣,笑著對他說,“夕甲甲,你又記憶體洩漏了!”但他這回卻不十分分辯,單說了一句“不要取笑!”“取笑?要是不洩漏,怎麼會打斷腿?”夕甲甲低聲說道,“跌斷,跌,跌……”他的眼色,很像懇求師傅,不要再提。此時已經聚集了幾個人,便和師傅都笑了。我煎了雞蛋灌餅,拿出去,放在門檻上。他開啟電腦開始寫程式碼,見他滿手是泥,原來他便用這手走來的。不一會,他提交程式碼,通過了測試和review,便又在旁人的說笑聲中,坐著用這手慢慢走去了。

自此以後,又長久沒有看見夕甲甲。到了Rust 1.0釋出的時候,師傅開啟wiki說,“夕甲甲還有十九個bug呢!”到Golang 2.0釋出的時候,又說“夕甲甲還有十九個bug呢!”到Scala 3.0釋出的時候可是沒有說,再到Rust又演進了一個版本也沒有看見他。

我到現在終於沒有見——大約夕甲甲的確死了。

寫於二零一五年夏

來自 www.cnblogs.com/aquastone/p…

相關文章