摘要:程式設計與鴨子
不經意的走到年輕同事的位置旁, 看到書架上多了好幾款不同系列的公仔與小玩偶, 就在那邊看了一下.
他口氣有點平淡的說:『本來是送給前任女友的, 分手之後就退還給我了.』
『什麼時候分的?』 『去高雄看完黃色小鴨之後...』
於是, 我拿起放在最旁邊的那隻小鴨把玩, 也不知道要說些什麼(安慰他).
(沉默了一會, 覺到這小朋友平常也蠻愛學習的, 於是就想胡扯點技術相關的東西)
『你知道嗎? 其實 程式設計 跟 鴨子 也有點關係耶!』 『是喔! 真的? 假的?』
有一種Debug的方式叫做 "橡皮鴨除錯法" - (Rubber duck debugging). 這種方法是從一本很有名的書 "The Pragmatic Programmer" (程序员修炼之道) 裡面看到的. 作者提到, 他有一個程式設計高手朋友, 隨身都會帶一隻橡皮小鴨. 每當寫程式遇到問題時, 就會拿起小鴨對牠講述相關的開發流程與細節. 常常在自言自語之後, 都能靈光一閃, 發現錯誤的所在...
『這樣子看起來不是很蠢嗎?』
是沒錯啦! 不過我們只要抓住這種方法的精神就好; 你可以跟別人解釋、唸著螢幕上一行一行的程式碼、都可以...
『那程式設計跟鴨子還有什麼關係?』
在動態語言的世界裡, 像Ruby, 有一種叫做 鴨子類型(Duck Typing)的風格. 據說它的由來是西方這句話 「當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子, 那麼這隻鳥就可以被稱為鴨子」 (When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.) . 在這種風格裡, 一個物件的語義, 不是由繼承自特定的類別或實現特定的介面, 而是由當前方法和屬性的集合來決定.
『有點抽象, 呵呵』
是呀! 換句話說, 當兩個變數做運算時, 在Duck Typing中, 並不在乎這兩者的型別是否完全相同. 但它要求針對某個任務而言, 這兩個變數的型別是不是都具有相對應的功能, 如果有, 就視為相同的... ... 現在, 沒有程式碼, 口頭上不好說明. 有興趣的話, 晚點再傳點資料給你.
『好像還蠻有趣的! 那程式設計 跟 雞 有沒有關係呢? XD』
我只知道有種叫 CHICKEN 的 Scheme 語言實作. 如果還要牽強的講: 有個叫 Bootstrapping 的方法, 用在像實作一種程式語言 Compiler 時, "是先有雞還是先有蛋", 要如何無中生有的難題. 詳細的內容, 有機會再聊好了...
可是, 你知道程式設計跟什麽動物最有相關嗎?
Bug ... XD
http://coolshell.cn/articles/1719.html
http://en.wikipedia.org/wiki/Rubber_duck_debugging
http://zh.wikipedia.org/wiki/%E9%B8%AD%E5%AD%90%E7%B1%BB%E5%9E%8B
http://en.wikipedia.org/wiki/Duck_typing
http://en.wikipedia.org/wiki/CHICKEN_(Scheme_implementation)
http://en.wikipedia.org/wiki/Bootstrapping#Software_development
http://en.wikipedia.org/wiki/Bootstrapping_(compilers)
http://www.mitbbs.com/article_t/Quant/24859934.html