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