我算是靠坑蒙拐騙進(jìn)了程序員的門,然后一路狂奔赋铝。26歲之前幾乎沒(méi)有任何寫代碼的經(jīng)驗(yàn),研究生畢業(yè)卻意外選擇了一家不可能提供培訓(xùn)的初創(chuàng)公司谍肤,在每日擔(dān)憂公司倒閉、害怕被炒魷魚(yú)以及同事冷落白眼的三重壓力下逆流而上灶轰,一年半后離職谣沸,已是擁有 500萬(wàn)用戶產(chǎn)品的后臺(tái)主程。從前我對(duì)計(jì)算機(jī)技術(shù)心懷畏懼笋颤,認(rèn)定技術(shù)高人一定有佛光籠罩,晝夜不息運(yùn)鍵如飛日吐代碼上萬(wàn)行∧诘兀現(xiàn)在也算見(jiàn)過(guò)一些世面了伴澄,回首那段忐忑不安宛如初夜的過(guò)程,我卻不發(fā)覺(jué)有任何的勵(lì)志意味阱缓,而是視為一種理所當(dāng)然非凌。理想的程序員,和理想的建筑師荆针、理想的財(cái)務(wù)師敞嗡、理想的按摩師沒(méi)有任何的差別,他們本質(zhì)上都是一群手藝人航背。我相信理想的程序員人人皆可成為喉悴。
近三年總在互聯(lián)網(wǎng)圈廝混,我認(rèn)識(shí)過(guò)一些程序員玖媚,共事過(guò)一些程序員箕肃,領(lǐng)導(dǎo)過(guò)一些程序員,又面試過(guò)一些程序員今魔。他們學(xué)歷不同勺像,有的來(lái)自北大,有的來(lái)自培訓(xùn)機(jī)構(gòu)错森,有的是博士吟宦,有的是高中肄業(yè);資歷也不同涩维,有的來(lái)自BAT殃姓,有的來(lái)自某破產(chǎn)基金公司(還是一個(gè)銷售);年限也從 0 到 15年不等激挪。但我認(rèn)為程序員只需分三類:天才的程序員辰狡、理想的程序員、平庸的程序員垄分。天才的程序員我只敢說(shuō)接觸過(guò) 3 個(gè)宛篇,這是天命。7分由你是顆精子的時(shí)候就已決定薄湿,擁有絕佳的數(shù)學(xué)天賦叫倍、冷靜致密的邏輯偷卧、為解決難題寧愿不眠不休而深以為樂(lè)的技術(shù)熱情;3分來(lái)自起步要早早早吆倦,恨不得同齡人玩泥巴的時(shí)候就得開(kāi)始玩電腦听诸,大學(xué)畢業(yè)前就突破一萬(wàn)小時(shí)法則,后面的已是游戲人生蚕泽。
天才的程序員可遇不可求晌梨,更不能長(zhǎng)有,我看到的90%仍是平庸的程序員须妻。IT時(shí)代的膨脹仔蝌,已讓程序員如同文藝復(fù)興時(shí)的印刷匠一樣的普通,多數(shù)投入祖師爺門下的人荒吏,僅是為了更大的飯碗敛惊,更高的待遇,更好的生計(jì)绰更。平庸的程序員編寫腐爛的代碼瞧挤,沒(méi)有規(guī)范和一致性,固守舊世界的語(yǔ)言儡湾,還好談?wù)摯蟮募軜?gòu)和性能特恬,說(shuō)的比做的漂亮。而毫無(wú)例外的盒粮,他們認(rèn)定技術(shù)沒(méi)有出路鸵鸥,做產(chǎn)品、營(yíng)銷和管理的是更高大上的手藝丹皱,而他們當(dāng)中的99%妒穴,又會(huì)自然的流露出自己恰巧具備了那方面的天賦,至于進(jìn)程為什么會(huì)崩潰這樣的小問(wèn)題是不屑于去了解的摊崭。
而我最喜歡和理想的程序員相處讼油,恨不得與他們同吃同住,如果允許呢簸,我希望我的隊(duì)伍能插滿他們的旗幟矮台。理想的程序員心眼兒不壞(他們從來(lái)都不是辦公室政治的寵兒,是一群?jiǎn)渭兠髁量鞓?lè)的手藝人)根时,有天真爛漫的好奇心(他們的眼睛里經(jīng)常閃著「哇瘦赫,這個(gè)是怎么做到的!」)蛤迎,永遠(yuǎn)精益求精(他們的口頭禪是「我再研究一下」)确虱,還樂(lè)于分享(他們活躍于GitHub、各大問(wèn)答社區(qū)和你的身邊替裆,舍得將寶貴時(shí)間用于幫助新手)校辩。是的窘问,他們不需要被管理,只需要給一個(gè)大的方向宜咒,總能回報(bào)以意想不到的結(jié)果惠赫。
理想的程序員與平庸的程序員只有一墻之隔。兩者的差距只有 6個(gè)一點(diǎn)點(diǎn)故黑,而人與人的差距儿咱,正是在這日積月累的一點(diǎn)點(diǎn)中,被永遠(yuǎn)拉開(kāi)了场晶。有意思的是概疆,我發(fā)現(xiàn)這 6個(gè)一點(diǎn)點(diǎn)都和意識(shí)有關(guān),也就是程序員和其他一切新興產(chǎn)業(yè)的工種一樣峰搪,只需要意識(shí)加上時(shí)間的錘煉,人人皆可達(dá)到理想的階段凯旭。理想的程序員必然也是一個(gè)優(yōu)秀的problem-solver概耻。
第 1 個(gè)一點(diǎn)點(diǎn):專注眼下
見(jiàn)過(guò)太多心猿意馬的程序員,我不得不把「專注眼下」作為天字第一條罐呼。他們往往有各式各樣的小夢(mèng)想鞠柄,比如做個(gè)小茶農(nóng)、做個(gè)小鵝販嫉柴、做產(chǎn)品厌杜、做銷售、做投資计螺,卻被程序員的高薪或是沒(méi)有轉(zhuǎn)行的魄力「耽誤」了夯尽,而因?yàn)椴粚Wⅲ麄儾辉谝庾龊米约旱谋痉值锹辉谝忮N煉自己的技能匙握,不在意學(xué)習(xí)新興的技術(shù)。不可否認(rèn)陈轿,這世界上存在著偉大的產(chǎn)品(像喬老爺)圈纺、偉大的銷售(像埃里森)、偉大的投資客(像彼得菲)麦射,而他們毫無(wú)例外都是程序員出身蛾娶。可你聽(tīng)說(shuō)過(guò)巴菲特評(píng)價(jià)蓋茨的話么潜秋,比爾蓋茨如果轉(zhuǎn)行去賣狗蛔琅,那他一定是全世界最大的狗販。我堅(jiān)信除了少數(shù)的天才外半等,冥冥眾生均可以在多個(gè)領(lǐng)域取得成功揍愁,只要保持足夠的專注呐萨。而哪怕你下一年就想賣狗去,程序員的經(jīng)驗(yàn)仍然能訓(xùn)練你強(qiáng)大的邏輯莽囤、謹(jǐn)慎和耐心谬擦,放在哪個(gè)行業(yè)都是相當(dāng)可觀的競(jìng)爭(zhēng)力。
第 2 個(gè)一點(diǎn)點(diǎn):思考力與推動(dòng)力
我認(rèn)為處理bug朽缎、崩潰惨远、調(diào)優(yōu)、入侵等突發(fā)事件比編程本身更能體現(xiàn)平庸程序員與理想程序員的差距话肖。當(dāng)面對(duì)一個(gè)未知的問(wèn)題時(shí)北秽,如何定位復(fù)雜條件下的核心問(wèn)題、如何抽絲剝繭地分析問(wèn)題的潛在原因最筒、如何排除干擾還原一個(gè)最小的可驗(yàn)證場(chǎng)景贺氓、如何抓住關(guān)鍵數(shù)據(jù)驗(yàn)證自己的猜測(cè)與實(shí)驗(yàn),都是體現(xiàn)程序員思考力的最好場(chǎng)景床蜘。是的辙培,在衡量理想程序員的標(biāo)準(zhǔn)上,思考力比經(jīng)驗(yàn)更加重要邢锯。
有時(shí)候小伙伴跑過(guò)來(lái)扬蕊,問(wèn)我「提交了一個(gè)任務(wù)被卡住了,怎么辦」的時(shí)候丹擎,我總覺(jué)得他可以做得更好尾抑。比如,可以檢查試驗(yàn)別的任務(wù)蒂培,以排除代碼自身的原因再愈;可以通過(guò) Web UI 檢查異常(如果沒(méi)有賬號(hào),可以讓我提供)毁渗;可以排查主機(jī)日志或刪除緩存践磅,再不濟(jì),總應(yīng)該提供任務(wù) ID和控制臺(tái)日志給我灸异。理想的程序員永遠(yuǎn)不會(huì)等事情前進(jìn)府适,他們會(huì)用盡一切方法讓事情前進(jìn)。
第 3 個(gè)一點(diǎn)點(diǎn):Never Say No
記得從前廠離職之前肺樟,找老板談話檐春,他說(shuō)我最大的優(yōu)點(diǎn)就是從來(lái)不和他說(shuō)這個(gè)做不到。后來(lái)我發(fā)現(xiàn)在很多團(tuán)隊(duì)里么伯,都存在一種技術(shù)和產(chǎn)品的對(duì)立疟暖,程序員往往以「技術(shù)上無(wú)法實(shí)現(xiàn)」來(lái)?yè)醍a(chǎn)品的需求,而產(chǎn)品也往往以「Facebook可以為什么我們做不到」來(lái)奚落程序員。這兩句話應(yīng)該屬于禁語(yǔ)俐巴,從根本上都不利于程序猿和產(chǎn)品狗的相親相愛(ài)骨望。
一句「技術(shù)上無(wú)法實(shí)現(xiàn)」是容易出口,可有多少人在說(shuō)出這句話的時(shí)候欣舵,心里是100%肯定的擎鸠?如果不肯定,為什么不能回去谷歌一下再回答缘圈?原本我以為程序員是充滿想象力劣光,在因?yàn)橛邢胂罅Γ拍苷Q生那么多改變我們生活的軟件和互聯(lián)網(wǎng)產(chǎn)品糟把。見(jiàn)識(shí)多了绢涡,才了解大部分程序員已經(jīng)在與bug的對(duì)抗中變得保守而不愿擔(dān)當(dāng)風(fēng)險(xiǎn),與此同時(shí)許多團(tuán)隊(duì)也不愿意寬容失敗遣疯。于是「Say No」變成一種習(xí)慣性的抵觸雄可,還記得曾國(guó)藩為什么解散湘軍么?他說(shuō)那支軍隊(duì)已「暮氣漸深」缠犀,不能打仗了滞项。要做理想的程序員,就不能給自己滋生暮氣的機(jī)會(huì)夭坪,如果面對(duì)不合理的需求,可以把時(shí)間成本擺出來(lái)过椎,把曲線救國(guó)方案亮出來(lái)室梅,簡(jiǎn)單粗暴「Say No」是不可取的。
第 4 個(gè)一點(diǎn)點(diǎn):投資未來(lái)
程序員是一個(gè)非常殘忍的職業(yè)疚宇。你所學(xué)所用的語(yǔ)言亡鼠、框架、模式敷待,很可能在數(shù)年內(nèi)就成昨日黃花了间涵;你現(xiàn)在嘲笑的另一群程序員,可能馬上就能轉(zhuǎn)身來(lái)嘲笑你了榜揖。所以理想的程序員除了做好自己的本分勾哩,還要花費(fèi)時(shí)間來(lái)投資未來(lái)。什么是「投資」举哟?投資就是你現(xiàn)在投入的時(shí)間思劳,在未來(lái)會(huì)以更多的時(shí)間或者金錢(看看早幾年學(xué)習(xí)iOS的程序員現(xiàn)在的薪酬!)回報(bào)你妨猩。舉我自己的領(lǐng)域 —?數(shù)據(jù)挖掘?yàn)槔?8年左右Hadoop開(kāi)始興起潜叛,一時(shí)「大數(shù)據(jù)」概念火熱,Hadoop工程師萬(wàn)金難求,各互聯(lián)網(wǎng)公司紛紛把數(shù)據(jù)統(tǒng)計(jì)威兜、數(shù)據(jù)分析和數(shù)據(jù)挖掘的業(yè)務(wù)切換到分布式平臺(tái)上销斟。這幾年眼看 Hadoop 還在不斷迭代,Spark又異軍突起椒舵,一舉刷新了 Hadoop 保持的排序記錄蚂踊,以內(nèi)存存儲(chǔ)中間數(shù)據(jù)帶來(lái)的性能優(yōu)勢(shì)和豐富的數(shù)據(jù)結(jié)構(gòu)讓人愛(ài)個(gè)不停,各種奇異的小 bug和陡峭的學(xué)習(xí)曲線又讓人打退堂鼓逮栅。那么悴势,明眼人都知道 Spark 是未來(lái)的趨勢(shì)(內(nèi)存會(huì)越來(lái)越便宜),在主業(yè)務(wù)放在 Hadoop的條件下措伐,就可以適當(dāng)把一些小模塊切換到 Spark 上特纤,同時(shí)留意 Spark 社區(qū)的發(fā)展。很快從 Spark 獲得的性能收益就能把之前投入的學(xué)習(xí)時(shí)間掙回來(lái)侥加。
第 5 個(gè)一點(diǎn)點(diǎn):善用工具
善用工具可以分為 4 個(gè)層面:
搜索引擎
不相信重復(fù)
代碼片段
自動(dòng)化
我剛?cè)胄心菚?huì)捧存,一個(gè)計(jì)算機(jī)專業(yè)卻當(dāng)了公務(wù)員的朋友問(wèn)我,你一點(diǎn)都沒(méi)學(xué)過(guò)編程担败,平時(shí)怎么寫代碼昔穴?我說(shuō),谷歌提前,于是遭到無(wú)情的恥笑吗货,以至于我在哪里的賬號(hào)都叫2shou,告誡自己是一個(gè)無(wú)恥的二手程序員狈网。這是一個(gè)笑話宙搬,但如果現(xiàn)在問(wèn)我,我還是要回答谷歌拓哺。程序員的成長(zhǎng)就像膨脹的圓餅勇垛,外面是無(wú)邊無(wú)際的大海,圓餅越大士鸥,與大海接觸的面也越大闲孤,懂的越多,不懂的越多烤礁,而計(jì)算機(jī)科學(xué)又是一門更新?lián)Q代異常迅速的學(xué)科讼积,同時(shí)也是知識(shí)互聯(lián)網(wǎng)化最好的學(xué)科,很難利用傳統(tǒng)的科班式有教有學(xué)的方法脚仔,相反通過(guò)搜索引擎則很容易獲取到最新的知識(shí)币砂。
不相信重復(fù),大師的話叫DRY原則(Dont repeat yourself)玻侥,代碼寫多了决摧,會(huì)有人為的直覺(jué)判斷好的和爛的代碼,我的標(biāo)準(zhǔn)是簡(jiǎn)潔和規(guī)范,簡(jiǎn)潔并不是美感上的標(biāo)準(zhǔn)掌桩,重復(fù)越少边锁,給自己出錯(cuò)的機(jī)會(huì)也越少,后期維護(hù)的成本也越少波岛。
如果你不幸丟了三周前的代碼茅坛,也許你能憑著過(guò)人的記憶力把腦子里殘余的片段復(fù)寫出來(lái),但如果丟的是三個(gè)月前的代碼则拷,恐怕就沒(méi)有那么好的運(yùn)氣了贡蓖。理想的程序員會(huì)著力找尋有效的資料保存方式,把工作里靈光閃現(xiàn)寫下的代碼煌茬、腳本斥铺、配置、 經(jīng)驗(yàn)等短的片段保存起來(lái)坛善,以便任何時(shí)候都能復(fù)查晾蜘。
理想的程序員必須懶惰。對(duì)他們來(lái)說(shuō)眠屎,重復(fù)的步驟和重復(fù)的代碼一樣丑陋剔交,如果意識(shí)到一項(xiàng)工作有可能長(zhǎng)期要重復(fù),那么自動(dòng)化的時(shí)間總是越早越好改衩。
第 6 個(gè)一點(diǎn)點(diǎn):管理時(shí)間
之所以管理時(shí)間會(huì)對(duì)程序員這個(gè)行當(dāng)特別重要岖常,是因?yàn)樵谕瓿扇蝿?wù)時(shí)你必須像荒野里的狼一樣,「獨(dú)行」葫督。沒(méi)有外界約束的情況下還能穩(wěn)定控制自己腥椒,保證能高效率地工作和學(xué)習(xí),那么日積月累你肯定會(huì)變得比一般人厲害候衍。
程序員干的是高強(qiáng)度的腦力活,一般每天集中4-5 個(gè)小時(shí)應(yīng)對(duì)本職工作就足夠了洒放,但工作之外蛉鹿,一定要安排時(shí)間用于學(xué)習(xí)。除了學(xué)習(xí)往湿,留點(diǎn)時(shí)間放空自己也是必要的妖异,利用泡茶或者喝咖啡的間隙,把彌足珍貴的時(shí)間留給自己领追,往前想往后想他膳,事半功倍。
說(shuō)了這么多绒窑,想必有人會(huì)問(wèn)棕孙,費(fèi)勁心思成為一個(gè)理想的程序員,又有什么用處?會(huì)有高薪嗎蟀俊?不钦铺。能升職嗎?也不見(jiàn)得肢预。迎娶白富美呢矛洞?不如去賣狗。
稻盛和夫曾經(jīng)說(shuō)過(guò)一個(gè)故事烫映,明治時(shí)期的手藝人被天皇召見(jiàn)沼本,雖然都是不讀書(shū)的鄉(xiāng)下人,但一輩子兢兢業(yè)業(yè)地做一件事情锭沟,自然有一股高貴的氣質(zhì)抽兆。理想的程序員,應(yīng)該就是循著這種高貴的氣質(zhì)而去的吧冈钦。