一个平庸程序员的自白
文 / zhuoqun
Jacob Kaplan-Moss是著名 Python 框架 Django 的 Co-Creater 和核心開發者,在 Heroku 擔任安全部門的 Director, 他常年參加 Python 社區的年度聚會 PyCon ,并經常上臺演講。在這次 PyCon 2015 上,他聲稱自己頂多只是一個平庸的程序員,幻燈片上也寫著:
?
復制代碼
這次演講非常精彩,視頻可以在 Youtube 上看到(如果不想看視頻,這里也有一篇文字總結。Jacob 以馬拉松為例,試圖說明大部分人在大部分領域都是平庸的(Most people are average at most things.),特別好的和特別壞的都是極少數,但在程序員領域,我們聽到的大都是某某程序員 rocks 或者 sucks ,基本沒有中間狀態,這是一件非常奇怪的事情。他還提到“真正的程序員”(real programmer)這個概念,也就是所謂的 "10x programmer" ,你只有精通某些原理或者長得像 Mark Zarkerberg 才算是一個 real programmer ,而一個使用各種云服務以及 API 快速搭建自己應用的人就不算,這非常可笑。順帶一提,Jacob 的 Twitter 個人簡介就是 "not a real programmer. "
Jacob 認為這種關于“編程天才”的神話非常有害,一方面它把行業門檻設置得特別高,令很多人望而卻步,另一方面它也在折磨行業內的人,因為你如果不能 rocks ,就會變成 sucks ,所以不得不用一切時間來努力學習和工作,導致影響生活。他認為我們應該改變這種態度,編程只是一些技能,并不需要太多天分,它是可以學習的,而且做一個平庸的程序員不丟人,"it's cool to be okay at these skills"。跑步的人有很多種——短跑運動員,純粹為了鍛煉身體的人,參加馬拉松的人,等等。為什么編程就一定要做 real programmer ,而且做不到就覺得自己不配編程呢?
這個演講在大會現場贏得很多掌聲,在提問環節也可以聽到一些怯生生的聲音說:“我也是一個平庸的程序員。” 不過在其它地方也引起一些爭議,有人認為拿跑步和編程對比并不恰當,有人說程序員能力的差距確實大得驚人,有興趣的人可以去看 Hacker News 上的討論。
對于我個人來說,Jacob 的演講觸動了我多年來的心結,讓我非常感動。我一直認為自己頂多只是一個平庸的程序員,而且無論多么努力學習,總覺得自己不是一個 real programmer ,而且好像越走越偏。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 ,他說:"The book is challenging and will weed out some people who perhaps could be successful with another approach." 所以盡管我一直沒有讀完這本書,而且應該也不會去讀了,但對它總有一種情結,以至于兩年前出國的時候還把它帶在身邊。
畢業之后開始做職業程序員,每天都是和程序員打交道,關注的也都是科技新聞,那時候硅谷文化也越來越流行,所以更加向往和崇拜 real programmer 。Joel Spolsky 寫過一篇《飆高音》,其中的兩段可以算作是對 real programmer 的最佳詮釋:
用許多平庸的程序員取代少數優秀的程序員,這種做法的真正問題在于,不管平庸的程序員工作多長時間,他們做出來的東西,都無法像優秀程序員做得那樣好。
一流的歌唱演員不管在什么時候,都可以很輕松地唱出高音,而平庸的歌唱演員就是永遠做不到這一點。莫扎特的歌劇《魔笛》中有一段著名的詠嘆調"Queen of the Night",音高必須達到F6(女高音的最高音高)才能唱好這首歌,世界上能達到這個標準的女高音都快要絕跡了,而飆不到著名的F6,你就是不能表演"Queen of the Night"。
簡單地說,如果你缺乏天賦,那么你再努力,也做不到 real programmer 可以做到的事情,而一個平庸的程序員就是一個爛程序員。這種斷言式的文章一直比較能鼓舞人心,那些認為自己比較聰明的人也很喜歡這種說法,但對于我這種一直懷疑自己智商和能力的人來說,它就像一個陰影:萬一我真的沒辦法飆高音怎么辦?
因為這種對 real programmer 的仰視,從工作以來,不對,是從大學以來,有一個想法一直揮之不去,那就是:I don't deserve it.
大學里我也有作品拿過獎,但總覺得自己的代碼是一坨屎,不配拿那個獎,如果當時有另外一個 real programmer ,肯定輪不到我。
大四找工作的時候,盡管我是通過正規的筆試和面試拿到的 offer ,而且被錄用的只有我一個本科生,我還是覺得自己不配得到那份工作,因為沒寫過 10 萬行代碼,也不是一個 real programmer.
剛工作的時候我每天從早晨 9 點到晚上 9 點都在公司,有時候周末也去,手頭工作做完了就看技術文檔,無聊了就用打字軟件練習正確的指法,以便編程可以快些。即便這樣,我還是懷疑自己對編程的熱情,覺得自己離一個 real programmer 越來越遠,不適合做程序員。
后來去雅虎北研面試,從早晨 8 點面試到 12 點,第二天又跑去美國的同事視頻面試。測試其實已經很嚴格了,而且我平時沒有針對性地刷題或做其它應試準備,但很奇怪,我還是覺得自己能力不行,只是僥幸拿到了 offer.
平時幫別人寫代碼,或者和別的部門合作,第一個念頭就是自己的能力不行。盡管最后項目順利完成,對方也對我評價不錯,但我還是覺得自己不配得到那些夸獎,甚至想:如果他們見到 real programmer ,就不會稱贊我的工作了。
這種心理還有另外一個負面作用,那就是時時刻刻焦慮,害怕掉隊。Jacob 在演講中也說到:
?
復制代碼
這段話準確地說出了我以前的某種狀態。我對除了編程之外的很多事情都有興趣,從生活的角度來看,這其實是一件好事,但我卻常常因此有負罪感,因為它們耽誤了我編程、看文檔和學習新技術的時間。那些事情本來是可以帶給我快樂的,但每次做好像都有一種偷偷摸摸的感覺,被別人問到也羞于提起。現在回頭看,之前有段時間我的工作和生活其實平衡得很好,但當時我只有不斷告訴自己“你本來就平庸”,甚至把自己想象成一個自甘墮落的人才能安心享受,實在太扭曲了。
?
以前我有時還喜歡寫點東西,認為自己是在分享,但后來總覺的自己又不是 real programmer ,分享的東西有什么價值呢?而且寫文章會耽誤編程的時間,程序員文化又特別推崇“務實”,反對“務虛”——寫作就是“務虛”,“只會打嘴炮”在程序員群體里面是一個非常嚴重的侮辱,記得之前看到過一條招聘信息,明確地說“不歡迎經常寫博客的人”。事實上寫作不止是表達,它反過來還可以幫助思考,很多想法在下筆之前是不存在的,我從中獲益良多。而且,“不愿意表達”和“不會表達”有著本質的區別。以前如果一個猥瑣不堪、一句話都說不清楚的人過來朝我扔一句"Talk is cheap. Show me the code.",我立刻就會慚愧不已,甚至認為他或許就是一個 real programmer.
以上種種不安和困擾,讓我常常覺得自己從性格到業余愛好都不適合做程序員。程序員文化告訴我的是:如果你不是一個 real programmer 或者不在成長為一個 real programmer 的路上,那么你連一個 programmer 都不是。Hacker News 上針對 Jacob 演講的討論中,panjaro 說了他自己的經歷:
?
復制代碼
他的描述讓我感同身受,當初我也痛恨自己對數學不感興趣,整天在自習室苦苦復習離散數學和算法,工作之后也常常想要重新回頭學習這些“基礎知識”。有時候即使你發現在某些工作中算法并不像傳說中那么重要,也不能說出來,否則你就是忽視基礎,或者你從事的就是程序員當中的低級工作,以至于體會不到算法的重要性。
程序員文化當中“能力決定一切”的態度很多時候都值得商榷,因為除了極少數的計算機科學家,大部分程序員從事的是產品開發工作,而在產品開發中是沒辦法用一個簡單的標準衡量一個程序員的能力的。一個人可能編程能力很強,但他可能執意要實現自己的想法,以至于拖累整個項目。另外,編程能力強的人不一定能從事某些“低級的”、不需要太多智力的工作,那樣的工作可能需要大量的耐心,而耐心和傳說中的天賦一樣,也不是一種人盡可夫的品質。以前看到過一個招聘信息很有意思,里面說希望應聘者“已經結婚,或者至少有過一段長期的戀愛關系”,他們覺得這樣的人懂得與別人相處,不太容易是一個鄙視別人工作的 jerk.
我并不是否認大牛的存在,Linus 和 John Carmack 就不用說了,剛畢業在中國雅虎的時候就遇見過一位大牛同事,清華畢業,基督徒,已婚,業余時間喜歡編程和做飯,經常一個人做完整個團隊的工作,打字奇快,每次技術分享都有很多人去聽,甚至 HR 都因為好奇過去。聽眾提問的時候,他能清楚講解某個不常用命令的某個參數的作用,簡直就是活的 user manual 。他非常樂于助人,經常看到他在 mail list 里面回答別人問題,從問題的成因分析到解決方案都一一給出,表達非常清晰。讓我比較驚訝的是他對很多瑣碎的事情也極有耐心,記得公司想要一些人申請專利,周末就看到他在那里專心寫申請。另外一個和我比較要好的同事本來覺得自己還算有天分,比我厲害得多,在大學里真的寫過 10 萬行代碼,但見過大牛之后立刻發現自己其實沒天分。那個時候他女朋友在外地,他業余時間也就是看看電影寫寫代碼,不想寫的時候就打開大牛的 Github 看看,一般都會發現他又有新的 commit ,然后就有動力繼續寫了。
問題在于并不是所有人都是大牛,整個行業需要的也不止是大牛。舉個例子,很多寫 PHP 的大概看不起那種 “Wordpress 工程師”,就是只懂 Wordpress 而對 PHP 了解不夠深入的人。但很多公司確實就需要做一個小網站,只需要你能開發 Wordpress Theme 就夠了,不需要研究更多東西。幫別人開發 Wordpress Theme 完全可以謀生,甚至掙得不少,但他們大概自己也覺得自己不是 real programmer ,所以很少發聲。前一段時間有個應用很火,但他們團隊的文章開頭就說“我們團隊中沒有大牛”,好像那是很丟人的事情,一定要大牛組成的團隊才配開發出好東西?如果拋開其它不談,“一個人憑借自己的能力養活自己,他就應該得到尊重”,這話聽起來沒有任何問題,只是一旦牽扯到代碼,好像只研究 Wordpress 的工程師就不能見人。
很多公司也迷信只有大神程序員才能做事,所以在招聘的時候會說他們只招聘 Top 1% 的程序員,這其實根本不可能,Joel Spolsky 早就寫文章談過。你不可能招聘到 Top 1% ,只可能招聘到應聘者中的 Top 1%. 我們可以想象一下,最厲害的人可能直接去了 Facebook, Google 或者硅谷的創業公司,差一點的可能選擇百度騰訊等國內巨頭,或者非常有前景的創業公司,剩下的人才是市場中的人,這里面的 Top 1% 已經不是全部人中的 Top 1% 了。所以看到這種招聘可以評估一下這個公司,如果不是特別牛,完全可以大膽去應聘,因為你在那些愿意應聘這個公司的人當中,可能已經是 Top 1% 了。
其實我非常喜歡這個行業的某些理想主義色彩,過去這幾年也認識了不少朋友,發現了不少 thinker ,對我啟發很大。可惜我常常感到不舒服,也覺得和這種程序員文化或者 Geek 文化格格不入,雖然很努力去嘗試過,但發現還是不行。當然,也可能并不是文化問題,而是因為像我和 panjaro 這樣的人膽小浮躁,太在乎別人看法,容易焦慮和抑郁,這樣的人大概在任何行業都是 loser 。希望其他人可以活得理直氣壯一點。
過去常常希望找到人生目標,而當懷疑自己不是 real programmer 的時候又慶幸生活是一團亂麻,而人生可能并沒有意義,不然的話,可能每時每刻都要生活在一條“鄙視鏈”當中了。
總結
以上是生活随笔為你收集整理的一个平庸程序员的自白的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UI设计:浅议内滚动布局
- 下一篇: Xcode7将无需开发者授权也能在真机上