推文按鈕

收進你的MyShare個人書籤

2008年2月26日 星期二

分享很棒的程式開發觀念

今天看到了一個程式設計師qing的部落格,分享了很多篇程式開發的觀念
我覺得很棒,大家一定要點來看!

砍掉重練真的會比較好嗎?
http://www.javaworld.com.tw/roller/qing/entry/%E7%A0%8D%E6%8E%89%E9%87%8D%E7%B7%B4%E7%9C%9F%E7%9A%84%E6%9C%83%E6%AF%94%E8%BC%83%E5%A5%BD%E5%97%8E
作者討論會想要讓程式設計師砍掉重練的情況大致上有5種:
(1)撰碼風格不佳(2)過多重覆累贅的程式碼(3)程式架構疊床架屋(4)架構設計不夠通用(5)所運用的技術跟不上潮流(5)有太多隱藏在深處的臭蟲未爆彈。
但是他認為其實大多數的時候不應該砍掉重練,因為以生產力的角度來說是不划算的。
很多情況只要透過重構(refactoring),將類似的程式碼精鍊即可。

想要砍掉重練,通常是優秀程式員想要維持完美性的心魔,但是這樣可能陷入over-engineering(討論請詳見下一篇),他的看法是程式可以跑最重要!

淺談軟體設計的Over-Engineering
http://www.javaworld.com.tw/roller/qing/category/programming?page=1

作者提到了under-engineering和over-engineering。「under-engineering是絲毫不為日後的可能做準備,而over-engineering則是為尚不可見的未來做太多準備。」

「這種情況的設計者,尤其是剛領教到軟體設計之美的設計者尤其會犯。這類的設計者會有太多的企圖,希望打造一個十分通用、最好是放諸四海皆準的設計。使得日後無論有多少變化,通通都能夠被納入在這個設計當中。」

這個也是我們目前必須警惕到的問題。

此外,作者認為軟體設計是「魚與熊掌不可得兼」,想要建立彈性極佳,可應付未來各種需求的程式設計時,可能就得用效能來交換。

「但是,吊詭的是,其實你往往不需要如你想像中的彈性。建立一個無懈可擊幾近完美的一般化設計,除了美感外,別無用處。但軟體設計的目標並不在展現美感,而是要解決真實的工程問題。」

那麼,「在over-engineeringunder-engineer之 間又要如何拿捏分寸呢?過與不及看來都有問題。你要做的並不是什麼設計都不做,也不是把設計做了過火。你要做的是,去建立一個具演化能力的設計,讓這個設 計能夠隨時依照可見到的迫切需求,在很短的時間內滿足這個迫切的需求,同時繼續為下一次的演化而做準備。就是這樣,每一次的改變,除了滿足目前的需要之 外,同時也為下一次的改變而做準備。」


建立自用的程式庫
http://www.javaworld.com.tw/roller/qing/entry/%E5%BB%BA%E7%AB%8B%E8%87%AA%E7%94%A8%E7%9A%84%E7%A8%8B%E5%BC%8F%E5%BA%AB
鼓勵將開發中的公用需求建立成自己的程式庫,並重複運用,可大幅提高生產力。

「大多數的程式員因為拘泥於物件導向,一想到程式碼的重複運用,往往直接聯想到透過繼承方式取得的重複運用。然而,大多數情況下,除非我們設計的是應用程 式的框架,或者是某種特殊應用的類別庫,否則設計的類別之間並不會存在太多或太複雜的繼承階層關係。這自然意謂著,透過繼承而得的重用程式碼其量不致於太 多,因此也不太可能透過它得到非常多生產力的提昇。」

但是,「當你跳脫出利用繼承得到可重複使用之程式碼的想法後,或許會發現到,重複運用許多在開發過程中會需要的公用程式,也是提高生產力的主要來源之一。」

但是作者也認為「不用追求一次到位式的立即整理出一個好用的公用程式庫,你只需要在開發的過程中,逐步的觀察是否發生了重複性的程式碼片段,倘若有,便利用「重構(refactoring)」中提煉函式或提煉類別的技巧,將它們從應用程式的程式碼中提煉出來,萃取到你自己的公用程式庫中。

如果是在一個開發團隊中,這個公用的程式庫應該是採取團隊共用的模式,相關的議題就會更多,包括:你們應該要制定一個維護公用程式庫的簡單流程,例如應該 通知那一位協調者,應該如何撰寫說明文件、如何對你加入程式庫的公用程式進行測試以維護品質、如何確保不會對公用程式庫的其他程式產生副作用、如何管控公 用程式庫的版本,以及和已開發、開發中的應用系統之間的組態管理等等。」

技術昇級狂熱及新技術焦慮
http://www.javaworld.com.tw/roller/qing/entry/%E6%8A%80%E8%A1%93%E6%98%87%E7%B4%9A%E7%8B%82%E7%86%B1%E5%8F%8A%E6%96%B0%E6%8A%80%E8%A1%93%E7%84%A6%E6%85%AE



化繁為簡,執簡御繁
http://www.javaworld.com.tw/roller/qing/entry/2007_7_25_the_way_to_simplify_%283_3%29
如何找出共通性

沒有留言: