1. (一)
又是一個(gè)悶熱的周六(2013年7月27日),灰霾就像粘在天空一樣,依舊籠罩著這個(gè)城市。帶著小寶,我們?nèi)擞问幵谒{(lán)色港灣的兒童城中,為小家伙的未來(lái)打算著。老婆和丈母娘穿梭于一個(gè)又一個(gè)玩具店,而我,因?yàn)橥浦嚕槐阕邅?lái)走去,就帶著小寶靜靜地欣賞樓下冰場(chǎng)里玩耍的孩子們。很快,我們的注意力就被冰場(chǎng)上兩個(gè)正在進(jìn)行對(duì)抗訓(xùn)練的小男孩吸引住了。小寶快樂(lè)地隨著冰球轉(zhuǎn)動(dòng)脖子,雙眼緊緊地捕捉著黑色的冰球,不時(shí)發(fā)出愉悅的『喝彩』;而我,默默地看著兩位『男子漢』一次次跌倒,又一次次爬起,對(duì)抗雖然異常激烈,但任何一方都沒(méi)有臟動(dòng)作,這足以讓真正的冰球賽場(chǎng)上的成年人汗顏。
連日來(lái),對(duì)環(huán)法自行車賽興奮劑丑聞的追蹤報(bào)道,讓曾經(jīng)的英雄們紛紛落馬。成人世界里,人們對(duì)于名利的渴望,對(duì)成功的追逐已經(jīng)遠(yuǎn)遠(yuǎn)超出了能力或是道德的底線。我們不得不承認(rèn),這個(gè)世界正變得越來(lái)越浮躁。會(huì)爬的恨不得立即會(huì)走,踉踉蹌蹌走著的,又恨不得能撒腿就跑。前兩天我在卓越亞馬遜上隨便查了查『小時(shí)學(xué)會(huì)』和『天學(xué)會(huì)』,結(jié)果發(fā)現(xiàn)分別有65條和157條結(jié)果之多。『Java程序設(shè)計(jì)24小時(shí)輕松掌握 』,『21天學(xué)會(huì)javascript』,『30天學(xué)會(huì)Visual C++』,…看著那列出的一大堆需要花很大力氣學(xué)習(xí)和使用的語(yǔ)言,我不得不感慨這種浮躁已經(jīng)無(wú)處不在。
小寶還在咯咯地樂(lè)。那種發(fā)自內(nèi)心的,如雪花般潔凈的快樂(lè)讓我由衷地羨慕。如果不是上周日LP跟我嚴(yán)肅地討論了一下在未來(lái)我如何更好地履行父親的責(zé)任,此刻(周六的下午)我應(yīng)該端坐在辦公室里思考某段代碼該如何去寫,而不是在這樣一個(gè)放松的環(huán)境下,任由我的思想翱翔。
我們討論的結(jié)果是,一周里大禮拜我能不去公司工作就不去,并且工作日最好有兩天趕在七點(diǎn)前回到家,這樣,可以大大增加我在家中陪伴小寶的時(shí)間,提升她對(duì)『父親』這個(gè)角色的認(rèn)知。在北京這樣一個(gè)擁擠到幾乎處于崩潰邊緣的城市,以公司到我家長(zhǎng)達(dá)三十五公里的距離來(lái)算,晚上七點(diǎn)前回到家就意味著至少提前兩個(gè)從公司出發(fā),還得祈求一路上 1)沒(méi)有事故(小概率事件),2)沒(méi)有管制,3)沒(méi)有幽靈堵車。兩個(gè)小時(shí)的車程對(duì)很多北京人來(lái)說(shuō)還在忍受的極限內(nèi),但對(duì)我來(lái)說(shuō),開車上/下班的時(shí)間超過(guò)一小時(shí)我就已經(jīng)渾身難受,更遑論兩小時(shí)這一讓人絕望的數(shù)字。所以,我決定在提前回家的那兩天搭乘地鐵,這樣,只消花一個(gè)半小時(shí),我就能回到家中;而且,在地鐵里,我可以暫時(shí)遠(yuǎn)離代碼和互聯(lián)網(wǎng),翻幾十頁(yè)和技術(shù)毫不相干的書。巧的是,上周不開車的兩天上下班時(shí)間里,我翻的書是《長(zhǎng)日留痕》——一本我買了很久,翻了幾次卻都沒(méi)看進(jìn)去的小說(shuō)。史蒂文斯先生,書中的主人公,利用一次旅行的機(jī)會(huì)回顧了他漫長(zhǎng)的管家生涯。在整部書中,他始終在回憶過(guò)去的人生,并且不斷地探討一個(gè)嚴(yán)肅的問(wèn)題:一位杰出的男管家究竟是什么樣子的?
感謝這本書,讓我開始嚴(yán)肅地回顧我自己的職業(yè)生涯。這思考斷斷續(xù)續(xù)游走了好幾天,很多時(shí)候干脆藏身在潛意識(shí)中,以至于每每我工作累了,對(duì)著窗外中關(guān)村東路和成府路交叉的路口發(fā)呆時(shí),它就會(huì)蹦出來(lái),讓我暫時(shí)從繁重的工作中解脫出來(lái),在回憶中盡情徜徉。
2. (二)
教練一聲哨響,把我暫時(shí)拉回。此時(shí)此刻,兩個(gè)小家伙開始了一攻一守的對(duì)抗,場(chǎng)面也變得好玩起來(lái)——兩個(gè)小愣頭青從場(chǎng)地的兩端以幾乎相同的路線滑向中圈,砰的一聲,重重地撞到了一起,一同倒地。教練上前,把攻方的小家伙拉到一旁耳語(yǔ)幾句,并比劃了幾下,隨即恢復(fù)了比賽。兩人從場(chǎng)地的兩頭快步?jīng)_向中圈,守方將重心控制地很低,高速滑動(dòng)中,目不轉(zhuǎn)睛地盯著冰球。就在兩人要接觸的一剎那,攻方一個(gè)急停,然后迅速切向斜前方。由于撲得太猛,守方來(lái)不及調(diào)整,無(wú)奈讓攻方輕松繞過(guò)自己,打進(jìn)一球。不知是看懂了比賽,還是單純開心,小寶揮舞著雙手,發(fā)出歡暢的尖叫聲。
這就是教練的作用。他們告訴你什么是基本功,如何應(yīng)對(duì)局勢(shì),以及一名優(yōu)秀的球員應(yīng)該具備什么素養(yǎng)。在一個(gè)人職業(yè)生涯的早期,一位好的導(dǎo)師比什么都重要。一晃我的程序員生涯已經(jīng)過(guò)去了十年,在這十年里,我一直在不斷探索一位優(yōu)秀的程序員究竟該具備什么素養(yǎng),如果當(dāng)時(shí)有個(gè)教練能給予我指導(dǎo),給予我探索的方向,那該多好啊。
可惜沒(méi)有。軟件行業(yè)沒(méi)有教練,也沒(méi)有拜師學(xué)藝的傳統(tǒng)。也許曾經(jīng)有,但自從程序員從手工藝人變成了工程師,教練或者師傅就不再重要。你基本不需要像手工藝人那樣具備從無(wú)到有做出點(diǎn)什么的技術(shù),你需要的僅僅是解決某個(gè)或者某些特定問(wèn)題的能力 —— 某種意義上說(shuō),這和流水線上的工人并無(wú)二異。這也導(dǎo)致了那些速成的圖書的暢銷,因?yàn)樗鼈冊(cè)噲D讓你學(xué)習(xí)到的是如何完成任務(wù),而非如何編程。當(dāng)然,互聯(lián)網(wǎng)正在粉碎這一切,程序員似乎又在回歸手工藝人的傳統(tǒng),這很好。
雖然沒(méi)有教練,但每個(gè)軟件公司基本都會(huì)為新員工指定一名資深的同事提供『象征』意義上的 “mentor”。我說(shuō)『象征意義』,并不是否定mentor的作用,而是說(shuō)這些mentor并非職業(yè)化的mentor,『傳道授業(yè)解惑』的為師之道,mentor們勉強(qiáng)在解惑上提供了些許幫助。當(dāng)然,對(duì)于公司來(lái)說(shuō),mentor最重要的作用是成為一個(gè)榜樣(Role Model),通過(guò)他們的工作態(tài)度,工作習(xí)慣,工作能力,對(duì)新員工,尤其是處在職業(yè)生涯早期的員工產(chǎn)生潛移默化的影響。
我職業(yè)生涯起始的公司是神州數(shù)碼網(wǎng)絡(luò)公司(DCN)。如果將google或者twitter定義為『優(yōu)秀』公司,那么,DCN顯然處在平庸公司的行列。好在DCN繼承了老聯(lián)想的底子,還有一批有理想的做系統(tǒng)的牛人。Z君就是這樣一個(gè)人。碰巧我被分在了他所在的團(tuán)隊(duì)。當(dāng)我把『一位優(yōu)秀的程序員究竟該具備什么素養(yǎng)』這樣的問(wèn)題拋給我的mentor,即將離職的X君時(shí),他讓我多看,多學(xué)Z君。之后,有意無(wú)意地,我都會(huì)多去勞煩Z君,他總會(huì)拋開手頭的事,爽快地為我答疑。為了解決某個(gè)問(wèn)題,他經(jīng)常工作到深夜;跟他討論代碼如果沒(méi)揪到根上他絕不善罷甘休。拿code review來(lái)說(shuō),當(dāng)你看到一堆邏輯上無(wú)比正確但寫作上WTF的代碼時(shí),即使想罵娘,但屈服于release的壓力或人情世故,你總會(huì)妥協(xié)。但Z君不太會(huì)妥協(xié)。他會(huì)笑瞇瞇地,毫不留情地指出你代碼上十多處毛病,讓你整改。很多人認(rèn)為代碼邏輯對(duì)了就足夠,但Z君期待代碼(算法)在時(shí)間空間上的合理(和諧),以及是否做到了SoC。工作之外,他又是個(gè)吊兒郎當(dāng)?shù)娜耍?jīng)常爆發(fā)出的爽朗的笑聲,渾身濃重的煙味,讓你即使在很遠(yuǎn)的地方,也能感受到他獨(dú)特的氣場(chǎng)。
從Z君身上,我找到了一直追尋的問(wèn)題的第一個(gè)答案:
真心喜愛(ài)你所做的事情。
真心喜愛(ài)你所做的事情。之所以斟酌出這個(gè)句子,是因?yàn)槲矣X(jué)得諸如『敬業(yè)』,『有韌勁』,『鉆研』,『愛(ài)學(xué)習(xí)』等詞語(yǔ)或多或少都被它涵蓋,或者說(shuō),是它的自然而然的結(jié)果。
那時(shí)對(duì)我而言,『真心喜愛(ài)』就意味著每天超過(guò)12個(gè)小時(shí)泡在公司里努力搞明白遇見(jiàn)的每一個(gè)技術(shù)問(wèn)題。很快,我搞透了OSPF,填補(bǔ)了X君走后OSPF上的空缺,之后又獨(dú)立開發(fā)了IGMv3,SNTP,接著完成了極其重要的linux 2.4 kernel的移植。
3. (三)
由于工作的原因,我逐漸與另一個(gè)團(tuán)隊(duì)的S君打交道很多。S君興趣很廣,他幫著公司內(nèi)部搭建了團(tuán)隊(duì)的wiki,使得信息的交流,知識(shí)的分享大大地系統(tǒng)化。以前我們知識(shí)的交流以郵件為主,這很被動(dòng),當(dāng)下有用的,還是無(wú)用的知識(shí),都一股腦成了一封封亟待打開的郵件。打開看吧,浪費(fèi)時(shí)間;不打開吧,以后需要時(shí)都不知道自己的郵箱里還有這么份東西。在S君的推廣和維護(hù)下,團(tuán)隊(duì)的wiki大大提高了大家獲取知識(shí)的效率。
從S君那里得知,他使用了一個(gè)叫mediawiki(wikipedia使用的軟件)的開源軟件。我開始把玩mediawiki,進(jìn)一步,我接觸了LAMP,并且逐漸意識(shí)到像linux,Mediawiki這樣的開源軟件的重要性。如果說(shuō)林則徐魏源是近代中國(guó)開眼看世界的第一人,那么他也許是DCN內(nèi)部擁抱更廣闊的世界的第一人。做system的,很少關(guān)注application的動(dòng)向,有種天朝藐視番邦的傲嬌;而做application的,則放低姿態(tài)謙卑地注視著system的變化。現(xiàn)在隨便拉一個(gè)做路由器的人,你問(wèn)問(wèn)他對(duì)web application的看法,十有八九還停留在對(duì)LAMP的認(rèn)知上;而做web application的人已經(jīng)把觸角伸向了user space data plane。究其原因,是做system越做越掌控一切,傾向于封閉;而做application越做越依賴生態(tài)圈,所以擁抱開放。
S君讓我認(rèn)識(shí)到了開源的力量和開放的社區(qū)的偉大之處。懷著對(duì)mediawiki的敬畏,我開始學(xué)習(xí)PHP,進(jìn)而在他的影響下,學(xué)習(xí)據(jù)說(shuō)是『聰明的程序員』使用的Python。我想我已經(jīng)是『真正的程序員』了,如果能成為『聰明的程序員』,何樂(lè)而不為?
在這個(gè)過(guò)程中,我找到了第二個(gè)答案:
擁抱開源和自由軟件,擁抱社區(qū)。
大學(xué)期間,我曾經(jīng)是一個(gè)堅(jiān)定的微軟主義者:凡是微軟推出的,我都擁護(hù);凡是微軟反對(duì)的,我都反對(duì)。直到畢業(yè)時(shí),我還天真的認(rèn)為C#就是我們這代程序員的終極武器。S君及時(shí)把我從這種盲從中拉了出來(lái),讓我看到了一個(gè)不一樣的世界。現(xiàn)在棱鏡門事件的熱度在漸漸褪去,但是,它讓人們開始意識(shí)到Richard Stallman的思想的重要性:開源軟件關(guān)乎著人類的自由。遺憾的是(也許我不該這么評(píng)價(jià)),我的兩任雇主,對(duì)開源軟件的貢獻(xiàn)要遠(yuǎn)小于其索取。
PHP和Python對(duì)于我所做的開發(fā)任務(wù)似乎毫無(wú)幫助,學(xué)習(xí)它們地目的是為了了解更廣闊的世界,了解為什么最流行的軟件會(huì)被用這樣的語(yǔ)言開發(fā)出來(lái)。為了更好的實(shí)踐我的所學(xué),我用PHP和Python做了一個(gè)工具:開發(fā)人員可以通過(guò)一個(gè)PHP撰寫的web頁(yè)面提交一項(xiàng)測(cè)試任務(wù),后臺(tái)的python腳本拿到這個(gè)任務(wù)后會(huì)拉下指定版本的代碼,編譯,并將編譯好的image傳到直連的交換機(jī)上,然后開始運(yùn)行測(cè)試團(tuán)隊(duì)提供的regression腳本。我的工具帶來(lái)的效率的提升引起了老板的重視,我被批準(zhǔn)使用一臺(tái)PC和兩臺(tái)交換機(jī),組成一個(gè)完整的環(huán)境,供開發(fā)團(tuán)隊(duì)踐行CI(Continuous Integration)。
在這個(gè)過(guò)程中,我發(fā)現(xiàn)了第三個(gè)答案:
能夠通過(guò)自身所掌握的技術(shù),不斷提高自己和團(tuán)隊(duì)的效率。
容我再解釋兩句。一個(gè)真正的程序員,在那些每天重復(fù)低效的干活方式展現(xiàn)在你面前時(shí),很難抑制住利用自己的技能做點(diǎn)什么改變現(xiàn)狀的心情。工作中(當(dāng)然生活中也是),這樣的低效比比皆是。比如說(shuō)從X系統(tǒng)中定期導(dǎo)出一些數(shù)據(jù)到excel中做報(bào)表,比如說(shuō)一級(jí)一級(jí)收集weekly report進(jìn)行工作匯總。
這種低效在我工作過(guò)的第二家公司,Juniper,也廣泛存在。
回顧我目前的整個(gè)職業(yè)履歷,我在DCN工作了兩年零兩個(gè)月,在Juniper China R&D(CNRD)工作了五年半,在途客圈作為創(chuàng)始人和CTO工作了兩年,然后回到Juniper CNRD工作至今。所以,作為雇員,我總共就工作過(guò)兩家公司,因此,是否每家軟件公司都存在類似的低效,我不得而知。但我覺(jué)得,工作中的低效場(chǎng)景無(wú)處不在,問(wèn)題在于有沒(méi)有被發(fā)現(xiàn),發(fā)現(xiàn)后值不值得為此做點(diǎn)什么。
4. (四)
冰球場(chǎng)上的對(duì)抗結(jié)束了,小家伙們離場(chǎng)休息去了。我松開手上的童車腕帶,把腦袋湊過(guò)去,輕喚小寶的名字。小寶顯然還全神貫注于冰場(chǎng),被我這突然的舉動(dòng)嚇了一跳。當(dāng)她惶恐地轉(zhuǎn)過(guò)頭來(lái)看到是我,便放下心來(lái),微微笑了笑,又回過(guò)頭去欣賞冰場(chǎng)上的運(yùn)動(dòng)。循著她的目光,我看到冰場(chǎng)上一個(gè)也就六七歲大的小女孩一個(gè)人在認(rèn)真地練習(xí)花滑。她的動(dòng)作如此純熟,姿態(tài)那么優(yōu)美,讓你幾乎忘了她的年齡。我想,她大概這么練了有很長(zhǎng)一段時(shí)間了吧。
看到這里我不禁想起在Juniper曾經(jīng)跟Y君討論過(guò)我們招人的準(zhǔn)則。我不解為何我們不給年輕員工,甚至應(yīng)屆畢業(yè)生一些機(jī)會(huì)。Y君認(rèn)為我們需要的是專家,而某個(gè)領(lǐng)域的專家,根據(jù)研究,需要經(jīng)過(guò)10000個(gè)小時(shí)的培養(yǎng)。我算了一下,假使每周四十個(gè)小時(shí),一年五十周撲在某個(gè)或者某些特定的領(lǐng)域,那么,五年的時(shí)間就可以造就一個(gè)專家。這也是為何很多公司對(duì)于senior的職位,都要求至少五至七年的相關(guān)工作經(jīng)驗(yàn)。但現(xiàn)實(shí)是,在面試中,很多五年,甚至十年工作經(jīng)驗(yàn)的人都未必對(duì)得起自己逝去的年華。我曾經(jīng)遇見(jiàn)過(guò)一個(gè)工作了8年之久的程序員,在提供了vim,gcc等編輯編譯環(huán)境的情況下,連一個(gè)非常簡(jiǎn)單的鏈表操作的程序都無(wú)法正確完成。這是怎么回事?
我查了查”10,000 hour rule”的原文,是這么說(shuō)的 —— “it takes approximately 10000 hours of deliberate practice to master a skill”。
問(wèn)題出在了“deliberate practice”上。
何謂”deliberate practice”?鋼琴考級(jí)有九個(gè)等級(jí),每個(gè)等級(jí)都有要求的技法和曲譜。這是一系列刻意設(shè)計(jì)的練習(xí),每一個(gè)級(jí)別都比上一個(gè)難度大一些,但經(jīng)過(guò)努力還是可以掌握的。當(dāng)你對(duì)車爾尼駕輕就熟后,可以嘗試一點(diǎn)巴赫,也許也可以是貝多芬,但絕不能倒著來(lái),也不能跳著來(lái)。跳著來(lái)意味著你當(dāng)前的水平和期望的結(jié)果之間的鴻溝太大,也許已經(jīng)超過(guò)了單憑努力就可以到達(dá)的境地。
可惜軟件行業(yè)鮮有這樣的”deliberate practice”,學(xué)校和培訓(xùn)機(jī)構(gòu)也沒(méi)有類似的體系。所以這個(gè)社會(huì)能夠批量造就鋼琴9級(jí)獲得者,卻無(wú)法批量培養(yǎng)出合格的程序員。很多擁有五年工作經(jīng)驗(yàn)的人,折合成有效的經(jīng)驗(yàn),也許就只剩一年,剩下的四年只不過(guò)在重復(fù)自己第一年的收獲。這就好比一個(gè)人掌握了車爾尼《鋼琴簡(jiǎn)易練習(xí)曲》后,還在刻苦反復(fù)練習(xí)相同的內(nèi)容,即使練到脫離曲譜信手拈來(lái),又有何用?
想想我們的境地,挺悲慘的。沒(méi)有合適的導(dǎo)師指引方向,沒(méi)有成型的體系來(lái)培養(yǎng)專家。但是我們還得不斷地學(xué)習(xí),不斷地更新知識(shí)。對(duì)于那些還尚未『開竅』的程序員來(lái)說(shuō),職業(yè)生涯就像《富爸爸窮爸爸》所謂的老鼠賽跑,在蹉跎中耗盡光陰。
所以自我救贖的最好方法就是不斷地給自己增加挑戰(zhàn),讓自己脫離舒適區(qū)域。具體方法是:用那些剛好超過(guò)自己能力的任務(wù)挑戰(zhàn)自己,build(嘗試) – measure(分析) – learn(學(xué)習(xí)總結(jié))。然后不斷重復(fù)。這是lean startup一書中建議的精益創(chuàng)業(yè)模式,同樣也適用于這個(gè)場(chǎng)合。
不要去看那些多少小時(shí)或者多少天就能掌握XYZ的書。生命苦短,多讀讀大師的著作和文章,他們能讓你跨越到新的臺(tái)階;多寫代碼,多寫能讓你有征服感的代碼。
這就是我找尋到的第四個(gè)答案:
不斷跳出舒適區(qū),有目的地挑戰(zhàn)自己。
讓我倍感欣慰的是,在Juniper的這五年半時(shí)間里,公司提供了各種機(jī)會(huì)讓我在三個(gè)不同的team里學(xué)習(xí)和掌握data plane,kernel,以及application。托L君rellocate到US的福,我還有機(jī)會(huì)lead一支團(tuán)隊(duì),來(lái)踐行我在leadership上所學(xué)的理論知識(shí)。
冰場(chǎng)里依舊人聲鼎沸。怕寒氣把小寶凍著,我不敢在此過(guò)度停留,我把車推著往里靠了靠,坐在一張椅子上稍稍休息。小寶舉著雙手似乎在抗議,但當(dāng)她發(fā)現(xiàn)從她坐著的角度依舊能看到冰場(chǎng)的一角時(shí),就漸漸安靜下來(lái),雙手自然搭在童車的護(hù)欄上。
說(shuō)來(lái)好笑,就在我離開Juniper的前夕,L君主持了一場(chǎng)小規(guī)模的英文演講訓(xùn)練,以此來(lái)提高manager們用英文當(dāng)眾發(fā)言的能力。我的主題就是”Move yourself out of comfort zone”。后來(lái)偶然的機(jī)會(huì),我遇到了同樣也離開Juniper的L君,他說(shuō)他那時(shí)就感到我要離開。我問(wèn)為什么。『因?yàn)镃NRD對(duì)你而言已經(jīng)成為一個(gè)confort zone,你只需不犯錯(cuò)誤,靜靜等待,就能一點(diǎn)點(diǎn)向上爬,而這又和你的性格,尤其是你的演講傳達(dá)出來(lái)的感覺(jué)不同。』L君回答道。
想想也真是。我的性格里流淌著不安分的血液,它源自我的父親。一九九三年,父親只身前往海南和廣東,像那個(gè)時(shí)代的所有朝氣蓬勃的年輕人一樣,希望能夠在改革開放的最前沿,尋找工作機(jī)會(huì),瀟灑走一回。和其他人不同的是,父親當(dāng)時(shí)已接近不惑之年,有家有口,還捧著醫(yī)生這樣一個(gè)金飯碗。如今我已過(guò)而立,晉升為爺爺?shù)母赣H年逾古稀,在這個(gè)本該安享天年的時(shí)刻,仍然奮斗在第一線,業(yè)余時(shí)間還以編者的身份出了個(gè)人的第一部書,同時(shí)正在緊張地編撰第二部。父親就是我的榜樣,能夠全面超越他是我的一大理想(當(dāng)然這也是一個(gè)達(dá)爾文主義者必須做到的,總不能一代更比一代差吧^_^),可惜至今我還未能完成這一理想。
5. (五)
A language that doesn’t affect the way you think about programming, is not worth knowing. – Alan Perlis
離開Juniper,我選擇了創(chuàng)業(yè),創(chuàng)建了途客圈。那是一段奇妙的旅程,一段讓我成熟很多的征途。有史以來(lái)第一次,我寫軟件,不是為了我的雇主,我的payroll,而是為了我的夢(mèng)想。雖然這段旅程僅僅走了兩年我就不得不因?yàn)橐恍﹤€(gè)人的原因選擇了自我放逐,但這兩年,如喬幫主所言,是我開始去連接那一個(gè)個(gè)”disconnected dots”。我的編程水平開始極大地發(fā)展,我的軟件開發(fā)思想在不斷走向成熟,我越來(lái)越覺(jué)得自己像是一個(gè)真正的程序員了。
重要的是,我開始學(xué)習(xí)新的語(yǔ)言了。你也許注意到,自從從DCN學(xué)習(xí)了PHP和Python后,在Juniper我就不再學(xué)習(xí)新的語(yǔ)言了,部分原因是我在夯實(shí)我這兩門語(yǔ)言的水平,尤其是Python的水平,但更關(guān)鍵的原因是我開始固步自封了。C讓我成為真正的程序員,Python讓我成為聰明的程序員,我似乎找不到繼續(xù)學(xué)習(xí)新語(yǔ)言的理由。
但是,創(chuàng)業(yè)改變了這一切。我不得不學(xué)習(xí)javascript,因?yàn)檫@是客戶端唯一的標(biāo)準(zhǔn)。盡管在十多年前我就接觸了javascript,并用它做過(guò)一些效果,但那時(shí)對(duì)javascript的使用,與其說(shuō)是使用,不如說(shuō)是誤用。在途客圈,我才真正重新認(rèn)識(shí)這門prototype based language。另外,為了權(quán)衡究竟什么樣的架構(gòu)更利于未來(lái)的發(fā)展,我花了很多功夫深入了解ruby,在ruby和python之間進(jìn)行對(duì)比。通過(guò)《松本行弘的程序世界》,我了解了設(shè)計(jì)ruby時(shí)的很多思想。盡管途客圈最終選擇了python/django,但這是一次非常有益的對(duì)比和思考,它讓我進(jìn)一步找到了第五個(gè)答案:
學(xué)通超過(guò)一種編程語(yǔ)言,了解盡可能多的編程語(yǔ)言及其優(yōu)劣,知道解決某個(gè)問(wèn)題的可能的最佳路徑。
注意學(xué)通和學(xué)會(huì)是兩個(gè)概念。學(xué)會(huì)意味著你能夠使用這門語(yǔ)言,會(huì)寫程序,而學(xué)通則意味著更多:
了解語(yǔ)言被創(chuàng)建之出的動(dòng)機(jī),深刻理解語(yǔ)言背后的思想。
掌握如何在線調(diào)試(online debugging)和事后分析(coredump analysis)。
掌握語(yǔ)言外延/周邊的技術(shù)。如JVM之于java,OS/CPU EABI之于C。
掌握如何提升關(guān)鍵代碼的效率,如何能夠擴(kuò)充語(yǔ)言的能力。如NIF之于Erlang。
…
很多在簡(jiǎn)歷中號(hào)稱精通C的人不知道m(xù)alloc背后都發(fā)生了什么,精通Python的人卻無(wú)法用meta programming寫出干凈漂亮的代碼。這樣的精通其實(shí)也就是勉強(qiáng)學(xué)會(huì)。
按照這個(gè)標(biāo)準(zhǔn),摸爬滾打了十年后,我在C語(yǔ)言上勉強(qiáng)算學(xué)通,Python和Javascript只能說(shuō)學(xué)會(huì),Erlang/Ruby剛算了解。
容我再解釋一下為何要了解盡可能多的編程語(yǔ)言極其優(yōu)劣。比如說(shuō)新開發(fā)的軟件并發(fā)模式要采用STM(Software Transactional Memory),如果在技術(shù)選型前,你知道clojure在語(yǔ)言層面,haskell在GHC層面實(shí)現(xiàn)了STM,那么,你的選擇可能不會(huì)局限于你之前所用的語(yǔ)言。
6. (六)
總而言之,現(xiàn)在完全不可能讓時(shí)鐘倒轉(zhuǎn)了。你不能永遠(yuǎn)總是對(duì)過(guò)去也許會(huì)發(fā)生的事耿耿于懷。你應(yīng)該認(rèn)識(shí)到你與大多數(shù)人一樣地過(guò)得很好,或許還要好得多,那就應(yīng)該心滿意足了。 – 《長(zhǎng)日留痕》
也許是之前的凝視耗費(fèi)了太多的精力,小寶開始打著哈欠揉眼睛。她回過(guò)頭來(lái),張開雙臂,滿眼期待地望著我。我知道,小家伙想要抱抱了。
十年前我根本無(wú)法想象十年后我能如此幸運(yùn)而又意外地?fù)碛兴缡旰笪覠o(wú)法預(yù)料她會(huì)變成什么樣子。我可以為我的職業(yè)生涯,還有她的人生做”deliberate”的打算,但我無(wú)法控制結(jié)果。過(guò)去的十年,我遇到了很多很多十字路口。就像《長(zhǎng)日留痕》里說(shuō)的那樣,『你不能永遠(yuǎn)總是對(duì)過(guò)去也許會(huì)發(fā)生的事耿耿于懷』。重要的是,我做出了選擇。我很高興我的人生經(jīng)歷與大多數(shù)人一樣豐富,或許還要豐富得多,我很高興我有很多很多故事講給我的孩子聽(tīng)。
-
工程師
+關(guān)注
關(guān)注
59文章
1573瀏覽量
68680
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
月薪 3 萬(wàn)的嵌入式工程師都在用,串口屏到底神在哪?
![月薪 3 萬(wàn)的嵌入式<b class='flag-5'>工程師</b>都在用,串口屏到底神在哪?](https://file1.elecfans.com/web3/M00/07/ED/wKgZPGesCHCAFrKSAAEBXym8SBs375.png)
![](https://file1.elecfans.com/web3/M00/05/24/wKgZPGd9BIKAasMYAAP9Ml_injM792.jpg)
不同時(shí)期的硬件工程師,最怕發(fā)生的事 #電子工程師 #硬件工程師 #內(nèi)容過(guò)于真實(shí) #YXC晶振 #揚(yáng)興科技
![](https://file1.elecfans.com/web2/M00/07/FB/wKgZombz6VuAFeotAAIjSCj1HKI007.jpg)
硬件工程師VS軟件工程師|硬件工程師看到這都淚目了!#硬件設(shè)計(jì) #硬件工程師 #電子工程師 #軟件工程師
Victor Labián Carro:以好奇心成就 RISC-V 職業(yè)成功之路
![Victor Labián Carro:以好奇心成就 RISC-V <b class='flag-5'>職業(yè)</b>成功之路](https://file1.elecfans.com/web2/M00/E5/D3/wKgaomZBeIyADEqiAACsZ19UYWk044.png)
嵌入式軟件工程師如何提升自己?
![](https://file1.elecfans.com/web2/M00/EB/14/wKgaomZXAd-AWEwjAAuV2RdwuSM130.png)
干硬件這一行,各種辛酸只有同行才懂吧 ? #電路設(shè)計(jì) #電子愛(ài)好者 #硬件工程師 #電子工程師
索尼誠(chéng)邀軟件工程師參與PS免費(fèi)手游平臺(tái)設(shè)計(jì)
![](https://file1.elecfans.com/web2/M00/E5/09/wKgZomZB1aqAfoLMAALwKMk88bw153.jpg)
電子工程師常見(jiàn)面試題(二)看看你能答對(duì)幾道吧#電子工程師 #電子工程師面試 #電子信息 #電工
![](https://file1.elecfans.com/web2/M00/DE/DE/wKgZomYwuQ-AegjsAAISSibiD4I286.jpg)
一個(gè)電源工程師的成長(zhǎng)路徑
Domo與Tableau和Power BI?前Tableau工程師建議最大化BI工具潛能
![Domo與Tableau和Power BI?前Tableau<b class='flag-5'>工程師</b>建議最大化BI工具潛能](https://file.elecfans.com/web2/M00/3F/D7/poYBAGJqPMKAEXjWAAAOpepuZJ8475.jpg)
![](https://file1.elecfans.com/web2/M00/C5/1E/wKgaomXxdsmAENR6AAKEdyutPEU736.jpg)
一位硬件工程師的歷練之路:從入門學(xué)習(xí)理論到... #搞笑 #硬件工程師 #電子工程師 #揚(yáng)興科技
SOLIDWORKS助學(xué)生鑄就夢(mèng)想中的職業(yè)生涯
![SOLIDWORKS助學(xué)生鑄就夢(mèng)想中的<b class='flag-5'>職業(yè)生涯</b>](https://file1.elecfans.com//web2/M00/C3/FB/wKgZomXv-ZWAM_rfAAAsvArVY54396.jpg)
單片機(jī)如何通過(guò)代碼控制硬件:一名工程師的分享
![單片機(jī)如何通過(guò)代碼控制硬件:<b class='flag-5'>一名</b><b class='flag-5'>工程師</b>的分享](https://file1.elecfans.com/web2/M00/C2/D6/wKgZomXoETmAYdSCAADYRReTHqA347.png)
![](https://file1.elecfans.com/web2/M00/C1/46/wKgaomXUeXuAXDwNAAJ_XqvplMU996.jpg)
評(píng)論