89
Same But Different 2011年3月27日星期日

Same but Different

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Same but Different

SameBut Different

2011年3月27日星期日

Page 2: Same but Different

$speaker.meta

• 劉康民 Kang-min Liu id:gugod

• gugod.org• handlino.com 和多股份有限公司

2011年3月27日星期日

Page 3: Same but Different

2011年3月27日星期日

Page 4: Same but Different

芥納須彌禪宗公案

2011年3月27日星期日

Page 5: Same but Different

唐朝時代有一個很愛看書的人叫李勃,,認識他的人都叫他「李萬卷」。

有一天去拜訪智尚和尚,他問智尚和尚:「我在佛書中曾經讀到『須彌山沒入芥子』這一句話。老實說,我有點搞不清楚,這麼一座大山如何裝進一顆小芥子中?請智尚師父開示。」

「你書讀的多,懂的事也很多,大家都叫你『李萬卷』,請問你那一萬本書是如何裝進你的腦袋裡?請你告訴我。」

李渤聽後,腦中轟然一聲,當下恍然大悟。2011年3月27日星期日

Page 6: Same but Different

• 芥子的象中,有須彌的象

• 很大的東西能被放到很小的東西裡面

• 一小抹口腔黏膜,有能代表全身的 DNA

• Call by Reference

• 單一事實能代表無限多事實

2011年3月27日星期日

Page 7: Same but Different

這是一匹馬 ⇔

這不是一頂草帽 + 這不定一朵花 + 這不是一張車票 + ... (窮舉)

2011年3月27日星期日

Page 8: Same but Different

這是一匹馬 ⇔ 這不是{非一匹馬}

2011年3月27日星期日

Page 9: Same but Different

狗兒的問題

2011年3月27日星期日

Page 10: Same but Different

2011年3月27日星期日

Page 11: Same but Different

2011年3月27日星期日

Page 12: Same but Different

2011年3月27日星期日

Page 13: Same but Different

1. 衝到柵欄邊

2. 「汪!」

3. 重覆上一步

2011年3月27日星期日

Page 14: Same but Different

程式設計師的問題

2011年3月27日星期日

Page 15: Same but Different

有一個專案團隊在正在開發如 Web Mail

的應用服務,專案負責人提出了「電子郵件轉傳真」的具體想法

2011年3月27日星期日

Page 16: Same but Different

1. 「總之先改看看吧!」

2. (兩天後)「老闆我寫好了試看看吧!」

3. 老闆:「我寄過去的 .doc 檔案變成亂碼耶?」

4. 回到第一步

2011年3月27日星期日

Page 17: Same but Different

問題的轉變

2011年3月27日星期日

Page 18: Same but Different

1. 走到門邊

2. 走到肉旁邊

3. 吃

如何吃到肉?

2011年3月27日星期日

Page 19: Same but Different

?2011年3月27日星期日

Page 20: Same but Different

?? ?

2011年3月27日星期日

Page 21: Same but Different

✓? ✓

2011年3月27日星期日

Page 22: Same but Different

2011年3月27日星期日

Page 23: Same but Different

1. 爆肝

2. 爆炸

2011年3月27日星期日

Page 24: Same but Different

1. 爆肝

2. 爆炸

2011年3月27日星期日

Page 25: Same but Different

好像沒下班

報價報太少

時程估不對

規格一直改

2011年3月27日星期日

Page 26: Same but Different

程式設計師的修練

2011年3月27日星期日

Page 27: Same but Different

• 如何達成想要的效果

• 使團隊合作更容易

• 使效率更佳

• 使安全性更強

如何寫出好程式

2011年3月27日星期日

Page 28: Same but Different

• 慣例 (Convention)

• Coding Style

如何寫出好程式

2011年3月27日星期日

Page 29: Same but Different

2011年3月27日星期日

Page 30: Same but Different

Write clearly - don't be too clever.

2011年3月27日星期日

Page 31: Same but Different

Make sure every module hides something.

2011年3月27日星期日

Page 32: Same but Different

Make it right before you make it faster.

2011年3月27日星期日

Page 33: Same but Different

Keep it right when you make it faster.

2011年3月27日星期日

Page 34: Same but Different

Make it clear before you make it faster.

2011年3月27日星期日

Page 35: Same but Different

Keep it simple to make it faster.

2011年3月27日星期日

Page 36: Same but Different

Don't diddle code to make it faster - find a better algorithm.

2011年3月27日星期日

Page 37: Same but Different

Use the "telephone test" for readability.

2011年3月27日星期日

Page 38: Same but Different

OSS Team

2011年3月27日星期日

Page 39: Same but Different

OSS Team

2011年3月27日星期日

Page 40: Same but Different

OSS Team

2011年3月27日星期日

Page 41: Same but Different

遊樂場

2011年3月27日星期日

Page 42: Same but Different

遊樂場

2010 重大事件

2011年3月27日星期日

Page 43: Same but Different

遊樂場

2010 重大事件

2011年3月27日星期日

Page 44: Same but Different

day9.tv2011年3月27日星期日

Page 45: Same but Different

遊樂場

2011年3月27日星期日

Page 46: Same but Different

遊樂場

• TextMate + GitX + DTerm• Emacs• vim• linux + apache + mysql + php• Firebug + Console Log

2011年3月27日星期日

Page 47: Same but Different

遊樂場

• OO + Polymorphism + Factory Pattern• String-based DSL + Fast Parser• Lazy Evaluation + Iterator + Callback• Event + Async• Functional(-ish) programming

2011年3月27日星期日

Page 48: Same but Different

遊樂場

• Group-ware• IRC + Skype + Wiki• RT / Hiveminder / Redmine ...• Kanban• Pomodoro• GTD

2011年3月27日星期日

Page 49: Same but Different

遊樂場

• 我很擅長 X, Y, Z 這三招,因此我都用採用這些方式來寫程式

• 個人招數

2011年3月27日星期日

Page 50: Same but Different

妳用什麼物件系統?

2011年3月27日星期日

Page 51: Same but Different

妳用什麼物件系統?

物件系統?perltoot 說用 bless 過的雜湊

2011年3月27日星期日

Page 52: Same but Different

妳用什麼物件系統?

物件系統?perltoot 說用 bless 過的雜湊

2011年3月27日星期日

Page 53: Same but Different

2011年3月27日星期日

Page 54: Same but Different

勿使時程誤

日日勤食蟲

待辨如坑儒

專案似無涯

2011年3月27日星期日

Page 55: Same but Different

脫離情境的思考

2011年3月27日星期日

Page 56: Same but Different

2011年3月27日星期日

Page 57: Same but Different

2011年3月27日星期日

Page 58: Same but Different

?2011年3月27日星期日

Page 59: Same but Different

?

?

?

?

?

?

?

2011年3月27日星期日

Page 60: Same but Different

???

??✓?

?✓??????

???????✓??✓✓✓????

2011年3月27日星期日

Page 61: Same but Different

簡化問題

2011年3月27日星期日

Page 62: Same but Different

大事化小

2011年3月27日星期日

Page 63: Same but Different

大事化尛

2011年3月27日星期日

Page 64: Same but Different

大事化尛

• ? → ???

• 一個大問題應被重新定義成多個小問題,分開解決。

• 最後合併所有答案,得出解答

2011年3月27日星期日

Page 65: Same but Different

大事化尛

•Divide & Conquer

2011年3月27日星期日

Page 66: Same but Different

大事化尛

• Email 轉傳真

1. 如果 Email 附件是 {pdf, doc, txt,

xls, ... } 格式時,將其傳真出去

2. 如果 Email 沒有附件時,將本文傳真出去

2011年3月27日星期日

Page 67: Same but Different

大事化尛

• Email 轉傳真

1. 先檢查 Email 附檔是否為 pdf

2. 將 pdf 轉成傳真機所能接受的格式

3. 輸出至傳真機

2011年3月27日星期日

Page 68: Same but Different

大事化尛

• Email 轉傳真

1. 先檢查 Email 附檔是否為 X

2. 將 X 轉成傳真機所能接受的格式

3. 輸出至傳真機

2011年3月27日星期日

Page 69: Same but Different

小事化無

• 小問題應能對應到已知的解題法,甚至答案

2011年3月27日星期日

Page 70: Same but Different

• 描述問題時,一併寫下一些否定的敘述,能讓事實敘述更為準確

• Email 轉傳真

• Email 中不可以包含附件

• Email 中不可以包含 .doc 檔

2011年3月27日星期日

Page 71: Same but Different

• 專案:線上留言版

• 使用者可以留言

• 留言內容最多可以 140 字

2011年3月27日星期日

Page 72: Same but Different

• 專案:線上留言版

• 使用者可以留言

• 留言內容最多可以 140 字

• 留言中不可以包含超連結

• 留言中不可以包含圖片

2011年3月27日星期日

Page 73: Same but Different

簡化解題過程

2011年3月27日星期日

Page 74: Same but Different

• 要解決已知有解法的小問題,就是套用那些解法,也許加上適當的變形

• 合併答案

• 專案執行

2011年3月27日星期日

Page 75: Same but Different

敏捷方法Agile Methodology

2011年3月27日星期日

Page 76: Same but Different

• 專案執行一定需要充分溝通

• Agile: 邊做邊溝通

• 每天必有短會議確認進度

• 每周 / 月有長會議修正大方向

• 執行中討論規格

2011年3月27日星期日

Page 77: Same but Different

對於個人而言:

• 「遊樂場」是否切合經常需要解決的問題領域

• 面對問題時,能不能對應到較容易解決的工具

2011年3月27日星期日

Page 78: Same but Different

• Test-Driven Developing

• Cucumber BBD Testing tool

• Selenium Integration tool

• RSpec / TAP / qunit General testing tools.

2011年3月27日星期日

Page 79: Same but Different

簡化答案奧義

2011年3月27日星期日

Page 80: Same but Different

• PM / 發包者應定義好答案

• 至少確定答案的領域範圍

• 答案(專案成果),往往是固定的一類東西

2011年3月27日星期日

Page 81: Same but Different

• 例:x+y=5, xy=6 求 x,y 整數解

• 例:設計 method 時,傳回值的型別(內建、自定、self)

2011年3月27日星期日

Page 82: Same but Different

完成工作事項後,應達成的效果

2011年3月27日星期日

Page 83: Same but Different

Acceptance Testing

2011年3月27日星期日

Page 84: Same but Different

• 例:使用者點了「送出」鈕後,網頁中間應開出一朵花,表示表單正在送出中

• 例:使用者問「42?」時,機器人應回應「生命、宇宙以及任何事情的終極答案」

• 例:使用者在文字輸入中按下 Enter 鍵時,應立刻自動送出表單,不必另外點送出鈕

2011年3月27日星期日

Page 85: Same but Different

以輸入法為例:

問題描述:使用者無法輸入『尛』這個字

應有效果:使用者在組字時按下「SSS」,應有『尛』出現在選字窗中。

2011年3月27日星期日

Page 86: Same but Different

• 協同開發工具

• Wiki

• Story board

• Scrum

• Burn-down Chart

2011年3月27日星期日

Page 87: Same but Different

程式設計師的頓悟

2011年3月27日星期日

Page 88: Same but Different

報酬何處來

工程無實務

時程亦未艾

規格本無樹

2011年3月27日星期日

Page 89: Same but Different

The EndBut maybe not

Kang-min Liuhttp://gugod.org

2011年3月27日星期日