八卦 Knuth
現(xiàn)在我開始當娛樂記者 :)
從今天開始 8g Knuth 老爹
傳說 Knuth 寫書寫文章的第一稿都是用鉛筆寫的。
很多人不明白他為什么不用鍵盤。
其實原因是這樣,Knuth 曾經(jīng)參加過一個訓練小秘的學習班,
練習打字每分鐘 80 個詞以上。
到了后來,他發(fā)現(xiàn)他打字的速度大大高于他思考的速度,
所以如果他用鍵盤,就會出現(xiàn)很多停頓。
所以他決定用鉛筆,這樣可以與讀者的思考速度保持一致。
標 題: 八卦 Knuth (2)
Knuth 作為一個計算機科學家,
為什么放下他所有的工作10年,
專心研究排版美學,創(chuàng)造 TeX 系統(tǒng)。
這是很奇怪的一件事情。
其實原因是這樣。真正完美的數(shù)學排版應該是用金屬活字進行的。
但是自從70年代以來,真正懂得這項技術的人都死光了。
新的排版機器,很不幸的都被計算機操縱了 (想想 Matrix )
雖然當時計算機能夠排出一些簡單的報紙,雜志,
但是它們不能很好的處理數(shù)學公式。
Knuth 想寫出一個小玩藝兒能夠在不同的計算機上制造漂亮的數(shù)學公式,
于是 TeX (讀作 Tech(nology) 的前半部分) 就誕生了。
標 題: 八卦 Knuth (3)
很多人都對 TeX 斷行的算法感到滿意,
其實只有 Knuth 覺得擔心。
他設計 TeX 的時候聽說有一本書叫做 Aesthetic Measures,
作者是美國 No.1 數(shù)學家 George David Birkhoff。
是說怎樣用數(shù)學公式來衡量“美”。
他查閱了7個Harvard圖書館,其中有一個圖書館有一個拷貝,
但是卻被人借走了。無奈,跑到 MIT 去借。
還好,借到了。后來他就在 TeX 里加入了一個變量叫做 badness,
用來衡量一行文字的美感。badness 越小這行文字就越美。
但是與 Birkhoff 不同,Knuth 對這個公式?jīng)]有多少信心。
也許是因為謙虛。
標 題: 八卦 Knuth (4)
Knuth 的書都是自己用 TeX 排版的,但是卻不都是自己設計的。
傳說 Knuth 和 Graham, Patashnik 合作寫 Concrete Mathmatics 的時候
請了一位有名的圖書版面設計家為他們設計好了書的尺寸,字體大小,標題樣式,
后來 Hermann Zapf 專門設計了一種數(shù)學字體叫做 Euler,
自此,數(shù)學家 Euler 的靈魂浮游于 CM 當中……
另外一個圖書設計家告訴 Knuth 一種格式數(shù)學公式的辦法,
就是不把數(shù)學居中,而是只相對正文縮進一定距離。
標 題: 八卦 Knuth (5)
大家都知道 1974 年圖靈獎授予 Knuth
主要是因為他寫了一部巨著叫做
The Art of Computer Programming
但是不幸的是,很多人不能理解,甚至不相信
他為這部書起了這么一個不“科學”的名字。
后來很多人的著作里出現(xiàn)這樣的文獻引用:
"The Act of Computer Programming, Donald Knuth."
--
You will be a winner today. Pick a fight with a four-year-old.
標 題: 八卦 Knuth (6)
Knuth 是個喜歡自夸的人,這是毫無疑問的。
在他出版 The Art of Computer Programming 之前就已經(jīng)有這種苗頭了。
還沒有出版的時候,在一次會議上,有個人知道他的這種性格,
就說:“我猜你正在寫的這本書的書名肯定是 ‘An Introduction to Don Knuth’。”
Knuth 回答說:“正好相反。我要以你的名字來命名它。”
原來這個人的名字叫 "Art Evans".
標 題: 八卦 Knuth (7)
Knuth 是Caltech數(shù)學系博士畢業(yè)的
但是他常常說:“我戴著一頂計算機科學家的帽子,而不是一頂數(shù)學家的帽子。”
這說明他似乎對數(shù)學家有某些看法。
在他看來數(shù)學家只知道“What is it”,
而他還知道 "How to do it".
這就是他認為的數(shù)學與計算機科學的區(qū)別。
標 題: 八卦 Knuth (
Knuth 回到 Stanford 時,學校讓他自己給自己一個頭銜
他就選了一個
Professor Emeritus of The Art of Computer Programming
他其實覺得“計算機科學”不是科學。
雖然大家很希望計算機編程變成科學,這是某ACM刊物提出的忠旨。
但是 Knuth 覺得奇怪為什么大家這么喜歡科學,
以致于他們瞬間把程序設計變成了科學,方法就是叫它“計算機科學”。
-- Just call it "Computer Science"
在他眼里,計算機科學其實仍然是門藝術。
標 題: 八卦 Knuth (9)
在 Knuth 的眼里,科學與藝術有什么區(qū)別呢?
藝術是人創(chuàng)造的,而科學不是。
藝術永遠是可以無止境的提高的,而科學不是。
藝術需要天賦才能掌握,而科學不需要,按部就班就行。
所以,The ... ART ... of Computer Programming!
標 題: 八卦 Knuth (10)
Knuth 的 The Art ... ft,這么長……以后簡稱TAOCP吧
…… 開始寫的也不那么好。
傳說有一天 Bob Floyd 給 Knuth 一封信,開門見山就說:
“Don, 請不要用那么多感嘆號!”信的結尾至少打了五個概嘆號。
看了之后,Knuth 發(fā)現(xiàn) TAOCP 里竟然平均每頁有兩個感嘆號??!
標 題: 八卦 Knuth (11)
有人說 Knuth 寫完三卷 taocp 就去研究 TeX,其實是因為害怕寫第四卷。
很多人早就希望他放下 TeX,繼續(xù)寫書。
Knuth 說:“一個人要把事情做的完美,只有當他跟上帝的意圖保持和諧,
現(xiàn)在上帝要我去寫第四卷了。”
標 題: 八卦 Knuth (12)
Knuth 很推崇隨機算法。
他批改作業(yè)時,一般都是翻到隨機一頁,仔細看那一頁,
之后就對學生的作業(yè)有了一個概貌,其它的部分就看的不那么仔細了。
Knuth 看書的時候首先看第316頁,如果書很短就看第100頁。
仔細看那一頁。之后他就可以說那本書好不好。
據(jù)說這樣做出判斷的正確率很高。
不知道是否有很多人跟他學,看316和100.
以后寫書要注意把第316頁或者100頁寫好呀!
標 題: 八卦 Knuth (13)
繼續(xù)八卦
你們知道 Knuth 發(fā)明了一種程序設計方法叫做 Literate Programming (文學編程)
把程序當成文學作品來寫。這樣可以創(chuàng)造永恒的作品,
甚至幾十年后還有人用它作為茶余飯后的讀物。
他為什么要發(fā)明這個東西。原因有2:
1. 他想讓一個程序員(也許是他自己)在某一天拿到普利策獎。
2. 他想讓提出“Structured Programming”(結構化程序)的那些家伙
在寫“非文學程序”的時候,就像他當年寫“非結構化程序”
的時候一樣覺得自己有罪。
他的“文學編程”思想最早是在英國 Computer Journal 發(fā)表的。
當人問他為什么不在美國發(fā)表。
他說,美國人沒文化,他們不能理解這個東西。
標 題: 八卦 Knuth (14)
今天寫點有用的8g
Knuth 喜歡在他的作品里用 "we" 作為主語,
雖然很多時候文章是他一個人寫的。
有人認為使用被動語態(tài)好。但是 Knuth 認為不應該大量使用被動語態(tài)。
“用 We 可以減少被動語態(tài)帶來的麻煩。‘we’是指你和你的讀者。”
那么怎么稱呼作者?答案是: the authors, the first author, 或者直接用名字。
但是他確實反對使用 "I",除非你是身名顯赫,
人人尊敬的君王式人物,否則最好不要在論文里用 "I"。
在你描述你的程序時,喜歡說 "we insert the element in the heap"
還是 "it inserts the element in the heap" ?
Knuth 總是喜歡用 "we"。顯然他已經(jīng)融于算法的動作之中了。
標 題: 八卦 Knuth (15)
雖然他不喜歡論文里用 "I", 但是他喜歡讓他的程序自稱 "I".
看這里:
This is TeX, Version 3.14159 (Web2C 7.3.7x)
! I can't find file `kkkk.tex'.
<*> kkkk.tex
Please type another input file name:
有很多人跟著他學,把這種稱呼頑皮的發(fā)揮到極致:
Welcome to Scheme 48 0.57 (made by wy on 日 11月 24 13:20:27 CST 2002).
Copyright (c) 1993-2001 by Richard Kelsey and Jonathan Rees.
Please report bugs to [email]scheme-48-bugs@martigny.ai.mit.edu[/email].
Type ,? (comma question-mark) for help.
> (define (sq x) (* x
x))
; no values returned
>
Exit Scheme 48 (y/n)? <按 Ctrl-D>
I'll only ask another 100 times.
Exit Scheme 48 (y/n)?
I'll only ask another 99 times.
Exit Scheme 48 (y/n)?
I'll only ask another 98 times.
Exit Scheme 48 (y/n)?
I'll only ask another 97 times.
Exit Scheme 48 (y/n)?
I'll only ask another 96 times.
Exit Scheme 48 (y/n)?
I'll only ask another 95 times.
Exit Scheme 48 (y/n)?
I'll only ask another 94 times.
Exit Scheme 48 (y/n)?
......
標 題: 八卦 Knuth (16)
Knuth 有一次布置了一個作業(yè),要求在兩個星期以內(nèi)做出一個
用于控制時代廣場那種 8x256 像素的陣列顯示屏幕的系統(tǒng),
并且寫出一個用戶手冊。這個用戶手冊必須讓不懂電腦的人也能看懂。
作業(yè)交上來以后 Knuth 把文檔拿給他夫人(Jill Knuth)看,
結果發(fā)現(xiàn) Jill 對文檔里的 "Menu" 和 "Scrolling" 這樣的單詞都摸不著頭腦,
更不要說 "left-indented", "exit", ...
標 題: 八卦 Knuth (17)
Knuth 曾經(jīng)在 American Mathematical Monthly 發(fā)表過一篇
叫做 "The Toilet Paper Problem" 的論文,
據(jù)說是一個研究怎樣合理使用廁紙的算法。
現(xiàn)在收錄于 Selected Papers on Analysis of Algorithms, p.111
可惜清華圖書館沒有。誰找到copy我一份。呵呵。
這篇論文投到 Monthly 時,在節(jié)標題使用了大量“糞便學”詞匯。
編輯警告 Knuth 說,笑話在我們這里是危險的,請你三思!
不得已啊,Knuth 后來把小節(jié)標題里的那種詞改掉了。
可是他很不想改文章的標題。
怎么辦呢?
他給編輯一封信說,我已經(jīng)以這個標題做過兩次演講,
這個主題已經(jīng)被廣泛的采用和討論……云云。
最后編輯回信說:“你的廁紙被接受了!”
====================================
P.S. 附錄:增加這篇論文的信息:
Stanford 計算機科學系樓里的廁紙架上可以并排放兩筒廁紙。
人上廁所時有可能從兩個中的一個取紙。
兩個卷筒不一樣大的時候,喜歡從大的那筒拿紙的人叫做 big-chooser
喜歡從小的那筒拿紙的人叫做 little-chooser。
如果兩筒大小差不多,一般人都會從離自己最近的那筒取紙。
廁紙用完的時候一般由janitor(門口老大爺?)提供新的紙。
如果一邊的用完了,那就換掉那一邊,
如果兩邊同時用完,那么有人就有麻煩了……(我懷疑Knuth遇到了那么一次
我沒仔細看完。
Knuth 似乎在計算那種兩筒同時用完的窘境出現(xiàn)的概率……
論文原文的一個拷貝在:
[url]http://learn.tsinghua.edu.cn/homepage/015450/doc/toiletPaperProblem.pdf[/
url]
比較復雜的數(shù)學…… 有興趣的可以看看。
另外,Don Norman 在這里有一些新設計的廁紙筒可以避免這種情況發(fā)生:
http://www.jnd.org/dn.mss/ToiletPaperAlgorithms.html
看來 Knuth 是在白費工夫。應該授予 IgNobel 或者 IgFields
標 題: 八卦 Knuth (1 8)
Knuth 和 Graham 他們合寫的 Concrete Mathematics 本來
不會做的那么花哨的。
結果后來他們專門為那本書設計了字體,頁面樣式,
所有習題都給出了出處。幾乎所有頁面都至少有一個涂鴉,
連《愛利絲漫游奇境記》都被列入?yún)⒖嘉墨I……
這是怎么回事呢?原因就是 Knuth 在寫書期間去看了一部電影:
“白雪公主與七個小矮人”。
看完之后 Knuth 感嘆道:
難以置信,這樣完美的藝術品竟然可以在1937年完成。
我一定要把我的書做成一個藝術品,而且要在三個月之內(nèi)完成!
結果他說到做到了。