網頁

搜尋此網誌

2012年8月29日 星期三

E-Learning 數位學習

前陣子逛書店看到一本關於數位學習的書本,翻閱之後發現內容相當完整,加上自己對於教育的興趣,於是買了下來閱讀,這裡和大家分享這本書。

這本書到底在談些什麼?這本書對於數位學習做一個整體性的概略說明,包括觀念、方法、實務、設計與實作,是一本數位學習的入門書,而且提供詳細的參考文獻資料,我們可以藉由這本書更進一步深入數位學習的領域。

顏春煌,數位學習:觀念、方法、實務、設計與實作(第二版),台北:碁峯資訊,2012。

這本書中提到,運用資訊科技進行教學互動則稱為數位學習(electronic learning, e-learning),而數位學習建置出來的教學環境則稱為虛擬教室(virtual classroom),實現數位學習的資訊系統目前有兩種:
  • 學習管理系統(Learning Management System, LMS)
  • 學習內容管理系統(Learning Content Management System, LCMS)
LMS的範疇大於LCMS,LCMS主要在於數位內容的管理,而LMS則是包含註冊、學習狀況、成績等等的管理,LMS主要在於學習者對於數位學習的管理。以前研究的Moodle就是LMS的一種,不過有點差異就是Moodle是以課程(Course)的概念為主要架構,官方稱Moodle是一個課程管理系統(Course Management System, CMS),我們利用Moodle之類的LMS將可以建立一個虛擬學習環境( Virtual Learning Environment, VLE),VLE應該就是虛擬教室更超層次的概念。

數位學習目前都是透過網路的方式進行,因此具有分散式學習(distributed learning)的特性,不只是地點分散,時間上來說也可能是分散的,可以區分為同步(synchronous)線上教學與非同步(asynchronous)線上教學兩種方式。若以歷史的角度來看數位學習,則有電腦訓練(Computer-Based Training)、遠距教學、電視教學、廣播教學等,這些其實都是教學活動透過當時最為主流便利的科技方式進行。

我們看待數位學習的同時,應該是要回歸學習與教育的本質,數位方式只是一種媒體,教學策略與學習理論才是我們發展數位學習的重點。

###

2012年7月11日 星期三

Teddy Scrum 敏捷開發法的逆襲

搞笑談軟工 (http://teddy-chen-tw.blogspot.tw/) 一直是工作上的最佳良伴,具有調劑身心與增進智能的功效,呷(ㄒㄧㄚˊ )好到相報!

最近作者終於推出「敏捷開發法的逆襲」這本書了,所有開發軟體、吃「軟飯」的人都該買來讀啊!由於 Teddy 是北科大的校友,在此強力推薦一下 Teddy 的敏捷開發法的逆襲,建議北科大應該要將此書列入軟體學程的必修課與教科書。引用 Teddy 的話:「不買終身遺憾,買了不看遺憾終身。p. 284」

讀完「敏捷開發法的逆襲」的最大收穫在於了解什麼是 Scrum (整本書的主題是在講述Scrum 和搞笑),作者基於傳福音的精神推廣 Scrum 給大家,這本書可說是 Scrum 的中文聖經本,信Scrum得永生(台灣目前應該還找不到專門介紹 Scrum 的中文書)。

而最近自己工作的環境也開始導入 Scrum,初淺地認識 Scrum 之後,我認為要「導入 Scrum,先換腦袋」(換誰的腦袋?老闆的還是 RD, PM 的...全部都該換掉),因為 Scrum 有些觀念與現在台灣的軟體開發觀念不同,做法也不同,習慣於這個制度之下很難開始改變 (不是不能改變,要改變就可能要革命囉...)。


陳建村 (Teddy Chen),笑談軟體工程:敏捷開發法的逆襲,台北:悅知文化,2012。

笑談軟體工程可以依序閱讀,也可以挑選有興趣的 PART 閱讀,或是擇一篇文章閱讀,這幾種方式都不會造成閱讀上的困擾或困難(意思是說書沒架構嗎?不是啦,因為Teddy用軟體工程的方式降低耦合),不過還是建議依序閱讀吸收會較快,我大概花了3天的瑣碎時間依序看完,真的很好看,也吸收到搞笑能力...

PART 1 軟體工程的現況
1 想看這本書的怨念有多深
2 老闆,軟體不是這樣開發的
3 600多個BUG要怎麼修?
4 軟體工程不等於髒話
5 這不是網路小說——軟體專案Scenario
Column A. 小朋友不可以說謊喔

PART 2 什麼是Scrum
6 SCRUM到底是?
Column B. 其實,Scrum是一種制度
7 SCRUM是很有內涵的
8 就是這個光──SCRUM+LEAN+XP
9 導入SCRUM?謝謝再聯絡。
10 我不能採用SCRUM,因為我家人不同意
11 導入Scrum前該有的領悟──都市游擊隊
12 100%符合Scrum精神──這是0與1的距離
13 不完美的Scrum──逆練九陰真經
14 Story要如何下筆?──啊!你練的不是九陰真經
15 end-to-end的story──這好比切蛋糕
16 如何估算Story Point?
17 Story Point為何沒有單位──這是一種相對論
18 Story寫的好才容易估算Story Point
19 Product Backlog長得什麼模樣?
20 The Definition Of Done──功課寫完沒
21 Bug”s”──放下心中舉起的中指
22 Redundancy──容錯的基本方法
23 Shared Code──讓我們變成博格人吧
24 Pair Programming──藥效強不強?
25 Retrospective Meeting──有許願池的功效
26 Scrum Master是個什麼咖?
27 有牌的Certified Scrum Master
Column C. 聞過則喜...誰說的?
28 導入Scrum──要有傳福音的精神
Column D. TEDDY的初衷

PART 3 精實生產,減少不必要的浪費
29 軟體也會有庫存問題
30 減少不必要的浪費——半成品
31 減少不必要的浪費——多餘功能
32 減少不必要的浪費——重複學習
33 減少不必要的浪費——交接
34 減少不必要的浪費——工作切換
35 減少不必要的浪費——延遲
36 減少不必要的浪費——缺陷
37 有缺陷,就停掉生產線

PART 4 開發軟體一定要加班,有沒有聽錯?
38 工程師與加班之間的愛恨情仇
39 非加班不可——台灣經濟奇蹟的幕後無名英雄
40 過勞死——軟體工程無用論
41 我可能不會18:30下班
Column E. 秀才遇到兵

PART 5 換顆腦袋——軟體工程的全新思維
42 學習犯錯
43 有問題才能解決真問題
44 傳承的風範
45 傻的願意相信
46 造船的目的
47 追求卓越——發語詞,無義
48 培育軟體還是組裝軟體?
49 對症下藥
Column F. ISO大戰乖乖
50 剽竊
51 重複程式碼的力量
52 TIME LOG的紀錄方式——這不是整人遊戲

PART 6 軟體架構
53 Problem Domain vs. Solution Domain
Column G. 一萬個小時的練習
54 用實際案例看Problem Domain vs. Solution Domain
55 要抄就要抄最好的——人人皆可成為架構師
56 你的軟體架構有多軟
57 設計最難的部份是什麼?
58 針對介面來寫程式
59 設計模式分成三大類
60 時間到

PART 7 人機介面
61 窮人的「人機介面」設計入門
62 GOMS——幫「人機介面」做體檢
63 DESIGNING FOR ERROR (1):使用者犯錯
64 DESIGNING FOR ERROR (2):外在世界與腦袋中的知識
65 DESIGNING FOR ERROR (3):限制、強制功能、自然對應
66 DESIGNING FOR ERROR (4):執行與評估
67 「人機介面」之博士熱愛的算式

PART 8 測試與整合
68 有測試案例改遍天下,無測試案例寸步難行
69 有些事不是能力的問題,而是整合
70 土炮跨平台自動化功能測試環境
71 10分鐘建構
72 落實測試與整合的能力有多少?
73 用ROBOT寫自動化功能測試到底有沒有用?
Column H. 需求分析書中最重要的資訊是什麼?

這裡用 Teddy 的夢想總結:「希望改變人們在台灣開發軟體的方法,讓軟體開發真正成為一件愉快、有趣的工作與創作。」是的,以 Teddy 的燭火點燭,光亮與我們同在,我們卻不因此身處黑暗。

###

2012年7月10日 星期二

National Taipei University of Technology 台北科技大學

今年(2012年)捐贈書籍的時間又到了。今年感受到Web浪潮又再度來襲,可能是雲端運算、App開發、HTML5、Big Data等議題受到矚目,這些都以Web技術為基礎,因此最近有不少好書可讀!

這次挑選的書籍多以基礎技術與軟體開發為主,沒有選擇Android App或iOS開發之類的書籍,原因有兩個,第一是App開發很熱門,學校一定會購買,所以不太需要捐贈,第二是App的發展速度很快,捐贈到上架時可能已經超過時效,所以放棄這類領域的書籍。加上自己是個Web Developer,這些書籍都是自己「品嘗」過後,色香味俱全的優良「食品」,特別選擇出來捐贈推薦給大家,呷好道相報啊!


這次捐贈的書籍清單如下所述:
  • David Flanagan,黃銘偉譯,JavaScript大全 第六版,台北:歐萊禮,2012。
  • Stoyan Stefanov,洪象成譯,JavaScript 設計模式 ,台北:歐萊禮,2012。
  • Steve Fulton, Jeff Fulton,陳美君譯,精通 HTML5 Canvas,台北:歐萊禮,2012。
  • Randal L. Schwartz, brian d foy, Tom Pho,蔣大偉譯,Perl 學習手冊 第六版,台北:歐萊禮,2012。
  • 吳軍,浪潮之巔-剖析IT產業 掌握下一個黃金十年,台北:博碩文化,2012。
  • 林信良,Java SE 7 技術手冊,台北:碁峰資訊,2011。
  • Diomidis Spinellis & Georgios Gousios,莊弘祥譯,架構之美-頂尖架構師於軟體設計中蘊含的智慧結晶,台北:歐萊禮,2012。
  • Adam Goucher ,Tim Riley,莊弘祥譯,測試之美-領略頂尖專家改善軟體的測試法則,台北:歐萊禮,2011。
  • Andy Oram & John Viega,佘步雲譯,安全之美-深入探索卓越安全專家的思維,台北:歐萊禮,2012。

###

2012年2月22日 星期三

Bash Builtin Commands 內建指令

Linux啟動之後所進入的通常就是Bash,面對這個Command-line Interface我們使用者應該如何操作!黑黑的畫面上閃爍著輸入游標,到底有什麼指令可以使用?請求協助輸入help是一個方法,但這只會列出Bash內建的所有指令

列出Bash內建的所有指令與敘述:help -d '*'
  1. % - Resume job in foreground.
  2. (( ... )) - Evaluate arithmetic expression.
  3. . - Execute commands from a file in the current shell.
  4. : - Null command.
  5. [ - Evaluate conditional expression.
  6. [[ ... ]] - Execute conditional command.
  7. alias - Define or display aliases.
  8. bg - Move jobs to the background.
  9. bind - Set Readline key bindings and variables.
  10. break - Exit for, while, or until loops.
  11. builtin - Execute shell builtins.
  12. caller - Return the context of the current subroutine call.
  13. case - Execute commands based on pattern matching.
  14. cd - Change the shell working directory.
  15. command - Execute a simple command or display information about commands.
  16. compgen - Display possible completions depending on the options.
  17. complete - Specify how arguments are to be completed by Readline.
  18. compopt - Modify or display completion options.
  19. continue - Resume for, while, or until loops.
  20. coproc - Create a coprocess named NAME.
  21. declare - Set variable values and attributes.
  22. dirs - Display directory stack.
  23. disown - Remove jobs from current shell.
  24. echo - Write arguments to the standard output.
  25. enable - Enable and disable shell builtins.
  26. eval - Execute arguments as a shell command.
  27. exec - Replace the shell with the given command.
  28. exit - Exit the shell.
  29. export - Set export attribute for shell variables.
  30. false - Return an unsuccessful result.
  31. fc - Display or execute commands from the history list.
  32. fg - Move job to the foreground.
  33. for - Execute commands for each member in a list.
  34. for (( - Arithmetic for loop.
  35. function - Define shell function.
  36. getopts - Parse option arguments.
  37. hash - Remember or display program locations.
  38. help - Display information about builtin commands.
  39. history - Display or manipulate the history list.
  40. if - Execute commands based on conditional.
  41. jobs - Display status of jobs.
  42. kill - Send a signal to a job.
  43. let - Evaluate arithmetic expressions.
  44. local - Define local variables.
  45. logout - Exit a login shell.
  46. mapfile - Read lines from the standard input into an indexed array variable.
  47. popd - Remove directories from stack.
  48. printf - Formats and prints ARGUMENTS under control of the FORMAT.
  49. pushd - Add directories to stack.
  50. pwd - Print the name of the current working directory.
  51. read - Read a line from the standard input and split it into fields.
  52. readarray - Read lines from a file into an array variable.
  53. readonly - Mark shell variables as unchangeable.
  54. return - Return from a shell function.
  55. select - Select words from a list and execute commands.
  56. set - Set or unset values of shell options and positional parameters.
  57. shift - Shift positional parameters.
  58. shopt - Set and unset shell options.
  59. source - Execute commands from a file in the current shell.
  60. suspend - Suspend shell execution.
  61. test - Evaluate conditional expression.
  62. time - Report time consumed by pipeline's execution.
  63. times - Display process times.
  64. trap - Trap signals and other events.
  65. true - Return a successful result.
  66. type - Display information about command type.
  67. typeset - Set variable values and attributes.
  68. ulimit - Modify shell resource limits.
  69. umask - Display or set file mode mask.
  70. unalias - Remove each NAME from the list of defined aliases.
  71. unset - Unset values and attributes of shell variables and functions.
  72. until - Execute commands as long as a test does not succeed.
  73. variables - Common shell variable names and usage.
  74. wait - Wait for job completion and return exit status.
  75. while - Execute commands as long as a test succeeds.
  76. { ... } - Group commands as a unit.
可以看到Bash內建的指令大概有70多個,至於Linux上全部的指令可以參考O'Reilly的Linux Command Directory。

心得感想:對於任何電腦系統,務必熟悉最重要的help指令,不知道怎麼操作就請「help」吧,但前提是你要知道有「help」啊!

相關指令:
  • 確認shell的種類:echo $SHELL
  • 顯示Bash的版本:echo $BASH_VERSION

###

Linux Basic vbird 鳥哥的私房菜

只要學習Linux的人,應該都知道「鳥哥的Linux私房菜」網站與書籍,鳥哥撰寫的文章對於自學者非常有幫助,可以讓不懂Linux的人循序上手,當然,如果身旁有老師或高手更好,避免「鳥哥的Linux苦難經驗」重蹈覆轍在自己身上,更感謝鳥哥免費分享他的學習之路與經驗。

最近真正深入Linux領域,趁著博客來特價優惠,趕緊將兩本「鳥哥的Linux私房菜」買下手,一本是基礎學習篇,另一本是伺服器架設篇,目前已經都是第三版,雖然說書的內容與網站上沒有差異,然而還是閱讀書籍比較舒適,建議想學習Linux的人都踴躍支持購買!

蔡德明(鳥哥),鳥哥的Linux私房菜‧基礎學習篇(第三版),台北:碁峰資訊,2010。

整本書分成五篇,共27章(包含第0章的計算機概論),我認為這五大篇也就是學習Linux的五個重點,其中第3篇的操作Bash與Vim算是使用Linux的基本能力,務必要學習且熟悉!
  1. Linux的規劃與安裝
  2. Linux檔案、目錄與磁碟格式
  3. 學習Shell與Shell Scripts
  4. Linux使用者管理
  5. Linux系統管理員
從目前學習Linux的經驗來看,自己大概要花3個月左右才有感覺上手,急不得也不能急,看書與操作Linux的時間大概是一半一半,若是有專家教導應該可以加速學習速度,當然,每天都用Linux的話學習會更快。

由於自己是從Windows轉過來學習Linux,每天開機還是面對Windows,一開始還真是摸不著Linux。建議想想自己在Windows的操作要如何在Linux上面實現,例如複製檔案要怎麼用Bash完成、如何用Vim修改設定檔...之類的使用案例,這種方式學習起來會比較有感覺喔!

###

2011年12月26日 星期一

National Taipei University of Technology 台北科技大學

今年(2011年)捐贈書籍的時間又到了,這次捐贈的數量較少,主要是找不到什麼好書可以捐贈。每次捐贈知會先調查圖書館是否已經購置,沒有購置才會列入我的選書清單之中,接著再將評估看看是否是一本好書,以及總金額是否超出今年的預算。

所謂「好書」,我所指的是內容的品質,主要看有沒有架構與深度。若是國外著作的翻譯本,一般來說都是好書,不好通常是翻譯品質不好,詞不達意、專有名詞錯誤等的問題。

如果是國內電腦相關出版品的話,內容上有濫竽充數、品質參差不齊的現象,用大量貼圖膨脹版面、觀念不敘述(只講述操作步驟)的問題,所幸近幾年已經改善不少,然而多數書籍出版依舊以中初級的程度為主,可能是國內市場不夠大的關係。


這次捐贈的書籍清單如下所述:
  • Paul Barry著,蔣大偉譯,深入淺出 Python,台北:歐萊禮,2011。
  • David Powers著,陳亦苓譯,跟Adobe徹底研究Dreamweaver CS5與PHP,台北:上奇資訊,2011。
  • Alan Beaulieu著,張偉超、林青松編譯,陳佳新審校,SQL學習手冊(第二版),台北:碁峯資訊,2011。
  • Bruce Lawson, Remy Sharp著,陳亦苓譯,Hello!HTML5,台北:松崗,2011。
  • Zoe Mickley Gillenwater著,張雅芳譯,想做好網站一定要會的CSS3,台北:碁峯資訊,2011。
  • 呂昶億、杜慎甄著,Dreamweaver CS 5.5全新進化,台北:松崗,2011。
期望國內能有更多的優良書籍出版,好讓我捐獻給學校。(大家都去借書了,誰來買啊...)
###

2011年12月22日 星期四

Design Patterns 2nd 物件導向設計模式 2讀

書不怕被多翻閱幾次,每次閱讀總會有不同的收穫!拿起身旁的「物件導向設計模式」這本書,兩年前(2009)對於設計模式非常有興趣,不過看完沒有多少體悟,經過兩年的軟體開發經歷,現在對於設計模式有不同的心得感想。

設計模式(Design Patterns)開宗明義指出:「設計物件導向軟體很難,設計可再利用(reusable)的物件導向軟體更難。(Designing object-oriented software is hard, and designing reusable objectoriented software is even harder.)」設計模式的目的與意義就是解決這個設計問題,由四人幫(Gang of Four, GoF)將物件導向設計的成功經驗整理成為「設計模式」,藉由設計模式將成功的設計與架構更容易可再被利用,讓設計師更快設計出正確的軟體,讓新的系統開發者更容易進入狀況。

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides著(所稱「四人幫」),葉秉哲譯,物件導向設計模式:可再利用物件導向軟體之要素,台北:台灣培生教育,2001。譯自:Design Patterns: Elements of resuable object-oriented software

「設計模式」一詞源於美國建築理論學家─克里斯多福‧亞歷山大(Christopher Alexander),他解釋:

每一則模式都在描述某種一再出現的問題,並描述解決方案的核心,讓你能據以變化出各種招式,解決上萬個類似的問題。
Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.

物件導向的設計模式由四人幫提出3大類(依據目的劃分)共23種設計模式,由他們對設計模式命名與編纂(ㄗㄨㄢˇ)成型錄。

 X目的
生成模式
(Creational Patterns)
結構模式
(Structural Patterns)
行為模式
(Behavioral Patterns)
範疇類別 工廠方法模式
(Factory Method)
轉接器模式
(Adapter)
解譯器模式
(Interpreter)
範本方法模式
(Template Method)
物件 抽象工廠模式
(Abstract Factory)
建造者模式
(Builder)
原型模式
(Prototype)
獨體模式
(Singleton)
轉接器模式
(Adapter)
橋接模式
(Bridge)
組合模式
(Composite)
裝飾模式
(Decorator)
外觀模式
(Façade)
享元模式
(Flyweight )
代理模式
(Proxy)
職責鏈模式
(Chain of Responsibility)
命令模式
(Command)
迭代器模式
(Iterator)
仲介者模式
(Mediator)
備忘錄模式
(Memento)
觀察者模式
(Observer)
狀態模式
(State)
策略模式
(Strategy)
訪問者模式
(Visitor)

由上表可以看到設計模式使用的範疇分為兩類,一是類別,另一是物件。類別模式處理類別與子類別之間的設計方式,在程式編譯期間(compile-time)就已經決定,屬於靜態關係。而物件模式則是處理物件之間的設計方式, 在程式執行期間(run-time)才運作,屬於動態關係。

有關物件導向設計模式必須慢慢仔細品嚐,才能發覺其中設計的精神!

###
延伸閱讀
物件導向設計模式

2011年12月15日 星期四

Learning Python 學習手冊

Python程式語言在台灣似乎沒有很多人使用,可能是學校教育大多數是教C和C++這類的程式語言,如果有興趣學習其他程式語言,我優先推薦學習Python,因為Python免費、可移植、功能強大(自動記憶體管理)、易於使用等優點。

中文Python參考書籍是相當少,這裡推薦台灣歐萊禮翻譯出版的「Python學習手冊」,這本書的內容範圍夠廣,討論深度夠深,說是Python聖經本也夠資格。不過目前看來中文已經絕版,不曉得是不是因為英文已經出了第4版,所以第3版的Python學習手冊才不繼續發行。

Mark Lutz原著,陳建勳譯、蘇秉豐編,Python學習手冊‧第三版,台北:歐萊禮,2008。譯自:Learning Python, 3rd Edition. O'Reilly Media.

學習程式語言除了瞭解語法之外,最重要的是程式語言本身的精神(觀念與特質)要掌握住,Python是一種物件導向描述語言(object-oriented scripting language),加上Python是動態定型的方式(資料型態不用宣告)。對於熟悉C++的人而言,很多觀念很像但卻是不一樣,特別是動態定型的特性,這是Python具有彈性的根源,也是讓Python在程式語言的實作上和使用上有所差異的原因。

全書分成8卷共29章,內容不外乎講述語法和觀念,但這本書有講到Python核心,像是「第六章 動態定型簡介」就屬於程式語言如何實作的部份。此外Python的套件(package)、模組(module)是Python獨有的概念,學習上一定要建立觀念,而在物件導向方面則要注意類別(class)物件和實體(instance)物件的觀念。
  • 卷 1 入門簡介
    • 第一章 Python 簡介
    • 第二章 Python 如何執行程式
    • 第三章 如何執行程式
  • 卷 2 型態和運算
    • 第四章 Python 物件型態簡介
    • 第五章 數字
    • 第六章 動態定型簡介
    • 第七章 字串
    • 第八章 串列和辭典
    • 第九章 Tuple、檔案、以及其他一切
  • 卷 3 敘述和語法
    • 第十章 Python 敘述簡介
    • 第十一章 指定敘述、運算式、以及列印
    • 第十二章 if 測試
    • 第十三章 while 與 for 迴圈
    • 第十四章 說明文件插曲
  • 卷 4 函式
    • 第十五章 函式基礎
    • 第十六章 範圍和引數
    • 第十七章 高等函式議題
  • 卷 5 模組
    • 第十八章 模組:大藍圖
    • 第十九章 模組撰碼基礎
    • 第二十章 模組套件
    • 第廿一章 高等模組議題
  • 卷 6 類別和 OOP
    • 第廿二章 OOP:大藍圖
    • 第廿三章 類別撰碼基礎
    • 第廿四章 類別撰碼細節
    • 第廿五章 類別的設計
    • 第廿六章 高等類別議題
  • 卷 7 例外事件和工具
    • 第廿七章 例外事件基礎
    • 第廿八章 例外事件物件
    • 第廿九章 例外事件的設計
  • 卷 8 附錄
    • 附錄 A 安裝和組態
    • 附錄 B 每卷練習題解答
    • 附錄 C Python 中文處理
「Python學習手冊‧第三版」以Python 2.5為執行環境,目前Python 2已經有2.7版,而且已經有Python 3了,使用上要注意版本的差異。期望有更多人加入學習Python的行列!也希望中文版的Python學習手冊能有第4版。

###

Object-Oriented Analysis and Design with Applications 物件導向分析設計與應用

物件導向(Object-Oriented, OO)是目前軟體開發中經常使用的設計典範(paradigm),很重要的概念但我一直以來沒有好好瞭解清楚,「物件導向分析設計與應用」這本書正好補足我這方面的知識,閱讀之後感覺相見恨晚,書中內容都是物件導向的經典!這本書的翻譯相當流暢且確實,非常感謝譯者蔡煥麟先生的用心。


Conallen, Young, Maksimchuk, Houston, Booch & Engle著,蔡煥麟譯,物件導向分析設計與應用,台北:碁峯資訊,2009。譯自:Object-Oriented Analysis and Design with Applications, 3/E。

「物件導向分析設計與應用」如同書名一樣,內容主要是講述物件導向分析(OOA)與物件導向設計(OOD),較少在物件導向程式設計(OOP)上著墨。全書分成3篇共12章,分別是概念(Concepts)、方法(Method)與應用(Applications)三個部分,前兩部分較偏向理論說明,而最後一部分透過實際案例的分析設計,讓我們讀者對於OOAD能有實務的經驗。

我認為這本書最重要的地方是第一篇概念,學習物件導向往往偏重於設計方法與實作的部分,可是卻造成「知其然而不知其所以然」,我們在這本書中可以清楚知道為何需要「物件導向」的原因,難得一見(也可能是自己看的聽的不夠多)。使用物件導向是為了解決軟體複雜性的問題,這個精神一定要謹記在心,分析和設計都是為了這件事。

物件導向利用物件模型(object model)降低系統的複雜性,於是我們才能比較容易處理問題,其中物件模型包含抽象化、封裝、模組化、階層、定型、並行性、續存性等概念,這些都是物件導向的核心概念。使用物件模型提高程式的可再用性與可維護性,讓軟體開發及維護更有效率。

對於正在學習物件導向程式語言(programming language)的人,我特別推薦閱讀這本「物件導向分析設計與應用」,你將可以結合物件導向的精神和程式碼,學習上將更有所體悟。

###

延伸閱讀
System Analysis and Design 系統分析與設計
Unified Modeling Language 統一塑模語言
Object-Oriented Programming物件導向程式設計
Design Patterns物件導向設計模式

譯者在他的部落格中的書籍資訊
Huan-Lin 學習筆記: 《物件導向分析設計與應用 第三版》書籍相關資訊

2011年12月11日 星期日

Brownfield Application Development in .NET 軟體構築美學

軟體開發當中,最不想遇到的情形就是「接手既有的專案」,因為不曉得藏有多少bug,加上各個開發者撰寫程式風格的差異,於是必須先看懂程式碼才能改善或加入新功能,這有時比重新開發要花更多心力,如果又沒有相關的開發文件或規格,接手這樣的專案只能祈求神明保佑。

現在,「軟體構築美學:當專案團隊遇上失控程式,最真實的解決方案」這本書提供我們面對上述這類「棕地應用程式」應該如何處理。所謂棕地(brownfield)這個詞彙是借用建築領域中的定義:

棕地土地(簡稱棕地),主要是用在工業上或商業上的一塊土地,並且這塊土地可能被低濃度的放射性物質或危險的廢物所污染,一旦清除這些污染,有可能將再次的重新使用。

Kyle Baley & Donald Belcham著,蔡煥麟、張簡才祿譯,軟體構築美學,台北:精誠資訊,2010。譯自:Brownfield Application Development in .NET。

棕地應用程式(Brownfield Application)指的是一個既有的軟體專案,此專案可能因為用了一些不好的開發方式、結構、或設計而產生許多問題,但若經過仔細的整理和重構(refactoring),還是有機會繼續發展使用。棕地應用程式包含三個基本元素:(1)既有程式碼、(2)差勁實務做法所造成的污染、(3)仍有改善或重複使用的潛力。

注意到「棕地」不同於「老舊(legacy)」應用程式,棕地介於「綠地(greenfield)」與老舊之間,綠地應用程式沒有舊專案或技術的歷史包袱,而棕地應用程式通常有很沉重的,至於老舊應用程式則是處於維護不開發。有了這些概念之後,就會清楚瞭解這本書主要想說明什麼內容了。

「軟體構築美學」總共13章,分成開發環境(The ecosystem)和程式碼(The code)兩個部分,一個開發人員面對的不外乎這兩個範疇。第1章是介紹棕地應用程式,後續幾章則說明棕地應用程式在這兩個範疇中有哪些痛點(pain point)和解決方法。
    • 第1章,認識棕地應用程式(Understanding Brownfield Applications)
  • Part 1 開發環境(The ecosystem)
    • 第2章,棕地專案的版本控制(Version Control in Brownfield Applications)
    • 第3章,持續整合(Continuous Integration)
    • 第4章,自動化測試(Automated Testing)
    • 第5章,軟體度量與程式碼分析(Software Metrics and Code Analysis)
    • 第6章,瑕疵管理(Defect Management)
  • Part 2 程式碼(The code)
    • 第7章,在專案中導入好的物件導向實務(Bringing Better OO Practices to the Project)
    • 第8章,應用程式的重新分層(Relayering Your Application)
    • 第9章,鬆散一些:降低程式碼的依賴性(Loosen up: Taming your Dependencies)
    • 第10章,重整使用者介面(Cleaning up the User Interface)
    • 第11章,重構資料存取(Refactoring Data Access)
    • 第12章,管理系統外部的依賴(Managing External System Dependencies)
    • 第13章,持續改善(Keeping the Momentum)
多數軟體專案常常受到「汙染」(通常不是惡意的,是不得已或無知之錯),隨著開發時間的增長,汙染程度與日俱增,最後根本無法維護利用。「軟體構築美學」適合推薦給專案管理與系統開發人員,裡面有太多正確的觀念和務實的作法非常值得學習,期望閱讀後不要再有「汙染」產生。

###

熱門文章