JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [Effective Java] 條款30 : 熟悉並善用程式庫 (libraries) [精華]
metavige

metavige

版主

發文: 2133
積分: 10
於 2004-09-18 17:48 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
呵呵,這個觀念,我也是到最近才會比較瞭解
因為事情一多,而且現在又是一個 OpenSource 的時代
很多東西已經不用再自己去花個兩三個月時間作出來
可以更專注的去瞭解商業邏輯的部分

以下就是書中的一些想法

使用程式庫有三大好處:
1. 你得以分享其設計者(撰寫者)的專家知識,以及其他人的使用經驗

書中舉的例子,是 Random 這個取亂數的程式
看完了我才知道,數學真的是博大精深
有很多東西我雖學過,比如說微積分以及三角函數等
老實說,進社會這樣多年,早就已經通通還給老師了
所以現在叫我去看什麼「線性同餘偽隨機數」(linear congruential pseudorandom number)生成器、數值理論、補數計算
那根本就是要了我的命,更不要說是我連這些名詞都沒聽過了
但是,程式庫的開發,是有一些有數學背景的資深工程師,花了大量時間在設計、開發、測試上面
甚至有缺陷的時候,也會在下一個版本中被修正
所以在使用這些程式庫的時候,其實我們已經是坐享其成了

2. 你不必把時間花費在一些與你工作關係不大的特殊解決方案上
老實說,現在的工作比較偏向 SA 之後,更有感觸
因為 Domain Knowledge 才是重點,尤其是現在軟體公司林立
程式設計師大學生滿街跑的情況下
程式語言要學會到入門,已經不是件困難的事情了
但是在業界的專業知識領域,卻只有在進入到該領域之後,才有辦法學會
尤其是一些高技術性、比較封閉的產業,在學校內根本就不會接觸這些產業的相關知識
並且再想想
如果要找到懂得Domain Knowledge,並且還要能夠將這些專業知識轉換成技術性的程式語言時
就更不容易了
我想很多新手就是死在這裡,因為沒有辦法將既有的問題,找到或聯想到相關的解決方法
所以,你最好把時間花在你自己的應用程式上面,而不是花在底層的垂直探究上

3. 你不需要做任何努力,他們的效率便會隨著時間演進而提高
這是因為有很多人使用他們,而且他們被測試於工業標準測試環境(industry-standard benchmarks)下
因此提供這些程式庫的組織有強烈的動機想要提升他們的效率

呵呵,我想 J2SE 5.0 的演進,正好印證了這句話
在過去來說,JVM 的效率一直是被人詬病的因素之一
雖說在 J2SE 1.3 演進到 J2SE 1.4 之後,效能已經大幅提昇
但仍然是比不上 M$ or C 的程式,但就這件事而言
Java 的開發者,是不用太去顧慮這些問題的,因為在"強大的上進心"下,我想 Sun 本身也會針對這些效率的問題
來做粉多的修正的

但是呢,還是有很多 Programmer 不懂的去使用程式庫,Why?
1. 他們不知道程式庫的存在

不要說是其她的 OpenSource 了
就連 java.* 的 API,都不見得會有人能夠完全的瞭解所有的 API
因為 J2SE 的範圍實在是太大了,所以說根本就不知道解決方案就在 J2SE 內的大有人在
但是所有 Java 的開發者,最最基本的,對 java.lang 以及 java.util 的部分,應該要熟悉
甚至對 java.io 也要有相當程度的瞭解

2. 程式庫無法滿足你的需求
如果你的要求越專業越特殊,這種情況越可能發生
其實我想 J2EE 就是因為這樣子而產生出來的
由於一些在業界的專業領域需求,比如說 Web Application 的開發就是一個典型的例子
畢竟 Web 的應用程式,如果要叫所有程式設計師在設計的時候
都必須要瞭解 Web 底層的處理,而且要使用 J2SE 來開發出產品來
這是不太可能的,因為 J2SE 的程式庫畢竟有限

所以如果你需要的功能被遺漏了,除了自力實現以外,恐怕別無選擇

這個章節的最後一段,蠻好玩的,貼出來大家分享一下
總而言之:不要再發明輪子。
如果你做的是一些常見的工作,也許程式庫內已經有如此功能的 classes
如果他的確存在,就用他,如果你不知道他是否存在,就查一查n一般而言,程式庫的程式碼品質可能比你自己寫的更好
這並不是身為程式員的你的能力問題
經濟規模可以告訴我們,程式庫所受到的關注,遠高於一般開發者開發相同功能時所付出的心力

我想最後一句話的意思,大概我的瞭解是,如果你可以用一些 OpenSource 組合出你要的功能
並且花的時間很少
那,老闆會很高興的,他根本不會管你到底這些功能是自己寫的還是去用別人所做的東西組合起來的
這是商業的考量.....


reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
話題樹型展開
人氣 標題 作者 字數 發文時間
6976 [精華] [Effective Java] 條款30 : 熟悉並善用程式庫 (libraries) metavige 2100 2004-09-18 17:48
» JWorld@TW »  Software Design » Effective Java

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8