從事軟體業也有幾年了,經歷幾多個不同的公司、不同企業文化、不同的開發流程,不變的身邊總是有零星高手和多數的普通程式設計師。我總是苦苦思索,一個剛入行的程式設計師如何才能成為一個軟體高手呢?在這裡我們不討論那些奇才怪才,比如幾歲或十幾歲就接觸電腦、初中高中就會程式設計,或者大學期間就積累了一些經驗和人脈,或者輟學開公司去了的牛人們。我們只討論一個普通的或相對優秀的程式設計師,在公司裡工作的過程中如何成長為一個高手。

    近幾年國內的大學,計算機專業畢業的學生,上學期間只有幾名學生有過軟體業相關的實踐,大多數可能連程式設計還不懂,即使學過c、c++、java課程。我一直反對大學畢業考研或者保研、直博或者考博然後留校任教。因為上學期間即使做過實習,與真正的商業上的開發也是有區別的,一般公司不會把重要的任務交給一個實習生去做。何況大部分人沒有實習經歷,你可以想象這樣的老師能教出什麼樣水平的學生。

    在幾年的工作過程中,我發現很少公司有很好的培訓體系,能夠為自己員工的職業生涯發展做出系統規劃和紮實培訓的公司。一方面有些公司並不想去做這些,因為投入很大,並且效果不見得好,更可能為競爭對手做嫁衣裳;另一方面即使想去做,也很難找到合適的人去做。這裡面很大一部分原因是國內搞軟體的整體風氣比較沉悶、缺乏交流,跟管理諮詢行業的培訓根本沒法比。

    寫這個系列的目的是與大家探討從小工到專家的成長路線,這是一個地圖,是一個導航,條條大路通羅馬,我願意選擇相對省力又高效的途徑。至少不要南轅北轍。並不是說我就是高手,也不認為不是高手就沒有資格說這個話題。太多人沉默不會有好的結果的。各方面都是這樣,大家只要看看我們生活的人文社會環境就知道了。

     這篇作為這一系列的序言,總體介紹一下我認為初學者成為軟體高手需要掌握的必備技能,這些不是充分條件而是必要條件。

    1. 一門語言的語法,SDK的常用API,演算法與資料結構

        有了上面的知識,再加上一點實踐,再從網上找一些筆試題做幾套,基本可以過筆試這一關。

    2. 編碼規範、高效能編碼經驗技巧。

        要成為一個職業化的、專業化的程式設計師,首先要養成良好的習慣,良好的習慣從規範化的點滴日常工作開始。

    3. 熟練掌握IDE、常用工具的使用

        工具可以提高生產力,用一把小刀去砍樹很困難,用電鋸立刻變得很簡單。

    4. 物件導向的原則

        這裡重點掌握物件導向的原則,比如:單一職責原則 SRP、開放-封閉原則、替換原則LSP、依賴倒置原則DIP等,明白了這些原則,對後面內容理解的深入會有很大的幫助。其實這才是根本,不瞭解這些原則去學設計模式有種空中樓閣、頭重腳輕的感覺。根基不牢上層建築就好像浮雲一樣。

    5. 重構

        重構就是在不改變軟體功能的前提下改善程式碼的設計以提高可維護性。修改別人的程式碼或者優化自己的程式碼都需要用到重構技術

    6. 設計模式

        基於一些常用的模式來學習如何使用設計模式。設計模式對於做框架開發的程式設計師比較有幫助。我們會選擇一些常用的來講解。

    7. 最重要、最難,看上去卻最簡單的功夫:修改程式碼的藝術

        我看到很多新員工進入大公司都是從這步做起,但我認為代價是很大的,無論對公司還是員工本身。對公司來講,一個沒經驗的人修改了一個bug,可能會引出幾個問題,然後再去修改,如此惡性迴圈。對於員工來講,趕鴨子上架,不瞭解程式碼的邏輯、針對表象簡單粗暴的修改,有時我看了真的很是心痛。對程式設計師本身的能力提高也是緩慢的。其實修改別人的程式碼開始是功夫,之後就是藝術。就好像你要給一個人治病,你要成為醫生,先要掌握人體基本結構、各個臟器的特點、各種藥物的功能、常用的診治方法等等,醫院不會讓一個醫學院畢業的學生去給病人看病,總要有段實習,由經驗豐富的醫生帶一段時間。然後從難度較低的做起。

    8. 架構設計

        這一點我是不太自信的,一是感覺資歷不夠,二是在這一點上能忽悠的人太多,而這又不是我的強項,我誠實的說出自己的看法可能被誤解,不過這是成為高手必不可少的部分,這裡就與大家共同探討。

    9. 軟體工程

        開發軟體的過程,我經歷過公司從CMM到敏捷的轉變,我個人是比較推崇敏捷開發的,這裡想與大家站在工程的角度聊一聊軟體開發。

    10. 質量管理

        越往後其實越偏向管理了,開始是個人修煉,後面是站在組織、站在公司的角度來看軟體。質量是說得多、做得少,尤其在軟體領域,我一直覺得很邪門的事情是不懂軟體開發的人甚至被淘汰出去的人去從事軟體行業的質量管理,真是令人擔憂。質量管理中有很多很好的理論和工具,是值得我們學習的,不只可以應用到軟體開發上,生活中也很有用的。

       國內很多IT培訓機構基本上也是停留在應試教育,就是以通過筆試面試為目的,再往後整個行業的職業培訓幾乎沒有。這裡原因很多,我不想多談,這是中國軟體從業人員的悲哀。

       希望通過這個系列的文章,能夠幫助一部分程式設計師成長,同時也希望更多老鳥高手給我一些指導,因為你們不站出來才有我的看似有點張狂,實際上我是很謙虛的。