小王子之程式設計師版

黃小非發表於2017-07-26

【伯樂線上提示】:本文較長,Fred Hebert 仿照《小王子》小說,寫了一個小程式設計師在學習軟體開發中的各種歷險,分了 11 個小故事。正如讀者 lei 的評論所言:所有程式設計師都是文中這些人的縮影。

補充:《小王子》是法國作家安託萬·德·聖·埃克蘇佩裡於 1942 年寫成的著名兒童文學短篇小說。本書的主人公是來自外星球的小王子。書中以一位飛行員作為故事敘述者,講述了小王子從自己星球出發前往地球的過程中,所經歷的各種歷險。

 

 

printf-nocover

第 0 章

我出生在電子遊戲和電腦氾濫年代之前。所以我還算幸運,有足夠的時間和我哥,還有小夥伴們一起做戶外運動,還發明我們自己的遊戲。

我們自己扮演英雄,拿著一根樹枝,我們就能瞬間把它想象成弓、劍、槍,甚至是望遠鏡,當然也可以是任何其他東西。哦,對了,唯一的例外就是你不能把它想象成迴旋鏢,因為真的迴旋鏢扔出去是會自己飛回來的,但是樹枝扔出去了,你要自己去撿回來。

boomerang

後來我們就長大了,再這麼玩就有些尷尬了。要知道,在孩子們開始覺得大人的世界很精彩的階段,你要是再玩那些把松果想象成魔法手榴彈的遊戲,這就很不合群了。遲早你要面對成長的煩惱。不過,能有一個完整的童年還是很幸運。

後來我就開始學會玩電子遊戲了,當然也開始使用電腦。電子遊戲的世界可絕對是你夢寐以求的世界,因為它能把你想象中的東西在你面前實現出來。玩遊戲很消耗時間,但是它絕對會讓你體驗到不同的人生。

不過對於電子遊戲來說,有一個特點:那就是你不負責創造,你只負責響應和付出時間。我長到青少年的歲數,還當過即興表演的演員。所以說,無論是與人相處,還是裝作旁若無人,這對我都不是問題。

improv

當然,在魁北克做即興表演還是有點兒不同尋常,因為我們是在溜冰場地上表演——你知道冰球在加拿大多火嗎。

後來我去了職業學校學習多媒體,大概是 2005 年到 2008 年這個時段,我終究還是要做些程式設計的事情。不過我發現程式設計是個有意思的事情!我又感覺到了創造性!並且我還能靠這個賺錢!於是我設計了我的第一套遊戲,這可讓我受益匪淺。game

不過後來又有人告訴我:“你做的並不是真正的電子遊戲。你做的只是一個 HTML 表單。而且你做的時候應該用陣列來表示文字和選項,這樣效果會更好。你寫的程式碼應該更整潔一些。”

我對這個評價覺得有點兒沮喪。我做的這個遊戲是一個基於文字的遊戲,文字大概有 11 頁,通過選擇來“進行你的冒險”。不過我意識到,如果想讓大家對我做的東西更加滿意,我還有很多東西要學。

我應該學一些“真正的程式設計知識”。於是我從基於JScript 的 GUI 工具跳到了一些更牛的東西上面,例如 PHP。我學了 PHP,同時也學了 JavaScript。可是後來,我聽說這些還是不行,我還得學一些“真正的程式設計知識”。別人跟我說,PHP 不行,我應該學的是 Python,當然後來我真的去學了。

不過“真正的程式設計師”還會一些更時髦的東西,Python 的 Lambda 可到不了那個逼格,而且物件導向程式設計模式簡直就是弱爆了。人家告訴我說,我應該去讀一讀 SICP,畢竟這是電腦科學的聖經嘛。

sicp

然後我就接觸了 Scheme。我還買了 Brian Kernighan 和 Dennis Ritchie 合寫的《The C Programming Language》,因為真正的程式設計師就是要用 C 語言寫程式的嘛。我還在本地大學報了一個業餘班去上課,同時我還得去上班,因為真正的程式設計師都是很懂數學和演算法的嘛,所以我也得學。我開始讀論文,看書,因為真正的程式設計師在演算法這件事情上肯定是與時俱進的啊。

後來,我學了 Erlang 語言,而且還靠這門語言找了份工作。我寫了一本 Erlang 的書。不過有意思的是,從來沒人問過我是不是這本書的作者?我還有沒有寫其他的書?或者書裡的圖是不是我畫的?好吧,我找到了一份教 Erlang 語言的工作,但是卻從來沒有在生產環境中用過這門語言。

第 1 章

我就這樣一直在全世界飛來飛去,教給別人一些連我自己都沒有做過的事情,結果突然之間大家就覺得我也是真正的程式設計師了。要知道我的工作一開始和寫程式是沒什麼關係的。

有一天,我參加完某個技術會議回家,然後被滯留在機場了,正當我氣急敗壞地在電腦上打字的時候,突然聽到了一個奇怪的,但是很紳士的聲音對我說:

“能幫我設計一個系統嗎?”

“啥?”

“設計一個系統!“

我被這個請求驚呆了,於是抬起了頭。我環顧四周,看到了一個小孩,他非常希望成為一名程式設計師,然後他說我可以叫他”printf”,當然,我覺得這肯定不是他的真名,而且這個名字也挺蠢的。他看上去長得這個樣子:

printf-end

”我不是很懂電腦,但是看上去你很懂。我想寫一個部落格程式給大家用,然後還想讓大家閱讀這個部落格。所以麻煩你幫我寫一個系統吧。”

這可是一個讓人吃驚的請求,可能是因為我已經 20 個小時沒睡覺的原因,我還不是很理解,或者說我感覺還是很不真實。我跟他說,這可不是簡單的事情。我不太清楚他到底要做什麼?有沒有考慮過失敗了怎麼辦?這個部落格要支援多少人同時線上閱讀呢?伺服器的主機放在哪兒呢?在缺乏這麼多資訊的前提下,我是沒法設計一個合理系統的。

“這些都不重要。就給我設計一個系統就好。”

好吧,那麼我就畫了一個系統的架構圖:

arch1

他看了看,然後說:“不行,這個系統還不夠好。給我再做一個吧。“

然後我就又做了一個:
arch2

接著我跟他簡要解釋了一下這個系統是如何工作的。

我的新朋友禮貌地笑了笑,說:”這不是我要的系統,它太複雜了,好多功能我其實都不需要。“

我聽了感覺氣不打一處來啊,我可是考慮了冗餘、系統監控、備份、快取還有很多其他的機制,來降低負載,減輕額外的處理器負擔,並且還能對系統進行有效保護,失效備援,易於部署等等。要知道,如果平時我給人拿出這種方案,那可是要收諮詢費的!好吧我失去耐心了,然後我就畫了下面這個圖:

blackbox

然後我還補充說:“這就是你要的設計。你要的系統就在這個黑盒子裡。”我希望這個設計方案能讓他放過我。不過我聽到了一句非常意外的回答:

“沒錯!這就是我要的系統!”

這就是我和小 printf 初識的故事。

第 2 章

我迅速地對小 printf 做了點調查。發現他之前寫的東西都是些小程式,基於表單的小網頁,還有一些無關緊要的命令列工具。這些東西平淡無奇,就算是做出來了也很快會被人忘記。

然後突然之間,他就開始做包含好幾個模組的大專案了。這個專案要用到 sockets,要能訪問本地硬碟,而且還要和資料庫互動。程式剛一做出來的時候,小 printf 還覺得很神奇。但是即便如此這個專案還是差強人意。

這個專案還需要重構,需要更細緻的測試,需要更完備的文件,需要更好的包裝和分析。專案上線已本來應該正常執行,但是某一天早上,它崩潰了。

接下來就是各種崩潰,崩了又崩。

系統配置不對,日誌介面也不再滾動,磁碟速度忽快忽慢,網路不定時抽風,bug 開始各種出現,系統編碼也讓人匪夷所思,資料庫需要清理,事務也被掛起,證照過期,各種漏洞開始暴露,系統監測則什麼動靜也沒有。

spaghetti

系統開始變成一鍋粥了。

他對我說:“事實上我什麼都不懂!我本應根據我的需求來做判斷的。我太想做一個完美的系統,花了這麼多的時間,結果卻是‘磨刀誤了砍柴功’。當然,我還是知道這個系統的美妙之處的。“

於是一天早晨,他決定離開辦公室。他對著一大堆電腦指示燈說了「再見」。他離開是為了要看看,除了他那亂糟糟的伺服器之外,軟體的世界還能給他提供些什麼好辦法來實現他的系統。

如果照現在的情況,只會是日誌繼續不停地累計,直到硬碟存爆了為止。

第 3 章

building

他來到了一個工作區,想找個經驗豐富的人指點迷津。

他找的第一個人是一個超級自信的高階工程師,他看上去地位很高的樣子。

pro”啊,來向我取經啊!你可找對人了,我可是這個領域的專家!“這個人說。

”專家?”小 printf 問到,”這就是說你什麼程式都能寫,什麼程式都會寫?“

”那當然!“專家回答到。他補充說:”總的來說,我只寫那些值得寫的程式。我可不寫那些沒意義的東西。我能寫但不寫的那些程式,都是因為太簡單,所以不勞我動手。“

”啊,那你能幫我看一下我的系統嗎?”就在小 printf 開始闡述他的系統的時候,這位專家打斷了他:

“抱歉,我真心覺得這麼做沒什麼意義。”

“為什麼?”

“因為經驗。我善於編寫我善於的程式,我給我善於編寫的東西程式設計。我要嚴格限制我只做我擅長做的事情,這樣才能變得更好。我管這個叫做‘職業安全’,這就是程式界的適者生存原理,而且這一行就是這麼玩的。“

”那你為什麼不能幫我呢?“

”好吧,你看,如果我花時間幫助了你,那麼我就會讓我的技術自我投資的方向發生分散和偏離——這對我來說是失策。對於你來說,最好的學習方法就是我當年做的那樣:通過痛苦的努力來找到解決的辦法。這有助於鍛造你的個性。“

”但是這樣效率好低。“

”好吧那你就去學校學,你也可以自學。但是無論哪種做法,都只是把那些想不勞而獲的懶人踢出去,讓真正願意踏實學習的人留下來。如果不是這樣的話,那我堅持恪守的價值觀就會隨之崩潰。“

”那你覺得跟人合作,或者是你的同事能不能幫助你?“

”並不能。我工作狀態最好的時候其實是我一個人獨自待著而且沒人打擾的時候。每次我被迫和別人一起工作的時候,幾乎可以肯定我們做的東西沒法湊到一起。最後只能是我怒了,然後把他們寫的東西又自己重新再寫一遍,然後這才能行。“

小 printf 對這個專家不願幫助別人的態度感到非常意外,而且也對專家描述的周圍的人能力如此之差感到很困惑。專家把自己的全部視野只集中在自己擅長的領域,只解決自己能解決的問題,這聽上去有點兒悲哀。

”我明白了…我覺得你別給我幫助的話就最好了。“ 小 printf 說到。

”你什麼意思?“自帶高大上光環的專家似乎感到了自己的價值觀受到了挑戰。”你是說我的做的工作毫無趣味可言嗎?“

”哦,並不是,你做的工作很有趣。不過從你的眼光中看來,我只是一個煩躁而討厭的傢伙。我是來尋求幫助的,不是來找罪受的。“

小 printf 迅速地離開了這個專家,因為他明白,除非你在他的”職業安全“範圍之內,否則根本就不能碰他。

第 4 章

books

在繼續尋找幫助的路上,小 printf 來到了一個辦公室的的門口,辦公室裡四面都是書架,書架上放著裝幀優美的硬皮書,書上有各式各樣的精美圖畫,一個人坐在辦公室裡面。

“先生你的書真不錯啊“小 printf 說。

”謝謝!我覺得這些書都是程式設計師必備的材料。如果你沒有這些書,你都不好意思跟人家說你是真正的程式設計師。“

”啊,那我覺得我可能就不算是真正的程式設計師了“,小 printf 說,”那你最喜歡哪本書呢?“

”哦,大部分書我還沒看過呢。“

”那你不是個優秀的程式設計師咯?“

”啊不,我不是。“這個開發者驕傲地補充到:”實際上,我是個糟糕的程式設計師。“

”真遺憾,“,小 printf 說,”我可是不斷在進步呢。“

“你聽說過 Dunning-Kruger 效應沒?”,房間中的人問到。

“沒有,那是個啥玩意兒?”

“就是一種認知偏差。它的意思大概就是說,那些能力不太強的人更容易高估自己,而能力很強的人更容易低估自己。”

“所以按照你的意思,如果我認為我在進步,其實是因為我不夠好造成的?”

“是啊,就是這個意思。很可能就是你其實能力不強。而我,我公開聲稱自己是一個糟糕的程式設計師。但是根據 Dunning-Kruger 效應,我很可能是在低估我自己,這就意味著我其實是一個很棒的程式設計師,你還不明白嗎?”

“為什麼會這樣?”

“那是因為自黑是程式設計師的一大法寶。當你自我感覺良好的時候,你實際上已經停滯不前了。”

“但是這樣一來不就意味著,一旦你自己感覺不錯的時候,你就開始走下坡路了,所以你應該讓自己感覺糟糕起來嗎?”

“對的。但是這件事情正確的做法是,你要對任何東西都說很糟糕,即便是你不知道怎麼解決問題也要這麼說。這樣就能讓你看上去很聰明,而且又並不用真的做什麼。“

”能具體解釋一下麼?“

”比如我在網上看到了一個讓我不爽的專案。然後我就說這個專案所有的地方都不對,但是又並不具體說哪兒不對。我只需要輕描淡寫地說,因為做這個專案的人本身就是個白痴,就這樣就可以了。“

“但是你這麼說,別人怎麼會信呢?”

“哈哈,我覺得他們都願意相信他們做錯了,而且他們也願意讓別人指出來。這就有點兒像煙霧或者鏡子。實際上沒人知道自己做的東西是啥樣,他們只能知道自己做的東西看上去是啥樣。”

“那麼如果他們說他們沒法解決問題,讓你來幫他們的話,那你怎麼辦?“

”這樣的話就又回到了一切事情都很糟糕的那個問題;你就說你很忙,有很多事情要做,然後你還很悲觀。這樣的話,他們就只能靠他們自己了。“

”所以說這一切都只是擺個姿態而已?這對你來說只是一個套路?你懂的時候裝作不懂,是為了讓真正啥都不懂的人失去信心,你不懂的時候裝懂,是為了讓真正懂的人感覺糟糕。“

”在大多數情況下,有能力沒什麼用。只有名聲才是最重要的。老闆招人的時候喜歡招自己的朋友,公司裁人的時候不招人喜歡的和不被重視的人會先被裁。這就是規則。如果你想改變社會的規則,你就會成為異類。這就是套路。業界就是這麼運作的,學術界也大致如此,儘管這些都是潛規則,但是我還是都看出來了。一切都取決於你認識誰,如何推銷自己,如果經營你的個人品牌。只有這樣你才能在業界擁有一席之地。“

”如果我必須要覺得自己很糟糕,而且還得讓別人覺得很糟糕,這樣才能找到工作的話,那我想還是算了。“小 printf 說完就走開了。

第 5 章

realprog

接下來就是午餐時間了,printf打斷了一個全神貫注工作忘記吃午飯的人,他一直盯著螢幕,飯都已經涼了。

工作這麼忙碌的人應該很擅長軟體行業。於是小 printf 問到:

”如果主資料庫崩潰了,那從資料庫也會崩潰麼?“

”你執行的一切東西。“這個忙碌的人回答說,”遲早都會崩潰的。“

”那麼那些告訴你程式崩潰的程式呢?它們也會崩潰麼?“

”是的,它們也會崩潰。所有的大型系統在任意時刻都處在某種部分崩潰的狀態。“

”那麼,我們搭建可靠系統(reliable system)的意義在哪兒呢?“

這個忙碌的人不知道,他也在思考同樣的問題,因為就在此時,他們又接到了一個問題,說是一朵雲壞掉了,造成了天空塌下來砸到了頭上。

”那麼,搭建可靠系統的意義到底在哪兒呢?“小 printf 追問到。

這個忙碌的人此時一臉的不爽,一看就是在工作遇到問題的樣子。他就像一個放了學被留下來不讓走的孩子,而且他的三明治顯然是廢了。他很不耐煩地大聲回答說:

“顯然沒有任何意義。因為程式本身就是一坨屎。”

“噢!”他倒抽了一口氣。

接下來,就是一段完全的沉默。

trashcan

小 printf 打破了沉默,並且帶著一絲憤怒:

“我不相信你說的話。程式確實是脆弱的,但是程式設計師能夠通過努力讓程式變得更好且可用。”

沒有回應。這個時候忙碌的人已經開啟一個文件,檢視如何從頭啟動一個叢集備份,情況似乎變得越來越糟糕了。

“那麼你真的相信可靠的程–”

“噢不!”忙碌的人說,“不不不!我不相信什麼好的或者可靠的程式!再也不信了!它們都不行!我告訴你我現在腦袋裡想的就是怎麼處理手頭的這個垃圾系統。你沒看到是我在努力維持讓這些東西執行嗎?這些破玩意兒多麼重要!”

小 printf 瞪了回來,表情有些驚愕。

“都壞成這樣了還很重要?你的口氣就像是個真正的程式設計師似的。“

他補充說:

”你把概念完全搞混了。世界上有成百上千的程式,年復一年地執行,而且總是會崩潰。但是即便如此人們還是需要這些程式,使用這些程式。而且我知道還有一種程式,它們只會在單檯筆記本上執行,但是隻要發生一點點錯誤,其結果就能瞬間毀滅整個社群。如果這樣,你還認為不重要嗎?“

接下來這個忙碌的人就不再說話了。

第 6 章

frameworks

小 printf 造訪的第四個工作區有一個人,他的電腦前貼滿了各種不知名的即時貼。

”motor-mvc, quadrangular JS, GoQuery, cometeor, 還有一些聽上去像是日語的東西, …“

”Hi,“ 小 printf 打斷了他,”請問你在做什麼呢?“

”alchemist, bongodb, mochascript, walktime.js, portasql, …“這個人不停地念叨。

”請問您在做什麼呢?“小 printf 又問了一遍,這次聲音更大了一些。

”噢,我在嘗試新的框架,工具,資料庫,程式語言。“

”哇!你好像進度很快啊,效率和10個程式設計師加起來一樣高。“

”是啊,你看,這個行業的前進速度是非常快的!“他對著手機看了幾秒,然後補充說,”這兒!cardboard.io 框架推出了 3.5 版本,這個版本和 3.4 不相容,目前已經產生了 4 個 fork 了!我必須要把他們都試一遍,然後決定自己用哪個。“

”但是你學這麼多,都拿來做什麼呢?“

”我是一個提前學習主義者。如果你不保持著與時俱進的心態,現在你可能還要靠寫 COBOL 或者 MUMPS 來過日子呢。如果你想做大事情,就要確保自己站在浪潮之巔。“

”那這麼做有效果麼?“

”有啊,我在 Rails 火起來之前就知道它要火了,我在 node.js 流行起來就知道它要流行了。我參與了 Redis、Mongodb 和 Riak早期的 beta 測試!我是第一個用 Vagrant 的人,後來又切換到了Docker上面,當然現在的潮流是 Unikernel“

”酷,那麼你掌握了這麼多最前沿的技術,有什麼回報呢?“

”哦,並沒有回報,Rails 變得越來越臃腫了以後,我就必須得趕快去關注別的重要技術,保證自己不要落後。其他的各種技術差不多也是這個套路。目前我希望掌握的是 Unikernel。“

”明白了。“,小 printf 補充到,”那麼這些新框架和技術都會用來解決哪些問題呢?“

”噢,不是重大技術我們不用,我主要是要確保這一點,這樣才能讓我們公司不至於把資源花費到沒有未來的技術上。這是很重要的,因為如果你不這麼做的話,你的技術就會被那幫花白鬍子的過時老程式設計師綁架,為了避免這樣,你就必須成為一個自我驅動力強大的學習者,一個提前學習主義者。“

”真有趣。“小 printf 插了一句嘴。

”這可不是有趣,這是很難做到的!在創業的世界裡,如果你想要吸引人才,你就必須要通過優秀的技術來招攬他們!否則你就是個不靈活的落後者。沒人願意做不靈活的落後者。“

小 printf 趕緊說:”不,我不是這個意思。“,然後他補充到,”我感到有趣的地方在於,工具本來是用來給我們解決問題的,但是對於你來說,工具本身卻成了問題。“

接下來,這個人就站在他那個新潮的健身式辦公桌前,沒有任何回應了,小 printf 真希望自己趕緊出去。

第 7 章

ops

在下一個辦公室,坐著一個看上去很疲倦的員工,他的桌子上堆滿了空咖啡杯。她無精打采地坐著,憤怒地敲擊著鍵盤。

”嗨!“小 printf 說。

這個疲倦的女人並沒有停下手上的動作。他繼續憤怒地敲擊著鍵盤。

”你好?“小 printf 又打了一遍招呼。

這個女人忽然間停了下來,從抽屜裡取出一隻水壺,然後大口喝起水來。

”我的工作太糟糕了。“她說,”我是做 Devops 的。一開始還好,我大部分時間做開發,偶爾也做做除錯的事情,但是隨著時間的推移,情況變得越來越糟糕。我開始在各處救火,但是問題還是不斷髮生。我解決了其中的大部分問題,但是有些小毛病還是要期盼奇蹟發生,這才能趕得上開發計劃預定的期限,而且開發工作也是我的。“

”他們沒有再找個人幫幫你麼?“

”沒有,這就是問題的所在。小問題總是到處發生,因為我必須要解決這些問題,所以我在做開發的時候就不可能像以前只做開發時那麼專注,所以我本身就會製造更多的問題。現在,我每天都沒日沒夜地給系統滅火,我真是恨死我的工作了。“

”那你的僱主為什麼什麼都不做呢?“

”那是因為我擅長我的工作啊,我長期以來一直可以控制住局面,而且大家都已經習慣了。當你把創造奇蹟變成一種習慣的時候,人們就適應了。然後你就會被困在‘總是要創造奇蹟’的局面當中,否則人們就會認為是你的工作不得力。“

”這聽上去可真是悲哀!“

”是啊。因為你是最熟悉怎麼去給系統滅火的人,所以你就總得去,久而久之就是你的工作了,直到有一天老闆僱了新人來替代你做你心愛的工作。如果你真的很在意你的工作的話,那麼就去做那種誰都不願意乾的髒活累活,接下來所有人都會感謝你,你幹得越多人們就會越感謝你,直到所有的髒活累活全都歸你。當然,這樣的話工作就沒有什麼樂趣可言了。“

”那麼你可真不走運。“小 printf 說。

說著,她的呼叫器又響了。

”那個女人,”小 printf 對自己說,就像是他父親的口吻,“那個女人的工作被所有人輕視,專家、明星程式設計師、提前學習主義者,他們都看不上她的工作。但是她做的工作才是唯一有幫助的。這很可能是因為她總是在考慮別人,而不是隻考慮自己吧。”

第 8 章

architect

在建築的一角,小 printf 發現了一間大辦公室,辦公室有巨大的落地窗,窗外視野極好。辦公室內有一張非常大的辦公桌,桌子上的檔案堆成了小山,有一個老紳士坐在辦公桌前。

“啊,開發者來了”老紳士看到小 printf 走到門廳,於是就大聲喊到,“進來!”

透過窗戶看去,小 printf 注意到窗戶的玻璃上寫著各種各樣的字,還有用修正液塗改的痕跡,以至於窗外的風景都快被各種圈圈點點,箭頭,圓柱等幾何圖形給蓋住了,而且上面還畫了雲朵的圖案。明明窗外就有真正的雲,為什麼還要在窗戶上畫雲朵的形狀?還有整個圖案的含義也讓人很感興趣。

”這是什麼?“,小 printf 指著窗戶問。

”這個麼?這是我們的生產系統!“那個老紳士說,一副看上去對外面事物毫不關心的樣子,”我是一個軟體架構師。“

”軟體架構師是什麼?”

“多數情況下,架構師是那種最瞭解元件之間的結構,並且最能夠合理排程元件關係的人,架構師能讓大型系統的各個部分完美協調地工作。同時,軟體架構師也瞭解資料庫、程式語言、框架、編輯器、序列化格式、協議以及諸如封裝、協議隔離等概念。“

”聽上去真有趣!“小 printf 說,“終於有一個人能夠回答所有的問題了!”他看了一眼架構師的圖,“你的系統真是讓人印象深刻啊!那麼這個系統速度快麼?”

“我不知道,”架構師說,“應該挺快的吧。”

“那系統的程式碼呢?寫得好麼?”

“我也沒法告訴你”

“使用者對系統滿意麼?”

“恐怕我還是沒法告訴你。”

“但是你是軟體架構師啊!”

“對啊!但是我並不是開發者啊。軟體架構師的任務並不是去寫模組、類,也不是呼叫類庫。軟體架構師的工作相比寫程式碼來說要重要得多。軟體架構師會和開發者,程式設計師們聊天,問他們問題,給他們提供指導。如果程式設計師問的問題很有趣,那麼架構師也許會親自出馬給這個問題做規劃。”

“為什麼要這樣?”

“因為我們更有經驗啊。我們對系統能做哪些事,不能做哪些事瞭解得更多。開發者則是我們知識的延伸,他們會去把優秀的系統真正做出來。”

“但是你們不親自編碼,怎麼能確認開發過程是順利的呢?”

“因為我們信任開發人員啊。”

“所以你相信開發人員能夠正確實現你的想法,並且不會產生他們自己的想法?”

軟體架構師聽了小 printf 的話後明顯有些震驚,他說:”我想我還是有點兒脫節。“,他最後承認說,“問題確實存在,別人總是跟你說要按照某種思想或者主意去做事,但是你又沒法有效驗證你做的事情是不是真的符合這種思想。”他低下了頭,沉思著,“有的時候軟體架構師既不做軟體,也不做架構,這貌似是真的。”

接著,小 printf 離開了坊間,然後結束了他的訪問,離開了大樓。

第 9 章

charity

小 printf 剛一走出門,就碰到了一個男人正在路邊募集善款。

“Hi,”那個男人說,“你今天想不想給別人獻點兒愛心呢?”

”好吧,這樣做我感覺可能會好點兒“,小 printf 回答說,”我已經在這棟大樓裡待了一整天,可是我出來的時候感覺更加困惑了。“

”啊,我明白了。這些人都是開發者。他們其實一點兒也幫不上忙,對不?他們總是喊著要改變世界,而且他們確實也做到了。“

”但是為什麼感覺這麼奇怪呢?“小 printf 回答到。

”好吧,因為他們的工作就是把人們的職業轉換成程式,讓人們安逸的生活變得更加安逸。軟體會吞噬整個世界,然後給讓世介面貌一新……不過從深層次來看,面貌一新的世界還是那個舊世界,只是面貌變了而已。之所你覺得奇怪,是因為世界的改變並不一定朝好的方向改變。我們現在面臨的問題其實和以前一樣多,需要填的坑也和以前一樣深。“

”那麼我怎麼才能讓自己感覺好一點兒呢?”小 printf 顯得有些焦慮。

這個男人思考了一會兒,然後希望小 printf 能和他一起來幫助別人,這是他認為的能讓自己感覺變好的方式。printf用了一整個下午告訴這個人自己的問題和經歷。這個人聽完了以後沉默了很長一段時間,然後說:

“人們在社會中相互博弈,扮演不同角色,追逐和享受的名聲,解決錯綜複雜的問題後得到瞬間的快感,這些都只是過眼雲煙。最終,如果你沒有解決什麼有意義的問題,如果你完全不考慮別人,那麼你是無法做到內心滿足的。”

“得不到內心的滿足也許也沒什麼,也許會很糟糕,在你成長的過程中,你的滿足感可能來自於你的工作之外,也可能來自於工作。工作可以僅僅就是工作,也可以是單純為了錢,也可以為了興趣。這些都OK。只要你能從生命中的某處找到內心的滿足,那就好了。”

“最後,只有當你以人類的面孔去解決問題的時候,你才會覺得真的正確;真正關鍵的點其實和電腦沒關係。”

“真正的關鍵在於你用心花在系統上的精力,這才是最重要的。“,那個人補充到,”如果你忘記了為什麼花這麼多精力的初衷,當一切都變成了關乎個人驕傲的遊戲,那麼事情的性質就變了,從可慰變成可悲。“

”開發者們常常會忘記一個事實;如果你失去了對事物的眼光,那麼在開發系統本身就成為了一個問題,這樣的話最有效的辦法就是把系統廢掉,因為系統自己就是問題的根源。“

”只有當你以人類的面孔去解決問題的時候,才會覺得真的正確。“,小 printf 不斷重複著這句話,他銘記在心。

第 10 章

printf

坐在我身旁的Printf現在要起身回家了。跟他的一席對話讓我意識到了我現在所做的事情和我的愛好有多麼大的距離,而我的愛好才是我真正開始程式設計的動力。小 printf 遇到的每一個角色,我每天也都會遇到很多。我曾受到他們的鼓舞,希望成為他們的一員,我可能也鼓勵過別人這麼做。

當我還在掙扎著成為一個真正的程式設計師的時候,小 printf 卻沒有這麼做。他說他成不了一個真正的程式設計師也沒關係,他更希望能成為一個長著人類面孔的程式設計師。

時至今日,回首望去,我的困境並沒有改變,我還是要在人類的面孔和純粹的工作之間做出選擇,我希望我能有這個能力。而且在這兩者之間好像也沒有什麼中間地段可以讓我去選擇。

無論如何,小 printf 覺得他不需要做一個真正的程式設計師了,我想我和他的感覺是一樣的。

打賞支援我翻譯更多好文章,謝謝!

打賞譯者

打賞支援我翻譯更多好文章,謝謝!

小王子之程式設計師版

相關文章