誰說人是理性的


好久沒看經濟類的書,這本書從人的非理性層面切入,並用有趣的實驗導出令人驚奇的結果,還蠻有趣的。

  1. 比較才能做決定。提供 A,-A, B 三種選項,其中 A,B 無法比較,A 比 -A 好。實驗出人們會 75% 去選A,即使 A,B 無法比較。這個 -A 的效果稱作誘餌效應。
  2. 定錨點的影響,隨機的定錨點先入為主影響你的決策。
  3. 只要有”免費”這個字眼,就難以抗拒。2塊降價變1塊跟1塊變免費的效果是天差地遠。
  4. 社會規範與市場規範,只要一提到錢,就變成市場規範。(錢不是萬能)
  5. 不同的情緒狀態所做的決定會不同,高張的情緒容易失去理智。
  6. 預先承諾機制可以幫助解決拖延問題
  7. 如果擁有某樣東西,就會對這樣東西估價較高。所有權會讓你的損失趨避心理變得強烈,只想到失去時的損失而忘記會獲得的利益。(由簡入奢易,由奢入簡難)
  8. 人會盡量保留多一點選擇,即使這樣得付出極高的代價。就像父母匆忙帶著小孩到處學才藝,四處奔走不僅讓人緊張,也不符合經濟效益。很多時候在兩個相似的選項中做選擇,猶豫的時間代價比兩者細微的差異損失更多。
  9. 預期心理影響感官認知。但若事後知道內情也不會影響一開始的經驗。
  10. 安慰劑的暗示效果,因為人們相信它有效,所以也出現治療效果。價格因素也會影響效用,貴的比較有效。關於醫療與安慰劑的道德問題是個很大的議題。
  11. 一旦有機會,許多誠實的人都會欺騙,一旦決定作弊,卻不會受被逮到的風險高低所影響,對小的欺騙來說不會思考成本效益分析。有趣的是如果有任何誠實概念進到腦子(例如回憶十戒或簽署榮譽制度),就會容易保持誠實。
  12. 當人們騙的不是現金的時候,欺騙行為較容易發生。甚至即使改成用代幣(多一層轉換手續而已,還是可以換現金),欺騙的比例也會大增。當交易媒介與貨幣無關時,我們就更容易合理化自己的行為。
  13. 行為經濟學了解人容易受到情境、不相關的情緒等不理性因素影響,所以希望利用工具、方法與制度來幫助我們提高決策品質。

我想這本書真正精采的地方在作者設計的這些有趣實驗,作為一本通俗讀物還蠻值得推薦的。不過我在想如果是科普觀點:認知心理學家、生物學家等科學家應該會有更好的解釋為什麼人類會這麼做吧,我自己是認為”人” 的這些非理性決策不是為了找到最佳解,而只是極小化選到最差解的可能 (也許就代表死亡)罷了。

Rails plugins@COSCUP 2008

Update(2008/8/23): 今天的投影片請點此下載

COSCUP

一年一度的 COSCUP 聚會又來了,這次我也投了一場 Rails plugins used/created in Registrano 約二十分鐘的演講。題目顧名思義就是介紹 Registrano 所用到的 Rails open source plugins,就是因為有這麼多好用的開放原始碼插件,才得已讓 Registrano 這個網路服務能夠敏捷地構建出來。

敝社和多這次同時也贊助了活動網站設計,當然還有報名網頁(Registrano)。除了我的 talk,還有 xdite 也會分享 Rails 2.1 的新功能介紹。希望大家多多捧場。

如果您對 Registrano 這項服務有任何想法,屆時也歡迎給予指教,並致贈您 Registrano 折價卷。

實戰敏捷開發 Practices of an Agile Developer (2) 需求篇

這一章是 Delivering What Users Want。我們總是幻想客戶一開始就確切告訴我們需要什麼,然後做完收工拿錢即可。不過事實總是中途加入一開始沒有提到的功能跟規格變更。敏捷開發不去試圖”擊敗”這些變更,而是把重點放在如何快速辨認及適應這些改變,並在時程及預算內做出真正符合用戶需求的軟體。
閱讀全文〈實戰敏捷開發 Practices of an Agile Developer (2) 需求篇〉

使用 Passenger (a.k.a mod_rails) 開發 SSL 網頁

承上一篇使用 mod_rails 當做開發環境,要在 local 開發測試 SSL 網頁,使用 mod_rails 是最方便的選擇,以下是我在自己 Mac Leopard 上的安裝步驟:

  1. 首先是產生 SSL Keys

Generate certificate

openssl req -new > server.csr
openssl rsa -in privkey.pem -out server.key
openssl x509 -in server.csr -out server.cert -req -signkey server.key -days 365

然後把產生出來的 server.key 跟 server.cert 放到 /etc/apache2/ 下,然後都 chmod 成 400 唯讀。

  1. 編輯 /etc/apache2/httpd.conf,打開 Include /private/etc/apache2/extra/httpd-ssl.conf

  2. 刪除 /etc/apache2/extra/httpd-ssl.conf 從 SSL Virtual Host Context 以下的所有設定

  3. 編輯之前設定好的 <VirtualHost *:80> 區段整個複製一份,並改成 443。然後在其中加入以下:


SSLEngine on
SSLCertificateFile /etc/apache2/server.cert
SSLCertificateKeyFile /etc/apache2/server.key

至此就裝好了,重開 apache 即可,還蠻簡單的。

實戰敏捷開發 Practices of an Agile Developer (1) 專業態度篇

敏捷軟體開發一直是我們內部開發的核心概念,強調個人、合作、回應和使用工作軟體(wiki, version control, unit testing, build automaion),2001年由一群軟體開發者發表宣言如下:

  1. 個人及互動勝於流程與工具
  2. 可用的軟體勝於詳盡的文件
  3. 與客戶合作勝於合約談判
  4. 回應變化勝於墨守計畫

軟體開發是連續(continuous)的,不是最後才測試,也不是最後才佈署,更不會停止收集需求跟feedback。正是因為開發軟體是如此複雜的活動,任何種類的錯誤如果不儘快修正,往往最後就會無法控制的失敗,因此唯有每天不斷的一點一滴的去修正,每天解決一些比較小的問題而不是最後脫韁野馬的大問題,這才是解決的辦法。

何謂 Agility 的定義,作者給了:
“Agile development uses feedback to make constant adjustments in a highly collaborative environment.” (敏捷開發是一種在高度合作的環境中不斷根據回應來做修正的開發方式)

透過經常性地建構出可以實際使用的軟體,我們持續得到 feedback。程式碼會因為需求擴充而不斷地被修改重構演進。工作的流程被拆成一至四周的短 iterations,每次透過 demo 得到 feedback,確保方向正確。

敏捷開發最大的不同到底是什麼呢? 這本書不談方法論流程(XP、Scurm等),而是談人本身,談團隊本身,談如何成為一個敏捷的開發人員。書的每一章由數個 Tips 組成,整本書共45個 Tips 來敘述什麼是敏捷的做法。這本書也得到2007年的 Jolts Productivity Award

前兩章 Beginning Agility 跟 Feeding Agility 講的是基本的專業態度:

閱讀全文〈實戰敏捷開發 Practices of an Agile Developer (1) 專業態度篇〉

RailsConf 2008 投影片選

一年一度的盛事結束了,大概翻了一遍目前可供下載的 RailsConf 2008 Presentation Files,我自己最喜愛以下四份投影片,談如何寫出更好的 Rails/Ruby 程式碼:

  1. Advanced Active Record Techniques Best Practice Refactoring
    用一個實際的例子,告訴你如何正確運用 Active Record 機制,將大部分的 Controller 移至 Model。
  2. The Worst Rails Code You’ve Ever Seen (and how not to write it yourself)
    挺有趣的投影片,舉例一些有點誇張的爛code。結論是請把 Ruby 基礎學好啊,跟厲害的人一起 co-work,多唸點書 (啊啊~可是講者的 Rails Way 一書好厚啊~)。
  3. Refactoring Your Rails Application
    Rails 重構型錄 Paper 真是不錯,如果再搭配 Martin Fowler 重構一書服用,保證你對如何寫出漂亮的code超有想法。
  4. “Design Patterns” in Ruby
    引述結論: “traditional” design patterns rely heavily on structure to solve problems, dynamic languages use language facilities to create simpler solutions.