Jacob Kaplan-Moss是著名 Python 框架 Django 的 Co-Creater 和核心開(kāi)發(fā)者,在 Heroku 擔(dān)任安全部門(mén)的 Director, 他常年參加 Python 社區(qū)的年度聚會(huì) PyCon ,并經(jīng)常上臺(tái)演講。在這次 PyCon 2015 上,他聲稱自己頂多只是一個(gè)平庸的程序員,幻燈片上也寫(xiě)著:
“Hi, I’m Jacob, and I’m a mediocre programmer.”
Jacob 以馬拉松為例,試圖說(shuō)明大部分人在大部分領(lǐng)域都是平庸的(Most people are average at most things.),特別好的和特別壞的都是極少數(shù),但在程序員領(lǐng)域,我們聽(tīng)到的大都是某某程序員 rocks 或者 sucks ,基本沒(méi)有中間狀態(tài),這是一件非常奇怪的事情。他還提到“真正的程序員”(real programmer)這個(gè)概念,也就是所謂的 “10x programmer” ,你只有精通某些原理或者長(zhǎng)得像 Mark Zarkerberg 才算是一個(gè) real programmer ,而一個(gè)使用各種云服務(wù)以及 API 快速搭建自己應(yīng)用的人就不算,這非常可笑。
Jacob 認(rèn)為這種關(guān)于“編程天才”的神話非常有害,一方面它把行業(yè)門(mén)檻設(shè)置得特別高,令很多人望而卻步,另一方面它也在折磨行業(yè)內(nèi)的人,因?yàn)槟闳绻荒?rocks ,就會(huì)變成 sucks ,所以不得不用一切時(shí)間來(lái)努力學(xué)習(xí)和工作,導(dǎo)致影響生活。他認(rèn)為我們應(yīng)該改變這種態(tài)度,編程只是一些技能,并不需要太多天分,它是可以學(xué)習(xí)的,而且做一個(gè)平庸的程序員不丟人,”it’s cool to be okay at these skills”。跑步的人有很多種——短跑運(yùn)動(dòng)員,純粹為了鍛煉身體的人,參加馬拉松的人,等等。為什么編程就一定要做 real programmer ,而且做不到就覺(jué)得自己不配編程呢?
這個(gè)演講在大會(huì)現(xiàn)場(chǎng)贏得很多掌聲,在提問(wèn)環(huán)節(jié)也可以聽(tīng)到一些怯生生的聲音說(shuō):“我也是一個(gè)平庸的程序員。” 不過(guò)在其它地方也引起一些爭(zhēng)議,有人認(rèn)為拿跑步和編程對(duì)比并不恰當(dāng),有人說(shuō)程序員能力的差距確實(shí)大得驚人,有興趣的人可以去看 Hacker News 上的討論。
對(duì)于我個(gè)人來(lái)說(shuō),Jacob 的演講觸動(dòng)了我多年來(lái)的心結(jié),讓我非常感動(dòng)。我一直認(rèn)為自己頂多只是一個(gè)平庸的程序員,而且無(wú)論多么努力學(xué)***覺(jué)得自己不是一個(gè) real programmer ,而且好像越走越偏。Jacob 的演講讓我明白,有此苦惱的大概不只我一人,所以這里寫(xiě)一下自己的心路歷程,希望對(duì)別人有一些啟發(fā)。
公開(kāi)承認(rèn)自己平庸是一件危險(xiǎn)的事情,如果不能說(shuō)明你智商低或者沒(méi)有天分,至少說(shuō)明你態(tài)度有問(wèn)題:“平庸就應(yīng)該去努力練習(xí),而不是寫(xiě)文章為平庸辯解”。而當(dāng)你說(shuō) Jacob 這樣的人也承認(rèn)自己平庸時(shí),就會(huì)出現(xiàn)一堆帶有“資格論”的反駁:“Jacob 至少寫(xiě)了那么多代碼,你怎么能和別人比” “人家那樣說(shuō)是謙虛,你這樣就是無(wú)恥了”,頓時(shí)你就會(huì)覺(jué)得自己和那些只會(huì)從偉大人物身上挑毛病的小人沒(méi)什么兩樣。幸運(yùn)的是,今后我很可能不會(huì)以編程為業(yè)了,所以這些事情都無(wú)所謂了,可以誠(chéng)懇地說(shuō)一下自己的經(jīng)歷。
我對(duì) real programmer 的印象始于大學(xué),盡管對(duì)于其它專業(yè)的人來(lái)說(shuō)我們和修電腦的沒(méi)什么兩樣,但專業(yè)內(nèi)部已經(jīng)隱約有對(duì)某種高級(jí)事物的崇拜,記得大一時(shí)一個(gè)同學(xué)對(duì)我說(shuō):“我們現(xiàn)在還學(xué) C,外面早就開(kāi)始用 Java 了”。那個(gè)時(shí)候?qū)I(yè)內(nèi)也已經(jīng)流傳了不少程序員的傳說(shuō),比如某個(gè)學(xué)長(zhǎng)多么厲害,或者微軟某個(gè)程序員一個(gè)人做完了一個(gè)項(xiàng)目組的工作。相信很多人都聽(tīng)說(shuō)過(guò)那個(gè)故事,大意是一個(gè)人電腦壞了,于是找一個(gè)電腦高手來(lái)修,電腦高手拿來(lái)電話,連上電腦,花了整整一夜的時(shí)間用 0 和 1 寫(xiě)了一個(gè)操作系統(tǒng),故事的結(jié)局是“這個(gè)電腦高手去了美國(guó),杳無(wú)音信”。當(dāng)時(shí)我聽(tīng)到這個(gè)故事的時(shí)候半信半疑,居然寧愿相信它是真的!因?yàn)槿绻f(wàn)一它是真的而我不相信,只能說(shuō)明我的技術(shù)水平或者智商無(wú)法理解那個(gè)層次的東西,那就太糟糕了。那個(gè)時(shí)候真的很想變得厲害。
隨著對(duì)專業(yè)的了解,很快我們就開(kāi)始嘲笑那種“Java 比 C 新,所以比 C 好”的看法,轉(zhuǎn)而去相信“越底層越牛”的論調(diào),寫(xiě) C 的比寫(xiě) Web 的厲害,寫(xiě)匯編的又比寫(xiě) C 的厲害,為什么呢?因?yàn)樗麄儭盎A(chǔ)更扎實(shí),更了解原理。” 這種論調(diào)發(fā)展到一個(gè)極致就是:學(xué)數(shù)學(xué)或者物理這種“硬科學(xué)”的人如果轉(zhuǎn)行寫(xiě)程序,肯定比我們厲害。他們算法一定比我們好,而且就是這幫家發(fā)明的計(jì)算機(jī)啊我靠。有一段時(shí)間隱約覺(jué)的別的專業(yè)的轉(zhuǎn)行寫(xiě)程序都會(huì)比我厲害,哪怕是一個(gè)鋼琴家——因?yàn)樗种胳`活打字更快。
大學(xué)里另外一個(gè)讓我印象極其深刻的傳說(shuō)就是:高手寫(xiě)程序不用 IDE ,都是直接記事本。高手摘花飛葉皆可傷人,談武器和工具,那就是落了下乘,只有不入流的才整天研究哪個(gè)工具更有效率。所以在很長(zhǎng)一段時(shí)間內(nèi)我都因?yàn)樽约簺](méi)用記事本寫(xiě)程序而懷疑自己的能力,直到后來(lái)工作之后我接觸到了 Vim ,發(fā)現(xiàn)它長(zhǎng)得和記事本還真的挺像的。
除此之外,還有對(duì)經(jīng)典書(shū)籍的頂禮膜拜,MIT 的 Introduction to Algorithms 和 SICP ,Knuth 的 The Art of Computer Programming ,TCP/IP 詳解,以及一些其它的經(jīng)典操作系統(tǒng)、數(shù)據(jù)庫(kù)等方面的書(shū)。不啃完這些就說(shuō)明你天分不夠,或者沒(méi)有熱情,還是趁早轉(zhuǎn)行比較好。在我一直很喜歡(現(xiàn)在依然喜歡并推薦)的一篇文章 Teach Yourself Programming in Ten Years 中,作者在結(jié)尾推薦了 SICP ,他說(shuō):”The book is challenging and will weed out some people who perhaps could be successful with another approach.” 所以盡管我一直沒(méi)有讀完這本書(shū),而且應(yīng)該也不會(huì)去讀了,但對(duì)它總有一種情結(jié),以至于兩年前出國(guó)的時(shí)候還把它帶在身邊。
畢業(yè)之后開(kāi)始做職業(yè)程序員,每天都是和程序員打交道,關(guān)注的也都是科技新聞,那時(shí)候硅谷文化也越來(lái)越流行,所以更加向往和崇拜 real programmer 。Joel Spolsky 寫(xiě)過(guò)一篇《飆高音》,其中的兩段可以算作是對(duì) real programmer 的最佳詮釋:
用許多平庸的程序員取代少數(shù)優(yōu)秀的程序員,這種做法的真正問(wèn)題在于,不管平庸的程序員工作多長(zhǎng)時(shí)間,他們做出來(lái)的東西,都無(wú)法像優(yōu)秀程序員做得那樣好。
……
一流的歌唱演員不管在什么時(shí)候,都可以很輕松地唱出高音,而平庸的歌唱演員就是永遠(yuǎn)做不到這一點(diǎn)。莫扎特的歌劇《魔笛》中有一段著名的詠嘆調(diào)”Queen of the Night”,音高必須達(dá)到F6(女高音的最高音高)才能唱好這首歌,世界上能達(dá)到這個(gè)標(biāo)準(zhǔn)的女高音都快要絕跡了,而飆不到著名的F6,你就是不能表演”Queen of the Night”。
簡(jiǎn)單地說(shuō),如果你缺乏天賦,那么你再努力,也做不到 real programmer 可以做到的事情,而一個(gè)平庸的程序員就是一個(gè)爛程序員。這種斷言式的文章一直比較能鼓舞人心,那些認(rèn)為自己比較聰明的人也很喜歡這種說(shuō)法,但對(duì)于我這種一直懷疑自己智商和能力的人來(lái)說(shuō),它就像一個(gè)陰影:萬(wàn)一我真的沒(méi)辦法飆高音怎么辦?
因?yàn)檫@種對(duì) real programmer 的仰視,從工作以來(lái),不對(duì),是從大學(xué)以來(lái),有一個(gè)想法一直揮之不去,那就是:I don’t deserve it.
大學(xué)里我也有作品拿過(guò)獎(jiǎng),但總覺(jué)得自己的代碼是一坨屎,不配拿那個(gè)獎(jiǎng),如果當(dāng)時(shí)有另外一個(gè) real programmer ,肯定輪不到我。
大四找工作的時(shí)候,盡管我是通過(guò)正規(guī)的筆試和面試拿到的 offer ,而且被錄用的只有我一個(gè)本科生,我還是覺(jué)得自己不配得到那份工作,因?yàn)闆](méi)寫(xiě)過(guò) 10 萬(wàn)行代碼,也不是一個(gè) real programmer.
剛工作的時(shí)候我每天從早晨 9 點(diǎn)到晚上 9 點(diǎn)都在公司,有時(shí)候周末也去,手頭工作做完了就看技術(shù)文檔,無(wú)聊了就用打字軟件練習(xí)正確的指法,以便編程可以快些。即便這樣,我還是懷疑自己對(duì)編程的熱情,覺(jué)得自己離一個(gè) real programmer 越來(lái)越遠(yuǎn),不適合做程序員。
后來(lái)去雅虎北研面試,從早晨 8 點(diǎn)面試到 12 點(diǎn),第二天又跑去美國(guó)的同事視頻面試。測(cè)試其實(shí)已經(jīng)很嚴(yán)格了,而且我平時(shí)沒(méi)有針對(duì)性地刷題或做其它應(yīng)試準(zhǔn)備,但很奇怪,我還是覺(jué)得自己能力不行,只是僥幸拿到了 offer.
平時(shí)幫別人寫(xiě)代碼,或者和別的部門(mén)合作,第一個(gè)念頭就是自己的能力不行。盡管最后項(xiàng)目順利完成,對(duì)方也對(duì)我評(píng)價(jià)不錯(cuò),但我還是覺(jué)得自己不配得到那些夸獎(jiǎng),甚至想:如果他們見(jiàn)到 real programmer ,就不會(huì)稱贊我的工作了。
這種心理還有另外一個(gè)負(fù)面作用,那就是時(shí)時(shí)刻刻焦慮,害怕掉隊(duì)。Jacob 在演講中也說(shuō)到:
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.
這段話準(zhǔn)確地說(shuō)出了我以前的某種狀態(tài)。我對(duì)除了編程之外的很多事情都有興趣,從生活的角度來(lái)看,這其實(shí)是一件好事,但我卻常常因此有負(fù)罪感,因?yàn)樗鼈兊⒄`了我編程、看文檔和學(xué)習(xí)新技術(shù)的時(shí)間。那些事情本來(lái)是可以帶給我快樂(lè)的,但每次做好像都有一種偷偷摸摸的感覺(jué),被別人問(wèn)到也羞于提起。現(xiàn)在回頭看,之前有段時(shí)間我的工作和生活其實(shí)平衡得很好,但當(dāng)時(shí)我只有不斷告訴自己“你本來(lái)就平庸”,甚至把自己想象成一個(gè)自甘墮落的人才能安心享受,實(shí)在太扭曲了。
以前我有時(shí)還喜歡寫(xiě)點(diǎn)東西,認(rèn)為自己是在分享,但后來(lái)總覺(jué)的自己又不是 real programmer ,分享的東西有什么價(jià)值呢?而且寫(xiě)文章會(huì)耽誤編程的時(shí)間,程序員文化又特別推崇“務(wù)實(shí)”,反對(duì)“務(wù)虛”——寫(xiě)作就是“務(wù)虛”,“只會(huì)***”在程序員群體里面是一個(gè)非常嚴(yán)重的侮辱,記得之前看到過(guò)一條招聘信息,明確地說(shuō)“不歡迎經(jīng)常寫(xiě)博客的人”。事實(shí)上寫(xiě)作不止是表達(dá),它反過(guò)來(lái)還可以幫助思考,很多想法在下筆之前是不存在的,我從中獲益良多。而且,“不愿意表達(dá)”和“不會(huì)表達(dá)”有著本質(zhì)的區(qū)別。以前如果一個(gè)猥瑣不堪、一句話都說(shuō)不清楚的人過(guò)來(lái)朝我扔一句”Talk is cheap. Show me the code.”,我立刻就會(huì)慚愧不已,甚至認(rèn)為他或許就是一個(gè) real programmer.
以上種種不安和困擾,讓我常常覺(jué)得自己從性格到業(yè)余愛(ài)好都不適合做程序員。程序員文化告訴我的是:如果你不是一個(gè) real programmer 或者不在成長(zhǎng)為一個(gè) real programmer 的路上,那么你連一個(gè) programmer 都不是。Hacker News 上針對(duì) Jacob 演講的討論中,panjaro 說(shuō)了他自己的經(jīng)歷:
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.
他的描述讓我感同身受,當(dāng)初我也痛恨自己對(duì)數(shù)學(xué)不感興趣,整天在自習(xí)室苦苦復(fù)習(xí)離散數(shù)學(xué)和算法,工作之后也常常想要重新回頭學(xué)習(xí)這些“基礎(chǔ)知識(shí)”。有時(shí)候即使你發(fā)現(xiàn)在某些工作中算法并不像傳說(shuō)中那么重要,也不能說(shuō)出來(lái),否則你就是忽視基礎(chǔ),或者你從事的就是程序員當(dāng)中的低級(jí)工作,以至于體會(huì)不到算法的重要性。
程序員文化當(dāng)中“能力決定一切”的態(tài)度很多時(shí)候都值得商榷,因?yàn)槌藰O少數(shù)的計(jì)算機(jī)科學(xué)家,大部分程序員從事的是產(chǎn)品開(kāi)發(fā)工作,而在產(chǎn)品開(kāi)發(fā)中是沒(méi)辦法用一個(gè)簡(jiǎn)單的標(biāo)準(zhǔn)衡量一個(gè)程序員的能力的。一個(gè)人可能編程能力很強(qiáng),但他可能執(zhí)意要實(shí)現(xiàn)自己的想法,以至于拖累整個(gè)項(xiàng)目。另外,編程能力強(qiáng)的人不一定能從事某些“低級(jí)的”、不需要太多智力的工作,那樣的工作可能需要大量的耐心,而耐心和傳說(shuō)中的天賦一樣,也不是一種人盡可夫的品質(zhì)。以前看到過(guò)一個(gè)招聘信息很有意思,里面說(shuō)希望應(yīng)聘者“已經(jīng)結(jié)婚,或者至少有過(guò)一段長(zhǎng)期的戀愛(ài)關(guān)系”,他們覺(jué)得這樣的人懂得與別人相處,不太容易是一個(gè)鄙視別人工作的 jerk.
我并不是否認(rèn)大牛的存在,Linus 和 John Carmack 就不用說(shuō)了,剛畢業(yè)在中國(guó)雅虎的時(shí)候就遇見(jiàn)過(guò)一位大牛同事,清華畢業(yè),基督徒,已婚,業(yè)余時(shí)間喜歡編程和做飯,經(jīng)常一個(gè)人做完整個(gè)團(tuán)隊(duì)的工作,打字奇快,每次技術(shù)分享都有很多人去聽(tīng),甚至 HR 都因?yàn)楹闷孢^(guò)去。聽(tīng)眾提問(wèn)的時(shí)候,他能清楚講解某個(gè)不常用命令的某個(gè)參數(shù)的作用,簡(jiǎn)直就是活的 user manual 。他非常樂(lè)于助人,經(jīng)常看到他在 mail list 里面回答別人問(wèn)題,從問(wèn)題的成因分析到解決方案都一一給出,表達(dá)非常清晰。讓我比較驚訝的是他對(duì)很多瑣碎的事情也極有耐心,記得公司想要一些人申請(qǐng)專利,周末就看到他在那里專心寫(xiě)申請(qǐng)。另外一個(gè)和我比較要好的同事本來(lái)覺(jué)得自己還算有天分,比我厲害得多,在大學(xué)里真的寫(xiě)過(guò) 10 萬(wàn)行代碼,但見(jiàn)過(guò)大牛之后立刻發(fā)現(xiàn)自己其實(shí)沒(méi)天分。那個(gè)時(shí)候他女朋友在外地,他業(yè)余時(shí)間也就是看看電影寫(xiě)寫(xiě)代碼,不想寫(xiě)的時(shí)候就打開(kāi)大牛的 Github 看看,一般都會(huì)發(fā)現(xiàn)他又有新的 commit ,然后就有動(dòng)力繼續(xù)寫(xiě)了。
問(wèn)題在于并不是所有人都是大牛,整個(gè)行業(yè)需要的也不止是大牛。舉個(gè)例子,很多寫(xiě) PHP 的大概看不起那種 “Wordpress 工程師”,就是只懂 WordPress 而對(duì) PHP 了解不夠深入的人。但很多公司確實(shí)就需要做一個(gè)小網(wǎng)站,只需要你能開(kāi)發(fā) WordPress Theme 就夠了,不需要研究更多東西。幫別人開(kāi)發(fā) WordPress Theme 完全可以謀生,甚至掙得不少,但他們大概自己也覺(jué)得自己不是 real programmer ,所以很少發(fā)聲。前一段時(shí)間有個(gè)應(yīng)用很火,但他們團(tuán)隊(duì)的文章開(kāi)頭就說(shuō)“我們團(tuán)隊(duì)中沒(méi)有大牛”,好像那是很丟人的事情,一定要大牛組成的團(tuán)隊(duì)才配開(kāi)發(fā)出好東西?如果拋開(kāi)其它不談,“一個(gè)人憑借自己的能力養(yǎng)活自己,他就應(yīng)該得到尊重”,這話聽(tīng)起來(lái)沒(méi)有任何問(wèn)題,只是一旦牽扯到代碼,好像只研究 WordPress 的工程師就不能見(jiàn)人。
很多公司也迷信只有大神程序員才能做事,所以在招聘的時(shí)候會(huì)說(shuō)他們只招聘 Top 1% 的程序員,這其實(shí)根本不可能,Joel Spolsky 早就寫(xiě)文章談過(guò)。你不可能招聘到 Top 1% ,只可能招聘到應(yīng)聘者中的 Top 1%. 我們可以想象一下,最厲害的人可能直接去了 Facebook, Google 或者硅谷的創(chuàng)業(yè)公司,差一點(diǎn)的可能選擇百度騰訊等國(guó)內(nèi)巨頭,或者非常有前景的創(chuàng)業(yè)公司,剩下的人才是市場(chǎng)中的人,這里面的 Top 1% 已經(jīng)不是全部人中的 Top 1% 了。所以看到這種招聘可以評(píng)估一下這個(gè)公司,如果不是特別牛,完全可以大膽去應(yīng)聘,因?yàn)槟阍谀切┰敢鈶?yīng)聘這個(gè)公司的人當(dāng)中,可能已經(jīng)是 Top 1% 了。
其實(shí)我非常喜歡這個(gè)行業(yè)的某些理想主義色彩,過(guò)去這幾年也認(rèn)識(shí)了不少朋友,發(fā)現(xiàn)了不少 thinker ,對(duì)我啟發(fā)很大。可惜我常常感到不舒服,也覺(jué)得和這種程序員文化或者 Geek 文化格格不入,雖然很努力去嘗試過(guò),但發(fā)現(xiàn)還是不行。當(dāng)然,也可能并不是文化問(wèn)題,而是因?yàn)橄裎液?panjaro 這樣的人膽小浮躁,太在乎別人看法,容易焦慮和抑郁,這樣的人大概在任何行業(yè)都是 loser 。希望其他人可以活得理直氣壯一點(diǎn)。
過(guò)去常常希望找到人生目標(biāo),而當(dāng)懷疑自己不是 real programmer 的時(shí)候又慶幸生活是一團(tuán)亂麻,而人生可能并沒(méi)有意義,不然的話,可能每時(shí)每刻都要生活在一條“鄙視鏈”當(dāng)中了。
-
工程師
+關(guān)注
關(guān)注
59文章
1570瀏覽量
68514 -
編程
+關(guān)注
關(guān)注
88文章
3615瀏覽量
93716
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論