都當上老鳥了,總不可能只做寫程式的工作吧,上面交代的也許會是規劃新系統的任務,這時老鳥在經驗上的優勢就很容易表現出來了,尤其是思考系統架構的深度。
在規劃系統時,除了使用者的需求以外,適當的設計軟體的架構 (architecture) 會讓底下的程式設計師日後在撰寫或維護程式時比較輕鬆,而軟體架構就像是把系統當做房子一樣,每個系統都有適合自己的架構,而架構又會成為日後指導與規範開發方向與方法的藍圖一樣,它和 Framework 意義有點像,但本質上卻是不同的。
所謂的軟體架構(Software Architecture)是一種軟體的藍圖,它告訴你這個軟體的結構,功能,介面,用法,與其他系統的構連以及資料交換等等規範,但它並沒有叫你要用什麼方式實作,因此軟體架構通常會產生文件,圖樣,原型以及規格等,就是沒有可用的程式碼,因為那不是軟體架構應該有的東西,就像蓋房子時是給你藍圖,而不是一幢蓋好的房子。相對的,軟體框架(Framework) 的英文名稱原意是骨架,拆開來看是 "Frame"-"work",表示是在一個既定的框架下可以做的工作,也就是說,這是一個已經成形的方法,而且有程式碼實體(例如鋼構工法也是要有鋼材才能做),並且會告訴你要如何使用它(即 Framework Documentation,MSDN Library 即為一最佳例子),但怎麼使用它是程式設計師(也就是監工)的工作,與 Framework 無關。
因此,軟體架構設計是需要許多知識和經驗的一種工作,前面所分享的物件導向思維以及思考大型系統的建構等都是其中的一部份,還有一些像是介面導向程式設計,抽象化的能力,分層思維,適配環境構思,或是與網路系統的整合等等,在軟體的架構設計上幾乎都會沾到一些,所以累積的知識愈多在架構設計上會愈有幫助。以往在學校唸的東西多少也會派上用場,工作上會用到的 domain knowledge, design pattern, enterprise pattern 與工作經驗也會發揮很大的作用。
市面上也有不少有講述到軟體架構方面的書,網路上也有不少 sample solutions,都會直接會間接的展示了一個系統的架構的設計方式,可多去接觸這些東西,將有助於軟體架構思維的進化。
Reference: http://www.dotblogs.com.tw/regionbbs/category/2520.aspx