喜愛的程式設計名言

每次看技術書籍的時候,特別喜歡翻過一遍作者放在章節開頭的名言佳句(如果有的話),通常都蠻有意思的。所以在自己的裡也想這樣做,這是目前收集的名言佳句。不過要做到每則名言都剛好呼應該章內容真是困難啊。

  1. Life’s too short to build something nobody wants – Ash Maurya, Running Lean 作者
  2. Give someone a program, you frustrate them for a day; teach them how to program, you frustrate them for a lifetime. – David Leinweber
  3. There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies. — C.A.R. Hoare
  4. Actually, I’m trying to make Ruby natural, not simple. Ruby is simple in appearance, but is very complex inside, just like our human body. – Matz, Ruby 發明人
  5. Much of the essence of building a program is in fact the debugging of the specification. – Fred Brooks, The Mythical Man-Month 作者
  6. The first 90% of the code accounts for the first 90% of the development time. The remaining 10% of the code accounts for the other 90% of the development time. – Tom Cargill
  7. Complication is what happens when you try to solve a problem you don’t understand – Andy Boothe
  8. Weeks of programming can save you hours of planning. – Unknown
  9. Controlling complexity is the essence of computer programming. — Brian Kernighan
  10. All problems in computer science can be solved by another level of indirection(abstraction) – David Wheeler
    …except for the problem of too many layers of indirection. – Kevlin Henney’s corollary
  11. Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. — Rick Cook
  12. Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it. — Brian W. Kernighan
  13. I’m not a great programmer; I’m just a good programmer with great habits. ― Kent Beck
  14. Most of you are familiar with the virtues of a programmer. There are three, of course: laziness, impatience, and hubris. – Larry Wall, Perl 程式語言發明人
  15. Any fool can write code that a computer can understand. Good programmers write code that humans can understand. – Martin Fowler
  16. Measuring programming progress by lines of code is like measuring aircraft building progress by weight. – Bill Gates
  17. It’s not a bug – it’s an undocumented feature. – Unknown
  18. The most depressing thing about life as a programmer, I think, is if you’re faced with a chunk of code that either someone else wrote or, worse still, you wrote yourself but you no longer dare to modify. That’s depressing. – Peyton Jones
  19. It works on my machine! – 數以萬計的程式設計師
  20. Talk is cheap. Show me the code. – Linus Torvalds
  21. I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages — Alan Kay, Smalltalk 發明人
  22. When you choose a language, you’re choosing more than a set of technical trade-offs—you’re choosing a community. -Joshua Bloch
  23. Quality, Speed or Cheap. Pick two. – Unknown
  24. Developer testing isn’t primarily about verifying code. It’s about making great code. If you can’t test something, it might be your testing skills failing you but it’s probably your code code’s design. Testable code is almost always better code. – Chad Fowler
  25. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. – Donald Knuth
  26. No code is faster than no code. – Merb core tenet
  27. If you’re the smartest person in the room, you’re in the wrong room. – Unknown
  28. How long would it take your organization to deploy a change (to production) that involves just one single line of code? Do you do this on a repeatable, reliable basis? – Mary Poppendieck
  29. Nine people can’t make a baby in a month.  — Fred Brooks, The Mythical Man-Month作者
  30. Good code is its own best documentation. As you’re about to add a comment, ask yourself, ‘How can I improve the code so that this comment isn’t needed?’ Improve the code and then document it to make it even clearer. – Steve McConnell, Code Complete 作者
  31. A person does not really understand something until after teaching it to a computer. – Donald Knuth

有特別喜歡哪句嗎? 或是你自己有喜愛的名言,歡迎告訴我。

「守、破、離」學習模式三階段

第一次在 Agile in a Flash 小卡上看到「守、破、離」還一頭霧水不知道在講什麼。最近因才終於了解意思,據說是出自於學習劍道的不同階段:

  • 「守」,一切盡量遵守教條,練習基本功夫直到熟練。這個階段專心學習一種實務,比學習各種理論重要。
  • 「破」,開始打破一些規範限制,可以因地制宜靈活運用。這個階段開始思考理論,也會參考看看其他門派是怎麼做的。
  • 「離」,超越所有規範的限制,自創一格,達到無招勝有招的境界。

學習軟體開發又何嘗不是如此,無論是 Scrum、TDD 或是 Design Patterns,總是得先經歷一段照章行事「盡信書」的階段,循序漸進,才能融會貫通。而不是直接進到「黑貓白貓,會抓老鼠的就是好貓」「無招勝有招」「盡信書不如無書」的階段,直接把所有規範拋開。

例如,前一陣子 Kent Beck 大師 (TDD作者和XP發明人)在 stackoverflow 回答了一題測試要測多少深,答案竟然是 “I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence.” 可說是跌破眾人眼鏡 XD 但其實這種答案根本是第三階段的大師答案嘛,也就是「隨心所欲寫測試」的大師境界。如果從來沒學過寫測試,看到這句搞不好會說測試根本不重要,不需要學哩。所以搞清楚自己在哪個階段也是很重要的,當你聽到有人說「「X方法不重要,只要做的出來就好」時,要注意到大師已經練到可以隨心所欲,我們普通人還是先乖乖遵守「所有 production code 都應該要有對應的 test」培養寫測試的感覺跟經驗吧。

RubyConf Taiwan 2012 CFP&CFS

To English readers:

Hi, I’m the organizer of RubyConf Taiwan. Please see Call For Presentations and Call For Sponsors for more information.

Our invited speaker this year includes Yukihiro Matsumoto (Ruby creator), Koichi Sasada (Ruby 1.9 VM YARV author), Akira Matsuda (kaminari author, Rails Contributor, Ruby core team), Koan-Sin Tan (famous open source developer in Taiwan).

今年的 RubyConf Taiwan 已經開始籌辦一陣子了,才想到自己部落格還沒有貼這則消息… XD 日期是 2012/12/7-8,跟去年一樣是週五周六,場地則改在天母會議中心

詳細的公告,請詳見 Ruby Taiwan 部落格的 Call For PresentationsCall For Sponsors。這週末就截止徵稿囉,要投要快。

大家期待的邀請講者部分,名單有:

* Yukihiro Matsumoto (matz): Ruby 程式語言發明人
* Koichi Sasada: Ruby 1.9 VM (YARV)的作者
* Akira Matsuda: kaminari 的作者、日本最活躍的 Rails Contributor、Ruby core team
* Koan-Sin Tan (Freedom): 台灣開放源碼社群的資深前輩,會來跟我們談跟 Ruby 淵源很深的 Smalltalk

最快九月底,最慢下個月就會開放報名,敬請期待。

從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup

首先感謝 AgileCommunity.tw 辦了這場活動,大家討論的非常熱烈,分享了各自的團隊經驗,真是愉快的活動。

我投的題目是「從 Scrum 到 Kanban: 為什麼 Scrum 不適合 Lean Startup」,這個問題最早是我剛看 Lean Startup 時的小感想,加上被喲哪桑和自己的團隊施行 Scrum 所到碰到的問題和經驗。到底 Scrum 這麼多人推薦和著書的敏捷方法,會不會有什麼不一定適用的地方。所幸接著看到 Kanban and Scrum 這本書,作者將 Kanban 和 Scrum 做了比較,例如同一個 Limited WIP 的概念,不同工具只不過是用不同手法表現出來:Scrum 用 Sprint 固定開發週期,Kanban 用每一個流程狀態來限制。當我讀到這裡時,就體會到了工具只是工具,勿以器馭心。這又才解答了不少我對開發方法論的疑問。

所以我們團隊開始從 Scrum 改用 Kanban 了嗎? 目前算是某種混合的狀態吧,不是說用 Kanban 就要把 Scrum 的東西通通丟掉,就不斷地持續調整中:用 Kanban 增加了施工前和施工後的產品開發流程,並開始加上 WIP 限制。另一方面,則減少了 Sprint 固定開發週期的要求。

p.s. 「勿以器馭心」是宮本武藏的名言,出自簡體版的 Kanban and Scrum 翻譯

Mac 推薦軟體 (2012)

好像每年都整理一次的推薦清單,最近趁換了一台 MBA + Lion 就全部重灌了。跟去年的推薦軟體相比又拿掉了一些 App,有一些功能 Mac 10.8 內建了(可以跟 iPhone 同步的Notes, 訊息中心…etc)。

  • Yahoo! KeyKey: 必備的中文輸入法,最近還有看到小麥輸入法,但是我不知道差在哪裡 XD
  • Chrome: 慣用的預設瀏覽器
  • Firefox: 有許多好用的網頁設計 Plugins,例如 Firebug、YSlow、Web Developer 等。
  • Sparrow*: 取代內建的 Mail 軟體。可惜公司被 Google 併購了,可能不太會更新了 :(
  • SubEthaEdit * 協同編輯器,若同事也都用 Mac 超級推薦,可以多人同時(即時)編輯一份文件。我用來當做一般文字編輯非常順手。
  • Mou: Markdown 所見即所得編輯器,寫長篇文章用。
  • iWork* : 包含投影片 Keynote、試算表 Numbers、文件編輯 Pages 三套軟體,也可以拿來開 Microsoft Excel、Word 也大多都可以順利開出來。
  • LittlleSnapper*: 抓網頁或螢幕的 screenshot 並加以管理、加註。
  • Skitch: 螢幕抓圖工具,更棒的這可以直接網路分享,非常方便可以當做溝通工具。
  • VMware Fusion*: 可以在 Mac 上跑其他作業系統,最常見的被迫需求情境是 Windows + IE 瀏覽器。
  • LaunchBar* : 鍵盤快速啟動應用程式的好物。不想花錢的話可以試試 QuickSilver
  • VLC 放影片
  • Pixelmator*: 影像編輯軟體,功能類似 Photoshop,但不用這麼貴… XD
  • Adobe Reader
  • KKBOX*: 聽正版音樂,有出 Mac 版就甘心。
  • Moom : 透過快速鍵切割視窗畫面,可以很方便地安排左右視窗,適合大螢幕
  • Flux: 根據時間自動調整螢幕亮度
  • OmniDiskSweeper: 磁碟清理工具,可以很方便地找出到底哪個檔案跟目錄是最佔空間
  • OmniGraffle*: 畫 Wireframe 超棒,可以搭配 YUI Stencil KitWireframe PaletteUX TemplateMore
  • Snapz Pro X* screencast 錄影

網路相關

  • Nally: Mac 上超棒的 BBS 軟體
  • Panic Transmit*: Mac 上超棒的FTP軟體,好操作介面佳,還支援 Amazon S3。
  • Twitter: Twitter 的桌面軟體,我會特別需要桌面版的 Twitter 軟體是因為我有多個帳號需求。
  • Skype: 喂喂,工作用。搭配 without the whitespace 服用
  • Colloquy: 要上 IRC 的時候用
  • Dropbox
  • WiFi Explorer: 可以觀察無線網路的訊號強度跟使用頻段,你可以將你的基地台設到干擾較小的頻段唷

程式開發

  • iTerm2: 支援多 Tab 的 Terminal,我主要拿來做 SSH 登入
  • XCode: 開發 iOS 用
  • Eclipse: 開發 Android 用
  • Homebrew: 套件管理工具,詳見這篇文章,我拿來裝 git, wget, mysql, redis, postgresql, rabbitmq, imagemagick, apple-gcc42 等等
  • Sublime Text 2*: 拿來取代 Textmate 了,寫程式用的編輯器。最近也想試試 MacVIM 啦。
  • GitX: Git GUI (有個 Fork 版有 sidebar 不錯)
  • Sequel Pro: MySQL 的 GUI
  • Navicat* : 比較專業的 MySQL+PostgreSQL+SQLite GUI,覺得最方便的是支援 SSH 登入遠端操作資料庫(畢竟很少情況會開 3306 Port 可以遠端連線),另外處理編碼也很聰明,印象中很少看到出現亂碼。如果你有舊版本MySQL的編碼問題無法順利dump出來,可以試試。

Dashboard

(加 * 的是付費軟體)

個人網站(部落格)十周年紀念

Update(2012/8/3): 這一篇早就寫好,但是存成 Draft 忘記貼出來…XD

十年前的今天(2002/7/24),那時候是大一升大二的暑假,我用了 PHP4 架起了自己的留言板,那時候只是隨便記錄一些碎碎念(tweet?),還允許大家來留言板留言(塗鴉牆?),三年後(2005/9/9)才換成 WordPress 至今,很幸運地,所有文字都還保留著(有丟失過一些使用者留言)。

2003~2010 每年大約寫10萬到15萬字,除了2006有45萬字,那一年寫了一大堆讀書心得。去年2011起產量大大銳減,像今年到現在才不到3萬字。可能是因為自己老想準備的多一點再寫,結果很多東西千頭萬緒,一拖再拖結果什麼也沒寫成。另一個原因大概是 Twitter 吧,不少心得都透過 Twitter 抒發了 XD

「發表是最好的記憶」,期許自己努力多寫點囉。