自從在雙主修時修了軟體工程之後,一直受益於這個領域,而且最近也會看一些軟體工程的書。

覺得軟體工程強調的是彈性

彈性

  • 可擴充性 (scalability):如何設計系統讓系統在擴充功能或是應用範圍變大的時候變得簡單
  • 可移植性 (portability):如何設計系統讓系統在不同的環境中也能夠順利運作
  • 低耦合性及高內聚性 (low-coupling and high-cohesion):如何設計系統讓系統內部的模組 (module)之間具有此項特質

可擴充性

就像是一個建築師可以好好的完成一間小屋子。

但是他有沒有辦法把小屋子延伸成摩天大樓?

或是已經完成的屋子能不能在添加其他的功能上去?

可移植性

同樣一張小屋子的設計圖,是否可以在不同的環境下建出同樣的屋子?

在沙漠中?在冰原中?在高山中?

如果可以,稱為可移植性。

低耦合性

小屋子當中的各個房間有不同的功能。

各房間通常是打通的呢?或是隔開的?

最好是不要把房間的功能都混在一起。

像是想在廚房看書然後就把廚房放個書櫃。

明明書櫃就該放在書房的,為什麼會出現在廚房。

或許可能會覺得這樣對使用者比較方便。

但是在軟體工程的角度來說,這是不好的示範。

高內聚性

小屋子當中相同功能性的東西最好都放在同一個房間比較好。

這個是相對於低耦合的良好示範。

那如何去決定哪些功能該跟哪些功能放在一起。

這就是工程師該去傷腦筋的了。