優秀程式設計師應該具備哪些素質
前面一些文章或多或少地談及了優秀程式設計師一些素質,但是不繫統,其實這個話題也是我常常思考的話題。中國人常常喜歡用十來表現事物,例如“十大關係”、“十大明星”、“十大新聞”、“十大技術”等等。這可能與十全十美有關、也可能便於記憶有關吧(整數容易記憶)。作為優秀程式設計師應該具備的素質,我也隨俗定一個十大素質吧。
一、心懷理想
我認為優秀程式設計師首先具備的素質是心懷理想。我曾說過許多程式設計師都是衝著“比爾.蓋茨”而來的,是被他的巨大成功所感召的。可以說不想當比爾蓋茨的程式設計師不是好程式設計師。大家要記住,比爾蓋茨的成功是兩個方面的成功,一個是他個人的成功,另一個是IT行業的成功。作為個人成功,只要個人能在眾人中脫穎而出,應該可以說行行都可以出狀元的。而行業的成功則表現出行業的生命力和朝陽性。而從事這個行業的人則能夠伴隨著這個行業的發展而成功。在
既然程式設計師有成功的可能,那優秀程式設計師一定是心懷成功的理想,這種理想激勵他們不斷進取走向成功。我這裡說心懷,是說程式設計師不必天天把理想掛在嘴邊,而是把理想放在心裡,時刻牢記自己的目標是什麼!目標是成功的一半,有了目標,優秀程式設計師可以不斷地調整自己,以最優的方式去接近和實現自己的目標。
現實中還有兩類程式設計師,一類是也想成為比爾蓋茨,但是始終是想,最終只是一種幻想。另一類知道比爾蓋茨,但是望而卻步,從不敢有半點奢望,做到哪就算到哪,順其自然。這兩類程式設計師都不具備優秀程式設計師的基本素質。
二、充滿激情
優秀的程式設計師一定是一個充滿激情的人,他們的理想和目標的遠大註定了他們不能以常人的方式平淡地、機械地工作著。我們很難想象一個優秀程式設計師不去爭做一個大的專案;我們很難想象一個優秀程式設計師在大家遇到困難時,無助待援時,不挺身而出;我們很難想象一個優秀程式設計師歷經千辛萬苦編制出來的程式被使用者認可那一瞬間,眼淚不奪眶而出;我們很難想象一個優秀程式設計師在自己遇到困難的時候,不大聲叫喊永不放棄。對於優秀程式設計師來說付出和收穫都是充滿激情的。而他們的激情不但感染著自己,而且感染著團隊,感染著使用者。
三、市場意識
市場意識是許多程式設計師最不具備的,有的程式設計師甚至反感市場意識,認為軟體賣不賣錢是公司的事,自己只要把程式做好了就行了。借用一句“只拉車不看路”來形容這類程式設計師是最為貼切的。有些人從事程式設計的確是個人興趣所致,他們喜歡在程式設計中找到自身的樂趣。但是,更多的人從事程式設計是為了謀生,是為了獲取更多的收入。程式設計師樹立市場意識,就是要做有市場價值的軟體,做價值最大化的軟體。雖然程式設計師在單位可能無法挑選開發的專案,但是程式設計師可以在有市場價值的軟體開發上投入更大的精力,可以在業餘時間開發有價值的軟體。如果公司的軟體市場沒有前景,程式設計師應該未雨綢繆,做好最壞的打算,選擇更有成長性的軟體公司。否則,程式設計能力再強也是英雄無用武之地,達不到自己的預期。做市場價值最大的軟體,讓自己市場價值最大化應該是優秀程式設計師必備的素質之一。
四、永不放棄
程式設計師可能和其他行業從業人員不太一樣,一般遇到困難,其他人員可能進行一番戰鬥後,無法克服就會放棄了。而程式設計師遇到困難就可能讓程式無法進行下去,他們必須要把問題解決了程式才能完成。優秀的程式設計師不但敢於解決各種程式設計中的問題,而且還會善於解決各種問題。有的程式設計師遇到問題,隨便找一種方法就給解決了,他可能不問解決後會帶來什麼新的問題,不問是否有更好的解決方案。而優秀的程式設計師往往追求最優的解決方案,往往在這過程中遇到千難萬難,但是他們抱著永不放棄的信念,一日復一日,一月復一月,甚至一年復一年去實現自己的目標,最終他們能收穫其他程式設計師無法收穫的勝利成果,使得他們水平高高在上。
五、團隊精神
現代的程式設計師和以前的程式設計師已經完全不一樣了,原來程式設計師是全能性程式設計師,現在程式設計師是專業的程式設計師。儘管還有很少的程式設計師集設計、開發、銷售、維護為一身,但是專業化的潮流不可阻擋,這就表示一個軟體或多個軟體是靠多個人開發的,他們通過分工協作從事著整個製作工作。程式設計師寫的程式不僅要給自己看,而且要給團隊其他人看,當發現程式問題的時候,團隊成員可以一起幫助分析解決。如果沒有團隊精神,任何一個程式設計師也不可能有真正的成功,即使成功也是渺小的、暫時的。因此要獲得事業上的成功,必須要依靠團隊的力量才能達到。優秀程式設計師的優秀之處是可能並不只是關心自己的優秀,而是更關心他周圍的程式設計師和其他人員是否優秀。讓更多的優秀的人在一個團隊中工作形成一個優秀的團隊,這樣的程式設計師才是充滿競爭力的,是戰無不勝的。
六、面向物件
很多人都是從面向過程思維方式開始學習程式設計的,隨後也學了面向物件程式設計方法,也用了面向物件開發工具和語言,但是,真正的用面向物件方法來程式設計、來設計程式設計構架、來進行功能分析、來需求分析還是很少的。優秀的程式設計師一定具備面向物件的思維方式,從設計到程式設計都貫徹著面向物件的痕跡,他們把面向物件作為思維的日常化。具有面向物件思維方式的人,可以對複雜混亂的事物進行抽象,具有很強的分類能力,化繁為簡,程式更加模組化,程式共享度更加提高,具有大程式、超大程式開發能力。有關面向物件的問題,我在前面的文章中已經闡述很多了,這裡就不在重複了。
七、基礎紮實
要想自己程式設計能力有一個持續的提高,我們就必須要注重自己的基礎建設,讓自己能力的提高都建築在每一層的堅實基礎之上,即使能力再高,也不會被風吹得搖晃,盡顯強者的剛毅不摧。我們不要小看已經學過的作業系統原理、編譯原理、程式設計原理、資料庫設計、資料結構設計、甚至計算機英語。這些基礎是否紮實直接影響到以後的各種應用技術的掌握和掌握的程度。而大多數新的技術都是在原有技術的發展,因此掌握好原有的技術對最快掌握新技術是有很大的幫助的。此外,紮實的基礎也使程式設計師把精力放在創新和解決疑難問題上,這樣優秀程式設計師的處理能力將會大大增強。
八、條理清楚
普通的程式設計師則不太注重條理問題,他們對可並行處理的語句從來不進行次序的考慮;對語句使用沒有一致性地使用,顯得很隨意;對處理流程往往一氣呵成,一個函式能有上百上千條語句。他們最大的特點就是從來不多問一個為什麼!而優秀程式設計師更注重程式條理,每個語句、語句的先後、語句的行數、函式命名等等他們都能說出為什麼這樣做。這種條理清楚地素質使得程式設計師能夠把控程式的製作時間進度,也有利於大程式的任務的分隔。大凡程式設計師編寫的程式能被其他人看懂的,基本上都是條理很清楚的。程式有條理,說明程式設計師的思維很有邏輯性,優秀程式設計師是最講究邏輯的。一個優秀的程式設計師能把一個龐大複雜的程式說的有條有理,並且在程式上也顯得可讀性極強。條理清楚地表現形式之一,就是程式函式多,函式中的語句少。從這個意義上來說,優秀程式設計師也是優秀的設計師,專案經理。因為他們的邏輯是一脈相承的。
九、全面細緻
我這裡說的全面有五個方面的含義:第一、程式設計師要在程式設計過程中要全面細緻,不要有遺漏,而這些遺漏往往造成了編譯錯誤,需要花費大量不必要的時間去查改。第二,程式設計師要在設計過程中要全面細緻,不要在功能設計方面有遺漏,尤其不要忘記例外情況的處理,許多功能上執行出錯都是這種原因造成的。第三、程式設計師的程式設計技術要全面,要儘可能多掌握各種編成技術,例如,程式設計師不但要掌握前臺開發技術,也要掌握後臺開發技術,既要會檔案處理,也要會資料庫處理,既要會編寫程式也要會製作安裝盤,等等。第四、程式設計師的業務知識要全面,程式設計師不但要掌握程式設計技術,而且要主動學習和掌握使用者的業務知識,通過對業務知識的掌握,才能更好地理解功能的意義,有助於編寫更使用的程式。第五,程式設計師的知識面要廣。優秀的程式設計師不但要掌握程式設計知識和使用者業務知識,而且要有意識地拓寬自己的知識面,多關心新聞、時事、時尚、經濟、技術、文藝、文學等各種知識領域,在知識的海洋中去暢遊工作的軌跡,你就會有萬事相同的感覺,這些知識會潛移默化地影響你程式設計的風格和效率。就象我寫的《好的程式象一首詩》一樣,程式中有詩。
十、求新求精
IT發展之迅速、技術更新之快捷,使得IT成為公認的追逐潮流的行業,因循守舊,固步自封,甚至年齡的增長都會導致程式設計師被這個行業所淘汰。有時候嘆息行業無情也是情理之中。面對潮流的挑戰,優秀程式設計師應該是無所畏懼的,他們應該始終懷有一種追求新技術的願望,有一種追趕潮流,伴隨潮流的勇氣和膽識。因為這個職業就註定了這樣的工作方式。當然,在新技術滿天飛的情況下,我們不能也不可能有什麼新技術就去學什麼新技術,我們可以花很少的時間去瀏覽和關注各種技術的發展狀況,但是對於自己所要掌握的新技術則要不惜代價,花大力氣去學習它掌握它。掌握新技術的價值評判是用於軟體的開發,用於更好地解決以往程式中存在不可解決的問題,用於所開發軟體的銷售價值。優秀的程式設計師會很好的選擇新技術,並利用新技術立即去革新自己的程式,並使程式投向市場產生價值。那種以學習、知識儲存的態度對待新技術都是不成熟的程式設計師。
我們常以新為炫耀,但是我們更以精為實力。優秀的程式設計師不但要求新,更要求精,使得自己在程式設計的某個方面成為專家和高手,讓普通的程式設計師敬仰。例如,精通客戶的業務知識、精通程式構架、精通某種語言、精通資料庫、精通模組化設計、精通三層結構、精通介面設計、精通介面程式、精通安裝盤製作、精通等等。程式設計師可以精通的領域和內容是非常之多的,關鍵是程式設計師對自己的要求。很多程式設計師滿足於會,而不追求於精,使得自己變成什麼都懂,什麼都不精的,任何人都能取代的普通程式設計師。這樣的程式設計師怎麼能可能獲得更高的報酬,又怎麼可能變成優秀呢。
當然優秀程式設計師還會有其他的良好的素質,在這裡我很難窮盡,我也希望讀者能在其後續上更多更好的素質。其目的只有一個:我們瞭解優秀,我們追求優秀,我們一定優秀。