SICP的中文版翻譯好不好?值不值得入手學習?
英文原版的很難買到,並且價格昂貴,所以希望入手一本中文版學習。
中文版:計算機程序的構造和解釋http://book.douban.com/subject/1148282/
「英文原版的很難買到,並且價格昂貴,所以希望入手一本中文版學習。」
這本書英文原版可以全文在線閱讀啊 http://mitpress.mit.edu/sicp/full-text/book/book.html
裘宗燕老師翻譯的,基本的品質還是有保證的。但我認為即使翻譯的再好,也不要看中文版的。
理由有二:1. 有一些精妙的意思是翻譯的再好也譯不出來的。如開篇Alan Perlis那篇雋永深刻之至的前言,有許多微妙的意思就是讀英文原文都值得細細琢磨,中文很難傳其神。絕大多數計算機技術書,只要翻譯的準確就夠看了;但這本書這樣的話就可惜了。
2. 這本書是計算機界類似「元典」式的神書,看英文會迫使你慢慢的看,細細的思考,效果反而好於看自己熟練的母語。修改了之前幾個錯誤,歡迎批評。 (個人翻譯,轉載請註明出處)
教育者、將領、飲食專家、心理學家,以及父母們,皆編程(規劃)。士兵、學生和某些社群,皆被編程(規劃)。攻克大型問題,要使用一系列程序,其中大部分產生於求解問題的途中。程序充斥著各種狀況,於著手的問題,狀況各異。編程作為一項智力活動,為了自個兒能領會,你必須開始使用計算機去編程;你必須閱讀、書寫大量的計算機程序。程序是怎樣的,又是幹什麼的,這些都不大重要。重要的是,執行有多快,在構造更大規模的程序過程中,配合其他程序有多流暢。 程序員必須努力尋求部分的完善性以及整體的融洽性。本書中,」程序設計(program)」一詞的使用將集中於程序的創建、執行和研究,這些程序用Lisp寫就,運行於數字式計算機。使用Lisp,不會限制我們的編程範圍,這僅是程序的一種描述記號罷了。
縱觀本書主旨,我們將涉及三大關鍵點:人的思維方式,計算機程序集,以及計算機本身。程序皆模型,它誕生於人的心智,是真實世界或精神世界的進程。此些進程,起於人的經驗和思考,數目巨大,細節複雜,無論何時,都僅能被部分理解。進程通過計算機程序進行模擬,並不能一勞永逸。即便程序是精雕細琢的離散符號集,是交織嵌套的函數,它們依然需要不斷演化:當對模型的理解深化了,擴大了,推廣了,我們就修改模型,直到取得相對穩定的狀態。接著,又得探尋另一個更好的模型。用計算機編程的歡欣之源,在於思維的不斷拓展,在於計算機裝置的程序表示,在於其激發的理解力之飛升 。藝術詮釋夢想,計算機化用程序,實現夢想!
儘管計算機功能強大,它卻是個苛刻的工頭。它要求程序必須正確,我們的表述必須精細無誤。正如其他使用符號的場合,通過論證,我們也將相信程序的正確性。Lisp本身就能被賦予一套語義(也就是另一個模型),如果將程序的函數加以規範化,那麼就能用邏輯學的證明方法——謂詞演算,來做經得起考驗的論證。遺憾的是,一直以來,程序都在變大、變複雜,規範本身的適用性、兼容性,以及正確性也變得值得懷疑。因此,正確性的完全形式化論證很少出現在大型程序中。由於大型程序源於小程序,那麼,建立正確性業已確定的、標準化的程序結構的倉庫就顯得尤其重要了。我們稱其為慣用語。接著學習將其組合成更大型的結構,而這就要利用到有價值的組織技術。這些技術都充分展現在本書中,理解它們,對於投入編程這項創造性事業來說,是不可或缺的。最為重要的是,發現並掌握強有力的組織技術,以增進我們創建大型、重要之程序的能力。反過來說,正是因寫大型程序太過費力,才刺激我們去發明新方法,來減少大型程序中的大量函數和細節。
與程序不同,計算機必須遵守物理定律。如果計算機想快速執行——幾個納秒一次狀態轉換,那麼傳輸的電子就必須限制在小距離內(最多1.5英尺)。熱量因大量元器件而產生並匯聚,這必須消除。精湛的工程技藝的開發,平衡了功能多樣性與器件密集性間的矛盾。不論何種情況,硬體都比我們所關注的軟體工作在更底層。將Lisp程序轉換為「機器」程序的過程,本身就是用程序所設計的抽象模型。對此過程的研究和創建,為設計其他模型的相關組織技術提供了大量真知灼見。當然,計算機本身亦能被如此建模。試想:最小的物理開關元件用量子力學建模,量子力學可用微分方程組來描述,微分方程的的細節特性能用數值逼近獲得,數值逼近能用計算機上執行的程序來表示,計算機程序由……組成 ,……!
區分上述三大關鍵點,不僅是為了方法上的便捷。雖然有人說它們皆存於自然人之頭腦,但邏輯上的劃分導致三者間符號流動的加速。這使得它們的豐富性、鮮活性,以及無限可能性遠勝於其在人類實踐中的自然演化(Even though, as they say, it"s all in the head, this logical separation induces an acceleration of symbolic traffic between these foci whose richness, vitality, and potential is exceeded in human experience only by the evolution of life itself.)。在最好情況下,三者間的關係是相對穩定的。計算機內存永遠不夠大,計算速度永遠不夠快。每一次硬體技術的突破都產生更大規模的程序設計產業,產生新的組織技術,產生更豐富的抽象模型。每個讀者都應定期反問自己,「到哪兒才是頭,到哪才是頭?」——但不要問得太頻繁,不然這會讓你泥淖在悲喜交加之中,從而喪失編程的樂趣。
我們所寫的程序中,有些(但不夠多)具有精確的數學的功能。比如:數列排序,找出數列中的的最大值,素數檢驗,或者計算平方根。我們稱如上述的程序為演算法,其中大量的因其具有最優性能而被大家所熟知,這裡要特別提及兩個重要性能參數,程序的執行時間和數據存儲要求。程序員應該追求良好的演算法和慣用法。雖然有些程序難以精確描述,但程序員有責任去估計並不斷地設法改進程序的性能。
Lisp是個倖存者,已被使用了約四分之一世紀。在用的語言中,只有Fortran比它久遠。這兩語言都支持某些重要的應用領域的程序設計需要。Fortran用於科學和工程計算,Lisp用於人工智慧。這兩領域將一如既往地重要,其中程序員是如此傾心於Lisp和Fortran,以致它們可能繼續被活躍使用至少四分之一世紀。
Lisp一直在改變著。本書使用的方言Scheme就是演化自最初的Lisp,並與後者在若干重要方面有所不同,包括變數約束的靜態作用域,以及允許函數生成函數作為函數值。在語義結構方面,與早期Lisp族相比,Scheme更加接近於Algol 60。Algol 60再也不能重新流行了,只能存活在Scheme和Pascal的基因里。 比起縈繞其周圍的其他語言,很難找到像這樣兩種語言去更好地溝通兩個差異如此之巨大的文化。(It would be difficult to find two languages that are the communicating coin of two more different cultures than those gathered around these two languages.)Pascal是用來建造金字塔的——由大群人推笨重的大石到指定地點,壯麗輝煌、令人震撼、靜態的結構。Lisp是用來建造有機體的——由小分隊把無數更簡單的處於變化之中的有機體安置在指定位置,壯麗輝煌、令人震撼、動態的結構。組織原理在兩語言中是相同的,除了極其重要的一點不同外:把自由輸出功能託付給Lisp程序員個體。這在Pascal程序員那裡也能找到,卻降低了不止一個數量級。Lisp程序大大充實了函數庫,這些函數的實用性超過了催生它們的應用。表,Lisp的固有數據結構,為函數實用性的提升貢獻巨大。表的簡單結構和天然的適用性反映在函數,就是函數那令人驚訝的普適性。而在Pascal,數據結構的過度聲明導致函數的專用性,這阻礙並惡化了函數間的臨時配合。擁有100個函數,工作在1個數據結構之上,好過擁有10個函數,工作在10種數據結構之上。結果,金字塔必定是矗立千年而不變,有機體要麼演化,要麼死亡。
為了看清上述差異,請試著比較Pascal入門書與本書對材料和練習的處理方法。不要困於假象,說,這是本僅適用於MIT的教科書,它的獨特性只不過是因為它出自MIT.準確地說,任何一本Lisp編程書籍都應該如本書,無論其學生是誰,書本在何處使用。
注意,本書是關於程序設計的,異於大多數Lisp書籍,因那些書是為人工智慧準備的。總之,隨著被研究的系統的不斷擴大,程序設計的關鍵問題,在軟體工程和人工智慧之間將趨於統一。這就解釋了為何在人工智慧領域之外,對Lisp的興趣也正不斷地在提高。
從人工智慧的目標出發,可以預見,其研究將產生大量有意義的程序設計問題。在其他程序設計文化里,這一連串的問題將引生新的語言。誠然,在任何極大型的程序設計工作中,一個有效的組織原理就是控制並隔離任務(作業)模塊間的信息流動,而這要通過新語言的發明方可實現。當人們接近到與之最常交互的系統的邊界時,這些語言趨於變得高級。結果,這些系統就包含了大量重複的複雜的語言處理功能。Lisp擁有簡潔的語法和語義,這使得語法分析被看作是一項基本任務。這使得語法分析技術在Lisp程序里幾乎沒有地位,同時使得語言處理器的構造對大型Lisp系統的發展變更速度而言,鮮有阻礙。最後,正是語法和語義的極端簡潔性,導致了Lisp程序員的自由以及負擔。任何規模的Lisp程序,除了寥寥數行的之外,無不充盈著各類函數。發明函數,組裝函數;得到函數,再利用之發明函數(Invent and fit; have fits and reinvent!)!讓我們舉杯慶賀那些將思想寫進層層括弧之巢的Lisp程序員吧。
Alan J. Perlis
紐黑文市,康涅狄格補充一點
中文版勘誤表
計算機程序的構造和解釋 勘誤表另外,勘誤表裡面這句:希望計算微分方程 dy/dy = y 在初始條件為 y(0) = 1 的情況下在 t = 1處的解。(原書錯為 y = 1)
dy/dy = y 錯了,原文是對的,我發郵件過去確認了這事,但不知為何一直沒改過來。
這意味著解釋器必須維護存儲能力,以便保持有關的名字_對偶的軌跡。
你們自己感受一下這句吧。感受不出來的去看看這句的原文。
裘老師似乎不知道keep…track這個片語的意思(儘管我覺得不大可能),書中出現這個片語的地方全都被翻譯成了「保持/維持……的軌跡」。來來來 我給你看個寶貝
書是很好,不知道LZ基礎如何。我是功夫沒到,先看的The Little Schemer,再看SICP的
簡體中文版本看來薄薄的, 可別以為是本小書, 整整有 472 頁, 所以紙質真的不怎麼樣 (薄的厲害, 我覺得用印表機得到的品質都比這本書好), 在上頭寫注記得小心點, 一不小心可能就劃破紙張。在閱讀上也有點困擾, 整本書歪斜的很厲害, 不好拿著看。
簡體中文版本出版日期: 2004 年 2 月 1 日, 我這本是 201306 第八刷, 原文書 1984 年出版,是美國麻省理工學院 (MIT) 多年使用的一本教材, 1996 年修訂為第二版。
後來 MIT 開始用 python 教授此課,代替了原本的 Scheme: Why MIT switched from Scheme to Python
我的進度很緩慢, 不過我很有耐心和毅力, 忍住開發 os, qt for android, uefi 程式的相關誘惑, 專心看這本書, 慢慢地, 慢慢地, 我越來越可以看下去了, 速度也提升了一點點。她有什麼魔力讓我願意這樣做呢? ref 2 提到: 您沒法從中學到如何開發一個網站,開發一個記事本,如何繪圖,它完全是在鍛煉程序員的基本能力,而不是「技術」。一言以蔽之, 就是在教怎麼寫程式。很推薦大一同學和程式初學者讀這本, 這本書並不是進階書而是入門書哦! 但這不表示它很好讀, 請有心理準備。和一般的程式語言書籍不同, 裡頭的數學味道很重, 幾乎都是數學題目, 牛頓法、最大公因數、微分, 有理數/複數的運算, 真是不習慣。更不習慣的是他所選用的語言是 lisp 系的 scheme, prefix syntax 讓人迷惑, 這是吸引我的最主要部份, 據說 2008 年已經改用 python (好像是 2009), 若是 python, 我也許就沒興趣了吧! 看著一堆小括號充滿螢幕, 真是有趣。
4.1.1 ~ 4.1.4 會寫一個 scheme interpreter, 我覺得還是照課本使用 scheme 來讀 sicp, 比較不會有和課本出入的地方。
這本教科書我讀來實在辛苦, 覺得很難, 所以讀得很慢, 不知道是不是因為簡體中文的翻譯, 我覺得又讓她更難讀了。譯者裘宗燕老師學問應該很好, 不過翻譯可能不是他的強項 (他翻譯過很多不錯的原文書籍)。
In a production-quality Lisp system,
書中翻成 "在產品質量的 Lisp 系統裡", 說實在, 我得看原文才懂這句話。這英文不算難懂, 但要翻譯成通順的句子那就不容易了。It calls apply-primitive-procedure to apply primitives;
書上翻譯: 它直接調用 apply-primitive-procedure 去應用基本過程我把它改為: 它直接呼叫 apply-primitive-procedure 去執行 primitives procedure。To define a variable, we search the first frame for a binding for the variable
我們需要在第一個框架查找該變量的約束descent 改: 我們需要在第一個框架查找該變數的定義還真的不好翻譯, 只看中文會看不懂, 查詢完原文後就好多了。
This computation will run much more slowly than a gcd procedure written in
Scheme, because we will simulate low-level machine instructions, such asassign, by much more complex operations.書上翻譯為:
因為我們是在模擬低級的機器指令, 例如 assign, 而使用的卻是比他高級得多的操作。這句話也是怪怪的。書中的句子有很多像是這樣的翻譯, 讀來不能算是輕鬆, 我偶爾得對照一下原文詞句。
就算翻譯的不算好, 但中文版本還是幫了我不少忙, 這本並沒有爛到完全看不懂, 大多時候還是可以理解翻譯後的意思, 沒有中文翻譯, 我無法那麼快瀏覽過一遍, 有些翻不好的地方如果不是關鍵處, 倒也無傷大雅。加上對照原文, 對於英文不好的我來說, 甚有幫助, 這是翻譯的價值。與其要求每個人把英文、日文、德文、法文學好, 才能吸收其中的專業知識, 倒不如用國家力量培養優秀的翻譯人員。翻譯的不錯。英文的你也可以像我一樣自己列印一本(別拿出去賣就不算盜版啦)。下面主要針對 @張京雲 的回答:
1,這本書在若干年前MIT改為python做入門語言之前,一直是MIT的大一學生教科書。屬於基礎讀物。
2,不管有沒有多優厚的編程基礎,編譯原理的掌握,都是有必要學習SICP的,因為其中採用過的LISP語言,將顛覆編譯原理以及c那套給你的觀念。3,如果你有10年以上的c語言編程經驗,而且編譯原理也不錯,然後你還認真讀了SICP。那你給出這個建議無可厚非,若不然,請慎言。翻譯的好。有時間的話,值得。參見書評:http://book.douban.com/review/4559081/
值得。我看過後覺得裘宗燕修養很好。
好 值
又買了11本送大家做新年禮物
sicp 光看書是沒啥卵用的,還得 edit, compile 和 run 。看書都沒啥卵用,何況還只看中文?就不擔心你以為你讀到的,其實並不是作者想說的嗎?
sicp 可以這樣玩。既然要寫 scheme ,就要裝 scheme ,編輯和運行 scheme ,你需要一個 Emacs ,當你掌握了快捷鍵可以直接編譯、運行 scheme 函數時,你就知道為什麼要用 Emacs 了。
你以為我光顧著說蛋,忘了下蛋的雞了?不會讓你失望的,作為自帶包管理器的 Emacs ,el-get-list-packages 查看可用軟體包,search sicp,install it。
同學,安裝完畢後,sicp 已經成為你 info 里的一個 node,你想怎麼玩還會有疑問嗎?推薦閱讀:
※為什麼電腦能十秒內開機而智能手機不能?
※如何在Python中使用break跳出多層循環?
※文科生學「計算機應用技術」或者「計算機與科學」如何?
※清華電機系和計算機系怎麼選擇?