我是一個垃圾程式設計師

風林火山發表於2013-08-01

最近要開發Android的binder的東西,在將Android的原始碼開了之後,準備設計自己的一套公司相關業務的協議棧.但是在設計架構的時候總是卡殼,三天過去了任務還停留在張破爛的紙上,這張紙已經被拿髒的髒兮兮.唉,明天都週五了.內心的深處很亂,正在此時收到了推薦郵件,看到了下面的文章,很有感觸,徒加了不少傷感緬懷之情:


我是一個垃圾程式園


  在過去的4個月裡,我深刻地反思了我自己。就在7個月前,我還在從事一份雖不是十分討厭,但卻也感覺不到任何快樂的工作。我還不能確切地描述為什麼我會有這樣的感覺,直到我的一個朋友再次找到我,說有一份工作雖然乾的活一樣,但有機會參與開源軟體專案開發,然後我就跳槽了。這一切讓我知道了:

  我是一個垃圾程式設計師。

  3個月後我選擇離開了這家公司。當時我籤的是臨時合同,在還沒有完全投入工作前,卻先感受到了公司內部的派系鬥爭之風。這份工作,我沒感覺到任何快樂,但也沒有特別的不開心。只是我還沒找到一些特別具有挑戰性的,並能引起我興趣的事情。所以我決定先休息一段時間,總結下人生。

  為了不至於影響家庭的收入,我仔細地安排了休假計劃。在償還完銀行賬單後,剩餘的錢可足夠保證我4到5個月不上班都沒問題。做了張現金開銷和預算表之後,我決定先休假2個月,然後用1個月的時間進行面試,最後第4個月作為緩衝期,以防萬一面試的時間超出了我的預期。

  現在我真的在緩衝期裡了。到目前為止,我已經面試了近10家公司,卻沒有一家公司考慮錄用我。甚至在多數公司中,我都沒有通過技術面試。我是一個程式設計師,並且一直以來我都自我感覺良好,覺得我是一個還不錯的程式設計師。但是在這樣一個通過海選進行招聘的行業裡,我發現很難再認為自己是一個優秀的程式設計師了。

  我的一些好友和同事,我認為他們中的大多數都比我更有經驗並且IQ比我高。當我向他們描述我的憂慮狀況時,得到的反饋可總結為“理想很豐滿,現實很骨感”。在上一份工作中,同事們熟悉我的做事方式,與我一起工作都很愉快。並且覺得我的工作背景、敬業程度和技術能力都非常不錯。所以不能說我是一個沒能力的程式設計師,只是我還不善於在面試中表現自己。

  但如果說只有少數幾個公司拒絕了我,我還能信他們。可是截止到目前我是顆粒無收,並且僅有兩次我成功地通過了第一輪的技術面試。如果我已經手握一到兩個OFFER,我還能承認我的能力,但你能說所有公司都犯了同樣的錯,一致地忽略了我這個雖然面試表現不好但卻很優秀的程式設計師?換句話說,難道有那種可能,像我這樣的垃圾程式設計師總是能從勝任工作的人的手中搶到職位?

  從以往的歷史來看,我應該不是那種光說不練的人。基本每天開始工作前,我都會練習寫一些程式碼。同時僅是基於樂趣,我會使用一些奇特的程式語言來解決一些經典的場景。時常我也會向開源社群做些貢獻。有時我甚至會去嘗試與他人攀談,學習如何在交談中儘量的展現我自己。到後來我發現,像與人交往這種曾對我最具挑戰的事也不是那麼困難了。這段故事告訴了我,除非你去嘗試,否則你不知道自己到底能不能做到。

  問題是還沒等我做成什麼,我就已經崩潰了。這個月我還能付得起房租和信用卡,但是我還沒拿到任何OFFER,下個月估計就得欠債度日了。我甚至不得不考慮從現在的公寓搬家到那種老舊的筒子樓裡。但更重要的是,看起來我好像已經沒有能力繼續在這個行業工作了,並且恐怕我也不知道除了寫程式我還能幹什麼。

  那麼,到底一個垃圾程式設計師是什麼樣?

  我書架上塞滿了各種經典圖書:《SICP:計算機程式的構造和解釋》、《Lisp程式設計》、《TAOCP:計算機程式設計藝術》、《C專家程式設計》、《Effective C++》和一些演算法、分散式計算、安全、圖形、數學等各種教科書,並且大部分我都已經讀過了(TAOCP這本我還在不斷的研磨)。我也經常讀一些ACM、IEEE上的文章和博士論文。如果僅從我的閱讀列表來判斷,你可能認為我是科班出身,但實際上,我只是喜歡程式設計,並且想盡我所能來掌握更多的知識。

  我為很多開源軟體專案做過貢獻,程式語言涵蓋C++、Perl、Python等,甚至還用過一些類Lisp語言。這些專案中,有些我曾使用過但缺少一些功能,有些是新的專案需要解決BUG或增加功能,有些則是我發現是我需要的類庫或程式。

  我一直在用心地不斷提高我的能力。前面我提到了以前我會寫一些練習程式碼。在我工作過的部門裡我會推崇自動化測試。我讀過大量的書籍、論文和技術文章,同時我也會寫一些文章來嘗試著幫助他人。

  我非常的喜歡數學。在讀完資訊理論,弄清夏農熵後,我又開始深入研究序理論。我真的很喜歡Joint-Semi-Lattices、集合論、關係代數、Sentential-Database。一些內容現在我已經記不清了,比如我知道對於每種遞迴的形式都有一個迭代的方法,如果我需要詳細瞭解我可以迅速的查閱雜誌或教科書。

  儘管如此,我還是在編寫一個要求判斷是否序列A是序列B的子集並返布林值的函式時出現了失誤。當被問及我剛編寫的函式的的複雜度時我還是記不起來了(擦,顯然列表排列的複雜度為N方,但當時就像對我能否回想起這些細節的審問一樣,頭腦一片空白)。我的每一絲信心都已經被這些錯誤、失誤和拒絕一點一點地打敗了。

  到最後,我發現我越來越沮喪、絕望,並十分害怕自己會讓家人失望。以後我的女兒會問我我是做什麼的,我可能不直接地回答她,或者告訴她我是給電腦寫程式的,然後趕緊迴避開女兒進一步的追問。等她長大了我也儘量避免告訴她,為了混上飯吃我可能什麼都做。我從來沒有成功過,甚至也沒有做過什麼讓自己值得驕傲的事兒。我只是盡我所能,即使整個世界都覺得我不夠好。

  我是一個垃圾程式設計師,這就是我的人生。


原文的翻譯應該是eoe的一個斑竹賈小俊


相關文章