小笨狗的編程感悟:如何成爲一個優秀的程序員

寫在前面
自今年年初,便很想寫一些文字。一來是有很多學弟學妹們經常問我,要成爲一名合格的程序員,應該具備那些知識和能力,二來,也想在工作六年之際給自己一個交代。
然而,每當動手把自己心裏要說的話付諸文字,心中總有些惴惴。
我能算作一個合格的程序員嗎?雖然進入IT這個行當已經近六年,可至今,還是有很多領域沒有涉足,還是有很多的知識我不具備,有一些還是急待了解和掌握的,比如LINQ,再比如WPF,更不要說Java,更不要說C++...
還沒有動筆,冷汗卻已打溼衣衫。自己尚且如此,何必再寫些東西騙人呢?自己落個欺世盜名倒也無妨,可誤人子弟的惡名,卻是實在承受不起的。
上週,和師傅聊起此事,師傅勸我:“有時候,失敗也是一種學習,即使你覺得自己有所欠缺,能夠讓別人從你的失敗中有所得,也是很有意義的。”
所以,就有了這篇文章。

一 編程無涯,學習亦無涯
記得畢業的時候,學校領導曾送給我一件木牌,作爲優秀畢業論文的獎品,木牌上寫有:
“博學篤志,明德求真”
回想自己工作的兩年,真的有些愧對學校領導對自己的期望。無數個夜晚,我不是在書桌邊研讀Burce Eckel的Think''in in C++,不是在小戴(作者注,笨狗的DELL本本的愛稱)上實踐書上的Sample,而是在Delta Force中沉迷,或者索性在電視臺播放的肥皂劇前發呆。
在工作中提高和充實自己,對於任何一種職業,都是必要的,對於程序員,則尤爲重要。因爲程序開發,是一項十分耗費腦力和精力的工作,而人的一生中精力充沛的黃金時期,也不過那麼十幾年。一個程序員的一生是功德圓滿還是碌碌無爲,都取決於這十幾年的時間。當然,有的學弟學妹可能會說,國外有很多年齡很大的程序員,寫程序寫到頭髮全白,直至掉光,這個我也不能否認,可是在中國,一個30歲以上的人去應徵程序開發的工作,恐怕會很難很難。何況,即使你真的能做到四十幾歲,五十幾歲,那個時候的你,怕已經爲生活的瑣事所累,能抽出的學習提高時間也不會很多。
師傅曾和我開玩笑說,做程序員的好處之一,就是總有可學的東西。這話一點不假。光是主流的數據庫系統就有MS SQL Server,Oracle,DB2,My SQL等等N多種,程序設計語言更是有Visual Basic,C,C++,C#,Java,Python等N+N多種,更不要說每個軟件差不多都要不停推出新的Verson。就拿笨狗正在研習的C#來說,自己連remoting都還沒怎麼弄通,Visual Studio 2008就已經RTM,據說其中加入了範型等N多新的特性,看來笨狗腦中的知識又要有一次大的update。
既然不愁沒有可學的東西,剩下的就是學些什麼的問題。記得大學的西經老師耿偉姐姐告訴我們,一件東西的價格和供給的數量成反比,換成不是很拽的話,就是“物以稀爲貴”。這個定理在程序員中也很適用,能熟練使用彙編語言編寫單片機控制程序的兄弟和會用VB寫Hello World的兄弟相比,少而又少,前者可能在Luccent拿着幾十萬的年薪,而後者可能在一個小公司靠着每月兩三千塊的薪水苟延殘喘(比如,我-_-!)。當然,要是有哪位兄弟可以拿匯編寫出任天堂的模擬器,每個月卻只有可憐巴巴的幾百大元,記得來TEDA找我,我倒是很願意請你吃一頓香噴噴的水煮魚,聽你一訴衷腸,同時和你一起問候一下貴公司老闆的母親。不過,彙編語言的難度和VB相比,同樣也是相差幾個數量級。所以,若想年薪幾十萬,開着Polo(或者是別克凱越,我只是打個比方)到處瘋,就要付出比別人多幾十倍的代價。(那邊的兄弟說了,他是做傳銷的,初中畢業,已經有自己的奧迪A6了,而且是一次性付款,這個~,哪位兄弟幫我去馬路上揀塊板磚回來*_*)我那苦命的爺爺曾經對我說過,要想人前顯貴,就得人後受罪,當我每個月發薪日前爲剩下幾天如何過活發愁的時候,才發現他老人家的話真的一點不錯。
當然,學東西也不是說刻意撈偏門,也要參考社會各類人才的需求程度,比如,現在社會上熟練掌握ALGOL語言的人不能不說鳳毛麟角,可是你要真是去鑽這個東西,恐怕對於自己的polo夢幫助實在有限。Why?''Cause it is out of date,man!過時啦~
所以說,學東西還是應當有一些前瞻性,從beta版本開始,是一個好的策略。也就是說,學習一門語言(或者說,學習一種語言的一個版本)應該由它的beta版本開始,這樣當正式的版本RTM的時候,你纔有機會先聲奪人。不過,值得注意的是,軟件廠家常常會在正式版發佈的時候對軟件本身做一些更動,所以正式版發佈的時候,應該注意一下軟件廠商提供的軟件文檔說明。
對於語言的學習本身,更多的是要注意勤于思考,爭取做到"think''in in XXX"(所以笨狗一向覺得Bruce Eckel絕對是個天才),也就是從語言本身的特性思考實現的特性。嗯,比如Java吧,程序的設計者所注重的是程序本身的安全性,而不是運行性能(記得看過一篇文章上說某版本的java程序在VM上跑的比VC寫的原生程序還要快,我一直很懷疑),所以既然C++中的指針指來指去的,容易出問題,索性從java中去掉,至於內存管理...C++的程序員經常會創建一個對象而忘記釋放,造成內存泄漏,所以java設計了GC。至於.net Framework,從java中借鑑了很多思想,不過比java和微軟的產品結合的更加緊密(比如,特別爲微軟的數據庫提供了System.Data.SqlClient命名空間,Oracle的支持卻是1.1才加上的),一套Visual C#標準版的售價不過一千多塊,一套企業版的操作系統或者數據庫系統則動輒幾萬塊,所以Bill Gate同樣是個天才。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章