發表文章

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

圖片
當初想要接觸哲學的時候,挑上的第一本書就是「你以為你以為就是你以為的嗎?」,因為書名太好玩了。讀完後發現內容也一樣好玩,整本書的形式有點像坊間流行的心理測驗小書,每章的開頭都要讀者先做一組題目,後面接著就對你的答案做一番分析。 我自己的讀後感是,恩,這些題目對一個以前從未接觸過哲學的人來說太過犀利,第一次作答的時候,每翻過一頁都好像在呼自己巴掌,臉頰很燙。 「你以為你以為就是你以為的嗎?」書名念起來很拗口,但是很貼切,因為這些題目為的是要檢查我們腦袋內的想法是否一致,在邏輯上有沒有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電腦。 書中有段話剛好點醒了我最近的一些迷惘,朱敬一說,到了一定年紀之後,就不要再以「我某某還不夠好」的彌補心態來作為學習的動力,因為知識永遠學不完。最好的方式是一腳踏到浪頭上去,讓自己成為前緣浪花的一部份。 其實不管內容的話,聽聽朱敬一閒聊也是蠻有趣的,裏頭有一段兩三頁就簡單的道出社會科學的本質,文字淺顯清楚,相當精彩