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