優秀程序員之道

 前面多章都講述了自己在成長過程中遇到的種種經歷,困難和挑戰。很多網友回覆說,除了希望看到能引起他們共鳴的東西外,還希望從中能學到一些對他們在程序員道路上儘快成長能起作用的東西。

我理解他們的心情,在壓力如此之大的今天,誰都希望能夠縮短成爲高手,或者成爲熟手的過程,這樣才能爲自己爭取到主動權。正如練武之人,都希望得到一份武林祕笈,讓自己早日進入新的境界,雖不至於欺負別人,但至少可以用於自保。
    這裏我總結自己對於成長的一點認識。當然,也許對你有用,也許又沒用。
    首先我要強調程序員的基本素質。這正如你想練武,那麼首先得看你有沒有練武的資質。在這些資質中,我又比較強調以下幾點:
    一是熱愛
所謂做一行,愛一行。只有當你熱愛編程,熱愛你的工作時,你纔可能全身心的投入,纔可能精神飽滿,纔可能不知疲倦。如果你只是把編程當成一種維持生存的工作,而缺乏投入,那你就不可能爲之付出努力,也自然不可能成爲一個優秀的程序員。
    二是勤奮
    對於我來說,一個程序員可以沒有天賦,但絕對不能沒有勤奮。很多程序員經常加班加點,有些是被迫的,但有些是自願的。當你熱愛它時,你應該會忘記時間,忘我投入。有些程序員,每天準點上班,和工廠上班一樣。對於我來說,當手頭的工作沒有一個階段結果時,比如函數還沒有編寫完,編譯還存在若干個錯誤需要修正等,是不可能馬上走人的,必然要到解決了這些問題纔算結束。
對於我周圍的年輕人來說,有這樣心態的人越來越少。對於這點很是遺憾。年輕氣盛的時候不願意付出,不盡快積累經驗,提高自己的能力。那麼以後就很難有很好的競爭力。等到成家後,就更難有機會了。反而是現在三十歲以上的程序員,還具有十年前的勤奮努力的作風,往往是公司裏下班最晚的那一批。難道這不值得年輕人學習麼。
    三是責任
    程序的質量可以說代表着一個程序員的優秀程度。編寫千瘡百孔的代碼的程序員,不可能是優秀的程序員。一個優秀的程序員,要具有敏銳的眼光,能夠捕捉到程序潛在的問題,能夠快速的定位到錯誤的位置並找到原因。這個素質,來自於責任心。不負責任的程序員,馬馬虎虎的程序員,是不可能具備這個素質的。
    我的同事經常很佩服我,爲什麼總能發現別人沒有發現的錯誤。舉個簡單的例子,比如一個文檔中的錯別字,一段代碼中的邏輯錯誤。這一方面來自於經驗的積累,這個大家隨着時間的推移都會具備;另一方面則來自於自己對問題的敏感,我的第一感覺就會去尋找各種可能存在的問題,所以我能發現這些問題。如果你不把它當做一種責任,那麼你就會漠視它。曾經有個同事,寫的代碼就讓我痛苦萬分。很多淺層次的問題都沒有發現,居然就告訴我已經完成任務。從別人出現的錯誤類型,我就可以說這個人到底有沒有責任心。
    也許他會辯解說他就是沒有發現,並非主觀故意。那我只能說,他不適合做程序員,更不可能成爲一個優秀的程序員。
    四是進取
    進取是程序員成長的必然環節。不思進取的自然不用說了,永遠原地踏步是不可能成爲優秀的程序員的,而且只會被日新月異的新技術所淘汰。有一顆進取心是必要條件。但你還需要掌握合適的學習方法和學習途徑。比如,從網絡中搜索所需的知識,能夠充分利用網絡資源,找到自己所需的材料,能夠將新的技術和方法引入自己的系統;從別人的代碼中學習編程的思想,能夠理解別人代碼的思路,能夠改寫他人的代碼爲自己的系統所用;從工作中進行經驗的積累,能夠對自己的工作進行改進和重構,能夠總結自己的進步和不足,能夠進行自我完善。
    當然,還有很多其它的基本素質。對於成爲優秀的程序員來說,都是相當重要的。
 
    其次就是評價一下自己。我只能屬於一個比普通程序員強,但還不夠優秀程序員標準的程序員。這並不是謙虛,而是有理由的。
    從大學開始到現在,從來沒有學習過C++語言和WINDOWS編程。大學裏只有C語言課程。工作了直接使用VC++進行排版軟件的開發。和大家一樣,都從HELLO WORLD起步。由於跳過了C++語言這一步,因此到現在對一些基礎的概念還不是很清楚,可以說是一知半解。由於WINDOWS編程沒有學習過,因此,論壇中很多帖子問道一些知識性或原理性的內容時,我一般保持緘默,因爲自己實在是不知道爲什麼。
    到現在爲止,只看過一本VC++ 5.0的掃盲書,主要看的是界面和控件的使用方法。其它的就沒有看了。我不是一個愛看書的人。所以很多網友問要看什麼書才能更快的進階或入門,我實在是沒有什麼發言權。但是從我個人的成長曆程來說,由於沒有預先對一些知識的瞭解和掌握,確實讓自己走了很多的彎路。可以說,自己的經驗積累,更多是靠失敗的教訓得來的。通過失敗,我明白哪種方法可以,哪種方法不可以。但又缺少理論支持,不清楚爲什麼這種方法可以,那種方法不可以。
    我想這些就夠說明我還沒有達到優秀程序員的境界,還有很多優秀程序員的基本素質不能滿足。我感覺自己就像個有許多實踐經驗的文盲,靠經歷明白事理,但卻又無法給自己解釋。
 
    最後我想說一下自己的一些學習方法。我想文盲也是有自己的學習方法的。
    第一就是實踐
    我從來不願埋頭看書。因爲人的抽象能力有限。也許書本的前幾章能夠理解,但後續的章節,基本上是很難吸收的,因爲對前幾章的基礎還沒有深刻的理解。那麼要想理解,那就只有付諸於實踐。就像游泳一樣,不下水,看再多再全的動作要領也是沒有作用的。有些網友確實也進行了實踐,但往往過於簡單。我所說的實踐,應該是在一個較大的項目中的實踐。因爲小項目的代碼,很多編程的思想難以體現,比如封裝,多態,繼承等。所以一定要在較大的項目中,通過反覆提煉,反覆重構來使得代碼達到一個最佳的實踐。
    很多程序員,往往淺嘗輒止。不求代碼的優化,不求結構的合理,只管完成任務。那麼,你就很難有提高。只有在優化和重構中,你才能收穫自己編寫代碼的最佳實踐,形成自己的編碼風格和程序結構設計思路。
    第二就是拿來主義
    做項目和搞研究不同,往往工期壓力很大。那麼,爲了達到一個理想的效果,對於一些技術問題,卻沒有足夠的時間來完成,怎麼辦。此時就要用到拿來主義。現今網絡技術非常發達,開源比比皆是。我們要充分利用這些資源。從中獲取我們需要的東西,直接或者稍加修改,就可以應用到項目中。比如一個控件,一個表格,一個文件解析模塊等等。但我們的目標不能僅僅到這一步。其後要對這些內容進行理解,至少要做到能夠進行修改。比如一個控件實際需要的效果有所差異時,我們能夠改進;功能有缺陷時,我們能夠解決。這才達到拿來主義的效果。
    有些程序員喜歡自己從零開始編寫基本模塊。例如編寫自繪製控件,自己從CWnd類派生後進行所有的處理來完成功能。我不贊成這樣,除非別無選擇,或者公司從戰略上需要有自己獨立的界面庫。這些程序員,往往過於追求底層的技術開發,而忽略對系統業務的理解。我只能說,他們更適合於一些有特殊需求的單位。
    第三就是交流
    有些程序員,不善於交流。自己一個人矇頭幹。當單位中有經驗豐富的程序員時,也不向對方請教。交流是程序員成長很重要的方法。通過交流可以學習他人所長,更加重要的是,可以大大縮短自己成長的週期。有些人遇到一個問題往往會卡住半天,最後可能出來一個不理想的結果。殊不知他的問題別人早就有很好的解決辦法,甚至都已經有現有模塊可以使用。如果善於交流,那麼你早就解決了問題,並且可以向別人學習到爲什麼這麼做,優點是什麼,這樣就可以把這部分知識吸收爲己用了。
所以,如果你身邊有一個優秀的程序員,那麼,請你在有一定思考的前提下,多問問吧。這比你自己琢磨和看書不知道要強多少倍。當然,切記提問一定要有一個很好的態度。也許這算是成爲優秀程序員的一個捷徑吧。就和武俠小說中說的那樣,要多和高手過招才能更快提高。
   
    總之,想成爲優秀的程序員,除了需要一定的天賦外,更需要具備優秀程序員的基本素質。然後輔以適合自己的學習方法,那麼你就有希望成爲一名優秀的程序員。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章