最高層:過程式控制制和管理 |
第三層:方法、思想和理論 |
第二層:具體技術、語言和工具 |
最底層:基礎原理、基礎知識 |
最底層是基礎原理和基本技術:包括電腦原理、電路、資料結構、資料庫原理、編譯原理、作業系統等。這些知識是很基礎的有了一定的基礎才能更好的學習其它能力
第二層是具體技術、語言和工具,包括各種程式設計語言、開發環境、資料庫、開發架構等。每顯然,一般情況下要學習第二層的內容必須要有以最底層的能力為基礎,當然也有人沒有任何基礎就能學習第二層的能力,但是一般這樣學習效果很差,知其然不知其所以然,遇到一些問題也會不知所措。另一方面第二層的學習又會反過來影響最底層的能力,它能鞏固基礎知識的學習,能暴露出你在基礎方面的不足,還能驅動你對基礎知識的學習。當我還是個程式員的時候,學習的內容主要集中在這兩個層次。
第三層是方法、思想和理論,包括物件導向思想、設計原理、設計模式、需求工程、UML等,同樣第三層的能力也要以第二層為基礎,具個例子來說,要學習物件導向的設計方法首先要學會一門物件導向語言還要會使用case工具,同時第三層的能力又會反過來影響第二層,好的方法能更好的發揮你的技術,還可以彌補技術的不足,舉幾個例子來說,設計做的好是不是寫起程式來很輕鬆,斷言、單元測試這些方法能讓代碼的品質達到前所未有的高度。
最高層是過程式控制制和管理,這個層次的能力通常涉及時間跨度和團隊協作,包括專案管理的能力,軟體過程的控制能力、版本控制的能力、需求管理的能力等。同樣這一層次的能力也要以第三層的能力為基礎,舉例來說,如果軟體沒有好的架構,那不管採用什麼過程最終都會一團糟,而良好的設計能力,再加上迭代的開發過程、嚴格的版本控制,就一定能開發出優秀的軟體。
一個優秀的軟體開發人員各個層次的能力應該是比較均衡的,並且這些能力不應該是獨立,它們應該能組合在一起發揮出整體性的威力。
通過這個模型也可以指導我們的學習過程,一般地,我們應該先掌握下一層的能力再掌握上一層的能力,但又不能只停留在下一層。我見過不少大學生,剛開始工作就學習專案管理,還一些做項目N年的前輩,能夠把類庫倒背如流,還不知什麼是UML、什麼是內聚、藕合和粒度。
我覺得這都不是好的現象,我認為能力的學習也應該採取迭代的方式,我們先要打基礎,但也不需要打一個完美的基礎,我認為打個三成就夠了,然後就可以嘗試學習上一層的的能力,可能你會掌握一成上層的能力,這時會發現基礎還打的有問題,然後再帶著你的問題來補基礎。如此反覆,當你上一層的能力也達到三成時,又可以嘗試再上層的學習。這時就把上一層當成是基礎再上一層當成是上層。如此反覆。