作為程序員,身邊總是有牛逼的前輩、后輩或者同輩。牛逼的人總是讓人羨慕。比如自己苦搞一天的 BUG ,頭發(fā)快抓掉完了,人家掃上兩眼,改一行代碼,問(wèn)題就解決了;比如自己干了十年開(kāi)發(fā),薪水還不到 10K ,人家才畢業(yè)就簽了 16K 的合同;比如我要天天辛苦加班工作還干不完,人家嘛事兒不干每天就喝喝咖啡,結(jié)果寫出來(lái)的軟件居然比我的穩(wěn)定多了好用多了。這樣的事情太多太多,怎么辦?
陳勝起義時(shí)說(shuō):王侯將相寧有種乎!
作為程序員,面對(duì)牛逼的同類,其實(shí)我們也可以憤而追之:大丈夫當(dāng)如是也!
有夢(mèng)想有追求總是好的,關(guān)鍵是,如何才能牛逼起來(lái)耶?
程序員的分類
早上翻看陸其明陸老師翻譯的Jeff Atwood的書《高效能程序員的修煉》,里面有一篇文章,名字是《程序員的八種境界》,講得很好,受益匪淺。不過(guò)我打算從另外一個(gè)角度為程序員分一分類。
來(lái)自古老的儒家經(jīng)典《論語(yǔ)》的說(shuō)法:
“
生而知之者,上也;
學(xué)而知之者,次也;
困而學(xué)之,又其次也;
困而不學(xué),民斯為下矣。
”
博主魯鈍,不知道誰(shuí)能生而知之,我本人是困而學(xué)之,而后學(xué)而知之。一切從自我出發(fā),竊以為困而學(xué)之、學(xué)而知之這兩類,都可以牛逼起來(lái)。有興趣的話,可以評(píng)估一下自己是哪種類型的。
10000個(gè)小時(shí)法則
邁阿密大學(xué)的 AndersEricsson 教授寫過(guò)一篇論文——《有目的的訓(xùn)練在專業(yè)人才培養(yǎng)中的作用》(The Role of Deliberate Practice in the Acquisition of Expert Performance),介紹了他在研究“最好的音樂(lè)家”有什么共同點(diǎn)時(shí)的發(fā)現(xiàn):卓越的音樂(lè)家的練琴時(shí)間,沒(méi)有一個(gè)人小于 10000 小時(shí)。
2008 年,暢銷書作家 Malcolm Gladwell ,將這篇論文寫進(jìn)了他的新書《異類:成功人士的故事》(Outliers: The Story of Success)。
Malcolm Gladwell 概念化了原始論文的結(jié)論,宣稱存在一個(gè)“ 10000 小時(shí)法則”(10000 hour rule),即成功至少需要 10000 個(gè)小時(shí)的投入。
你造嗎,這本書出版后,成為《紐約時(shí)報(bào)》暢銷書排行榜的第一名。
10000 個(gè)小時(shí)法則背后的思想是:真正決定一個(gè)人成就的,不是天分,也不是運(yùn)氣,而是嚴(yán)格的自律和高強(qiáng)度的付出。
看到這里你可能以為博主扯淡又扯遠(yuǎn)了……其實(shí)不是的,剛開(kāi)始而已,真正扯的在下面。
我想很多人看過(guò)古龍大師的《邊城浪子》,里面的主角是傅紅雪,傅紅雪的絕技是拔刀術(shù)。我靠,簡(jiǎn)單吧。蒼白的手,漆黑的刀,刀過(guò)人亡,血還沒(méi)見(jiàn)著刀又還鞘了。這就是傅紅雪的拔刀、收刀之術(shù),關(guān)鍵在一“快”字。天下武功,唯快不破。傅紅雪的刀,已超越了速度的極限。
可是你造嗎,傅紅雪是癲癇癥患者,資質(zhì)也僅僅是中等,比起葉開(kāi),那是差了一大截,比到處留情的楚香帥,也差了一大截。關(guān)鍵是,傅紅雪永遠(yuǎn)看著都那么苦逼:在蒼茫的關(guān)外,握著刀,拖著腿,背負(fù)著于己無(wú)關(guān)的血海深仇,在“一入萬(wàn)馬堂,刀斷刃,人斷腸”的歌聲里尋覓不是仇人的仇人。
這下扯大發(fā)了,其實(shí)我想說(shuō)的是,撿來(lái)的孩子傅紅雪,資質(zhì)平庸又身有殘疾,結(jié)果卻煉成了舉世無(wú)雙的刀法,其秘訣非常之簡(jiǎn)單,賣油翁一言概之:無(wú)他,惟手熟爾。要知道,傅紅雪被不是媽媽的媽媽每天逼著練一本殘缺到只有拔刀式的白家刀法,苦逼地每天拔刀兩千次以上,拔了十幾年,你試試,要是你拔刀拔十幾年,不瘋掉的話肯定也能煉成個(gè)無(wú)影刀什么的。
傅紅雪是另一個(gè) 10000 小時(shí)法則的實(shí)例。
我很喜歡狄龍的扮相,鐘大帥哥嘛……
愛(ài)是眾妙之門
我在前面介紹了“ 10000 小時(shí)法則”,當(dāng)然那只是一個(gè)必要條件,不是充分條件。我以為要想讓 10000 小時(shí)法則有效,還有一個(gè)條件。
安·蘭德說(shuō)過(guò):
“
為了將事情做好,首先你得喜歡做這件事,而不是喜歡這件事情的結(jié)果,那僅僅是第二位。
”
想牛逼的程序員,不能僅僅盯著一個(gè)項(xiàng)目干完后的獎(jiǎng)金吧,也不能老想著忙過(guò)這陣子就可以休息了吧,也不能盼著應(yīng)用能 Run 就交差了吧……也不能老想著我學(xué)了 Scala 就能拿到 20K 的薪水吧……
牛逼的程序員很多是醬紫的:喜歡干,干得牛逼了,收益來(lái)了,機(jī)會(huì)多了。
要說(shuō)你不喜歡一件事情,有時(shí)被逼著也能勝任,但要說(shuō)你討厭一件事又能干得出類拔萃,那我不相信,最好你也別讓我相信——我懷疑你早晚有一天會(huì)人格分裂。
偉大的科學(xué)家愛(ài)因斯坦(晚年研究神學(xué))說(shuō)過(guò):“興趣是最好的老師?!边@就是說(shuō),一個(gè)人一旦對(duì)某事物有了濃厚的興趣,就會(huì)主動(dòng)去求知、去探索、去實(shí)踐,并在求知、探索、實(shí)踐中產(chǎn)生愉快的情緒和體驗(yàn),而這種愉快的情緒和體驗(yàn)反過(guò)來(lái)又會(huì)促使他繼續(xù)去求知、探索、實(shí)踐。這樣就產(chǎn)生了良性循環(huán)?!俺蔀檫_(dá)人”的欲求就會(huì)推動(dòng)著你不斷前行。
你愛(ài)編程,享受做設(shè)計(jì)、寫代碼、解決問(wèn)題的過(guò)程,再遵循 10000 小時(shí)法則,那你想不牛逼都難啊。
牛逼的方法論
前面是開(kāi)胃酸湯,現(xiàn)在到正題了,我們來(lái)聊聊一個(gè)程序員,要如何才能一步一步慢慢牛逼起來(lái)。
編碼
毫無(wú)疑問(wèn),你必須得編碼,持續(xù)不斷地編碼,要達(dá)到一定的量。
量變會(huì)引起質(zhì)變,但不是必然。
持續(xù)編碼的結(jié)果有兩個(gè),一個(gè)是達(dá)到質(zhì)變,水平不斷提升;一個(gè)是重復(fù)重復(fù)再重復(fù)最終麻木。
要哪個(gè)?
回顧與思考
要想質(zhì)變與提升,必須有目的地停下編碼!
只編碼,不走心,那是萬(wàn)萬(wàn)不行的。不走心的程序員很多,干多少年了水平還和初干時(shí)差不多,十年如一日。走心就不一樣,走心一日如十年。
我們要周期性的回顧自己,看看以前的代碼,分析下現(xiàn)在的設(shè)計(jì),看看哪些可以改善,有多少種改善思路……這樣就能看出以前的自己與現(xiàn)在的自己這兩者之間的差距。如果你覺(jué)得自己以前的代碼是翔,那恭喜你,你絕對(duì)提升了不少。
要回顧以前,還要分析現(xiàn)在。程序員還要經(jīng)常梳理一下自己的狀態(tài),看看我現(xiàn)在都掌握了什么技能,在哪些方向和領(lǐng)域有所成就,再加上對(duì)過(guò)去的回顧,看看哪些是延續(xù)性的前進(jìn),哪些是無(wú)心插柳,哪些是冤枉路,哪些是意外之喜。這樣就會(huì)對(duì)自己的能力邊界有所了解,知道自己知道什么,也知道自己不知道什么,更重要的是,你會(huì)發(fā)現(xiàn)自己能把什么東西學(xué)好用好,還能發(fā)現(xiàn)自己為什么可以把這些東西學(xué)好,那樣你就可以找到自己擅長(zhǎng)的方向,做得更好。
回顧了以前,分析了現(xiàn)在,還要想想將來(lái)。在技術(shù)上,我要在哪些方向繼續(xù)前行深入挖掘?這點(diǎn)非常重要。我們佇立現(xiàn)在,回首過(guò)去,仰望未來(lái),這是上山的姿勢(shì)啊。哈哈,上山好啊,值得期待的只有前方。
有人說(shuō)上到山頂就只有下山嘍……那,這也是真的,不過(guò),顧城有首詩(shī)《避免》可以看看:
“
你說(shuō)
你不愛(ài)種花
因?yàn)楹ε驴匆?jiàn)花一片片的凋落
所以
為了避免一切的結(jié)束
你拒絕了所有的開(kāi)始
”
作為有追求的程序員,我們不必這樣擔(dān)心吧。只管積累我們的 10000 小時(shí)去,只管思考如何有效地利用這 10000 小時(shí)去,不但過(guò)程是美麗的,將來(lái)也會(huì)是美麗的。
多學(xué)一點(diǎn)點(diǎn)
臺(tái)上一分鐘,臺(tái)下十年功。那些牛逼的程序員,無(wú)一不是付出了比普通程序員更多的精力。
我們?cè)陂_(kāi)發(fā)時(shí),會(huì)接觸各種各樣的新技術(shù)。有時(shí)因?yàn)轫?xiàng)目時(shí)間原因,很多技術(shù)只能是走馬觀花的用,解決問(wèn)題為目的,項(xiàng)目結(jié)束了可能就扔一邊兒去了。但要想讓自己有更大的成長(zhǎng),那我們就應(yīng)該學(xué)多一點(diǎn),用一分學(xué)兩分,廣里一分,深里一分,不能不求甚解一帶而過(guò)。對(duì)于用過(guò)的技術(shù),最好在當(dāng)時(shí),項(xiàng)目的間隙或者項(xiàng)目結(jié)束時(shí),抽時(shí)間了解它的背景、長(zhǎng)處、機(jī)理,讓自己對(duì)用到的技術(shù)都有相當(dāng)程度的了解。惟其如此,我們的知識(shí)面和技術(shù)深度,才會(huì)隨著開(kāi)發(fā)經(jīng)驗(yàn)而不斷遞進(jìn)。
實(shí)踐新技術(shù)
選擇或者學(xué)習(xí)一門新的技術(shù),必須要實(shí)踐??梢园阉鼞?yīng)用到工作中的項(xiàng)目,如果工作條件限制,那也要自己定義一個(gè)自己喜歡的項(xiàng)目,堅(jiān)持使用你的新技術(shù)做下來(lái)。唯有實(shí)踐,你的新技術(shù)才能理解得更為深刻。
知道有那么一門技術(shù),與實(shí)際使用過(guò),其間的差異可不止一點(diǎn)。
溝通
很多人覺(jué)得程序員比較難溝通,說(shuō)程序員不會(huì)好好說(shuō)話……你覺(jué)得呢?
我想說(shuō)的是:要想成為牛逼的程序員,溝通一定要過(guò)硬!
程序員是干嘛的?不是寫代碼的,而是解決問(wèn)題的。
解決問(wèn)題才是程序員的職責(zé)。
要解決問(wèn)題,離不開(kāi)溝通。
客戶會(huì)找你,市場(chǎng)會(huì)找你,產(chǎn)品經(jīng)理會(huì)找你,UI設(shè)計(jì)師會(huì)找你,開(kāi)發(fā)同事會(huì)找你,測(cè)試妹妹會(huì)找你,老板也會(huì)找你,女盆友會(huì)因?yàn)槟愕耐度肱c執(zhí)著愛(ài)上你也會(huì)在愛(ài)上你后因?yàn)檫@些而不斷與你爭(zhēng)執(zhí)……
哪一樣離得開(kāi)溝通呢?
當(dāng)然我不是說(shuō)程序員要像銷售、市場(chǎng)、營(yíng)銷等等崗位的兄弟姐妹們一樣妙語(yǔ)生花,其實(shí)溝通最重要的是能聽(tīng)懂別人說(shuō)什么,能把你想說(shuō)的以對(duì)方能理解的方式說(shuō)出來(lái)。至于是妙語(yǔ)連珠還是磕磕絆絆,是語(yǔ)言溝通、眼神溝通還是書面溝通,只要達(dá)到目的即可。
有人說(shuō)我天生不愛(ài)說(shuō)話,跟機(jī)器打交道才覺(jué)得踏實(shí)。其實(shí)這沒(méi)關(guān)系,你要找到自己的溝通方式,看怎樣才能讓別人理解,也調(diào)整自己的聆聽(tīng)和理解方式,看怎樣才能理解別人說(shuō)的話。
怎樣才能讓別人正確理解你的話,怎樣你才能正確聽(tīng)懂別人的話,這都需要不斷的學(xué)習(xí)、練習(xí),這方面有很多的書啊視頻啊,可供參考。這沒(méi)什么不好意思的啊,我認(rèn)識(shí)一些朋友,覺(jué)得學(xué)習(xí)說(shuō)話技巧是很不好意思的一件事兒,好像這樣做就說(shuō)明自己心懷鬼胎就多丟人似的。其實(shí)不必,我們的目的不是巧舌如簧地騙取別人的信任然后來(lái)謀取利益,我們的目的很簡(jiǎn)單,就是讓別人理解我們也讓自己理解別人。
理解溝通模型
溝通這事兒真是一門學(xué)問(wèn),雖然我在這方面一向魯鈍,還是想以我們程序員的方式,打個(gè)比方來(lái)說(shuō)明一下溝通模型。
首先每個(gè)人心里都有一個(gè) TCP Server ,監(jiān)聽(tīng)到某個(gè)端口上,等待陌生人或者熟人或者半生不熟的人來(lái)訪問(wèn)。
其次呢,不同的人對(duì)自己的端口是否開(kāi)放持不同的態(tài)度,OPEN的人就會(huì)監(jiān)聽(tīng)到知名端口,比如80、21、7、13、22、23等等,這樣別人就知道我們找這個(gè) OPEN 的家伙說(shuō)事兒該連接哪個(gè)端口。當(dāng)然,只開(kāi)放端口還不夠,靈慧的人還會(huì)慢慢把自己的協(xié)議 SHOW 給別人,這樣想找他聊天的人就可以遵循這個(gè)協(xié)議來(lái)說(shuō),事情就容易多了,雙方就都能理解。
還有一些人呢,比較內(nèi)斂,雖然內(nèi)心很饑渴,希望別人找自己聊聊天談?wù)勑?,可是不知道怎么把自己的端口開(kāi)放給別人,或者出于某種原因隱藏了端口。比如他本來(lái)是監(jiān)聽(tīng)到 21 端口上,走 FTP 協(xié)議,因?yàn)楸粍e人通過(guò)端口掃描的方式黑了兩次受了點(diǎn)不大不小的傷害,就小心地封掉了 21 端口,把自己的服務(wù)挪到了其它端口上,并且也不告訴別人。這就出問(wèn)題了,別人找不到端口號(hào),怎么和你溝通咧……
還有一些人呢,自己也不知道該監(jiān)聽(tīng)到哪個(gè)端口上,不能有意識(shí)的訓(xùn)練自己,今天是 21 ,明天就 80 ,后天又走 37 了,結(jié)果不但自己混亂,跟他打交道的兄弟姐妹們也混亂:昨天這么說(shuō)還挺融洽,今天再這么說(shuō)他居然翻臉了呢!
這是我們每個(gè)人內(nèi)心的 TCP Server 。其實(shí)每個(gè)人還有一個(gè) UDP Server ,是為那些夾生的人或者擁有特別標(biāo)簽的人準(zhǔn)備的。你可以知道我的 UDP 端口,但是你發(fā)消息過(guò)來(lái)我就不一定搭理你,被拆穿了我還可以說(shuō) UDP 協(xié)議不可靠,我沒(méi)收到……。這兩個(gè) Server 就是我們每個(gè)人身上基本的溝通模型。
最后呢,如果你要想向別人說(shuō)明你的意圖并讓別人按你的意圖去做某件事,那就要花費(fèi)精力去研究如何找到對(duì)方監(jiān)聽(tīng)的端口、使用的協(xié)議。和 OPEN 的人溝通比較容易,訪問(wèn) 80 端口,走 HTTP 就行了,或者夜半三更翻薔過(guò)去幽會(huì)也能成。而針對(duì)那些隱藏了端口和協(xié)議的,就要啟用端口掃描這種神器,掃到端口,再抓包分析協(xié)議,成功的可能性總是有的,只不過(guò)費(fèi)些力氣罷了。
用這種模型來(lái)解釋現(xiàn)實(shí)生活中的溝通問(wèn)題,程序員們就可以釋然了:啊哈,原來(lái)我給他說(shuō)的事兒他老不反應(yīng),是搞錯(cuò)了端口或者走錯(cuò)了協(xié)議。
表達(dá)自己
理解了溝通模型,找到了對(duì)方的端口和協(xié)議,還有一個(gè)問(wèn)題需要解決:你怎么準(zhǔn)確地表達(dá)你的意圖。
對(duì)于相當(dāng)一部分程序員,這是個(gè)難題。有的人本身就寡言少語(yǔ)(我是這類的);有的人很厲害,與別人說(shuō)話時(shí)腦子轉(zhuǎn)得比別人快幾倍,腦子里轉(zhuǎn)的是長(zhǎng)長(zhǎng)的帶上下文的句子,從嘴里出來(lái)后就成了嘎嘣脆的詞語(yǔ),還以為自己說(shuō)過(guò)了別人都能理解;有的人寫代碼一二三四條理清楚,說(shuō)話時(shí)就比較發(fā)散,正說(shuō)股票呢忽然就轉(zhuǎn)到APEC藍(lán)上了;有的人比較羞澀,大男人說(shuō)話卻聲若蚊蠅……總之各類情況都有,你見(jiàn)到的絕對(duì)比想到的多。
不管你屬于哪一類,要想能順暢地與人溝通,先要訓(xùn)練自己,讓自己可以準(zhǔn)確地表達(dá)。
我是不會(huì)表達(dá)的人呢,你看我洋洋灑灑長(zhǎng)文千字,其實(shí)我不大會(huì)說(shuō)話。不過(guò)我要說(shuō)的是:如果你說(shuō)不好,那就想辦法先寫好。
“寫”這個(gè)事情,比說(shuō)更容易讓人條理清楚,因?yàn)閷戇@個(gè)過(guò)程時(shí)間相對(duì)寬松,上下文簡(jiǎn)單,不像與人溝通那樣你來(lái)我往還要時(shí)刻注意話外音整個(gè)過(guò)程比較復(fù)雜。所以,寫,是一個(gè)很好的鍛煉自我表達(dá)的手段。寫作能訓(xùn)練你表達(dá)的準(zhǔn)確度。
你可以通過(guò)寫博客,寫日志等等手段,把自己的想法表達(dá)出來(lái)。然后呢,過(guò)一段時(shí)間,你能通過(guò)寫作來(lái)表達(dá)自己的了,再回頭來(lái)影響說(shuō)話,你把嘴上說(shuō)的當(dāng)作紙上寫的,多練習(xí)練習(xí),就能準(zhǔn)確的表達(dá)自己的意圖了。你看人家領(lǐng)導(dǎo)人講話還需要先打打草稿呢不是,更甚之的還有念稿子的。
找到你的小伙伴
程序員干的是技術(shù)活,找到一個(gè)談得來(lái)的小伙伴很重要,可以相互促進(jìn),消除登頂路上的寂寞。
胡一刀和苗人鳳就是好伙伴,兩人經(jīng)常切磋,水平都很高。
可能你需要在不同的階段找不同的伙伴,最好是找某方面比你牛的人一起研究技術(shù),這樣可以學(xué)到東西。
或曰:牛人為毛要搭理我撒……
“在你所有的能耐中,至少應(yīng)該有一樣是拿得出手的。不會(huì)做很多事情并不可怕,可怕的是沒(méi)有一件事情能做好?!?/p>
要培養(yǎng)自己在某方面的長(zhǎng)處,這樣就可以互補(bǔ)嘍。
其實(shí)有相當(dāng)一部分程序員離職的一個(gè)原因是:在這個(gè)公司真的太寂寞了,都找不到一個(gè)可以討論技術(shù)相互促進(jìn)的人!
-
編程
+關(guān)注
關(guān)注
88文章
3615瀏覽量
93709 -
程序員
+關(guān)注
關(guān)注
4文章
952瀏覽量
29799
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論