軟體設計=軟體+設計
軟體設計=軟體+設計
先說,這不是一句廢話。 所謂的設計,就是運用限制,透過不斷犯錯形成的經驗,慢慢的演化、精鍊成最簡的形式,這個過程,就是設計。沒有一步登天這回事,如果真的看見一步登天,那一定是他已經在天上了,只是你還以為他在地上。
那什麼又是軟體?在《The Mythical Man-Month》中,收錄1986年的《No Silver Bullet》論文中,有提到軟體工程首要的技術使命,就是「管理複雜性」
管理複雜性=管理+複雜性
抱歉,這個梗用了第二次。《No Silver Bullet》中,把軟體工程切把軟體的問題切割成兩個部份,一個是本質性問題,主要就是軟體本身是雜的,而這個複雜性,無法改變,也沒有殺手級工具可以解決。另一個是附屬性問題,主要指的是管理軟體複雜性的問題,自從C語言被發明之後,軟體技術都在解決這方面的事。
整理如下:
本質性問題(沒救了)
「複雜性」問題,無法改變,也沒有殺手級工具可以解決。
附屬性問題(學不完)
「管理」問題,C語言被發明之後,軟體技術都在解決這方面的事。
物件導向 不管它是不是銀彈 也是一顆子彈
在《No Silver Bullet》中物件導向不是銀彈,它是用來解決附屬性問題,也就是管理的問題,事實也是這樣沒錯,只不過複雜性不能解決,卻可以隱藏。
1986年Brad Cox寫了第一本Object-C語言的書《Object-Oriented Programming》,在書中認為物件導向,可以實現他心中的「軟體IC」理想。
這就讓我回想起過去我自己學習verilog語言時的寫法。我將verilog的習慣用法帶到C++而完全體會了什麼叫「物件導向」。
物件導向很神(?),並不是因為它是銀彈,也不是因為它可以讓你的程式碼飛天,而是因為用他的人很神!咦?怎麼說呢?
物件導向本質上,就是心智圖的一種詮釋方式,只是不管是UML還是其它文字型的程式語言,都不會直接的看出來。物件導向的重點在於「運用符號代表抽象資料」,就像是物理公式一樣,運用定義的符號來代表一個有完整而單純的概念。而這個概念就變得可以運算,還可以執行。
物理的發展,也是基於這種數學工具的妥善使用,利用符號與抽象的表達技巧可以運算種種的物理要描述的事物。相信程式碼也可以遵循這樣的技巧,發揮強大的力量。
Last updated
Was this helpful?