轉 夕甲甲:孔乙己之 C++ 版

歐歐匹代碼的格局,是和別的編程模式不一樣的:首先要有一個構造函數;基類裏只定義了函數的形式,能夠隨時經過派生增長不一樣的實現。那些程序員們,往往學會了繼承和多態,即可以接一個項目,——這是十年前的事,如今至少要懂得設計模式,——靠櫃檯外站着,寫些代碼換一個雞蛋灌餅吃;假若懂一些多線程的知識,即可以在雞蛋灌餅里加火腿腸,或者裏脊了,若是懂得語言的實現原理,那就能作一些底層代碼的優化,換一盤炒菜。但這些程序員,可能是初級水平,大抵沒有這樣深刻。只有懂得內存模型的,才能接一些底層的項目,打開調試器和剖析器,慢慢的坐着優化代碼。linux

我從十二歲起,便在村口的githoverflow工廠裏當學徒,師傅說,我邏輯思惟太差,怕學不會靜態類型語言,就寫些shell腳本吧。shell腳本雖然容易寫,但語法容易含混不清的地方也很多。字符串和數組的功能很弱,條件判斷的語法也很奇特,有時要對特殊字符手動作兩重轉義,而後經過。在這種狀況下,寫腳本也很爲難。因此過了幾天,師傅又說我幹不了這事。幸好薦頭的情面大,辭退不得,便改成專管測試的一種無聊職務了。git

我今後便成天的站在測試機前,專管運行測試腳本。雖然沒有什麼失職,但總以爲有些單調,有些無聊。師傅是一副兇臉孔,程序員也沒有好聲氣,教人活潑不得;只有夕甲甲到廠裏,才能夠笑幾聲,因此至今還記得。程序員

夕甲甲是站着編程而手動管理內存的惟一的程序員。他用的開發語言語法臃腫;結構雜亂,代碼間時常夾些#ifdef;一堆亂蓬蓬的充當接口的 .h 文件。雖然是手動管理內存,但是常常出現野指針,要麼忘了初始化,要麼釋放後沒有設置成NULL。他寫的代碼,老是滿屏的奇技淫巧,叫人半懂不懂的。由於他姓夕,又總以爲本身的技術天下第一,別人便用「甲乙丙丁」的第一個字,替他取下一個綽號,叫作夕甲甲。夕甲甲一到廠,全部的程序員便都看着他笑,有的叫道,「夕甲甲,你的代碼又出新bug了!」他不做答,對櫃裏說,「來兩個雞蛋灌餅,一杯豆漿。」便把Thinkpad擺好。他們又故意的高聲嚷道,「你必定又把人家的內存搞泄漏了!」夕甲甲睜大眼睛說,「你怎麼這樣憑空污人清白……」「什麼清白?我前天親眼見你搞崩了Windows的內存,吊着打。」夕甲甲便漲紅了臉,額上的青筋條條綻出,爭辯道,「內存沒釋放不能算泄漏……沒釋放!……程序員的事,能算泄漏麼?」接連即是難懂的話,什麼「new/delete配對使用」,什麼「誰申請誰釋放」之類,引得衆人都鬨笑起來:廠內外充滿了快活的空氣。shell

聽人家背地裏談論,夕甲甲原來也讀過 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又演進了一個版本也沒有看見他。

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

相關文章
相關標籤/搜索