Why is it that some software engineers and computer scientists are able to produce clear, elegant desings and programs, while others cannot? Critical to these questions is the notion of abstraction. (為何有些軟體工程師與電腦科學家能夠產生清楚而且優美的設計與程式,但其他人卻不能?關鍵在於抽象觀念。) — Jeff Kramer CACM 50(4) 2007
說了這麼多,終於又回到抽象化這個詞,抽象化可以用在好幾個不同層面,像剛剛提到的 OSI 網路模型和影片壓縮都是提供抽象概念。但實際寫程式時,抽象化是讓程式容易閱讀的關鍵,畢竟大部分時間讀程式的是人而不是電腦,所以這讓我想起一句話:
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. (隨便找個傻瓜都能寫出電腦能懂的程式碼。好的程式設計師寫人能看得懂的程式碼。) — Martin Fowler
當軟體持續開發,維護程式碼比開發新程式碼要更傷腦筋,如何讓後續的開發者讀程式像是讀文章般容易懂,重要的就是能用問題 domain 中的術詞 (term) 來描述程式。舉個例子,假設有一個 my-book-store 的網路書店,提供若干 REST API 讓客戶端可以使用:
取得Isaac Asimov的科幻類作品
GET http://my-book-store.com/books?category=science-fiction&author=Isaac%20Asimov
在編號19333910書籍新增一筆評論
POST http://my-book-store.com/books/19333910/comments
如果你想毀掉一個人的一天,就給他一個程式; 如果你想毀掉一個人的一生,就教他寫程式。 (If you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifetime.)
這是從 Medium 搬家到方格子的第三篇文章,個人在 Medium 上有《閒談軟體設計》與《Java Magazine 翻譯系列》兩個大主題,但畢竟翻譯系列不是我原創,當初寫信給官方也是說不會用翻譯營利,就不搬到這裡了,有興趣的就到 Medium 上看吧。接下來應該會是每周一篇的方式陸續將《閒談軟體設計》搬到方格子,至於為什麼不用匯入的方式?因為方格子目前支援 Gist 的方式,無法像圖片那樣加上標題,內文需要搭配對應的修改,稍微麻煩了點。