俗話說「師父領進門,修行靠我的」,隨着互聯網的高速發展,愈來愈多的人選擇了IT行業,加入到了程序員的行列。那麼,對於一個剛入行的小白來說,如何成爲一個優秀的程序員呢?一個優秀的程序員須要哪些素質呢?程序員
紮實的技術shell
熟練開發工具數據庫
作爲一名程序員至少熟練掌握兩到三種開發工具的使用,這是程序員的立身之本,其中C/C++和JAVA是重點推薦的開發工具,C/C++以其高效率和高度的靈活性成爲開發工具中的利器,不少系統級的軟件仍是用C/C編寫。編程
而JAVA的跨平臺和與WEB很好的結合是JAVA的優點所在,而JAVA即其相關的技術集JAVAOne極可能會成爲將來的主流開發工具之一。服務器
其次,能掌握一種簡便的可視化開發工具,如VB,PowerBuilder,Delphi,CBuilder,則更好,這些開發工具減少了開發難度,並可以強化程序員對象模型的概念。網絡
另外,須要掌握基本的腳本語言,如shell,perl等,至少能讀懂這些腳本代碼。分佈式
熟知數據庫模塊化
爲何數據庫是如此重要?做爲程序員,他們天然有本身的理由:不少應用程序都是以數據庫的數據爲中心,而數據庫的產品也有很多,其中關係型數據庫還是主流形式,因此程序員至少熟練掌握一兩種數據庫,對關係型數據庫的關鍵元素要很是清楚,要熟練掌握SQL的基本語法。函數
雖然不少數據庫產品提供了可視化的數據庫管理工具,但SQL是基礎,是通用的數據庫操做方法。若是沒有機會接觸商業數據庫系統,可使用免費的數據庫產品是一個不錯的選擇,如mySQL,Postgres等。工具
瞭解操做系統
當前主流的操做系統是Windows,Linux/Unix,熟練地使用這些操做系統是必須的,但只有這些還遠遠不夠。
要想成爲一個真正的編程高手,須要深刻了解操做系統,瞭解它的內存管理機制、進程/線程調度、信號、內核對象、系統調用、協議棧實現等。
Linux做爲開發源碼的操做系統,是一個很好的學習平臺,Linux幾乎具有了全部現代操做系統的特徵。雖然Windows系統的內核實現機制的資料較少,但經過互聯網仍是能獲取很多資料。
懂得網絡協議TCP/IP
在互聯網如此普及的今天,若是您尚未對互聯網的支撐協議TCP/IP協議棧有很好的掌握,就須要迅速補上這一課,網絡技術已改變了軟件運行的模式,從最先的客戶/服務器結構,到今天的WEBServices,再到將來的網格計算,這一切都離不開以TCP/IP協議棧爲基礎的網絡協議支持,深刻掌握TCP/IP協議是很是必要的。至少,須要瞭解ISO七層協議模型,IP/UDP/TCP/HTTP等經常使用協議的原理和三次握手機制。
明白DCOM/CORBA/XML/WEBServices存在的意義
隨着技術的發展,軟件與網絡的無縫結合是必然趨勢,軟件系統的位置無關性是將來計算模式的重要特徵之一,DCOM/CORBA是當前兩大主流的分佈計算的中間平臺,DCOM是微軟COM(組件對象模型)的擴展,而CORBA是OMG支持的規範。
XML/WebServices重要性不言而喻,XML以其結構化的表示方法和超強的表達能力被喻爲互聯網上的「世界語」,是分佈式計算的基石之一。
不要將軟件工程與CMM分開
大型軟件系統的開發中,工程化的開發控制取代我的英雄主義,成爲軟件系統成功的保證,一個編程高手並不必定是一個優秀的程序員,一個優秀的程序員是將出色的編程能力和開發技巧同嚴格的軟件工程思想有機結合,編程只是軟件生命週期中的其中一環,優秀的程序員應該掌握軟件開發各個階段的基本技能,如市場分析,可行性分析,需求分析,結構設計,詳細設計,軟件測試等。
素質要求
需求理解能力
程序員要能正確理解任務單中描述的需求。在這裏要明確一點,程序員不只僅要注意到軟件的功能需求,還應注意軟件的性能需求,要能正確評估本身的模塊對整個項目中的影響及潛在的威脅,若是有着兩到三年項目經驗的熟練程序員對這一點沒有體會的話,只能說明他或許是認真工做過,可是沒有用心工做。
模塊化思惟能力
做爲一個優秀的程序員,他的思想不能在侷限當前的工做任務裏面,要想一想看本身寫的模塊是否能夠脫離當前系統存在,經過簡單的封裝在其餘系統中或其餘模塊中直接使用。
這樣作可使代碼能重複利用,減小重複的勞動,也能是系統結構越趨合理。模塊化思惟能力的提升是一個程序員的技術水平提升的一項重要指標。
團隊精神和協做能力
團隊精神和協做能力是做爲一個程序員應具有的最基本的素質。軟件工程已經提了將近三十年了,當今的軟件開發已經不是編程了,而是工程。
獨行俠能夠寫一些程序也能賺錢發財,可是進入研發團隊,從事商業化和產品化的開發任務,就必須具有這種素質。能夠絕不誇張的說這種素質是一個程序員乃至一個團隊的安身立命之本。
文檔習慣
文檔是一個軟件系統的生命力。一個公司的產品再好、技術含量再高,若是沒有缺少文檔,知識就沒有繼承,公司仍是一個來料加工的軟件做坊。做爲代碼程序員,必須將30%的工做時間寫用於技術文檔。沒有文檔的程序員勢必會被淘汰。
規範化的代碼編寫習慣
知名軟件公司的代碼的變量命名、註釋格式,甚至嵌套中行縮進的長度和函數間的空行數字都有明確規定,良好的編寫習慣,不但有助於代碼的移植和糾錯,也有助於不一樣技術人員之間的協做。
測試習慣
測試是軟件工程質量保證的重要環節,可是測試不只僅是測試工程師的工做,而是每一個程序員的一種基本職責。程序員要認識測試不只是正常的程序調試,而要是要進行有目的有針對性的異常調用測試,這一點要結合需求理解能力。
學習和總結的能力
程序員是很容易被淘汰的職業,因此要善於學習總結。許多程序員喜歡盲目追求一些編碼的小技巧,這樣的技術人員不管學了多少語言,代碼寫起來多熟練,只能說他是一名熟練的代碼民工,他永遠都不會有質的提升。一個善於學習的程序員會常常總結本身的技術水平,對本身的技術層面要有良好的定位,這樣纔能有目的地提升本身。這樣才能逐步提升,從程序員升級爲軟件設計師、系統分析員。