跳到主要內容

發表文章

讀書心得: 你以為你以為的就是你以為的嗎?

當初想要接觸哲學的時候,挑上的第一本書就是「你以為你以為就是你以為的嗎?」,因為書名太好玩了。讀完後發現內容也一樣好玩,整本書的形式有點像坊間流行的心理測驗小書,每章的開頭都要讀者先做一組題目,後面接著就對你的答案做一番分析。 我自己的讀後感是,恩,這些題目對一個以前從未接觸過哲學的人來說太過犀利,第一次作答的時候,每翻過一頁都好像在呼自己巴掌,臉頰很燙。 「你以為你以為就是你以為的嗎?」書名念起來很拗口,但是很貼切,因為這些題目為的是要檢查我們腦袋內的想法是否一致,在邏輯上有沒有BUG。 我舉個例子,書裡有道題目「只要不傷害他人,任何人都有權自由追求自己的目標」要讀者回答同不同意,我認為這句話聽起來相當合理,所以勾了同意。過了幾題後,出現另一道題目是「為個人吸食而持有毒品的行為應予除罪化」,這次我的直覺是毒品這麼危險,怎麼可以除罪化呢,馬上勾不同意。 但是,我沒有發現這是刻意安排的陷阱,因為這兩句話其實講的是同一回事。 單純個人持有毒品,不散佈也不販賣,就不算傷害他人,那他就應該有自由追求自己的「吸食毒品」目標的權利,畢竟他只有傷害自己呀。這敘述聽起來有點危險,不過我必須承認一開始的確想的不夠清楚,我以為第一句話是真理,但馬上被反例打了自己的臉。 再舉一個例子,首先是「對藝術品的評斷,純粹是個人品味的問題」,接著是「米開朗基羅是史上數一數二的偉大藝術家」,這牽涉到評斷藝術的標準,不過你只能認同兩句話的其中之一。 書中我最有興趣的是「神明DIY工作室」與「信仰殺戮戰場」,這兩章擺明了直衝基督徒而來。當中有些問題圍繞著以下的敘述,如果你同意「神是全知、全能、又全然慈愛」,那該怎麼解釋世界上發生的許多苦難呢? 比如說被南亞海嘯淹沒的小女孩? 如果神沒辦法消除這些苦難,祂就不是全能。如果神沒辦法事先知道創造出來的世界會有這些苦難,祂就不是全知。如果神明知道有苦難,也有能力去掉,但是卻故意不做,那祂就不是全然慈愛。 我思考後的結論是,全然慈愛的神並不等於神希望世上的苦難越少越好,這些苦難都是在祂的允許下發生的。 書裡指出了一個基督徒的通病,被問倒了之後就嚷嚷「你不知道神是超越人所理解的嗎 」,但回頭又馬上賦予神非常明確地人的屬性。後來我也理解到這些尖銳的問題並不是故意要為難我對神的看法,而是逼迫我去反思一些比較深層的宗教議題,就像我...

讀書心得: 明朝那些事兒

這套「明朝那些事兒」我並不是讀完的,而是聽完的。我聽的是對岸劉繼同先生的有聲書,恰好這本書的形式也像極了說書的先生,講歷史故事,說傳奇英雄,講啊講的,每天睡覺前聽上一回當床前故事,剛好幫助入眠。但有時候講的太精采,會欲罷不能接連聽上兩三回,弄到三更半夜才睡覺。 「明朝那些事兒」講的就是明朝的事兒,從開國皇帝朱元璋開始,一直講到末代崇禎皇帝為止。但是作者當年明月先生並不僅僅滿足於講歷史故事,他還試圖要講出社會運作的規律,我讀完這套書後陡然發現,歷史滾滾過了幾百年,科技進步了,但人性仍然沒有改變,我開始有點兒明白為什麼社會上老是有狗屁倒灶的事情,那些事在明朝就發生過了,今天同樣在重演。 我看完書之後,發現鬥爭其實是正常的社會現象。這個道理也很簡單,因為官場是權力的遊戲場,想要把權,唯一的方法就是把上面的人鬥下來。看了明朝前前後後鬥了幾百年,再看現在所謂藍綠惡鬥竟然是驚人的相似,沒什麼新意。 鬥爭不單單是壞蛋的權利,我發現好人也要鬥,不只要鬥,還要比壞蛋更能鬥。因為你若鬥不倒壞蛋,就會被壞蛋鬥倒,匡世濟民的夢想也就等於付諸流水,有句話說『清官要比貪官更奸』就是在說這個道理。 書裏頭最著名的例子莫過於徐階與嚴嵩的戰爭,奸相嚴嵩把持朝政的時候,徐階還只是個憤青,這場戰爭從徐階年輕時期開始,持續鬥了將近二十年,詭詐橫行,智計迭生,最終徐階靠著一記黑狀,用現在話說就是抹黑誣告,終於鬥垮嚴嵩,為接下來的名臣時代鋪下浩浩坦途。我認為這是『明朝那些事兒』的一個高潮,每次看到這裡,我都不禁感嘆,徐階真的很不容易阿。一位名臣要實現濟世的夢想,單靠正直善良的心是不夠的,你得用自己的雙手去把壞蛋拉下來才行,即使這個手段不太光明。好像火鳳燎原中曹操說的:「弄權,只為把權,力壓奸臣。」 縱看明朝權臣,每個都是萬中選一的鬥爭好手,只是有人掌權了之後,就開始貪汙受賄,嚴嵩魏忠賢是也,有人掌權之後則開始努力幹活兒,張居正高拱是也。鬥完了,是好人抑或是壞人,最終還是存乎一心。 說到好人壞人,評價一位歷史人物並不容易,這不是道德上貼個賢愚忠奸的標籤就好。比如說,讀過『明朝那些事兒』之後,我才懂得「清官」跟「能臣」是兩碼子事。 書上有個兩位鮮明對比的人物,一位是海瑞,一位是張居正。 海瑞為官清廉,直言敢諫,但是死腦子不知變通,俗稱正義魔人。道德標準搬出來,所有看不順眼的人都罵。...

讀書心得: 大話設計模式

當初我跟同學們辦設計模式讀書會的時候,列出來的書單有兩本,一本是「深入淺出設計模式」,另一本就是這本「大話設計模式」。 大話設計模式其實寫得也不錯,只是跟另一本深入淺出比較起來,就明顯差了一個檔次。 大話設計模式的優點是內容非常非常的淺顯,例子很容易明白。但缺點就是是舉出來的例子真的太淺了,設計模式是拿來解決某些特定的軟體設計難題的手法,這難題若是太過簡單,那麼使用設計模式就會顯得殺雞用牛刀。 大部分的例子都跟實際脫節,為了模式而模式。像是Decorator Pattern的穿衣服,Builder Pattern也沒有真的建造出什麼東西,這樣的例子一點用都沒有,看是看懂了,但是無法明白為何要使用模式,以及模式的威力在哪裡,實際工作中也不會寫這種程式的。 不過還是看的出來作者非常的用心,華文電腦書界需要多一些這樣的作者。書裡很多比喻都很棒,像用活字印刷來比喻物件導向程式設計,讓我讀時眼睛一亮,覺得說的真好。

讀書心得: 程式設計師提昇生產力秘笈

原文書名:Productive Programmer (對岸譯『卓有成效的程序員』,我比較喜歡這個名字。) 「程式設計師提升生產力秘笈」這本書非常有趣,它並不打算教你一套新的程式心法或者尖端技術,他想要做的事情是「扭轉你從小到大操作電腦的習慣」。有一點莫名其妙,不過讀過之後,我發現自己過去的不良的操作習慣,甚至一般人習以為常的操作習慣,的確很浪費時間。 啟動板 啟動板「Launchy」是我打開書後第一個安裝的小工具軟體,而且用了五分鐘後我就愛上它了!平常我們想要啟動一隻程式,例如打開 Word,會怎麼做呢?當然是先把滑鼠移到螢幕左下角點擊「開始功能表」、展開「程式集」、選擇「Office」目錄、最後用滑鼠敲一下程式的捷徑。 這個過程一般人已經習以為常,不以為怪;而啟動版Launchy讓你直接這樣幹:按下Alt+Space叫出啟動板,敲W-O-R-D四個鍵就行了。(甚至只要敲W,啟動版就替你挑出最常用的程式),傳統的方法相較之下簡直是繁文縟節。 這例子很小,但是隱約帶出了幾個本書強調的原則: 第一、用搜尋取代瀏覽。隨著使用電腦的時間越久,應用程式的清單就會越來越長,而長度正好和其用處成反比,清單越長,效率就越低。啟動版可以幫助你跳過這段用眼睛上下找尋瀏覽的時間,保證啟動程式的動作永遠是O(1)。 第二、啟動版可以隔離那些會讓人不小心分心的事物。從你想要啟動某個程式,到程式真的運行起來之間,不會有瞥見一眼就丟掉十幾分鐘的東西,例如 RSS Reader,或者是某個你之前就很有興趣但是一直沒時間看的漂亮網頁。 第三、手不需要離開鍵盤。程序員大多時間都把手放在鍵盤上,滑鼠雖然直覺,但是操作速度上一定沒有鍵盤快,而且手臂在鍵盤與滑鼠之間一直移動也是很令人討厭的事情。 上面提到的這幾項都是書中不斷重複出現的中心思想,用搜尋取代瀏覽,排除讓你分心的事物,鍵盤永遠比滑鼠好,以及最重要的,不要不停的重複做同一件事。 附帶一提,我的桌面現在非常乾淨,只有一個垃圾桶跟幾個常用檔案,因為那些花花綠綠的圖示跟捷徑都不再需要了,呵呵。 漂亮的GUI是效率的障礙 「重複做同樣的事」是軟體開發裡面最嚴重的效率傷害,通常我們把他稱作 D.R.Y (Don't Repeat Yourself) 原則。 不光是程式碼複製貼上存在DRY原則而...

OpenGL FAQ: 9. 空間轉換

9.001 我搞不定空間轉換啦。我可以去哪兒學習了解矩陣這東西? 基本矩陣數學與線性代數的詳細解說已經超出了本FAQ的範圍,這些內容美國的高中課程會教。如果你已經學過了,只是現在有點混淆 (這是老手也有的常見問題),去讀 Steve Baker 的 矩陣觀念複習 與 尤拉角度的文章 。 這兒有向量、矩陣、四元數運算的 Delphi 基本演示代碼 9.005 OpenGL 矩陣是 column-major 還是 row-major 呢? 以編程觀點來看,OpenGL矩陣是個陣列,有16個數值,四個基底向量依序地擺放在記憶體中。陣列的索引值編號為 1~16,其中位移分量(Translate Component) 佔據了16值的陣列的第13、14、15號元素,這些內容都寫在 OpenGL 2.1 規格書的 2.11.2 小節。 Column-major 與 Row-major 表示法純粹只是慣例上的差別。請注意,把向量乘在 column-major 矩陣的後頭,跟把向量乘在 row-major 矩陣的前頭,產生的結果完全相同。OpenGL規格書與OpenGL參考手冊雙雙採用了 column-major 表示法。只要夠明確,你用任何一種表示法都行。 但不幸地,規格書跟藍皮書中的 columr-major 格式造成了 OpenGL社群無止盡的混淆。因為 Column-major 表示法與一般編程人員預期的記憶體布局不相同。 9.010 OpenGL坐標系使用什麼長度單位呢? 短答案: 你想要單位是什麼就是什麼。 依據於你的幾何資料,應用程式可以把OpenGL座標單位視為毫米(millimeter) / 秒差距 (parsec) 或者任意更大或更小的長度單位,端賴哪個對你比較方便。 OpenGL也允許你指定不同的坐標系單位。比方說,你覺得這樣做比較方便,飛機控制以公分為單位,但是機身使用單位公尺,翱翔在單位是公里的世界天空中。OpenGL 的 ModelView 矩陣可以隨意縮放不同的座標系統,最後落於同一個眼空間座標中。 建立適切的投影矩陣跟ModelView矩陣是應用程式的責任,確保觀看者有適當的距離、視角、而且近平面跟遠平面都位於適當的範圍。比方說,一個展示微米尺度級的分子應用程式的鏡頭就不該放在10呎遠,且視角60度寬。 ...

OpenGL FAQ: 8. 使用視圖與相機鏡頭轉換,及 gluLookAt()

返回 OpenGL FAQ 目錄 8.010 OpenGL裡的相機鏡頭到底是怎麼運作的呢?  就目前的OpenGL來說,沒有相機鏡頭這種東西。更精確地講,相機永遠都位處於眼空間座標的原點 (0,0,0)。你的OpenGL應用程式為了假裝出移動相機的樣子,必須移動場景,對整個世界場景做相機鏡頭的逆空間轉換。 8.020 我要如何移動場景裡的眼睛或者相機鏡頭? 以相機鏡頭模型來說,OpenGL 並沒有提供介面去做這件事情。然而,GLU庫提供了gluLookAt()函數,傳入眼睛本身位置,眼睛瞄準點位置,以及朝上向量,都是世界空間坐標。這個函數依據參數計算出正確的相機逆空間轉換矩陣,並且乘上目前的矩陣。 8.030 我的相機鏡頭應該放在 ModelView 矩陣還是 Projection矩陣? GL_PROJECTION 矩陣只應該包含投影變換,它必須將眼空間坐標(eye space coordinates)轉換到裁切坐標(clip coordinates)。 GL_MODELVIEW矩陣呢,如其名,應該包含模型(modeling)與視圖(viewing)轉換,將物體空間坐標轉換成眼空間座標。所以請記住,永遠把相機鏡頭轉換放在GL_MODELVIEW矩陣,而不是GL_PROJECTION矩陣。 你可以把投影矩陣(projection matrix)想像成相機鏡頭的各種特性,像是視角的寬窄、焦距、用了魚眼鏡頭等等。而把模型視圖矩陣(model-view matrix)想成,你目前拿著相機站立的位置,及鏡頭指向的方向。 這份 The game dev FAQ  對這兩個矩陣說明得很不錯。 去讀讀 Steve Baker 的文章「 濫用投影 」( 備用連結 ) 吧。此篇文章寫得很好,值得推薦。它曾經幫助過許多OpenGL新手程式員。 8.040 我該如何實現鏡頭變焦 (Zoom) 的操作? 簡單的做法是對 ModelView矩陣做等比縮放(uniform scale)。但是當模型放得太大時,通常會導致模型被近平面及遠平面裁切掉。一個比較好的做法是限縮投影矩陣裡view volume的寬與高。舉例來說,你的程式對應使用者的輸入,儲存了一個縮放參數值。當縮放值是1.0 時不變焦。縮放值變大就縮小視角,結果模...

讀書心得: 朱敬一 給青年知識追求者的信

朱敬一先生是少數幾位我聽過的中研院院士的其中之一,可惜不是因為他的研究,而是新聞報導上常常看見朱先生的大名。個人粗淺的印象中,此人敢說敢做,意見頗值得一聽,所以偶然在圖書館翻到這本書,就把它帶回來了。本書總共由十封信組成,內容大略可分為兩半,前五封信是個人治學心得,我覺得相當不錯,後五封信則是對學術圈的建議,可能要有志於學術者讀起來才比較有感覺吧。 整本書看完後,我認為朱敬一先生想要對這個高度專業分工,以致於過於狹隘與僵化的社會提供一點反思,用朱敬一先生的話來說就是: 「你如果專注於其中部分領域而一頭鑽進去,當然是好的,但是你若想遊走諸方而觸類旁通,也沒有什麼不可以」。每當我想著「資訊工程是我的專業」的時候,到底是不是替我自己立下了一道牆,阻止我往外看,而失去了一些激發思想火花的機會。朱敬一是社會學家,所以書裡用很生動的例子來說明這種法政經社本一體的狀況,雖然表面觀察的對象不同,但是底下的氣息卻隱隱互通。 書裡舉了經濟學家拉維(Levitt) 作為這類遊走諸方的學者典型。拉維教授的其中一個研究證明,美國各州到一九九零年左右突然犯罪率大幅下降,其實是肇因於十八年前美國最高法院判定禁止墮胎違憲。墮胎合法化後,許多意外懷孕的女人就不用生下「不想要的小孩」,因而抑止了將來潛在的犯罪者的出生。這樣驚奇的研究結論,實在很難相信出自一位經濟學家之手。不過我看過拉維的例子後,我開始有點相信朱敬一說的,廣博的通識教育帶來的不是顯然可見的解題能力,而是「發掘、形成新問題」的能力。這也是許多台灣學生的弱點,解問題一流,但是不懂得找問題。 而想要有這種能力,就要依靠後天的「不住相讀書」,朱敬一改自金剛經的句子說「學子不住相讀書,其功用不可限量」,讀書不該功利的只求「有用」,不帶目的廣泛的讀書,才能成其大用,在大腦裡面埋下知識火種,也許有一天各個不相干的點會突然串起來,另闢蹊徑。這讓我想起賈伯斯的演講,他就是休學跑去旁聽書法課,我們今天才有漂亮字體的Mac電腦。 書中有段話剛好點醒了我最近的一些迷惘,朱敬一說,到了一定年紀之後,就不要再以「我某某還不夠好」的彌補心態來作為學習的動力,因為知識永遠學不完。最好的方式是一腳踏到浪頭上去,讓自己成為前緣浪花的一部份。 其實不管內容的話,聽聽朱敬一閒聊也是蠻有趣的,裏頭有一段兩三頁就簡單的道出社會科學的本質,文字淺顯清楚,相當精彩...

遲到的 Amazon Kindle DX 電子閱讀器開箱文

Amazon 網路書店出的電子書閱讀器 Kindle DX,當初我看著機子猶豫了很久,一直無法決定要不要買。直到下定決心買下手後,到現在使用超過半年了,我的感想是「真的很不錯」, 雖然有些小缺點,但是瑕不掩瑜。 Kindle DX vs. iPad 首先,廢話不多說,我以「長時間閱讀」來評分,如果紙本閱讀是滿分10分,而螢幕閱讀是0分的話,那我會給這台 Kindle DX 打 7分,蘋果的 iPad 頂多只有 2 分吧。 這是單單以「長時間閱讀」來打的分數。我用 iPad 看完兩本書,Kindle 則是看完十幾本了,閱讀舒適度確實差很多。 iPad 的閱讀體驗跟螢幕差不多,除了拿在手上比較方便以外,所有螢幕的缺點 iPad 都有,像是背光會給眼睛造成負擔,近距離字的邊緣不夠清晰,太陽下會看不清楚等等。 Kindle 的閱讀感覺則已經 90% 像紙面印刷品,這感覺很奇妙,很難形容,我自己覺是最接近的形容就是「字印在墊板上」,不管怎樣 Kindle 使用的電子墨水技術已經甩開了一般印象中螢幕的閱讀體驗,文字邊緣銳利清楚,而且靠自然光閱讀就是舒服,長篇小說讀一整天都沒有問題。 不過除了閱讀以外,Kindle 就一無是處了,我建議絕對不要有任何一絲想用 Kindle 上網、玩遊戲、或者聽音樂等等的不純妄想,Kindle 的長處就是讀書很舒服,而且是唯一的優點。 相較之下 iPad 什麼都好,但就是讀書不好。事實上,我認為「電子書閱讀器」跟「平板電腦」是完完全全兩個不同取向的產品,除了外觀都是一塊板子之外,本質完全不同。 說起買 Kindle DX 的原因,因為小弟我的本業需要閱讀很多的原文文件,而且沒意外的話今年是我最後一年學生生涯,也是有閒暇可以大量閱讀的最後機會,於是心一橫就買下去了。買到現在,原本打算讀的專業書籍沒讀幾本,小說倒是一本接一本看了不少。orz 接下來就幾個方面來討論一下 螢幕尺寸:  Kindle DX 螢幕是 9.7 吋,大約是B5尺寸。一般開本的PDF檔看起來相當舒適,頁邊會自動切白,但如果是 A4 的頁面如學術論文,看起來就會嫌字太小。 翻頁速度:   按下翻頁鍵到翻頁完成大約半秒鐘,個人覺得還好。最適合 Kindle 閱讀的讀物是長篇小說,一頁一頁...

讀書心得: 撒哈拉的故事

初拿起「撒哈拉的故事」時,我心中想著大概是本以沙漠為背景的美麗幻想般的愛情小說吧,有誰會真的費盡千辛萬苦跑去撒哈拉沙漠,在物質極為缺乏的環境下過著刻苦的生活呢? 沒想到這人就是三毛,只因為一個理由「我要認識沙漠」。 「撒哈拉的故事」是三毛與她的丈夫荷西在撒哈拉沙漠旅遊生活的紀實,生活在沙漠很糟糕,至少我看完最後一篇『白手成家』後認為實在很糟,不過在樂觀又開朗的三毛的筆下,撒哈拉沙漠化為一個有趣又不可思議的國度,說著一個又一個異國的故事。 如果不是三毛,我無法想像原來世界上還有這樣子的一群人,還有這等事情,你能想像沙哈拉威人三四年才洗一次澡嗎? 『觀浴記』裡三毛跑去看沙漠女人洗澡,要先用蒸氣蒸,再用石片刮下身上的泥沙,而且沙漠女人不只洗外面,還洗裡面,讓我看的哈哈大笑。『娃娃新娘』 裡則是三毛的一個沙哈拉威鄰居叫「姑卡」要出嫁了,可是她才十歲呀,結婚習俗更是特別,新郎去迎接新娘時,新娘拼命的抵抗,原來才在沙哈拉威人的觀念裡,打得激烈才叫做「好女人」,不掙扎事後會被取笑的。 沙哈拉威人很少受教育,思想沒有邏輯,通常講道理是講不通的。有次三毛要參加晚宴,遍尋不著自己的漂亮高跟鞋,反倒是鞋櫃上多了一雙破鞋子,原來高跟鞋被鄰居小女孩偷去穿了。事後三毛很生氣地跟她理論,小女孩竟然回嘴「生氣,生氣,你的鞋子在我家,我的鞋子還不是在你家,我比你還要氣。」聽見這種話真的是秀才遇到兵,有理講不清,還好三毛是個灑脫的人,笑笑就過去了。 事實上,生活在沙漠真的需要灑脫,老是計較小事肯定活不下去。除了講不清道理的沙拉哈威鄰居,沙漠也有許多危險,書中至少有兩次三毛差點在沙漠裡丟掉小命。但是每一篇故事裡,我都看見一位勇氣可嘉的中國女孩兒,她不屈不撓,以樂觀的心和智慧面對生活中的困難,盡情的玩,盡情的享受生活,像個瘋狂的孩子般,最後甚至布置了一個號稱撒哈拉沙漠裡最美麗的家,連記者都聞風專程前來拜訪,他們的物質生活雖不富裕,但是精神卻很富足。 說到三毛不能不提她的另一半荷西。三毛書裡這樣子描寫『荷西有一個很大的優點,任何三毛所做的事情,在別人看來也許是瘋狂的行為,在他看來卻是理所當然的』,所以當三毛說要去沙漠時,荷西早她兩個月,就先對著撒哈拉沙漠找工作去了,沙漠裡的瘋狂事也總有荷西的一份。人生能遇見這樣的他,既是羨慕,也是感動。

讀書心得: 禮物

在人生中剛剛好的時刻,遇見一本書,提醒我許多已經忘記的事。溫暖的一本小書,簡短的故事,我在圖書館拿著書直接翻完了,卻比長篇大論更打動人心。 剛好我現在的年紀,開始會對以前做的一些事情懊悔,發現人生沒有那麼簡單,對未來又有一些迷惘和擔憂的時候,有時候就會被這些情緒佔用了我大部分的生活。 今天是上天賜與的禮物,這是為何他被叫作 當下(present) 的理由。這本小故事就是禮物,當你覺得事事不順的時候,就專注在當下的好事上吧,不要為過去自怨自艾,學習過去的失敗的經驗,去創造未來。 簡單再不過的事情,或許有點過於理想,幸福感多到漫出來了,重點是,你去實行了嗎?

讀書心得: The C++ Standard Library : a Tutorial and Reference

Effective C++第一條款就寫明「C++是一個語言聯邦。」 這個語言聯邦由四個次語言組成,分別是 C、 物件導向C++、Template C++、以及標準庫 STL。我去年接了大一程設課助教,每週都要上台教 C++,這份苦差事意外挖出不少自己當年學習上的盲點。其中最大的問題就是我對 C++ 的後兩個部分: Template C++以及 STL 不夠熟悉,只好找上這本書來補足這方面的知識。 STL 是一個相當淺明易用的程式庫,這從我以前亂逛 cplusplus.com,糊里糊塗就能隨便抄幾句 STL 來用就可以得證。本書對我的主要幫助不是學會 STL,而是能夠從宏觀的視野來看待整個 STL,了解當初 STL 設計的時候架構上的取捨,引發的優點以及缺點,能讀到這些設計上的觀點我覺得很難能可貴。就好像我以前都覺得 STL algorithm 異常難用,看了書才知道原來 STL algorithms 要搭配 function object 才能發揮威力。各種 Iterator 的錮中差異,也是看了此書後才有全盤了解。 內容上我認為第五章是整本書的核心精華,清楚說明了 STL 三大組件的關係與腳色 (圖片節錄自書上5.1節) Container 負責管理物件集合,Algorithm 是操作手法,而 Iterator 則扮演此二者間的黏著劑,讓雙方可以透過抽象手法互相作用,不會有過緊的依賴關係,由此可以看出 STL 設計之初軟體架構就相當軟Q。接下來六 ~ 九章是書本的主力內容,分別對Container、Iterator、Algorithm 做專門深入的探討。 第八章 Function Object 我認為是值得一讀的特別章節,因為坦白說 function object 這東西使用上並不直覺 (我一直覺得只有聰明鬼才能想出替 object 加上operator( ) 來當函數呼叫的餿主意 ),但是要靈活地使用STL Algorithm,就一定要搭配 function object 才行。沒有function object,STL Algorithms 就只是彆腳程式庫。第十章之後還有介紹一些C++的其他標準庫,像是字串、I/O、國際化問題等等。 整體來講,這是一本好書,但是有點無聊。本書安排內容的方式是把 STL 各個部分切開來,每部份分配一...

C++ Standard Library 讀書筆記: Function Object

我讀 C++ Standard Library: a Tutorial and Reference 後的筆記,主要內容來自 5.9小節,整個第八章,以及一些我自己的感想。 STL Algorithms C++ STL Algorithms 裡一系列操作容器的函數,我一直以來都覺得這系列函數異常的難用。例如萬年範例 -- for_each 逐一打印容器的元素: void print_int( int i ) { cout << i << endl; } for_each(v.begin(), v.end(), print_int); //逐一印出元素 乍看之下簡潔,但是這 for_each 有個致命的缺點,就是沒辦法傳入額外參數。例如我想對集合內的每個數值都加上一個固定值,用 for 迴圈再直覺不過: int value = 5; vector<int> ::iterator it; for(it=v.begin(); it!=v.end(); ++it) *it = *it + value; 這麼簡單的程式,想要改寫成for_each版本,馬上碰壁: void add_value( int & i ) { i = i + ???; // add something? } int main() { vector<int> v; for_each(v.begin(), v.end(), add_value); } 問號的地方只能放常數或者全域變數,而兩個選項都很爛,我真正想要的是從 main 裡面傳入一個變數。所以很長一段時間我把 for_each 封印起來,乖乖自己寫 for 迴圈。 Function Object 直到最近,我才明瞭到 function object 可能是這個惱人的問題的答案。 所謂的 function object 就是一個object,但是實做了operator() 。它實際上是物件,但可以當作函數來呼叫。要發揮整個 STL Algorithms 的威力,就一定要瞭解 function object。萬年打印範例用funciton object 來實作就會長這樣子 : class PrintInt{ vo...

讀書心得: 天涯。明月。刀

小李飛刀系列雖然有好幾部,但其實小李探花李尋歡只在第一部「多情劍客無情劍」裡有出場,承接故事的「邊城浪子」講的是小李飛刀傳人葉開,和他的好兄弟傅紅雪糾葛不清的故事。邊城浪子之後,故事就叉開成兩條支線,「九月鷹飛」裡葉開出場,「天涯明月刀」的主角就輪到傅紅雪了。 據聞「天涯明月刀」是古龍的實驗性作品,曾經被罵得很慘,所以我剛開始讀的時候格外戰戰競競,以為會讀到什麼驚人之筆,結果讀完之後反而覺得還好嘛,古龍寫小說不都是這個調調嗎? 喜歡就會喜歡。 在「邊城浪子」裡我第一次接觸到傅紅雪這個角色,還挺討厭他的,但是「天涯明月刀」裡面,我對他的印象有改觀不少,我其實很高興看到傅紅雪終於有了一點人性,不再只是個被復仇驅使的機器人。 第十一回「明月何處有」傅紅雪冷冰冰地對卓玉貞說:「這是你第一次看見我的刀,也是最後一次。」,要他亮刀簡直像要他的命一樣,但是到了下一回「生死之間」,傅紅雪不只拔出刀給卓玉珍看,還拿來削人蔘,挖石頭,刀鋒崩出了三個缺口。這是整個故事裡我最喜愛的一個轉折,能讓一個人的個性在這麼短的時間之內徹底改變,是因為傅紅雪當爸爸了。但是故事的衝突就在於他才剛迎接新生命的出生,就面臨整家人被埋在地底下的困境,我認為這是傅紅雪第一次重新思考他的人生意義,以前他的人生就是他的刀,刀是用來殺人的,但是這次傅紅雪看著手裡的刀,聲音中充滿痛恨說:「這是殺人的利器,不是救人的。」巧的是,若刀沒有崩出缺口,他們也不會被燕南飛發現,傅紅雪的改變救了他們自己一命。 然而,就是傅紅雪做出了這麼大的犧牲轉變,接下來的背叛才會更加痛苦與殘酷。一個女人,使得傅紅雪的刀又淪喪為殺人的刀,而另一個女人,使殺人的刀又變回救人的刀,這段的曲折也寫得很深刻,礙於劇透我就不明講了。 我喜歡「天涯明月刀」打鬥場面多,傅紅雪的刀拔不停,很爽快,而且打的精采,不像邊城浪子廢話一堆但是死都不拔刀,看到快睡著。

讀書心得: 邊城浪子

古龍很喜歡寫廢話,例如這樣:『只有一種人不會說話。』『那就是死人!』,一句話硬要分好成幾句來講的廢話,有時候反而會有一種曲折的效果。但是古龍的文風,發展到某個偏執的方向,大概就會變得像邊城浪子一樣。又臭又長,太多陰謀,太多廢話,讀得很累。 邊城浪子,說的是傅紅雪的復仇之旅,但是看完整本書之後,我卻對這個腳色哭笑不得,因為傅紅雪怎麼看都像一個笨蛋。傅紅雪只是魁儡,被周圍的眾人耍著團團轉,傻傻的追著他心目中的仇人。而且劇情一直不斷重複,傅紅雪陷入危機,葉開跳出來出來救他,傅紅雪快要殺錯人了,葉開跳出來點醒他,如此無窮迴圈,所以我覺得傅紅雪是笨蛋。但是另一位主角葉開,我就更搞不懂他了,他好像什麼都知道,但偏偏又什麼都不講,放任事情發展,表現很平面,從頭到尾就是「出一張嘴」葉開,真是愧對小李飛刀傳人的名號。 說到劇情,前半段的萬馬堂內鬥風雲,我覺得不錯,根本可以獨立成一個緊湊的故事了,反而走入傅紅雪的主線劇情後拖泥帶水,可能我對於復仇這檔事沒什麼共鳴吧,打得又不精彩。直到最後一一揭開真相時,我已經沒有看到真相的興奮,只覺得很疲倦,陰謀跟懸疑是古龍的長項,但是邊城浪子陰謀實在太多了,我猜傅紅雪應該比我還疲倦,終於可以結束這堆亂七八糟的事情了。讀到結局時葉開鬆了一口氣,我也鬆了一口氣。

讀書心得: 多情劍客無情劍

最近突然開始瘋狂地看古龍,不知道為什麼一本接著一本的看。講到古龍難免要跟金庸比較一下,不過不是因為我是什麼很厲害的武俠評論家,因為在下我看過的武俠就只有金庸跟古龍兩位而已,哈哈。 我自己感覺,如果用食物來比喻這兩位名家的話,讀金庸的作品就像吃一桌豐盛的大餐,書裡滿滿的人物流派、武功招式、歷史題材,有各樣不同的味道可供品嘗。但是古龍不一樣,古龍的作品味道沒那麼多元,讀起來感覺總是澀澀的又有點苦味,講的是氣氛,內容是人世的無常,大概就像喝酒的感覺吧,雖然我自己還不太明白喝酒的趣味。 有時候一本小說寫得太好看,感想反而難以下筆,因為佳作天成,各方面都是不多不少剛剛好,只好隨便亂聊。到目前為止看完的小李飛刀四部曲,分別是「多情劍客無情劍」、「邊城浪子」、「九月鷹飛」、還有「天涯明月刀」之後,還是覺得以李尋歡為主角的第一部多情劍客無情劍最好看。 在多情劍客無情劍裡面,所謂江湖上的名門正派幾乎無一例外都被描寫成道貌岸然的偽君子,古龍很喜歡使用這種背景設定。明顯的例子如第七章「誤傷故人子」裡,有名的秦重秦大俠為了救自己的兒子縱人行兇,李尋歡酸了兩句:「秦大俠倒也不必太謙,只不過,若在下殺了人,便是冷酷毒辣,閣下殺了人,便是替天行道了。」「今日這孩子若殺了在下,日後傳說出去,必然不會說他是為了要搶大夫而殺人的,必定要說他和秦大俠又為江湖除了一害,是麼?」剛剛好把此種表裡不一的兩面醜態揭的一清二楚。一片灰暗中,反而襯托出李尋歡的真誠率性。而例不虛發的小李飛刀,就儼然化為劃破黑暗的正義化身,出手一刀,必大快人心。 但是另一方面,李尋歡這個腳色本身卻有著矛盾,與林詩音、龍嘯雲理不清的關係,也註定李尋歡這人個性有點彆扭,看自己輕如鴻毛。背負著過去的深重罪惡。一切的悲劇,追溯到最後都是李尋歡自己年輕時犯下的錯,,又是個酒鬼跟浪子,所以李尋歡這腳色充滿衝突,讓人又愛又恨,第五十三章「騙局」龍嘯雲的心情剛好道盡了這種無奈。「人生本就充滿了矛盾,任何人都無可奈何。」 另外書中有個角色我想特別提出來講一講,書中這樣形容「她看來如仙子,卻專門帶男人下地獄。」據說古龍嗜酒嗜色,讀完小說後我完全相信這是事實。因為「傾國傾城」的林仙兒幾乎差不多要把整本書裡的英雄豪傑都要傾光了,而且如果真有女人這樣對待我,我保證一定自己乖乖跳進她的網子裡。古龍的確很了解什麼樣的女人最能令男人拜倒石榴裙下。...

讀書心得: 如何閱讀一本書

「如何閱讀一本書」就像書名一樣,一本關於讀書技巧的書,不過這裡的「閱讀」兩個字有特別的意義。 我打個譬喻,在台灣爬山是不錯的運動,全家大小一起去風景區走上一個早晨,呼吸呼吸新鮮空氣,是爬山。但是一位專業的登山者,經過周密規畫後,全副武裝的的去挑戰台灣百岳,也是爬山,兩個爬山名詞一樣,但是意思顯然不一樣呀。 這兒也是,閒暇時看看雜誌打發時間是閱讀,挑戰大部頭又難懂的磚頭書也是閱讀。作者開宗明義就寫『這本書是為了把讀書當作是增進理解能力的人而寫的』,用我的話來理解,就是一本讀書界的喜馬拉雅山登山技術指南吧。 作者把閱讀分成四個層次,由低而高分別叫做 -- 基礎閱讀,檢視閱讀,分析閱讀,綜合閱讀。不同的時機要用上不同的閱讀技巧。第一層的基礎閱讀就不必說了,總要先看懂句子才能說其他閱讀技巧吧。第二層的檢視閱讀,目的是教你使用很短的時間,判斷是一本書值不值得繼續深入的技巧。到了第三層的分析閱讀,就是我們俗稱的精讀了。而第四層綜合閱讀的技巧,已經超越單一本書的範圍,進入一整個主題領域的研究了。 我認為分析閱讀是全書最精華、最有價值的部分,分析閱讀裡作者總共提出了16條明確可執行的步驟,告訴你如何把書扒皮拆骨,再加上X光裡裡外外都看個透徹。 怎樣才算讀懂一本書呢? 這個問題不好回答,至少本書訂出了一個相當高的標準。看懂一本書必須抓住三個要點,第一個是從架構方面,能掌握整本書的骨架,第二個是詮釋,能清晰的了解論點的發展,還有支持論點的理由。最後是批判思考,能公正地說出書本好與不好的地方,有憑有據。 雖然本書的目的是教你征服超出理解範圍的書,但很不幸,本書自己也是一座必須征服的山頭。我第一次遇見這本書後,前後總共挑戰了三次,一直到最近這次才敢說從頭到尾看懂了。我覺得這本書難讀主要原因是例子太少,特別是分析閱讀後半部,論述完整,不厭其煩,但是就是例子不夠,空有原則卻無處施力。後來我只好一邊讀分析閱讀的原則,一邊就把原則應用在當下閱讀的段落本身,來回好幾次才抓到條理。這算不算是作者的陰謀阿? 以前的我是那種書看完之後心得永遠只有兩句,很精彩很好看,或,很有道理,但是要我說出更具體的理由就張口結舌的人。因為以前我習慣用海綿思考,把書的內容當知識一直往腦袋塞。但是現在我了解這不夠,做為一個負責任的讀者,要時時不斷的對書提出問題,為什麼作者要這樣寫? 這樣寫有什...

讀書筆記: Art of Programming Contest for uva 開始解題之前的提醒

第一章主要是給打算要進入程式競賽的人一些小提醒。 關於解題 新手一開始最好先挑簡單的問題解,並想辦法用短時間快速解掉。 如果花了很多時間也不要氣餒,你只是練習的還不夠。 關於程式 只挑"一個"語言深入鑽研,透徹了解該語言的各種細節,讓它成為你的武器。 高手解題時,思考和規劃會先用掉 45% 的時間,而最後的 45% 時間用來測試和除蟲,實際上只用10%的時間 coding。 學會用 I/O 轉向,就不需要每次都浪費時間用手輸入測資 #ifndef ONLINE_JUDGE freopen("INPUT_FILE", "r", stdin); freopen("OUTPUT_FILE", "w", stdout); #endif 關於算法 不要只滿足於一個解法,盡量嘗試用多種不同方法來解同一題。這樣你才有機會比較不同演算法之間的差異,或碰著原本不會遇見的錯誤。 演算法是一串解決特定問題的步驟,多學學各種不同的演算法。 比賽時盡量選最簡單的演算法,並且平時作熟,比賽的時候沒有時間設計複雜的演算法。 現在的電腦很快,迴圈跑個一百萬次也不需要多少時間的,不要斤斤計較小地方。 把程式寫的簡明 少用複雜的程式語句、少用動態分派記憶體、少用指標。 把每個變數的名字都命名清楚,像 Right_Most ,不要用縮寫 rm。

讀書心得: 父親的最後30堂哲學課

想接觸哲學,卻又對哲學一竅不通 ,所以找上了麥田出版的「哲學小徑」系列,只因為哲學小徑系列序文的一小段話打動了我 ---「 內容艱澀的書我們不出版,法國思想家蒙田曾說:『艱澀是學者用來變把戲的銅板,目的就是為了避免洩漏它們徒勞無功的研究』」太好了,打算一本接一本的看下去。 「父親的最後30堂哲學課」作者是一位哲學教授。既然老子是念哲學的,女兒自然也不能太漏氣,於是父親寫了30封信給尚在念國中的女兒,打算循循善誘,誘拐女兒跳入哲學坑。每一封信都具體而微的介紹了一個哲學主題,字裡行間流露出父親對女兒滿滿的溫暖,對象是國中生,內容也很淺白。 「該怎麼念哲學?」本書提到自古以來解答分為兩派 ,一派認為應該從哲學史開始,另一派認為必須從辯論與論證開始。於是本書取其中庸,書裡有一條脈絡是走哲學家路線,介紹他們的生平以及重要思想,從古希臘哲學家蘇格拉底、柏拉圖起,一直到近代哲學家笛卡耳、康德。另一條脈絡是走思辨路線,直接探討自由、宗教、正義等讓人想破頭的問題。 我讀完後覺得有青少年哲學概論的味道,每封信都短短的,每個東西都談一點,但是談不深。至少整本書走完之後,對哲學有一個很淺的輪廓的了解,以後看到哲學名詞或人名不會霧煞煞。但是深度只能是走馬看花,沒辦法有系統的辯證或是思考。 書中一個令我印象深刻的主題就是「自由」,跟我以前讀「QBQ」的觀念不謀而合,自由的意義就是一個人意識到自己有權選擇,並且為自己的決定負責。我舉個例子,學生抱怨「我很想學好C語言,但是都是老師教的太爛我才學不好。」 ( 這種人不少XD ),但是其實學生應該明瞭自己有選擇學習方式的自由,如果真的很想學好C語言,學生可以選擇向老師反映、自修、請教學長姊,或者擺爛給他當掉,不管哪種方式,都不能把責任全部推到老師身上。簡單講,老師教不好,你就必須被迫接受C語言很爛這個事實嗎? 不,學生可以選擇,選擇自學補救或者擺爛,當然你選了自學補救,就必須承擔玩樂時間減少的事實,不管哪個,都是學生自己選的,而且選了你都要為自己的C語言能力好或爛負責,同時付出應付的代價。所以書裡說『自由的最高形式在於﹔清楚明白地接受一切不可避免之事』。

讀書心得: 看懂世界經濟的第一本書

瞄到書本的副標題「今天起不再怕看國際財經新聞」,我心想有這麼神? 連我這個經濟零分也行嗎? 看完之後,還真的有點神。 本書的定位是世界經濟的入門書,收錄主題大略分為五大方向,貨幣、能源、糧食、全球化、新興國家。每個主題都用簡短的文章,言簡意賅的解釋了背後的脈絡,對我這個經濟門外漢,算剛剛好容易吸收的難度。 本書的每個主題都以一則新聞時事作為切入點,通常是 2008 年的新聞,比方說最有名的「美國次貸風暴」,接著以這則新聞為基礎,先補足讀者必須了解的基本知識,例如次貸是什麼? 次貸為什麼會出現? 最後才解釋整個次貸對世界的影響。 每篇主題都是這樣三個部分組成: 新聞時事 -- 基本知識 -- 後續影響,讀來相當清楚。而且因為相關事件或多或少都曾經在新聞上瞄過,相當親切,常常有有「哦~原來之前那新聞是這麼回事」的感覺。 比如說我從這本書裡面理解的次貸,什麼是次級房貸? 就是用比較寬鬆的標準把房子賣給低收入,原本買不起房子的人。那銀行怎麼敢把錢借給可能還不起貸款的人呢? 因為當時大家都相信「房價會不斷上漲」,所以萬一未來還不出錢,只要把房子賣掉就好了。其實到此為止,就已經有危險了,次貸有很高的機會收不到錢,而房價也不可能無限上漲。於是銀行把收錢的權利,包裝成證券商品賣出去,流通到全世界。而且經過銀行巧手混拼,證券不但看不出來風險,還拿到很高的信用評價。直到某天終於房價泡沫,碰一聲,全世界都被炸到。 因為作者是日本人,所以書裡許多利益觀點從日本為出發點去探討。不過有一點要注意,談到台灣的小段,都是出版社自己另外附加進去的內容,並非原書的內容 ( 下面偷偷印一行小字【出版社附加內容】,太奸詐了...)。 世界經濟入門書嘛,我一直認為能把困難的主題寫的淺顯,就是好的入門書。看完後對經濟領域的問題輪廓,還有重要議題,心中大略有的底,至少不像以前看經濟新聞如有字天書一樣了。

讀書心得: 隱身魔鬼

書名: 隱身魔鬼 (不知道為什麼"魔鬼"兩個字在chrome上面顯示不出來,就容我加個書名吧) 讀完「密碼」之後,老實說我馬上就把「隱身魔鬼」排入了待讀清單之中,原因當然就是因為這對有趣的小夫妻: 湯米與陶品絲。不過密碼裡頭湯米與陶品絲已經是有三個小孩的老夫老妻了,而隱身魔鬼裡面,湯米跟陶品絲甚至還沒有在一起呢。 湯米與陶品絲兩位天不怕地不怕的年輕人,成立了一個宗旨是「天底下沒有什麼不能幹(只要有錢)」的青年冒險家公司,誤打誤撞地捲入了一樁嚴重的國際政治陰謀中,莫名其妙地成為情報幹員。聽我這樣說,應該就可以感受到這系列跟白羅系列不太一樣,有湯米與陶品絲的故事總是充滿歡樂派,故事線依然維持克嬸嬸拿手的懸疑緊張,但是年輕人生性樂觀,比起白羅那個死老頭子,氣氛就是輕鬆。 整個故事主線都圍繞著兩個問題打轉: 珍。芬恩到底在哪裡? 還有,誰是布朗先生? 同為終極的隱藏反派,我覺得這位布朗先生塑造的比四大天王裡的李長彥要好上太多了,這位布朗先生真的很厲害,真有深藏不出,但是全局都掌控在他手裡的感覺,沒有人知道這位布朗先生到底是誰,但是他卻多次親自出馬,完成關鍵任務後悄然身退。 以下有點劇透,布朗先生的謎團在那位某某夫人昏倒之後,其實就很明顯了,可能性只有二個,而且照克嬸嬸的心理個性推理法,答案幾乎是呼之欲出。接續的故事情節雖然拼命地往反方向誤導,但是我心裡最深處就是覺得另外一位可能性太低。 最後不能免俗地經歷患難之後發現真情,把湯米與陶品絲送作堆,老梗但是讀者就是吃這套阿,我等不及要預約下一本啦。