|
不知覺做軟件開發已經有6年了,回看自己的經歷,可以說是相當有成就感,6年中通過不斷的學習的實踐,從一個菜鳥成長為一名軟件架構師,這個過程可以說充滿樂趣。通過學習各種理論、技術、方法,并有在實踐中應用,觀察它們的效果,思考它們之間的關系,再把不同事物融合在一起,形成一個完整的能力體系,以此來挑戰更艱巨的軟件開發任務。
我現在是一個框架師,所以看問題喜歡從總體架構出發,所以我認為人的能力也有一個架構存在,每個的能力架構都不一樣,有的人能力架構比較合理,有的人則不那么合理,合理的能力架構能讓較少能力元素(知識、技能、方法等)發揮出較大的作用,不合理的能力架構會浪費人的能力,讓所學無所用。
什么樣的能力結構是比較合理的呢,這不是一個簡單的問題,這里我根據自己的經驗總結提出一個參考模型,這個參考模型采用我們常見的分層架構模式。我認為一個軟件開發人員的能力大體應該分為四個層次:
最高層:過程控制和管理 |
第三層:方法、思想和理論 |
第二層:具體技術、語言和工具 |
最底層:基礎原理、基礎知識 |
層以層之間存在一定的關系,上一層必須以下一層為基礎,而上一層又反過來影響下一層。最底層是基礎原理和基本技術:包括計算機原理、電路、數據結構、數據庫原理、編譯原理、操作系統等。這些知識是很基礎的有了一定的基礎才能更好的學習其它能力
第二層是具體技術、語言和工具,包括各種編程語言、開發環境、數據庫、開發框架等。每顯然,一般情況下要學習第二層的內容必須要有以最底層的能力為基礎,當然也有人沒有任何基礎就能學習第二層的能力,但是一般這樣學習效果很差,知其然不知其所以然,遇到一些問題也會不知所措。另一方面第二層的學習又會反過來影響最底層的能力,它能鞏固基礎知識的學習,能暴露出你在基礎方面的不足,還能驅動你對基礎知識的學習。當我還是個程序員的時候,學習的內容主要集中在這兩個層次。
第三層是方法、思想和理論,包括面向對象思想、設計原理、設計模式、需求工程、UML等,同樣第三層的能力也要以第二層為基礎,具個例子來說,要學習面向對象的設計方法首先要學會一門面向對象語言還要會使用case工具,同時第三層的能力又會反過來影響第二層,好的方法能更好的發揮你的技術,還可以彌補技術的不足,舉幾個例子來說,設計做的好是不是寫起程序來很輕松,斷言、單元測試這些方法能讓代碼的質量達到前所未有的高度。
最高層是過程控制和管理,這個層次的能力通常涉及時間跨度和團隊協作,包括項目管理的能力,軟件過程的控制能力、版本控制的能力、需求管理的能力等。同樣這一層次的能力也要以第三層的能力為基礎,舉例來說,如果軟件沒有好的架構,那不管采用什么過程最終都會一團糟,而良好的設計能力,再加上迭代的開發過程、嚴格的版本控制,就一定能開發出優秀的軟件。
通過這個模型我們不難看出,一個優秀的軟件開發人員各個層次的能力應該是比較均衡的,并且這些能力不應該是獨立,它們應該能組合在一起發揮出整體性的威力。
通過這個模型也可以指導我們的學習過程,一般地,我們應該先掌握下一層的能力再掌握上一層的能力,但又不能只停留在下一層。我見過不少大學生,剛開始工作就學習項目管理,還一些做項目N年的前輩,能夠把類庫倒背如流,還不知什么是UML、什么是內聚、藕合和粒度。我覺得這都不是好的現象,我認為能力的學習也應該采取迭代的方式,我們先要打基礎,但也不需要打一個完美的基礎,我認為打個三成就夠了,然后就可以嘗試學習上一層的的能力,可能你會掌握一成上層的能力,這時會發現基礎還打的有問題,然后再帶著你的問題來補基礎。如此反復,當你上一層的能力也達到三成時,又可以嘗試再上層的學習。這時就把上一層當成是基礎再上一層當成是上層。如此反復直到你爽了為止,哈哈。
it知識庫:軟件開發人員的能力模型,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。