精華區beta Programming 關於我們 聯絡資訊
==> 在 william@cis_nctu (何陋居主) 的文章中提到: > ==> 在 yuanchang.bbs@cszone.cc.ntu.edu.tw (小璋璋) 的文章中提到: > > 所以要學好C++,從入門到真正能不覺得 > > 窒礙難行地寫出具有OO精神的程式,我估計這時間不會太短, > > 其中或許還參考過各家門派的書籍,與C++某些語法搏鬥 > > 過不少地時間。換算下來,值得嗎? 如果肯思考這問題, > > 你就會認為,不是每個人都需要C++的,即使多數人喊出來 > > 的看法是,C++才是貴族。 > 對新手來說, 學好傳統的結構化設計方法, 也是要花相當時間, > 才能有所謂「真正能不覺得窒礙難行地寫出具有結構化精神的程式」的表現。 > 好的洞察力、好的書籍、好的良師益友, 能降低門檻、催化進步。 > OO 亦如是。 不過在職場上,許多主事者並不在乎你是用什麼設計方法來開發軟體,他只要能交差就好. 因而往往扼殺許多有志學習OO的技術人員.我這樣說並不是反對學習OO,而是依據我的 經驗,以往在職場上要堅持用自己想用的技術來開發軟體,對於人微言輕的年輕技術人員來說 那是需要很大的勇氣,毅力與決心.另外我必須說明,千萬不要有想在幾個用內就想學好 的想法.我常常看到許多專案,專案成員都沒有運用OO技術的經驗,就很勇敢的要在幾個 月內用OOA/D/P來建構完成,這樣的下場通常是慘不忍睹. > 固然「不是每個人都需要C++的」, 或者更進一步講「不是每個人都需要 OO 的」, > 不過, OO 已侵略性地進佔越來越多的傳統領域, 根據我初步的整理就在這兩年(1998、1999),許多以OO 為基礎的資訊技術領域都有突破,例如: 系統分析/設計 分岐的OOA/D符號語言逐漸統合─UML(Unified Modeling Lanuage) 1.2/1.3、OPEN。 程式語言 Java語言的更新(Java 1.2/2.0)、ISO/ANSI C++標準的制定。 作業系統 系統核心走向物件導向化─Windows 2000 資料庫 許多原為關連式的資料庫系統逐漸整合物件技術─ Oracle 8.0、IBM Universal Server、Informix Universal Server、 Microsoft SQL Server 7.0 傳輸協定 逐漸普及與強化oo支援─ORPC(DCOM)、IIOP(CORBA)、JRMP(JAVA RMI)。 分散式物件模型 更新的標準─CORBA 3.0、COM+、Enterprise Javabean(EJB) 主從架構 朝向以分散式物件為基礎的多層式主從架構 > 所以, 能夠在你所在領域還沒變天之前就先領略(領略 ≠ 使用), 總是比較好的。 > 等到一夕變天再去緊張得抱佛腳, 是很悲哀的事; > 尤其是到了你已不太能也不太想去適應新變局的年齡或人生階段。 > > 至於有些人整天OOP喊不停,大家要注意到的是,他所從事 > > 的工作,以程式設計者來說,我是完全把語言當成一種工具 > > 看待。但是一個教育者會比較傾像學術氣息,至於實用 > > 方面,則擺在較後面的層次。 > There is no silver bullet. > 所以學術人士致力於探勘探索各種潛在的可能解, 並致力於發掘出各解的極限。 > 學術界探討的東西, 往往要幾年過後才會在實務界看到大用。 OOA/D就是一個最好的例子.從1960年代在瑞典萌芽至今也有三十多年的歷史,不過 在實務界被廣泛使用那是在最近這幾年.前幾年如果有人說OO技術比較傾向學術, 我需不甚贊同但也不太能找出有力的論點來辯駁.但是現在?我可以很大聲的說, OO技術已經是軟體開發技術的主流了!就以我去年去美國參加開發工具的研討會 為例,UML/OOAD/Distributed Object等相關議題非常普遍,甚至許多與OO議題 不甚相關的講座也會穿插UML等等圖例.難道我們還要自絕於世界潮流之外,不學 ,不用,不聽,來進入二十一世紀嗎? > > 又許多人腦海中的觀念是:學會「程式設計」,就可以寫出 > > 心中想要的程式,在還沒有經驗的時候,我也是這樣 > > 的想法。當你費盡九牛二虎之力才學會某一種語言, > > 最可悲的事情就是派不上用場,你不知道要寫些什麼, > > 而學習過程中那些狂熱的心態,只能淪為經驗值的獲取。 > > 事實上不論一個人語言功力多強,並沒有辦法幫助他 > > 獲取更好的IDEA來實作,不是嗎? > 這倒是。 > 不過, 過於偏重「程式語言」層面的功力, 也是錯誤的。 > 沒有與之搭配的形而上思維, 等於是無頭蒼蠅亂飛亂竄。 > 九牛二虎的付出, 若是付出錯了方向, 也別想得到九牛二虎的經驗值。 > 最近受人之託, 要去工x院 N 減一組講幾天的 OO 引介課。 > 不過, 由於對象是與 mobile computing、MAC protocol、embedded system 工作 > 相關的工程師, 且多半是 EE 出身的, 就很煞費思量... > 總不能舉一堆由 CS 及 information system 類比過去的東東做為切入角度吧 > (如:資料結構、ADT、E-R model、結構化系統分析/設計/程式設計...) > 如果聽眾是 CS 背景的話, 這種切入方向就很適合。 > 所以, 大概會偏重 UML 的 dynamic 層面來講, 少講些 static 的層面。 > 與經理談了一下, 大概把自己的預期心態調整了一下。 > 不必要求講完之後, 聽眾能真正領略多少(畢竟要這些在本職上不太用得到 OO 的人 > 且背景知識與訓練上根本不太 CS 的人一下子就領略得了 OO, 是項苛求); > 只要有某些理念傳達過了, 讓他們在未來有適當情境時, 能夠有些 inspiration 作用, > 能夠有些 guideline 作用, 就夠了。 這一點我有一些不同的意見,雖然有些時候傳達OO理念要因人制宜,不得不作某些精簡. 但是千萬不要讓他們有像"OO就是這樣而已"的感覺.尤其我認為不能為了幫助理解而只 隨便用一些不著邊際的範例(例如前些日子就有人用歷史故事來闡述OOA/D), 而忽略了OO技術面的原理與嚴肅性.因為台下的聽眾可能有一些非工程師的管理人員, 他們如果有了不實的似懂非懂觀念,反而更會造成往後推動OO技術的困擾.況且軟體開 發到目前為止,不論用OO或結構化技術,它的失敗率仍高居不下(保守估計也有七成以上). 所以我認為有必要強調軟體工程面的嚴肅性.因此我認為最起碼要搭配一個完整用OO 技術開發的實例並以此來剖析OO技術實行的要件與可能面臨的問題才能使台下的聽眾 有較實際的感受.也才能夠以更務實的態度來面對OO技術所帶來的調適問題. > > 我認為真正做學問的態度,是在很自然的狀態下學習, > > 或許也為了一個小小的目標,而且不必刻意去背, > > 只要能再需要知識派上用場的時候,能夠快速索引到需要的資料即可。 > 有些東西是可以等到要用時才去「快速檢索」, > 但有些東西可不是所謂的「等到要用時才去『快速檢索』」即可成事; > 否則一些 open book 的考試, 怎麼反而更讓準備考試的人心驚膽跳? > 有些東西, 重點是「心法的養成」。 我想"心法的養成"應該是指要熟習"核心技術"與捉住OO的精神.比如說要學C++,如果只會 程式迴圈,Call API,依然照以往的直覺來寫程式,那麼"快速檢索"像MSDN或書籍所得到 可能只是囫圇吞棗與閉著眼睛Copy&Paste,寫出來的軟體久而久之就好金庸筆下的"吸星 大法",一開頭雖然好像很不錯,可是久而久之,吞得愈多則反噬的力道愈大,最後系統就連 大羅金仙也難救. 但是如果你捉住OO的精神,熟習C++的OOP,STL等核心技術,雖然在寫實用程式時免不了要 查閱像MSDN之類的技術資料,可是你的"主架構"穩固,就好像自行修練的"內力"深厚,這樣 才能經得起考驗. -- 唯有真情才是可貴的 -- * Origin: ★ 交通大學資訊科學系 BBS ★ <bbs.cis.nctu.edu.tw: 140.113.23.3>