網頁

搜尋此網誌

2012年10月3日 星期三

50 Erfolgsmodelle 如何下決定

如何下決定」這本書主要是探討「決策模型」,書中舉出50個最棒的決策模型提供我們做決定時參考。作者將這50個模型分為4類,分別是「如何改善自己」、「如何更加了解自己」、「如何更加了解別人」與「如何改善他人」,其中不乏是常聽到的


麥克‧克羅格魯斯(Mikael Krogerus)、羅曼‧塞普勒(Roman Tschappeler)著,胡瑋珊譯,如何下決定,台北:大塊文化,2012。
譯自:The Decision Book: Fifty Models for Strategic Thinking

如何改善自己(How to Improve Yourself)
  • 艾森豪矩陣(Eisenhower matrix):怎樣加強工作的效率
  • SWOT分析法(SWOT analysis):怎樣找到正確的解決方案
  • 波士頓矩陣(Boston Box):怎樣評估成本和效益
  • 專案投資組合矩陣(project portfolio matrix):怎樣維繫和監督?
  • 惠特默模型(John Whitmore model):我追求的目標正確嗎?
  • 橡皮筋模型(rubber band model):兩難的情況該怎麼處理?
  • 回饋模型(feedback model):處理他人的抱怨和批評
  • 家庭樹模型(family tree model):你們應該維繫的人脈
  • 型態分析盒與奔馳創意法(morphological box and SCAMPER):為什麼需有結構才能發揮創意
  • 君子送禮模型(Esquire gift model):花多少錢送禮?
  • 後果模型(consequences model):當機立斷為什麼很重要?
  • 化解衝突模型(conflict resolution model):怎樣才能漂亮地化解衝突?
  • 十字路口模型(crossroads model):接下來呢?
如何更加了解自己(How to Understand Yourself Better)
  • 沉浸模型(flow model):什麼會讓你快樂?
  • 喬哈里窗(Johari window):別人對你的風評如何?
  • 認知失調理論模型(cognitive dissonance model):人們為什麼明知吸菸不利健康、還是照抽不誤?
  • 音樂矩陣(music matrix):你的音樂品味將可用來詮釋你
  • 匪夷所思的模型(unimaginable model):什麼是你們深信不疑、但又無力證明的事物?
  • 烏夫‧艾爾拜克模型(Uffe Elbæk model):怎樣了解自我
  • 時尚模型(fashion model):我們怎樣打扮
  • 能量模型(energy model):你活在當下嗎?
  • 超級備忘錄模型(SuperMemo model):怎樣牢記所有曾經學過的事物
  • 政治羅盤(political compass):政黨支持什麼理念?
  • 個人表現模型(personal performance model):怎麼知道自己是否應該轉換工作?
  • 鑑往知來模型(making-of model):要想掌握未來,就先得了解自己的過去。
  • 個人潛力陷阱(personal potential trap):為什麼心中不存任何期望會比較好?
  • 技術循環周期(hype cycle):怎樣發掘下一個重大發明?
  • 細膩訊息模型(subtle signals model):細微之處為什麼重要?
  • 人脈網路目標模型(network target model):你的朋友對你的風評如何? 
  • 淺薄知識的模型(superficial knowledge model):你不用做萬事通
如何更加了解別人(How to Understand Others Better)
  • 瑞士乳酪理論(Swiss cheese model): 錯誤是怎麼發生的
  • 馬斯洛金字塔(Maslow pyramids):哪些事物其實是你們需要的,哪些又是你們想要的
  • 跳脫框架思維(Thinking outside the box):怎樣激發出絕佳的點子
  • 社會氛圍和布爾迪厄模型(Sinus Milieu and Bourdieu models):你所屬之處
  • 雙重迴路學習模型(double-loop learning model):怎樣從錯誤之中汲取教訓
  • AI模型(Al model):你屬於哪一種討論的類型?
  • 小世界模型(small-world model):這個世界到底有多小?
  • 帕雷托法則(Pareto principle):為什麼投入百分之二十卻能締造百分之八十的產出?
  • 長尾模型(long-tail model):長尾模型:網路怎樣扭轉了經濟?
  • 蒙地卡羅模擬法(Monte Carlo simulation):我們對確切的結果為什麼只能取得近似值
  • 黑天鵝模型(black swan model):為什麼你的經驗沒讓你變得更加睿智?
  • 斷層-擴散模型(chasm-diffusion model):為什麼人手一台iPod?
  • 黑盒子模型(black box model):信仰為甚麼取代了知識?
  • 地位模型(status model):如何辨識贏家
  • 囚犯的困境(prisoner's dilemma):什麼時候值得信賴別人?
如何改善他人(How to Improve Others)
  • 德萊克斯勒-西貝特團隊績效模型(Drexler-Sibbet team performance model):怎樣將小組打造成團隊
  • 團隊模型(team model):你的團隊有完成任務的能耐嗎?
  • 市場缺口模型(gap-in-the-market model):怎樣發現有收穫的點子
  • 賀賽–布蘭恰德模型(Hersey-Blanchard model):怎樣成功管理你的員工
  • 角色扮演模型(role-playing model): 如何改變本身的觀點?
  • 結果最適化模型(result optimisation model):為什麼印表機總在截止日期之前壞掉?
  • 下一個頂尖的模型(world's next top model):我們可從這本書學到什麼?
這本書總計列出52個決策模型(decision-making models),除了文字說明以外,此書在每個模型中都有繪圖解說,一張圖勝過千言萬語,任何時候都可以選擇任一個模型開始閱讀。注意到,書中最後提到重點:這些決策模型雖然是複雜世界的簡化,但不表示錯誤或是沒有價值,而是提供我們觀察世界的一個方法。

###

2012年9月10日 星期一

How Will You Measure Your Life 你要如何衡量你的人生

將企業管理的理論應用在人生規劃上會是怎樣?「你要如何衡量你的人生」這本書就是說明這件事,作者認為這些理論不只可以解釋企業的問題,也可以幫助我們審視重要的人生課題。


克雷頓‧克里斯汀生(Clayton M. Christensen)、詹姆斯.歐沃斯(James Allworth)、凱倫.狄倫(Karen Dillon)著,廖月娟譯,你要如何衡量你的人生?:哈佛商學院最重要的一堂課,台北:天下遠見,2012。譯自:How Will You Measure Your Life? ( 原文書網站:http://www.measureyourlife.com/ )

這本書在作者序(prologue)中提出人生的三個問題:
  • 問題1,如何知道我的工作生涯可以成功、快樂?
  • 問題2,如何知道我與配偶、兒女與朋友的關係可以成為快樂的泉源?
  • 問題3,如何知道我這一生會堅守原則,以免除牢獄之災?
整本書共分成三個部分,也就是分別依序討論上述三個人生的問題。
    • 第1章 展翅高飛(Just Because You Have Feathers)
  • 第1部 發現生涯之樂(Finding Happiness in Your Career)→問題1
    • 第2章 如何讓你的熱情燃燒(What Makes Us Tick)
    • 第3章 計劃與變化(The Balance of Calculation and Serendipity)
    • 第4章 策略的試金石(Your Strategy Is Not What You Say It Is)
  • 第2部 圓滿的人際關係(Finding Happiness in Your Relationships) →問題2
    • 第5章 時鐘滴答響(The Ticking Clock)
    • 第6章 一杯奶昔的任務(What Job Did You Hire That Milkshake For?)
    • 第7章 席瑟斯之船(Sailing Your Kids on Theseus’s Ship)
    • 第8章 經驗學校(Schools of Experience)
    • 第9章 一隻看不見的手(The Invisible Hand Inside Your Family)
  • 第3部 正直的人生(Staying Out of Jail) →問題3
    • 第10章 僅此一次,下不為例(Just This Once)
  • 結語(epilogue) 你拿什麼衡量人生
這本書的內容值得一讀再讀,尤其是最後結語的「目的三部曲」,作者克里斯汀生建議我們思考自己人生的目的,目的三部曲包含「畫像→投入→量尺」這三個要素,思考自己想成為怎樣的人,然後發自內心全心投入,找到正確的量尺衡量自己的人生,如此人生將變得更有意義。

###

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版。

###

熱門文章