1、引言
機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師,有的人卻還在不停地coding,只不過ctrl-c、ctrl-v用得更加純熟了。在中國,程式設計人員最終的歸途無外乎兩條:一是轉向技術管理,它的終點是cto;二是繼續深入,它的終點是首席架構師,成為ceo的人畢竟是少數。如果你現在還是個普通的程式設計師,希望繼續在技術這條路上前進的話,我想你還是應該先補充一點軟體工程的思想,學習一點有關設計模式的知識,只有具備這些能力,你才能從整體和巨集觀層面來考慮問題、分析問題和解決問題。本人coding了很多年,中間走了不少彎路,雖然最終沒什麼大成就,但總算有一些心得,很願意把自己的一些經驗拿出來跟大家分享,這或許對你的發展有所幫助。
由程式設計師轉為架構師,最繞不開的概念就算是物件導向(oo)了。記得在大學的時候,我們專業開了一門課叫《物件導向的程式設計》。那個時候,我們剛剛學了一門c語言,開發環境用的還是dos下的turbo c,半點專案開發的經驗都沒有,純粹的空對空。所以,一學期下來,我始終處於一種懵懂狀態,既沒領會面向過程和物件導向到底有什麼區別,也沒搞懂物件導向能帶來什麼好處。
2、面向過程(op)和物件導向(oo)
2.1 蛋炒飯和蓋澆飯
有人這麼形容op和oo的不同:用面向過程的方法寫出來的程式是乙份蛋炒飯,而用物件導向寫出來的程式是乙份蓋澆飯。所謂蓋澆飯,北京叫蓋飯,東北叫燴飯,廣東叫碟頭飯,就是在一碗白公尺飯上面澆上乙份蓋菜,你喜歡什麼菜,你就澆上什麼菜。我覺得這個比喻還是比較貼切的。
蛋炒飯製作的細節,我不太清楚,因為我沒當過廚師,也不會做飯,但最後的一道工序肯定是把公尺飯和雞蛋混在一起炒勻。蓋澆飯呢,則是把公尺飯和蓋菜分別做好,你如果要乙份紅燒肉蓋飯呢,就給你澆乙份紅燒肉;如果要乙份青椒土豆蓋澆飯,就給澆乙份青椒土豆絲。
蛋炒飯的好處就是入味均勻,吃起來香。如果恰巧你不愛吃雞蛋,只愛吃青菜的話,那麼唯一的辦法就是全部倒掉,重新做乙份青菜炒飯了。蓋澆飯就沒這麼多麻煩,你只需要把上面的蓋菜撥掉,更換乙份蓋菜就可以了。蓋澆飯的缺點是入味不均,可能沒有蛋炒飯那麼香。
到底是蛋炒飯好還是蓋澆飯好呢?其實這類問題都很難回答,非要比個上下高低的話,就必須設定乙個場景,否則只能說是各有所長。如果大家都不是美食家,沒那麼多講究,那麼從飯館角度來講的話,做蓋澆飯顯然比蛋炒飯更有優勢,他可以組合出來任意多的組合,而且不會浪費。
2.2 軟體工程
蓋澆飯的好處就是「菜」「飯」分離,從而提高了製作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟體工程的專業術語就是「可維護性」比較好,「飯」和「菜」的耦合度比較低。蛋炒飯將「蛋」「飯」攪和在一起,想換「蛋」「飯」中任何一種都很困難,耦合度很高,以至於「可維護性」比較差。軟體工程追求的目標之一就是可維護性,可維護性主要表現在3個方面:可理解性、可測試性和可修改性。物件導向的好處之一就是顯著的改善了軟體系統的可維護性。
面向過程(op)和物件導向(oo)是不是就是指編碼的兩種方式呢?不是!你拿到了乙個使用者需求,比如有人要找你編個軟體,你是不是需要經過需求分析,然後進行總體/詳細設計,最後編碼,才能最終寫出軟體,交付給使用者。這個過程是符合人類基本行為方式的:先想做什麼,再想如何去做,最後才是做事情。有的同學說:「我沒按照你說的步驟做啊,我是直接編碼的」。其實,你一定會經歷了這三個階段,只不過你潛意識裡沒有分得那麼清楚。對於拿到需求就編碼的人,可能編著編著,又得倒回去重新琢磨,還是免不了這些過程,
以oo為例,對應於軟體開發的過程,oo衍生出3個概念:ooa、ood和oop。採用物件導向進行分析的方式稱為ooa,採用物件導向進行設計的方式稱為ood,採用物件導向進行編碼的方式稱為oop。面向過程(op)和物件導向(oo)本質的區別在於分析方式的不同,最終導致了編碼方式的不同。
2.3 面向過程(op)和物件導向(oo)
架構師之路 1 面向過程和物件導向
1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師,有...
架構師之路 1 面向過程和物件導向
1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師,有...
架構師之路 1 面向過程和物件導向
1 引言 機算機科學是一門應用科學,它的知識體系是典型的倒三角結構,所用的基礎知識並不多,只 是隨著應用領域和方向的不同,產生了很多的分支,所以說程式設計並不是一件很困難的事情,乙個高中生經過特定的訓練就可以做得到。但是,會程式設計和編好程絕對是 兩碼事,同樣的程式設計師,有的人幾年之後成為了架構師...