本篇文章是程式設計師修煉之路的第八篇。

程式設計師修煉之路系列我決定將他定位於提升程式設計師素養的專欄,我會分享更多好的文章。

感謝原作者,因為你讓我思考

原文出處:http://blog.csdn.net/yzsind/article/details/6168854

再次寫給我們這些浮躁的程式設計師

2010年初寫過一篇部落格(我們是一群和平年代充滿浮躁與抱怨的程式設計師),一年過去了,社會好像更浮躁,也有網友問我這方面的問題,於是有了下面這篇文章,再次寫給我們這些剛入行浮躁的程式設計師,如何成長,以下是列出了一些成長的心得,我們不必每條都去實踐,但是優秀的程式設計師成長過程中總會實踐裡面的幾條。

多做專案,多思考

不要害怕做事,剛畢業的同學最缺的就是工作經驗,亂七八糟的專案能讓你很快就瞭解了一個公司的業務與使用的技術,並且可以多接觸同事與客戶。

當你畢業後剛進一家公司時,如果主管沒有把你安排到專案組工作,那真的很杯具,因為他認為你還不能勝任工作或者你的加入會讓專案組更糟。

還有人說,我剛進公司,公司就把我當成了苦工,工資又低,專案組加入好幾個,也做了很多事情,每天都要加班。我估計有很多人感覺是這種狀態,為什麼會是這樣,因為全國人民(不只是程式設計師)裡有90%可能都和你一樣的感覺,這說明你現在狀況是很普遍的,也說明你現在的能力並沒有很多出眾的地方。也許是逆境才能讓人成長,如果有一天你讓你的團隊從這些苦力工作中解脫出來或者能給你的團隊前進的動力,那你就昇華了,你就比他們出眾。你沒有能力去改變現狀,所以只能接受,而不要認為是自己生不逢時,或者說公司環境太差。創業也一樣,不要認為公司沒發展的主要原因是環境太差,那你不要去當老闆算了,投資環境都非常好還能輪到你嗎。

還有很多同學感覺自己付出了很多,回報太少,這個問題很難平衡,首先一點,公司在聘你進來後不會因為你沒有成績就先給你回報,公司也不可能會在你有了成績後就立即給你回報,但是長時間付出沒有回報,那這個公司就不值得你付出。我不贊成頻繁換公司,這麼做至少可以說明你是一個只求回報不求付出的人。

至於薪資的問題,這個很難去評估,因為每個企業的收益相差太遠。但是剛畢業的同學工作需要關注薪資+成長環境,當薪資可以滿足普通生活需求後,成長環境更為重要,就好比,給你一月5000元,或者6000元,真的不那麼重要,因為這些收入在你以後的人生中基本沒有影響。當然,如果你現在在大城市幾年裡每個月只拿著1000元,那還是需要選擇一下收入更好的公司,因為這麼低的收入會嚴重影響你的工作學習計劃,也說明你的公司不重視員工,沒有能力給員工好生活的公司,將來的發展也是有限的。

特別說明一點,網際網路公司與傳統資訊化企業不一樣,網際網路一直是風險比較高的行業,也許你選擇了一個看好的企業,也佩服老闆的眼光,可能你現在需要的是與公司同甘共苦。不要指望在剛創業的團隊裡拿到非常好的待遇,因為你現在就是在投資,也許幾年後公司成功了,你就是功臣,不怎麼出色的你也可以當上總監或副總裁。

自己開發框架與工具來提高工作效率

當你參與了很多專案,當你發現自己經常做一些COPY,PASTE的操作時,你可以考慮花時間去提取問題的共性,做一些自動化工具去擺平問題,或者是寫一些基礎框架來遮蔽這些無聊並且累贅的程式碼。

自己開發框架與工具,可以讓你快速的從一個初級程式設計師轉變成更高階的程式設計師或分析師或架構師,因為這個過程中給你提供了為其他程式設計師服務的機會,你有動力去了解其它程式設計師的工作需求,你可以把你的框架或工具寫得很好,介面簡單靈活並且效能好,分析師和架構師就經常要幹這種讓人力成本降低的事。但要記住一點,不要以為自己開發框架與工具就認為很NB了,因為這種工作並不會體現多少技術含量,而只是提高個人抽象問題的能力,這個活很多程式設計師都能幹,但是很少人去幹好。

參與開源專案

參與開源專案可以讓你領略到不同程式設計師的溝通方法,開發習慣,技術思維,可以認識更多的朋友,如果你足夠強,也可能一舉成名哦。可以讓你更深入瞭解這個開源東西,所以最好是感興趣或者是與工作有關的,不要說什麼流行就參與什麼。開源專案可以自己貢獻一個新的專案,或者參與一個感興趣的專案。

不要指望開源專案會給你帶來直接的金錢,如果你想拿著開源專案封裝一下去發財,那我真不知道如何做,可以去問問什麼什麼芯,什麼什麼國產作業系統的人,他們更有經驗。

英語

在這個全球資訊時代,英語真的是一個很重要的工具,我真的很羨慕那些學校裡英語就很好的同學,好的英語能力可以更快速的瞭解到更多知識。當前,新的技術與知識大部份語言都是英語或翻譯成英語,如果能把英語學好,可以讓你人生少奮鬥10年。

寫技術部落格

寫技術部落格是一種可以快速提高的方法,但是一個人能堅持每週寫技術部落格,那是需要付出很多代價,寫部落格並不是要我們寫出高質量的文章才發表,我們可以分享自己的一些小經驗,也可以分享自己的體會。一樣東西在你大腦裡,並不表示你已經掌握了,如果你能說給別人聽,或者用文字表達出來,那首先你要將這些知識點整理清楚才好表達。我經常認為自己已經對某個問題了解了,但是在整理技術部落格時發現自己的知識盲點,然後再去查詢知識來補充自己的盲點,直到最後搞清楚了才算告一段落。

有些人不喜歡分享或者害怕分享,但是在這個世界,只要不是公司機密或商業祕密,拿出來分享可以讓你得到更多同行的反饋,網路上的人會給你相對真實的反饋,因為大部份人與你沒有利益關係。

新人不要害怕自己分享的知識是否有技術含量,只要你認為有價值,都可以拿出來,這不僅可以給別人提供知識,也可以自己整理思路,還可以得到網友的反饋。如果你的知識沒有價值,分享出來也沒有關係,如果你的文章技術含量低,怕被人鄙視,那是你這個人不敢承認現實,因為同事與朋友可能不會說你的文章很菜,就算被鄙視了又如何,有時被人鄙視也是一種前進的動力。有人說如果幾年後我進步了很多,但還讓人看到我這些初學時弱智的文件,誤人子弟,不好意思,Ok,那個時候有可以完全把文件刪除,其實我更喜歡放在那裡品味自己成長的過程,把有誤導的地方更正。

我知道有一個技術部落格作者,資料庫專家楊廷琨(http://yangtingkun.itpub.net/),他幾年來,每天堅持寫一篇技術部落格,現在已經有2千多篇,我的ORACLE資料庫水平比他差很多,但是我也偶爾看到一些他新寫的文件我幾年前就會了,但這些並不妨礙我對這位部落格作者的敬佩,因為他的部落格讓我學到了很多知識。

加入感興趣的技術論壇

每個公司使用的技術與產品及環境都不太一樣,也許你在公司裡感覺什麼東西都是別人做好了,我只是個流水線工人,我們的系統由於有嚴格的規範也不太出問題,自己的實踐提高機會太少,那建議你加入感興趣的技術論壇。

技術論壇上你可以看到很多人各種各樣的問題與分享討論,你也可以試著去幫別人解決問題。技術論壇可以讓你進一步成長,但不要告訴我你只是會沙發、頂或接分的那種。

國內CSDN、ITPUB、CHINAUNIX、JAVAEYE、MSDN、51TESTING都是人氣很旺,裡面也不缺技術大牛與無敵大菜鳥。

常看參考手冊

很多程式設計師,遇到問題喜歡直接去請教別人,或是Google找結果,通過別人或Google也許問題可以解決,但是隻能形成知識點,不能形成知識體系。

要全面掌握一個東西最快的方法是看產品的官方參考手冊,參考手冊一般是代表正規的用法或者是推薦的用法,對於小產品最好是先將參考手冊全部看一遍。如果是比較大的產品如(ORACLE、JAVA、.NET)那可以選擇看經常使用到的部分。只有當你在看完參考手冊還不懂的時候再去Google或與別人探討,這樣的方式會讓你的知識更體系化。

深入分析問題原因

程式設計師一定要具備對技術問題刨根問底的想法,很多程式設計師能解決問題,但是不想去了解問題的根源。我們經常遇到問題,而且很多問題重啟程式或者重啟機器就好了,有多少程式設計師會去挖掘重啟就解決問題的原因。我是從事資料庫的,也經常看到很多人遇到資料庫有問題,重灌一下搞定,而沒有深入分析問題產生的原因。也許在生產環境我們沒有時間去分析,但是在開發環境、測試環境你是不是也經常重啟解決問題。如果能在開發環境與測試環境遇到問題,這是技術人員成長的最好機會,我們在自己的領域一定不能放過這種成長的機會,因為大部份專家都是在這種歷練中出來的。

不要害怕複雜

很多程式設計師習慣了利用各種框架及工具解決問題,自己只是寫一些簡單邏輯,當有一天遇到一個問題,沒有對應的框架或工具時就放棄需求。我們不要害怕困難,如果你每天的程式碼都沒有挑戰,那何來提高,我們應該在適當的時候給自己一些壓力,這樣可以讓自己提高得更快一些。比如你的系統需要一個輕量級的工作流引擎、編譯器、解析器、介面設計器、螢幕控制器,或者一個http伺服器之類的東東,但是現有的東西都感覺不太滿意,你可以自己去搞一個試試,不要害怕不成功,不要害怕自己做不好。這些東西看起來有點複雜,但是當你深入去做時,你會發現裡面有很多有意思的東西,你需要去逐步改進你的小系統,直到它能很好的執行為止,這是個很好的成長過程,可以讓你對程式有更深的理解,也可開啟思路。

學習計算機基礎,深入技術原理

有時候我們經常迷惘,感覺技術水平沒有提高,感覺技術能力總是浮在表面,特別是當你發現自己演算法分析、效能分析、故障診斷能力有限時,也許這是你再次需要學習計算機基礎的時候,因為基礎不牢,所以你的問題診斷準確率不高。每個程式設計師應該都學過計算機基礎(計算機體系、作業系統、網路、資料庫原理、演算法等等),這些知識對很多人來說是很枯燥。在當前高階程式語言時代,你的計算機基礎不好也能編碼,而且效率也不低,但是當你要想成為技術牛人,計算機基礎就是一道坎,因為不紮實的計算機基礎知識會讓你在忽悠與被忽悠中成長。

關心產品市場與商業動態

程式設計師是否需要關心產品市場與商業動態,我認為是有必要的,除非你真是技術天才,能閉關十年後橫掃江湖。計算機技術發展太快,每年都有新的流行產品與技術,大公司也經常改變戰略或易主。如果你想引領技術潮流,想創業,那一定要關心產品市場與商業動態。

不要去輕視任何一種職位、語言、工具

在IT崗位裡,沒有高低之分,不要去輕視任何一種崗位,有些程式設計師認為自己的成果最有價值,美工、測試只是邊緣崗位,專案經理就只會瞎指揮,不幹活,銷售人員與售前人員接到定單後屁事都沒有,整個專案基本上就是我一個人的成果。這種心態是最要不得的。其實你的領導並不會這麼想,很多事情是你不知道的,如客戶關係就可能不是你一個人搞定的。還有最重要的一點,如果這個專案沒有你參加怎麼樣?專案可能換成另外一個人做,也許他也能做得也不錯,這就說明你的價值或重要性並不像你想象的那麼重要。舉個例子:

就好比你買一臺聯想電腦4000塊,賣給一個沒看過電腦的火星人20000塊,這臺電腦是最後的成果,但是否表示聯想這臺電腦是最重要的,可能你買一臺戴爾的電腦還賺的錢更多,也可能你只要給對方一臺雜牌電腦就可以拿到20000塊。在這個例子裡更重要的也許是客戶關係與抓住商機,而買什麼樣的電腦影響不大(你在專案裡的地位可能就是這臺電腦的作用,沒有你肯定不完整,但是很容易找到你的替代品,所以你的價值並不是最重要的)。

計算機程式語言是初學者最喜歡對比的話題,有的大師也經常對比各種語言的優缺點。我並不反對的評論那種語言的優劣,但我們不能去鄙視某種語言的及其使用者,因為流行的語言都有它生存的環境,可能是我們對技術的見識太窄,也可能是我們對人類的思維習慣瞭解的不全面,不要總是拿自己的習慣去評價。有很多系統管理員喜歡用命令列,喜歡用shell,perl等指令碼語言,這些東西在我看來簡直是低效且易讀性差的東西,但是當你經常在沒有圖形介面下工作時,指令碼語言可能真是更高效的選擇。

最後寫上一句浮躁的根源:

不要把祖國當母親,應該把祖國當自己的孩子。

本不想講這句話的,但是現實就是如此,浮躁的人群總是對社會充滿了意見。我認為所有的這些浮躁都有一個共同點,就是認為自己無法改變這個社會,改變這個社會是國家的事,是其他人的事。

小時候老師總是講祖國是母親,我們是花朵,但是實際上我們也不是什麼花朵,我們就是鄭智化歌裡的那根“小小的草,風吹雨打後依然不倒”。現實的社會總是充滿著種種不平衡,但是浮躁並不能解決問題。有時總在想祖國並不像我的母親,她更像是我的孩子,她還很小,經歷過很多坎坷,我們經常感覺自家的孩子比不上別人的孩子的某個方面,於是對孩子多加責罵,也可能會讓她花一個暑假的時間去補習。小孩子有一些成績後也會驕傲,有時還會欺騙,我們不能容忍的是她的惡意謊言,但是她還沒有到無藥可救的程度,她依然還在成長。我們經常拿孩子與別人的孩子對比,而且總是發現別人孩子更好的一面,但是你是否希望與別人交換孩子呢,除了感情外你是否瞭解別人孩子的全部,我們需要更多的面對現實,應該在孩子成長的時候及時指出她的缺點,她不可能什麼都是優秀的,所以我們應該儘自己的能力讓她更好一些。你不太可能改變母親,但是你的行動會影響孩子,你拋棄孩子,你真正的孩子將來可能也會拋棄你,所以說祖國可能並不像母親,更像孩子,如果你把祖國當孩子,也許是另一種人生價值。

2011-1-29

本系列其他連結: