2014年8月30日 星期六

[books] 程序員的吶喊

這是本發牢騷的書, 比嘴炮更糟, 我是說真的, 從中得到的爽度遠大於知識, 前題是: 假如你和 Yegge 站在同一邊的話; 反過來的話你可能就覺得難受了。也只有程式員才會喜歡這樣的牢騷。20140818 購於台南若水堂 203 nt, 是 190 頁的小書。

原文本 Publication Date: December 1, 2012; 簡體中文版本 201405 出版。有些技術相關內容可能過時, 不過不打緊, 牢騷這種東西哪有什麼過時的問題。記住, 你看的是牢騷, 不是技術文章。

我一定是被折扣迷昏了腦袋才會去花錢買人家的牢騷, 特別是是看到書中提到的 lisp, 而這陣子我剛好被 lisp 洗腦, 對 lisp 相關的文章都有興趣, 衝動之下就買了。我還在 irc 推薦這本書, 聽了我建議的朋友, 知道買了一堆牢騷, 應該也會對我發一頓牢騷才是。

中文翻譯本果然充滿了濃厚的中國味 (那是當然, 中國人翻譯的簡體中文版本), 還沒能習慣 (應該永遠也無法習慣, 什麼時候才會有滿滿的台灣味可欣賞, 繁體中文的駭客與畫家就有濃濃的台灣味道, 我真喜歡, 可惜只有台灣味道令我喜歡), 但讀來也算通暢, 看來牢騷比技術文章好翻譯一點。

如果你有正常的品味, 可能不願意花錢買人家的牢騷吧! 來吧! 這裡有電子版本, 當然是英文的。還可以順便練習英文, 又加上免費, 哪裡有這樣的便宜事。

A Programmer's Rantings: On Programming-Language Religions, Code Philosophies, Google Work Culture, and Other Stuff

英文書名還蠻長的 (中文版也不遑多讓), 吸引目光的應該是那個和 google 沒什麼關係的 google 關鍵字。當然不是沒關係, 第三章有 4 篇文章和 google 有關。

這本書我原本不怎麼想提, 不過應聘 google (Get that job at Google) 這篇文章對於面試 google 提供了不少建議, 當然對其他公司的面試也是有幫助, 如果你不想看大部頭的面試書籍, 這篇可以應應急。

這篇提到幾本書:

  1. 算法設計手冊 (Steven Skiena's The Algorithm Design Manual), 他說算法導論不可能兩個禮拜看完, 知道這本書厚度的朋友應該都同意; 不過這本有 730 頁, 也不是能兩個禮拜看完的吧!

  2. java 並發編程 (Concurrent Programming in Java by Doug Lea)

  3. 算法導論 (Introduction to Algorithms)


我對第一本書有興趣, 資料結構和演算法的好書不嫌多。這篇文章大意就是資料結構課本上的東西你都要在面試 google 的時候要能回答出來, 對象是 google, 你應該不會有什麼好驚訝的吧!

其他文章呢? 我覺得沒看也不會怎麼樣, 而且多餘的句子很多, 就像是倪匡的小說一樣, 跳過幾百頁之後, 還是能和主線接上, 所以也不用特別介紹, 若你被編寫程式搞到發瘋, 可以看看這本書, 抒解一下心情。若你想練習怎麼把文章加上一堆冗長的句子, 也可向本書學習, 我不是在諷刺, 因為我就是打算這麼做。

不過我還是想提一下 Rich Programmer Food 這篇, 書上翻譯為《土豪程序員的美食》, 你一定丈二金剛, 完全不知道在說什麼吧! 裡頭的關鍵字是 - compiler, 在很多大學課程上, 算是屬於折磨人的一門課, 曾在網路上看到這句話, 修過作業系統的同學, 應該要有寫出一個小型作業系統的能力, 這句話你我都知道還有努力的空間, 所以 compiler 課程呢? 修過 compiler 的同學, 應該要有寫出一個簡易 compiler 的能力, 一樣還是有努力的空間, Yegge 也是第二次才修過這個課程, 所以讓我們一起努力。那學過計算機組織和架構的應該要做出一個小電腦了, 引申下去所有課程 ... 真是可怕。

我相信就像數學一樣, 大家都覺得 compiler 課程很重要, 但不會的話好像也能在就業市場上佔有一席之地, 不過你還是可以聽聽 Yegge 的意見 ... 是牢騷。

我自己倒不是因為 compiler 課程很重要, 可以幫助工作或是面試上一些大公司, 而是我本來就想「知道」這是什麼? 在我大學生涯上, 有 3 個人修這門課, 是的, 我是其中一位, 另外兩位我不能說, 加上老師, 正好可以打麻將, 一個都不能少。我的學業成績拿到了第三名的佳績, 你一定想問我拿到這麼優秀的成績, 那會寫 compiler 了嗎? 嗯 ... 這問題先不談, 這門學問真的不簡單, 尤其是工作後要自修真的不太容易, lex/yacc 也不是每個人隨時就能上手的工具。我有很多關於 compiler 的書籍, 但沒有一本是我完整翻過看完的。反倒是先完成了一個 os 小 kernel。

Yegge:「If you don't know how compilers work, then you don't know how computers work.」

我不知道這句話是不是正確的, 不過要知道電腦怎麼運作, 從寫一個小型 os kernel 也可以得知, 條條大路通羅馬, 只是這兩條路都不輕鬆就是, 唔 ... 也許還有第三條, 第四條 ... 但一定都不容易。

我喜歡他寫的一句話: 「學習是很痛苦的事情。」後面還有一句, 不過不寫出來了 (寫出來你會更痛苦)。要是你覺得學習很輕鬆, 你不是在摸魚就是天資異稟, 我相信是前者居多, 天才在真實世界可是稀有品種。

這本書我讀完了, 我不會像讀者評論的那樣轉去學習 ruby, 程式員可是相當頑固的, 你以為幾篇文章就能將我洗腦嗎? 你也是吧? 在我的編程生涯中, c/c++ 佔據了多數時間, 這傢伙把我的最愛 c++ 批了一大頓, 要我喜歡這傢伙怎麼可能, 但也不讓我討厭就是。

有朋友建議我學個 script language, 我也覺得我少了這塊拼圖, 最近 lisp 系的 scheme 補上了, 記得嗎? 我專門學老東西, 還順便補上了 lambda 和 functional programming, 這麼划算的語言不學嗎? compiler 我覺得太難, 退一步來學習 scheme 的 interpreter 怎麼實作, 它容易多了, 只要看 sicp 4.1.1 ~ 4.1.4 四個小節就可以, 不用看完一本大部頭。



當然實際上不會有那麼容易 (我已經花了幾個禮拜, 還沒什麼大進展), 但比起讀這些書, 真的簡化不少。

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。