走出浮躁的泥沼:關(guān)于技術(shù)與工作
關(guān)于技術(shù)與工作
我覺得,技術(shù)與工作最理想的結(jié)合狀態(tài)是,自己能學(xué)習(xí)到新的技術(shù),這些技術(shù)也能應(yīng)用到工作中;工作的內(nèi)容又不那么枯燥,都那么具有挑戰(zhàn)性。
程序員的工作首先應(yīng)該是富有挑戰(zhàn)性的
有這么一句名言:
工作,它之所以成為工作,是因?yàn)槟阒恍枰ぷ鞫恍枰伎肌?/span>
你也許會對這句話有異議,但是大部分人和大部分工作確實(shí)是這樣的。工廠員工在流水線上機(jī)械地組裝,服務(wù)員每天重復(fù)著招待客人,廚師日復(fù)一日地烹制菜肴,等等。工作,就是人和機(jī)器之間的中間層,等到某一天機(jī)器人有這種功能了,人自然就不用工作了。
但是我覺得,如果你在工作中比別人多那么一點(diǎn)思考,也許你就會出類拔萃,程序員這份工作就是這樣。我認(rèn)為,程序員的工作首先應(yīng)該是富有挑戰(zhàn)性 的。但是我見到很多國內(nèi)的程序員,只是項(xiàng)目完了接著下一個項(xiàng)目,代碼重復(fù)了一遍又一遍……也許知道代碼有問題要重構(gòu),系統(tǒng)架構(gòu)不好要改進(jìn),可是沒那么多時 間啊,天天加班干活,項(xiàng)目時間緊迫。就這么惡性循環(huán),就應(yīng)了那句話:你說你有5年工作經(jīng)驗(yàn),但在我眼里,你不過是將一年的工作經(jīng)驗(yàn)重復(fù)了5年。
程序員的工作是富有挑戰(zhàn)性的,但是這個是在國外,在國內(nèi),很少真的有程序員,能做到程序結(jié)伴,不斷挑戰(zhàn)新的高度。大多數(shù)是年輕的時候努力奮斗了 幾年,到后來,因?yàn)楸痉较虻陌l(fā)展空間不是很大了,但是又不能跳轉(zhuǎn)到其他的方向,怎么辦呢,帶幾個新人吧,這樣也有點(diǎn)領(lǐng)導(dǎo)的性質(zhì)了。但是,有沒有想過,大學(xué) 研究生讀了這么多年,工作寫了這么多代碼,突然有一天不寫了,轉(zhuǎn)做項(xiàng)目管理了。這也就是中國的IT的現(xiàn)狀,工作幾年之后大家都痛苦地拋棄了代碼,拋棄了自 己以前的很多代碼積累。
程序員的工作與賺錢
我們出去工作,說到底,最根本的目的就是賺錢。但是,我們不能因?yàn)橘嶅X,而丟棄自己的信仰。
先來來看看這個一個故事吧:
照片上那個戴墨鏡的哥們, 叫 Nicholas McGuire, 是蘭州大學(xué)的客座教授??吹竭@個照片,和我一樣,一定有無數(shù)多的問題, 我一個一個幫你問,然后解答吧。
你可能會奇怪,這么鄭重的場合, 他為什么戴墨鏡? ??釂??
答:其實(shí)不是???,Nicholas 其實(shí)是一個半盲人。
別人都是西裝,他為什么只有襯衣 ???釂??
答:其實(shí)不是耍酷, Nicholas 真的沒有西裝,他穿的那身,是他能找到的最好的衣服。
他到蘭州大學(xué)研究什么的? 是研究戈壁生態(tài), 還是沙漠治理,還是蘭州拉面 ?
答:其實(shí)都不是,他研究開源的嵌入式實(shí)時操作系統(tǒng)——RTLinux, 以及與此相關(guān)的一切開源軟件以及嵌入式系統(tǒng),是 RTLinux 的內(nèi)核代碼管理員之一,不折不扣的高科技。
他是蘭州大學(xué)高薪聘請來的嗎?
答:沒有高薪,事實(shí)上,一直連薪水都沒有,直到今年,才申請了一些。
他是不是每年來蘭州一兩個月,就當(dāng)是度假?
答:不是,他實(shí)實(shí)在在在蘭州大學(xué)呆 10 個月, 只有 2 個月回德國老家度假。
他是不是只這樣做了 1 兩年?
答: 不是,他從 2005 年開始,直到現(xiàn)在,一直這樣。
他圖什么 ?
答: 因?yàn)樘m州大學(xué)有一個叫周慶國的老師以及小組, 不停地向 RTLinux 的內(nèi)核提交代碼。他去蘭州大學(xué),就是要和他們一起工作。
蘭州大學(xué)的學(xué)生英語如何?能和他一起工作嗎?
答: 他和蘭州大學(xué)的學(xué)生, 無論是生活都是開會還是寫文檔,通通遵循開源社區(qū)的標(biāo)準(zhǔn), 用英語交流,木有問題。
為什么選擇蘭州大學(xué)?
答:因?yàn)樘m州大學(xué)有一個叫周慶國的老師以及小組, 不停地向 RTLinux 的內(nèi)核提交代碼。
周慶國老師拿到過國家項(xiàng)目的資助嗎?比如發(fā)展開源軟件基金,紅旗 linux 神馬滴。
答:幾乎沒有,蘭州地處西部,離北京很遠(yuǎn),拿到項(xiàng)目很難,他能作的就是不停地研究代碼,提交代碼,向開源社區(qū)貢獻(xiàn)代碼。
這個與賽靈思有什么關(guān)系?
答: 當(dāng)他聽說賽靈思的在 ZYNQ 的 QEMU 模型上跑的開源 Linux 內(nèi)核推出了,并且發(fā)布在 wiki.xilinx.com 上,立即就開始下載研究,跑起來, 即沒有要項(xiàng)目經(jīng)費(fèi),也沒有要資助和捐贈,因?yàn)樵陂_源人的眼里——無論是開源軟件還是開源硬件,開源就象信仰一樣,無需證明。
看完這個故事有什么感想嗎?
不是每一個程序員都要成為比爾·蓋茨,都要建立商業(yè)帝國成為世界首富。也不是每一個程序員都要做馬化騰,建立QQ帝國君臨天下。但是我覺得,每 個程序員都應(yīng)該向Dennis Ritchie(C語言之父)學(xué)習(xí),在貝爾實(shí)驗(yàn)室默默為計算機(jī)界奮斗一生。每個程序員都應(yīng)該向Linus Torvalds學(xué)習(xí),寫出改變計算機(jī)世界的Linux但卻不爭名奪利。比爾·蓋茨、馬化騰是IT商業(yè)化的代表,而Dennis Ritchie和Linus Torvalds則是計算機(jī)界學(xué)者的先驅(qū)。
臺灣作家龍應(yīng)臺說了這么一句話:你可以選擇做官,你也可以選擇掙錢,但你不能選擇通過做官來掙錢。
同樣的,對程序員而言,你可以選擇研究技術(shù),也可以選擇賺錢。但是以賺錢的心態(tài)去做程序員,那么你也許會品嘗不到技術(shù)的很多快樂。程序員是一個 職業(yè),一個專業(yè)的職業(yè),那么作為一個程序員應(yīng)該有一個專業(yè)上的目標(biāo),賺多少錢和程序員的專業(yè)素養(yǎng)沒有關(guān)系,你可以把賺多少錢開寶馬作為人生的目標(biāo),但是你 作為程序員的目標(biāo)不應(yīng)該是賺錢??梢赃@么說,現(xiàn)在行業(yè)內(nèi)的程序員很多都不是真正的程序員,對那些做著程序員工作的代碼工人來說,程序員只是一個混口飯吃的 工作而已,那么工作的目的就是賺錢,盯著錢看就沒什么不對了。人生目標(biāo)和自己的專業(yè)目標(biāo)分不清楚,難怪哪頭都討不到好。專業(yè)和職業(yè)是兩碼事,專業(yè)關(guān)注的是 你做事的能力,職業(yè)關(guān)系的是你在公司的職位,這個東西理不清楚就只能是兩頭不討好。真正的程序員應(yīng)該是個熱愛技術(shù)的Geek,喜歡創(chuàng)造與挑戰(zhàn),享受技術(shù)帶 來的喜悅與創(chuàng)造帶來的成就感,而非不斷編寫著一遍又一遍重復(fù)code的碼農(nóng)。
作為程序員應(yīng)該追求的是自己專業(yè)素養(yǎng)上的提升,作為一個職員應(yīng)該向著高薪努力,當(dāng)然有的程序員自己又是老板,比如康盛創(chuàng)想的戴志康 ,那么作為老板又有另外的追求了。我覺得作為一個程序員,在一個程序員的社區(qū)里應(yīng)該關(guān)注的是自己的專業(yè)而不是在這里大談程序員怎么怎么賺不到錢。
也許,每一個程序員在開始的時候都想過要寫出非常牛逼的程序,做個人人崇拜的高手,直到有一天,他發(fā)現(xiàn)他的代碼并不能改變世界的時候,就會向現(xiàn)實(shí)屈服,甚至拋棄往昔自己喜歡的編程。
與程序打交道,是我們選擇的工作,也是我們選擇的職業(yè)。程序員,應(yīng)該是一個值得驕傲的稱號,而非是碼農(nóng)的代名詞。走出浮躁的泥沼,我們會找到另外一個不同的自己。
學(xué)會享受學(xué)習(xí)過程的樂趣
學(xué)習(xí)是一輩子的事情,對于程序員來說更是如此,所以如果沒有學(xué)會享受學(xué)習(xí)過程的樂趣,那么學(xué)習(xí)將會是你人生的一個重壓。
以學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)為例。大家都知道,對于程序員而言,數(shù)據(jù)結(jié)構(gòu)是基礎(chǔ),是必須學(xué)會的課程。但是現(xiàn)在很多語言,細(xì)節(jié)都封裝得很好,比如 Java、.Net、PHP,幾乎都不需要你用到多少數(shù)據(jù)結(jié)構(gòu)與算法的知識,以致于很多人覺得,我就不會數(shù)據(jù)結(jié)構(gòu),我還不一樣好好工作嗎?這就是浮躁的開 始了。
的確,對大部分程序員來說,工作上很多時候不需要用到數(shù)據(jù)結(jié)構(gòu)。但是你會發(fā)現(xiàn),工作若干年后,你的技術(shù)水平會停滯不前,做的東西總是CURD, 再加上一點(diǎn)設(shè)計模式,再者可能有NoSQL、memcache之類的應(yīng)用。但是,當(dāng)你寫這些代碼寫到疲軟的時候,你會發(fā)現(xiàn)這些都是應(yīng)用層面的東西,別人做 好的現(xiàn)成的東西,到你想理解它們底層與原理的時候,沒有數(shù)據(jù)結(jié)構(gòu)與算法的知識支撐,你會很吃力。勿在浮沙筑高臺,盡管你開源軟件用得多好,如果不去理解計 算機(jī)的底層,頂多也就是個高級點(diǎn)的碼農(nóng)。
要走出浮躁的泥沼,只要理解一句話就行:
學(xué)習(xí)的真正樂趣不是因?yàn)樗杏茫且驗(yàn)閷W(xué)習(xí)的過程本身有趣。
所以你需要去發(fā)現(xiàn)學(xué)習(xí)過程有哪些樂趣,還是拿數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)為例。
1. 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)在短期內(nèi)不會對工作有什么效果,但它是對未來以及自己的投資。學(xué)習(xí)它你一定不要浮躁,不要覺得它短期內(nèi)收益不大就不去學(xué)習(xí)。摒棄浮躁的第一步就是,不要帶著功利的眼光去學(xué)習(xí)。
2. 數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)幾乎都是從線性表開始,然后講到最重要的單鏈表。單鏈表的基本操作就建表、插入、刪除、查找等,如果你把這些操作都學(xué)完了,是不是該立即進(jìn) 入堆棧的學(xué)習(xí)呢?我的建議是,不。“學(xué)習(xí)”是一個實(shí)際上不應(yīng)該分割的詞匯,只有“學(xué)”沒有“習(xí)”將必然導(dǎo)致膚淺。當(dāng)學(xué)完單鏈表的基本操作,你需要做更多的 “習(xí)”。這時候你需要嘗試著研究下面的問題:單鏈表的逆序、求單鏈表的倒數(shù)第N個元素、單鏈表的排序、單鏈表的環(huán)……等等。當(dāng)你對單鏈表的學(xué)習(xí)進(jìn)入某種境 界,才進(jìn)入堆棧的學(xué)習(xí),這樣你的單鏈表就很扎實(shí),同時學(xué)習(xí)堆棧也會變得很有效率。你可以參考我之前所做的專題:《數(shù)據(jù)結(jié)構(gòu)物語卷二》 。
千萬不要覺得這很浪費(fèi)時間。左學(xué)點(diǎn)右學(xué)點(diǎn),散沙式的學(xué)習(xí)才浪費(fèi)時間,連續(xù)的思考才是高效的。
3. 享受思考的樂趣。數(shù)據(jù)結(jié)構(gòu)一開始學(xué)也許你會覺得有點(diǎn)難,比如插入一個數(shù)據(jù)都要涉及幾個結(jié)點(diǎn)的地址操作,但是當(dāng)你思考并完全理解為什么這么做,你會有一種豁 然開朗的感覺。并且更重要的是,每解決一個單鏈表的問題,就相當(dāng)于做了一次思維訓(xùn)練。思維訓(xùn)練做得多了,對單鏈表的理解就更深了,以后解決問題就更快。我 們可以這么認(rèn)為,每做一次思維訓(xùn)練,都能夠使我們的思維加速,使我們的大腦加速。為什么牛人一看問題就能知道如何解決?很簡單,因?yàn)樗鲞^普通人無法想象 的大量的思維訓(xùn)練,正如巴菲特7歲就開始拜師學(xué)投資一樣。沒有人天生就是大牛,對吧?
4. 關(guān)于學(xué)習(xí)的欲望。很多人心里知道,我要學(xué)習(xí),但是總是容易被分心。一會看看微博,一會折騰下其它什么東西,結(jié)果半天還沒看得進(jìn)一點(diǎn)東西。不要假學(xué)習(xí),不要為不學(xué)習(xí)找理由,沒錢?沒時間?累?只要你內(nèi)心堅定且欲望強(qiáng)烈,就會主動學(xué)習(xí)。
可以看看這篇文章:另外八小時,用辛勤換幸福。如果能把寫博當(dāng)作是一種放松,如果能把寫博當(dāng)作一種享受,不帶任何功利的雜質(zhì),那么你就會非常強(qiáng)烈地想去寫博。(對我來說,寫博就是學(xué)習(xí))
你可以嘗試下早上6點(diǎn)半起來,學(xué)習(xí)一個小時再去上班,效果很好。這篇文章就是我早上6點(diǎn)多開始寫的。學(xué)習(xí)大部分時間是一個人的活動,難免會有孤獨(dú)感,當(dāng)你精力高度集中時,孤獨(dú)感會減少。當(dāng)你全神貫注的時候,甚至?xí)械缴硇挠鋹偂?ldquo;耐得寂寞不寂寞,耐不住寂寞反寂寞。”
5. 不要被厚厚的書嚇住。有的人也許會說,你看,數(shù)據(jù)結(jié)構(gòu)那么多章節(jié),你光單鏈表這一章就做了一百多個練習(xí),花了一兩個月,什么時候才能看得完???我說,學(xué)習(xí) 沒人逼你進(jìn)度,隨意看,什么時候覺得自己精通了再轉(zhuǎn)入下一個學(xué)習(xí)階段。過早地進(jìn)入下一個階段只會讓你過早地忘記前面的知識,比如草草地看了單鏈表的基本操 作,就去學(xué)堆棧,過一個星期我問你單鏈表的反轉(zhuǎn),你也許就會一時想不出。所以我認(rèn)為:
堅持做一件事,直到達(dá)到一個境界——至于是什么境界,我不知道,你才知道——然后才開始做另外一件事。
6. 你對學(xué)習(xí)有如饑似渴的感覺嗎?對待學(xué)習(xí),我很推崇完美主義。比如單鏈表的基本操作弄懂了,寫程序過了一遍,然后開始研究它的各種常見操作。都研究完了,開 始研究比較少見的操作,帶頭結(jié)點(diǎn)與不帶頭結(jié)點(diǎn)的都要過一遍。然后翻遍互聯(lián)網(wǎng),看看有沒自己疏漏的。發(fā)現(xiàn)有疏漏的,你會很高興,馬上再寫程序自己過一遍。直 到Google搜索“單鏈表”前100頁的結(jié)果你都能馬上知道什么回事,知道怎么做,嗯,那就差不多了。
很瘋狂嗎?在常人看來也許是。但是對我們自己來說,不這么做,很難達(dá)到某種境界,或者說,精通。對知識的如饑似渴的時候,當(dāng)?shù)玫叫碌陌l(fā)現(xiàn)新的知識,你會得到很大的滿足感,而且一路走來的成就感,也是對你之前努力的最大回報。
那么,從現(xiàn)在開始,逃離浮躁的泥沼,享受學(xué)習(xí)過程的樂趣。