Jacob Kaplan-Moss 是著名 Python 框架 Django 的 Co-Creater 和核心開發者,在 Heroku 擔任安所有門的 Director, 他常年參加 Python 社區的年度聚會 PyCon ,並常常上臺演講。在此次 PyCon 2015 上,他聲稱本身頂多只是一個平庸的程序員,幻燈片上也寫着:
"Hi, I'm Jacob, and I'm a mediocre programmer."
此次演講很是精彩,視頻能夠在 Youtube 上看到(若是不想看視頻,這裏也有一篇文字總結:https://lwn.net/Articles/641779/)。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 在演講中也說到:
If the only options are to be amazing or terrible, it leads people to believe they must be passionate about their career, that they must think about programming every waking moment of their life. If they take their eye off the ball even for a minute, they will slide right from amazing to terrible again. That leads people to be working crazy hours at work, to be constantly studying programming topics on their own time, and so on.
這段話準確地說出了我之前的某種狀態。我對除了編程以外的不少事情都有興趣,從生活的角度來看,這實際上是一件好事,但我卻經常所以有負罪感,由於它們耽誤了我編程、看文檔和學習新技術的時間。那些事情原本是能夠帶給我快樂的,但每次作好像都有一種偷偷摸摸的感受,被別人問到也羞於提起。如今回頭看,以前有段時間個人工做和生活其實平衡得很好,但當時我只有不斷告訴本身「你原本就平庸」,甚至把本身想象成一個自甘墮落的人才能安心享受,實在太扭曲了。
之前我有時還喜歡寫點東西,認爲本身是在分享,但後來總覺的本身又不是 real programmer ,分享的東西有什麼價值呢?並且寫文章會耽誤編程的時間,程序員文化又特別推崇「務實」,反對「務虛」——寫做就是「務虛」,「只會打嘴炮」在程序員羣體裏面是一個很是嚴重的侮辱,記得以前看到過一條招聘信息,明確地說「不歡迎常常寫博客的人」。事實上寫做不止是表達,它反過來還能夠幫助思考,不少想法在下筆以前是不存在的,我從中獲益良多。並且,「不肯意表達」和「不會表達」有着本質的區別。之前若是一個猥瑣不堪、一句話都說不清楚的人過來朝我扔一句"Talk is cheap. Show me the code.",我馬上就會慚愧不已,甚至認爲他或許就是一個 real programmer.
以上種種不安和困擾,讓我經常以爲本身從性格到業餘愛好都不適合作程序員。程序員文化告訴個人是:若是你不是一個 real programmer 或者不在成長爲一個 real programmer 的路上,那麼你連一個 programmer 都不是。Hacker News 上針對 Jacob 演講的討論中,panjaro 說了他本身的經歷:
I'm an example how this myth can destroy you. I was programming for 6 years in normal projects and I thought I was not talented. I left job, came to research degree. Now I realized I'm terrible at maths and advanced algorithm techniques. I think about going back but since it has been 3 months I haven't worked in a company, I feel I am a very bad programmer and no one will hire me. I'm depressed and paralyzed. All I do all day is look into HN and read articles, think how all these people are talented and I'm so dumb.
他的描述讓我感同身受,當初我也痛恨本身對數學不感興趣,成天在自習室苦苦複習離散數學和算法,工做以後也經常想要從新回頭學習這些「基礎知識」。有時候即便你發如今某些工做中算法並不像傳說中那麼重要,也不能說出來,不然你就是忽視基礎,或者你從事的就是程序員當中的低級工做,以致於體會不到算法的重要性。
程序員文化當中「能力決定一切」的態度不少時候都值得商榷,由於除了極少數的計算機科學家,大部分程序員從事的是產品開發工做,而在產品開發中是沒辦法用一個簡單的標準衡量一個程序員的能力的。一我的可能編程能力很強,但他可能執意要實現本身的想法,以致於拖累整個項目。另外,編程能力強的人不必定能從事某些「低級的」、不須要太多智力的工做,那樣的工做可能須要大量的耐心,而耐心和傳說中的天賦同樣,也不是一種人盡可夫的品質。之前看到過一個招聘信息頗有意思,裏面說但願應聘者「已經結婚,或者至少有過一段長期的戀愛關係」,他們以爲這樣的人懂得與別人相處,不太容易是一個鄙視別人工做的 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 的時候又慶幸生活是一團亂麻,而人生可能並無意義,否則的話,可能每時每刻都要生活在一條「鄙視鏈」當中了。html