首頁 » 新聞 » 一個平庸工程師的自白

一個平庸工程師的自白

一個平庸工程師的自白
photovia Peter Hess

(本文作者為中國工程師 zhuoqun)

Jacob Kaplan-Moss 是著名 Python 框架 Django 的 Co-Creater 和核心開發者,在Heroku 擔任安全部門的 Director, 他常年參加 Python 社區的年度聚會 PyCon ,並經常上台演講。在這次PyCon 2015 上,他聲稱自己頂多只是一個平庸的工程師,幻燈片上也寫著:

廣告-請繼續往下閱讀

Hi, I’m Jacob, and I’m a mediocre programmer.

這次演講非常精彩,影片可以在 Youtube 上看到。Jacob 以馬拉松為例,試圖說明大部分人在大部分領域都是平庸的(Mostpeople are average at mostthings.),特別好的和特別壞的都是極少數,但在工程師領域,我們聽到的大都是某某工程師 rocks 或者 sucks,基本沒有中間狀態,這是一件非常奇怪的事情。他還提到「真正的工程師」(real programmer)這個概念,也就是所謂的「10xprogrammer」 ,你只有精通某些原理或者長得像 Mark Zuckerberg 才算是一個 real programmer,而一個使用各種雲端服務以及 API 快速搭建自己應用的人就不算,這非常可笑。順帶一提,Jacob 的 Twitter個人簡介就是「not a real programmer.」

廣告-請繼續往下閱讀

Jacob認為這種關於「程式天才」的神話非常有害,一方面它把行業門檻設置得特別高,令很多人望而卻步,另一方面它也在折磨產業內的人,因為你如果不能rocks ,就會變成 sucks,所以不得不用一切時間來努力學習和工作,導致影響生活。他認為我們應該改變這種態度,寫程式只是一些技能,並不需要太多天分,它是可以學習的,而且做一個平庸的工程師不丟人,「it’scool to be okay at theseskills」。跑步的人有很多種——短跑運動員,純粹為了鍛煉身體的人,參加馬拉松的人,等等。為什麼寫程式就一定要做 realprogrammer ,而且做不到就覺得自己不配寫程式呢?

這個演講在大會現場贏得很多掌聲,在提問環節也可以聽到一些怯生生的聲音說:「我也是一個平庸的工程師。」不過在其它地方也引起一些爭議,有人認為拿跑步和寫程式對比並不恰當,有人說工程師能力的差距確實大得驚人,有興趣的人可以去看 HackerNews 上的討論。

對於我個人來說,Jacob的演講觸動了我多年來的心結,讓我非常感動。我一直認為自己頂多只是一個平庸的工程師,而且無論多麼努力學習,總覺得自己不是一個 realprogrammer ,而且好像越走越偏。Jacob的演講讓我明白,有此苦惱的大概不只我一人,所以這裡寫一下自己的心路歷程,希望對別人有一些啟發。

公開承認自己平庸是一件危險的事情,如果不能說明你智商低或者沒有天分,至少說明你態度有問題:「平庸就應該去努力練習,而不是寫文章為平庸辯解」。而當你說Jacob 這樣的人也承認自己平庸時,就會出現一堆帶有「資格論」的反駁:「Jacob至少寫了那麼多程式,你怎麼能和別人比」「人家那樣說是謙虛,你這樣就是無恥了」,頓時你就會覺得自己和那些只會從偉大人物身上挑毛病的小人沒什麼兩樣。幸運的是,今後我很可能不會以寫程式為業了,所以這些事情都無所謂了,可以誠懇地說一下自己的經歷。

我對 real programmer的印象始於大學,儘管對於其它專業的人來說我們和修電腦的沒什麼兩樣,但專業內部已經隱約有對某種高級事物的崇拜,記得大一時一個同學對我說:「我們現在還學C,外面早就開始用 Java了」。那個時候專業內也已經流傳了不少工程師的傳說,比如某個學長多麼厲害,或者微軟某個工程師一個人做完了一個專案組的工作。相信很多人都聽說過那個故事,大意是一個人電腦壞了,於是找一個電腦高手來修,電腦高手拿來電話,連上電腦,花了整整一夜的時間用0 和 1寫了一個操作系統,故事的結局是「這個電腦高手去了美國,杳無音信」。當時我聽到這個故事的時候半信半疑,居然寧願相信它是真的!因為如果萬一它是真的而我不相信,只能說明我的技術水準或者智商無法理解那個層次的東西,那就太糟糕了。那個時候真的很想變得厲害。

隨著對專業的了解,很快我們就開始嘲笑那種「Java 比 C 新,所以比 C 好」的看法,轉而去相信「越底層越強」的論調,寫 C的比寫 Web 的厲害,寫彙編的又比寫 C的厲害,為什麼呢?因為他們「基礎更紮實,更了解原理。」這種論調發展到一個極致就是:學數學或者物理這種「硬科學」的人如果轉行寫程式,肯定比我們厲害。他們演演算法一定比我們好,而且就是這幫家發明的計算機啊我靠。有一段時間隱約覺的別的專業的轉行寫程式都會比我厲害,哪怕是一個鋼琴家——因為他手指靈活打字更快。

大學裡另外一個讓我印像極其深刻的傳說就是:高手寫程式不用 IDE,都是直接記事本。高手摘花飛葉皆可傷人,談武器和工具,那就是落了下乘,只有不入流的才整天研究哪個工具更有效率。所以在很長一段時間內我都因為自己沒用記事本寫程式而懷疑自己的能力,直到後來工作之後我接觸到了Vim,發現它長得和記事本還真的挺像的。

除此之外,還有對經典書籍的頂禮膜拜,MIT 的 Introduction to Algorithms 和 SICP ,Knuth的 The Art of Computer Programming ,TCP/IP詳解,以及一些其它的經典操作系統、數據庫等方面的書。不啃完這些就說明你天分不夠,或者沒有熱情,還是趁早轉行比較好。在我一直很喜歡(現在依然喜歡並推薦)的一篇文章Teach Yourself Programming in Ten Years 中,作者在結尾推薦了 SICP ,他說:「Thebook is challenging and will weed out some people who perhaps couldbe successful with anotherapproach.」所以儘管我一直沒有讀完這本書,而且應該也不會去讀了,但對它總有一種情結,以至於兩年前出國的時候還把它帶在身邊。

畢業之後開始做職業工程師,每天都是和工程師打交道,關注的也都是科技新聞,那時候矽谷文化也越來越流行,所以更加嚮往和崇拜 realprogrammer 。Joel Spolsky 寫過一篇《飆高音》,其中的兩段可以算作是對 real programmer的最佳詮釋:

用許多平庸的工程師取代少數優秀的工程師,這種做法的真正問題在於,不管平庸的工程師工作多長時間,他們做出來的東西,都無法像優秀工程師做得那樣好。

……

一流的歌唱演員不管在什麼時候,都可以很輕鬆地唱出高音,而平庸的歌唱演員就是永遠做不到這一點。莫扎特的歌劇《魔笛》中有一段著名的詠嘆調」Queenof the Night」,音高必須達到F6(女高音的最高音高)才能唱好這首歌,世界上能達到這個標準的女高音都快要絕跡了,而飆不到著名的 F6,你就是不能表演「Queenof the Night」。

簡單地說,如果你缺乏天賦,那麼你再努力,也做不到 real programmer可以做到的事情,而一個平庸的工程師就是一個爛工程師。這種斷言式的文章一直比較能鼓舞人心,那些認為自己比較聰明的人也很喜歡這種說法,但對於我這種一直懷疑自己智商和能力的人來說,它就像一個陰影:萬一我真的沒辦法飆高音怎麼辦?

因為這種對 real programmer 的仰視,從工作以來,不對,是從大學以來,有一個想法一直揮之不去,那就是:Idon’t deserve it.

大學裡我也有作品拿過獎,但總覺得自己的程式是一坨屎,不配拿那個獎,如果當時有另外一個 real programmer,肯定輪不到我。

大四找工作的時候,儘管我是通過正規的筆試和面試拿到的 offer,而且被錄用的只有我一個本科生,我還是覺得自己不配得到那份工作,因為沒寫過 10 萬行程式,也不是一個 realprogrammer。

剛工作的時候我每天從早晨 9 點到晚上 9點都在公司,有時候週末也去,手頭工作做完了就看技術文件,無聊了就用打字軟體練習正確的指法,以便寫程式可以快些。即便這樣,我還是懷疑自己對寫程式的熱情,覺得自己離一個real programmer 越來越遠,不適合做工程師。

後來去 Yahoo 面試,從早晨 8 點面試到 12點,第二天又跑去美國的同事影片面試。測試其實已經很嚴格了,而且我平時沒有針對性地練習題目或做其它應試準備,但很奇怪,我還是覺得自己能力不行,只是僥倖拿到了offer。

平時幫別人寫程式,或者和別的部門合作,第一個念頭就是自己的能力不行。儘管最後專案順利完成,對方也對我評價不錯,但我還是覺得自己不配得到那些誇獎,甚至想:如果他們見到real programmer ,就不會稱讚我的工作了。

這種心理還有另外一個負面作用,那就是時時刻刻焦慮,害怕落後。Jacob 在演講中也說到:

If the only options are to be amazing or terrible, it leadspeople to believe they must be passionate about their career, thatthey must think about programming every waking moment of theirlife. If they take their eye off the ball even for a minute, theywill slide right from amazing to terrible again. That leads peopleto be working crazy hours at work, to be constantly studyingprogramming topics on their own time, and so on.

這段話準確地說出了我以前的某種狀態。我對除了寫程式之外的很多事情都有興趣,從生活的角度來看,這其實是一件好事,但我卻常常因此有罪惡感,因為它們耽誤了我寫程式、看文檔和學習新技術的時間。那些事情本來是可以帶給我快樂的,但每次做好像都有一種偷偷摸摸的感覺,被別人問到也羞於提起。現在回頭看,之前有段時間我的工作和生活其實平衡得很好,但當時我只有不斷告訴自己「你本來就平庸」,甚至把自己想像成一個自甘墮落的人才能安心享受,實在太扭曲了。

以前我有時還喜歡寫點東西,認為自己是在分享,但後來總覺的自己又不是 real programmer,分享的東西有什麼價值呢?而且寫文章會耽誤寫程式的時間,工程師文化又特別推崇「務實」,反對「務虛」——寫作就是「務虛」,「只會打嘴炮」在工程師群體裡面是一個非常嚴重的侮辱,記得之前看到過一條招募訊息,明確地說「不歡迎經常寫部落格的人」。事實上寫作不止是表達,它反過來還可以幫助思考,很多想法在下筆之前是不存在的,我從中獲益良多。而且,「不願意表達」和「不會表達」有著本質的區別。以前如果一個猥瑣不堪、一句話都說不清楚的人過來朝我扔一句「Talkis cheap. Show me the code.」,我立刻就會慚愧不已,甚至認為他或許就是一個 realprogrammer.

以上種種不安和困擾,讓我常常覺得自己從性格到業餘愛好都不適合做工程師。工程師文化告訴我的是:如果你不是一個 realprogrammer 或者不在成長為一個 real programmer 的路上,那麼你連一個 programmer都不是。Hacker News 上針對 Jacob 演講的討論中,panjaro 說了他自己的經歷:

I’m an example how this myth can destroy you. I was programmingfor 6 years in normal projects and I thought I was not talented. Ileft job, came to research degree. Now I realized I’m terrible atmaths and advanced algorithm techniques. I think about going backbut since it has been 3 months I haven’t worked in a company, Ifeel I am a very bad programmer and no one will hire me. I’mdepressed and paralyzed. All I do all day is look into HN and readarticles, think how all these people are talented and I’m sodumb.

他的描述讓我感同身受,當初我也痛恨自己對數學不感興趣,整天在自習室苦苦複習離散數學和演演算法,工作之後也常常想要重新回頭學習這些「基礎知識」。有時候即使你發現在某些工作中演演演算法並不像傳說中那麼重要,也不能說出來,否則你就是忽視基礎,或者你從事的就是工程師當中的低級工作,以至於體會不到演演演算法的重要性。

工程師文化當中「能力決定一切」的態度很多時候都值得商榷,因為除了極少數的電腦科學家,大部分工程師從事的是產品開發工作,而在產品開發中是沒辦法用一個簡單的標準衡量一個工程師的能力的。一個人可能寫程式能力很強,但他可能執意要實現自己的想法,以至於拖累整個專案。另外,寫程式能力強的人不一定能從事某些「低級的」、不需要太多智力的工作,那樣的工作可能需要大量的耐心,而耐心和傳說中的天賦一樣,也不是一種人盡可夫的品質。以前看到過一個招募訊息很有意思,裡面說希望應聘者「已經結婚,或者至少有過一段長期的戀愛關係」,他們覺得這樣的人懂得與別人相處,不太容易是一個鄙視別人工作的jerk .

我並不是否認神人的存在,Linus 和 John Carmack 就不用說了,剛畢業在中國 Yahoo的時候就遇見過一位神人同事,清華畢業,基督徒,已婚,業餘時間喜歡寫程式和做飯,經常一個人做完整個團隊的工作,打字奇快,每次技術分享都有很多人去聽,甚至HR 都因為好奇過去。聽眾提問的時候,他能清楚講解某個不常用命令的某個參數的作用,簡直就是活的 user manual。他非常樂於助人,經常看到他在 mail list裡面回答別人問題,從問題的成因分析到解決方案都一一給出,表達非常清晰。讓我比較驚訝的是他對很多瑣碎的事情也極有耐心,記得公司想要一些人申請專利,週末就看到他在那裡專心寫申請。另外一個和我比較要好的同事本來覺得自己還算有天分,比我厲害得多,在大學裡真的寫過10萬行程式,但見過神人之後立刻發現自己其實沒天分。那個時候他女朋友在外地,他業餘時間也就是看看電影寫寫程式,不想寫的時候就打開神人的Github 看看,一般都會發現他又有新的 commit ,然後就有動力繼續寫了。

問題在於並不是所有人都是神人,整個行業需要的也不止是神人。舉個例子,很多寫 PHP 的大概看不起那種「Wordpress工程師」,就是只懂 WordPress 而對 PHP 了解不夠深入的人。但很多公司確實就需要做一個小網站,只需要你能開發WordPress Theme 就夠了,不需要研究更多東西。幫別人開發 WordPress Theme完全可以謀生,甚至掙得不少,但他們大概自己也覺得自己不是 real programmer,所以很少發聲。前一段時間有個應用程式很火,但他們團隊的文章開頭就說「我們團隊中沒有神人」,好像那是很丟人的事情,一定要神人組成的團隊才配開發出好東西?如果拋開其它不談,「一個人憑藉自己的能力養活自己,他就應該得到尊重」,這話聽起來沒有任何問題,只是一旦牽扯到程式,好像只研究WordPress 的工程師就不能見人。

很多公司也迷信只有大神工程師才能做事,所以在招募的時候會說他們只招募 Top 1% 的工程師,這其實根本不可能,JoelSpolsky 早就寫文章談過。你不可能招募到 Top 1% ,只可能招募到應聘者中的 Top 1%.我們可以想像一下,最厲害的人可能直接去了 Facebook、Google或者矽谷的創業公司,差一點的可能選擇百度騰訊等中國國內巨頭,或者非常有前景的創業公司,剩下的人才是市場中的人,這裡面的 Top 1%已經不是全部人中的 Top 1%了。所以看到這種招募可以評估一下這個公司,如果不是特別強,完全可以大膽去應徵,因為你在那些願意應聘這個公司的人當中,可能已經是 Top1% 了。

其實我非常喜歡這個行業的某些理想主義色彩,過去這幾年也認識了不少朋友,發現了不少 thinker,對我啟發很大。可惜我常常感到不舒服,也覺得和這種工程師文化或者 Geek文化格格不入,雖然很努力去嘗試過,但發現還是不行。當然,也可能並不是文化問題,而是因為像我和 panjaro這樣的人膽小浮躁,太在乎別人看法,容易焦慮和抑鬱,這樣的人大概在任何行業都是 loser 。希望其他人可以活得理直氣壯一點。

過去常常希望找到人生目標,而當懷疑自己不是 real programmer的時候又慶幸生活是一團亂麻,而人生可能並沒有意義,不然的話,可能每時每刻都要生活在一條「鄙視鏈」當中了。

廣告

看看這個吧

這個警察本想呼叫同仁閃避,下一秒他竟然「被車撞」…最後往生!「這畫面」讓所有人暴哭!

>>每日更新50片,高清108 ...

出租房竟飄出「異味」,沒想到一開門整張床「滿滿的都是這個」…房東嚇到去收驚!

>>每日更新50片,高清108 ...