組合思維與繼承思維的不同

banq發表於2015-03-17
2015-03-15 16:05 "@jdon007"的內容
兩種比較常用的思考方法(或解決方法),用哪一種,還是取決於問題域 ...


講得很好。
我這幾天思考發現組合和繼承實際可能代表兩種完全不同的思維方式。這兩種思維體現在Unix和Windows的不同上。

Unix是典型的組合思維,包括Go語言,我們使用Unix命令列,比如“ps -ax | grep java”,這種管道式過濾能力非常強大和靈活,缺點是初學者不容易掌握,不形象。

而Windows是典型的繼承思維,大視窗裡有小視窗,不斷開啟小視窗,就進行樹結構的深入層次,這種方式非常形象,適合初學者,但是問題也是顯然,不夠靈活強大,以至於我們經常藉助於DOS的bat來完成各種特定的要求,以至於需要程式設計,使用程式語言組合成我們希望得到的功能。

Windows這種視窗方式非常物件化,也是微軟長期對作業系統這個業務掌握後的抽象,它是一種形象化的樹形結構,帶領初學者進入深處。

Unix的命令組合是一種動態的樹形結構,類似函式程式設計,透過透過函式碎塊組合成使用者想達到的強大功能。

很多人思維如果侷限在Windows這種繼承思維中,會覺得Unix好像不人性化,對程式設計師不夠尊重,這其實是身在廬山中不識廬山真面貌。

什麼是人性化?讓程式設計師想做他想做的任何事,給予程式設計師最大的自由如同Unix風格才是對程式設計師最大尊重,將自由選擇權交給了程式設計師自己,而Windows是對初學者最大尊重,限制一定自由,但是能夠循循善誘。所以,是否對程式設計師尊重是分層次的,不同層次程式設計師的需求不同,就像人的層次不同,需求不同一樣,沒有吃飽飯認為吃飽飯是最大幸福,而吃飽飯的認為精神自由才是人生最高境界。

總結,兩種比較常用的思考方法(或解決方法),用哪一種,還是取決於問題域 ,我們千萬不能厚此薄彼。對於複雜問題域,使用組合無疑強大,對於熟悉的簡單的問題域,使用繼承比較形象,一目瞭然。

對於人來說:組合思維總是暗示自己“我們總是目光短淺,組合的風險比繼承少”, 依靠範疇論的科學工具步步為營前行,而繼承思維需要牛人,“如果有人能夠綜觀某個事物(行業)幾十年的發展,也就是常說的吃透了業務,在這種假定之下來用繼承來設計業務,那一定會成為經典”,一旦成為經典,牛人會認為自己是天才。這就是經驗與科學的區別。

[該貼被banq於2015-03-17 16:54修改過]

相關文章