Skip to content

Instantly share code, notes, and snippets.

@weakish
Created January 1, 2014 15:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save weakish/8208903 to your computer and use it in GitHub Desktop.
Save weakish/8208903 to your computer and use it in GitHub Desktop.
#跋 松本行弘的程序世界 #Ruby #coding

松本行弘. 松本行弘的程序世界[M]. 柳德燕,李黎明,夏倩,张文旭,譯. 人民郵電出版社,2011-08. ISBN 9787115255075

1 我爲什麼開發Ruby

1.1 我爲什麼開發Ruby

「你爲什麼開發Ruby?」每當有人這樣問我的時候,我認爲最合適的回答應該就像Linux的開發者Linus Torvalds對「爲什麼開發Linux」的回答一樣吧—— 「因爲它給我帶來了快樂。」 當我還是一個高中生,剛剛開始學習編程的時候,不知何故,就對編程語言產生了興趣。 周圍很多喜歡計算機的人,有的是「想開發遊戲」,有的是「想用它來做計算」,等等,都是「想用計算機來做些什麼」。而我呢,則想弄明白「要用什麼編程語言來開發」、「用什麼語言開發更快樂」。(p. 2)

Larry Wall也是語言學家,同樣對語言有着濃厚的興趣。這應該是Ruby和Perl相通的一個原因吧。

1.1.3 簡潔性

Ruby不進行明確的數據類型定義,不必要的聲明都可以省略。所以,程序就非常簡潔了。(p. 4)

如果可以把僞碼中非實質的東西去掉,只保留描述算法的部分直接運行,那麼這種編程語言不就是最好的嗎?Ruby的目標就是成爲開發效率高、「能直接運算的僞碼式編程語言」。(p. 5)

Peter Norvig也說過

I came to Python not because I thought it was a better/acceptable/pragmatic Lisp, but because it was better pseudocode. Several students claimed that they had a hard time mapping from the pseudocode in my AI textbook to the Lisp code that Russell and I had online. So I looked for the language that was most like our pseudocode, and found that Python was the best match. Then I had to teach myself enough Python to implement the examples from the textbook.

看來pseudocode化是編程語言的潮流啊。

  1. 程序塊

3.3.10 列表内表达式和塊的区别

Ruby的列表解析好弱,Matz道出了原因:

  • 日本人(特别是我)讀起來不太順,魅力不夠。
  • 執行順序相反,與Ruby的其他部分(基本是從左到右)不一致
  • 只能實現collect和select功能的組合,和列表內包表達式功能相比,塊的應用領域更廣
  1. 沒什麼好說,順不順是個人感覺,反正我是覺得很順的。
  2. 怎麼不說code if condition不一致?
  3. 又不是說取代塊。再說lambda應用領域比塊更廣。

其實我覺得主要原因還是第一條——Matz覺得不順。

  1. AJAX

Matz談了起名字的重要性,爲一個功能起個名字就完成了八成的工作!

Ajax本來只是多種技術的自然組合,而且沒有什麼新奇之處,只是自然地組合在一起。但是,Ajax卻風靡一時,改變了之後的網站形象。最近沒怎麼聽到關於Ajax的說法,主要是因爲網站使用Ajax已經被認爲是常識性的問題。(p. 142)

因此,我設計上的一個座右銘就是名字很重要。設計任一功能時,我首先會着重考慮它的名字。在我作爲編程人員的生涯中,名字好的功能都成功了,而名字不太好的功能事後往往讓人後悔。(p. 142)

也許可以這麼來考慮吧。起了一個合適的名字本身就意味着功能設計得正確。反過來,起了不好的名字 說明設計者自己也沒有完全理解應完成什麼樣的功能。我個人認爲,爲一個功能起個合適的名字就已經完成了八成的工作。

  1. Ruby on Rails

6.2.5 猴子補丁的幾點問題

Matz談了monkey patch的注意事項:(161-162)

  • 基本上只是追加功能
  • 功能變更時使用可選參數,或者限制在特定情況。
  • 當心相互作用。

我不喜歡monkey patch。我覺得只有當有bug的時候,使用monkey patch作爲hotfix纔是可以接受的。

6.2.7 Ruby on Rails 和開放性

Matz說ActiveSupport的2.weeks.ago「大膽讓我感覺有點暈」。(p. 166)但是這個真的很棒。JavaScript系的話,datajs也支持(2).weeks().ago(),不過沒Ruby漂亮。

6.2.9

ActiveSupport容許帶單位的運算:(p. 168)

45.kilobytes + 2.6.megabytes

livescript也支持單位,例如12_km,但是這個只是起到註釋的作用,會被忽略。相比之下,ActiveSupport就強大很多。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment