<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Skyler Sun</title>
	<atom:link href="http://skylersun.info/feed" rel="self" type="application/rss+xml" />
	<link>http://skylersun.info</link>
	<description>Computer Science is not about computers, even it is not a science.</description>
	<lastBuildDate>Wed, 10 Mar 2010 05:05:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>近看图灵碗 (8. 我就是上帝) (下)</title>
		<link>http://skylersun.info/334</link>
		<comments>http://skylersun.info/334#comments</comments>
		<pubDate>Wed, 03 Mar 2010 10:37:31 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>
		<category><![CDATA[近看图灵碗]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=334</guid>
		<description><![CDATA[上一篇我们讲到，高德纳计划要写一套七卷本的《计算机程序设计艺术》，没想到刚刚写完第三卷，就被ACM授予了图灵奖。这在图灵奖历史上是从没有过的事。我们还记得巴黎会议上的诺尔吧，他的图灵碗比他的获奖成果迟来了整整45年，他等这个碗时间，比高德纳获奖时的岁数还要长。但是，高德纳在获此殊荣之后，再一次令世界大跌眼镜：他宣布从此歇笔了，因为排版工具太差，破坏了这套书的美。

高德纳的这一动作让外界十分震惊，可以想见，他遭到了排山倒海的怀疑。有人说，高德纳肯定是江郎才尽，拿了图灵碗，见好就收；有人说，图灵奖对前三卷的评价过高了，高德纳无力面对这么大的压力，只好找个理由撤退；还有人说，获奖之后停止写作，充分体现了他写书的目的就是为了功利。他们纷纷质疑，这个图灵碗是彻底发错了人。
然而，如果我们真正翻开TAOCP读一读，就不难理解这是为什么。我觉得，对于算法的研究，可以分成三层境界。第一层是分析算法的复杂度，这是计算机专业的大学生普遍掌握的技能，达到这个境界，可以说是入了算法的门；第二层境界是改进算法的复杂度，在分析之后继续思考，想办法去降低它，这就可以算是懂算法了；第三层境界，就是寻找算法的最优复杂度，不但要改进它，而且要改到什么程度呢？就是要证明出来，我改完的算法就是最优的，你无论如何都不可能再改进了，再改进就违反宇宙规律。
高德纳，就是典型的第三种人。诸位不妨看看，TAOCP里面给出了多少最优算法，高德纳是铁了心，要当算法世界中的上帝。高德纳就是这么一个极致地追求极致的人，他强迫自己把每件事都做得不可逾越。那么他怎么能够容忍，这套被他视为毕生事业的书，被糟糕的排版技术束缚？于是，无论别人怎样质疑，他最终还是把写作晾到了一边，开始全力以赴地研究字体和排版。高德纳让我们领略了什么才是真正的个性，个性绝不是打18个耳洞，或在牛仔裤上抠36个窟窿。个性，就是在所有岔路口都追随自己的心，让所有影响你追求梦想的障碍统统跪倒。
高德纳这一歇笔，就是十年。在这不务正业的十年当中，对极致的追求像只看不见的手，推动他创造了三个响亮的成果，其中影响最大的，就是排版系统TEX。如果大家用MS Office Word写过论文，就会体会到那份求死不得的心：不断地调整字号、行距、缩进、分栏，如果这还不算什么，你再写几个数学式子看看？但是在TEX中，这些麻烦几乎完全不存在，你唯一需要做的，就是把你想写的内容告诉它。如果说时间就是生命，那就可以认为，TEX每天都在拯求科学家们的生命，说它推动了科学的发展也不为过。TEX是一场出版界的革命，直到现在仍是全球学术排版的不二规范，它所排出的文字之美，特别是数学式子的美，让人们由衷感叹：啊，一毫米都不能再挪动了。
除了功能上的美之外，TEX作为一个软件产品，也令人叹为观止。它的版本号不是自然数列，也不是年份，而是从3开始，不断地逼近圆周率（3.14，3.141…目前最新版本是3.1415926）。高德纳再一次用行动宣告，我这个东西，不可能再有什么大的改进了，最多只能小修小补，使其趋近完美。他还专门设立了奖金：谁发现TEX的一个错误，就付他2.56美元，第二个错误5.12美元，第三个10.24美元…以此类推。我们都知道，传说某个国王就因为这种指数游戏失去了江山，高德纳作为算法大师，更清楚指数增长的可怕性。然而他却敢立此重赏，结果直到今天，他也没有为此付出多少钱，可见TEX经过了怎样的千锤百炼。这个耗费十年打造的玩具，让当初质疑图灵奖发错了的人们全部闭嘴了，他们甚至改口说：哦，为了这个TEX，不妨再给高德纳一个图灵碗吧。

第二个成果，就是METAFONT，这是一套用来设计字体的系统。对于它的价值，一句话就能概括：计算机界最懂字体的两个人，一个是苹果的乔布斯，另一个就是高德纳。
第三个成果，就是文学化编程（Literate Programming），它把程序设计的艺术性展示得淋漓尽致。高德纳说，一段好的程序，不仅仅是要清晰易读，而且要能够读出美感，读出意境。天呐，意境，一排一排的计算机代码，要像诗歌一样充满意境。高教授，你疯了？
高德纳说，你才疯了呢，看我给你们露一手。于是，他在C语言的基础上，开发了一套CWEB系统，除了用它写出了TEX程序之外，竟然还用它写了一本叫作《Stanford Graphbase》的书。高德纳微微一笑，我都能用编程语言写书，何况有意境的程序了，我的口号是：程序员也能得普利策奖（这是全球新闻写作领域的最高奖项）。
文学化编程还为高德纳报了一个小仇。我们第6章中讲过的迪科斯彻，当年提出了一个“结构化编程”，提倡不要在编程时使用“goto”语句，高德纳偏要唱反调，结果被迪科斯彻称为“没结构”。这下可好，高德纳狡黠一笑，嘿嘿，如果你不跟我混，你就是“没文化”咯（literate也有“文化”之意）。
歇笔十年的高德纳，手捧这三项成果重出江湖，打消了一切质疑。这时他才对十年前的歇笔事件做了一个轻描淡写的解释：一个人要想把事情做得漂亮，就必须要跟上帝保持和谐，现在，上帝终于让我去写四卷了。
他的笔，又拿了起来。在写作第四卷的过程中，为了帮助读者打好数学基础，以便面对TAOCP中的数学高峰，他又专门撰写了一本《Concrete Mathematics》。这本书有中文版 ，翻译为《具体数学》，我一直觉得稍有不妥。Concrete到底是什么意思呢，高德纳说，意思就是我不教那些软绵绵的数学，我要教的是扔到地上能砸个响儿的数学。据说，他在课堂上说完这番话，有好几个同学扭头走出了教室──他们是土木工程系的学生，还以为高德纳是讲混凝土的呢（Concrete在土木领域意为“混凝土”）。说到高德纳的教学，还有个趣闻，他批改作业的时候只抽查第314页，就能判断出这份作业的质量。为此，我们这本书的第314页用来向高德纳致敬。
1992年，高德纳为了专心写作，宣布提前退休，并停用电子邮箱。高德纳一共带了28位博士生，他觉得28这个数字很好，于是便宣布不再收学生了。尽管如此，他仍然为想要师从于他的人们留下了一个盼头：他开了一门叫做Computer Musing的公开课，每次会提出一个问题，如果谁能快速解出来，高德纳就会为他的博士论文签名。不知道哪位后起之秀能够获得如此殊荣呢，我们拭目以待吧。
2008年，在TAOCP的前三卷面市30年之后，第四卷终于千呼万唤始出来，而高德纳，却已是白发苍苍的古稀老人了。一句话，一辈子，一生情，一杯酒，他对计算机科学的热爱，使他为这套丛书耗费了一生的心血。在这一章的最后，我想用一个词，来形容这位天才的计算机科学大师，但是思前想后，我只能想到唯一的一个词：God。
我想，尽管高德纳是一位虔诚的基督徒（他还专门写过关于圣经研究的书），但他一定会欣然接受这样的形容。正如当年Linux的作者Linus说：上帝在梦中告诉我，我做出了最优秀的操作系统。
高德纳回答说：我可没这么说过。
（\end{第八章}）
]]></description>
			<content:encoded><![CDATA[<p>上一篇我们讲到，高德纳计划要写一套七卷本的《计算机程序设计艺术》，没想到刚刚写完第三卷，就被ACM授予了图灵奖。这在图灵奖历史上是从没有过的事。我们还记得巴黎会议上的诺尔吧，他的图灵碗比他的获奖成果迟来了整整45年，他等这个碗时间，比高德纳获奖时的岁数还要长。但是，高德纳在获此殊荣之后，再一次令世界大跌眼镜：他宣布从此歇笔了，因为排版工具太差，破坏了这套书的美。</p>
<p><span id="more-334"></span></p>
<p>高德纳的这一动作让外界十分震惊，可以想见，他遭到了排山倒海的怀疑。有人说，高德纳肯定是江郎才尽，拿了图灵碗，见好就收；有人说，图灵奖对前三卷的评价过高了，高德纳无力面对这么大的压力，只好找个理由撤退；还有人说，获奖之后停止写作，充分体现了他写书的目的就是为了功利。他们纷纷质疑，这个图灵碗是彻底发错了人。</p>
<p>然而，如果我们真正翻开TAOCP读一读，就不难理解这是为什么。我觉得，对于算法的研究，可以分成三层境界。第一层是分析算法的复杂度，这是计算机专业的大学生普遍掌握的技能，达到这个境界，可以说是入了算法的门；第二层境界是改进算法的复杂度，在分析之后继续思考，想办法去降低它，这就可以算是懂算法了；第三层境界，就是寻找算法的最优复杂度，不但要改进它，而且要改到什么程度呢？就是要证明出来，我改完的算法就是最优的，你无论如何都不可能再改进了，再改进就违反宇宙规律。</p>
<p>高德纳，就是典型的第三种人。诸位不妨看看，TAOCP里面给出了多少最优算法，高德纳是铁了心，要当算法世界中的上帝。高德纳就是这么一个极致地追求极致的人，他强迫自己把每件事都做得不可逾越。那么他怎么能够容忍，这套被他视为毕生事业的书，被糟糕的排版技术束缚？于是，无论别人怎样质疑，他最终还是把写作晾到了一边，开始全力以赴地研究字体和排版。高德纳让我们领略了什么才是真正的个性，个性绝不是打18个耳洞，或在牛仔裤上抠36个窟窿。个性，就是在所有岔路口都追随自己的心，让所有影响你追求梦想的障碍统统跪倒。</p>
<p>高德纳这一歇笔，就是十年。在这不务正业的十年当中，对极致的追求像只看不见的手，推动他创造了三个响亮的成果，其中影响最大的，就是排版系统TEX。如果大家用MS Office Word写过论文，就会体会到那份求死不得的心：不断地调整字号、行距、缩进、分栏，如果这还不算什么，你再写几个数学式子看看？但是在TEX中，这些麻烦几乎完全不存在，你唯一需要做的，就是把你想写的内容告诉它。如果说时间就是生命，那就可以认为，TEX每天都在拯求科学家们的生命，说它推动了科学的发展也不为过。TEX是一场出版界的革命，直到现在仍是全球学术排版的不二规范，它所排出的文字之美，特别是数学式子的美，让人们由衷感叹：啊，一毫米都不能再挪动了。</p>
<p>除了功能上的美之外，TEX作为一个软件产品，也令人叹为观止。它的版本号不是自然数列，也不是年份，而是从3开始，不断地逼近圆周率（3.14，3.141…目前最新版本是3.1415926）。高德纳再一次用行动宣告，我这个东西，不可能再有什么大的改进了，最多只能小修小补，使其趋近完美。他还专门设立了奖金：谁发现TEX的一个错误，就付他2.56美元，第二个错误5.12美元，第三个10.24美元…以此类推。我们都知道，传说某个国王就因为这种指数游戏失去了江山，高德纳作为算法大师，更清楚指数增长的可怕性。然而他却敢立此重赏，结果直到今天，他也没有为此付出多少钱，可见TEX经过了怎样的千锤百炼。这个耗费十年打造的玩具，让当初质疑图灵奖发错了的人们全部闭嘴了，他们甚至改口说：哦，为了这个TEX，不妨再给高德纳一个图灵碗吧。</p>
<p><img class="aligncenter size-medium wp-image-342" title="800px-Knuth-check2" src="http://skylersun.info/wp-content/uploads/2010/03/800px-Knuth-check2-300x136.png" alt="" width="300" height="136" /></p>
<p>第二个成果，就是METAFONT，这是一套用来设计字体的系统。对于它的价值，一句话就能概括：计算机界最懂字体的两个人，一个是苹果的乔布斯，另一个就是高德纳。</p>
<p>第三个成果，就是文学化编程（Literate Programming），它把程序设计的艺术性展示得淋漓尽致。高德纳说，一段好的程序，不仅仅是要清晰易读，而且要能够读出美感，读出意境。天呐，意境，一排一排的计算机代码，要像诗歌一样充满意境。高教授，你疯了？</p>
<p>高德纳说，你才疯了呢，看我给你们露一手。于是，他在C语言的基础上，开发了一套CWEB系统，除了用它写出了TEX程序之外，竟然还用它写了一本叫作《Stanford Graphbase》的书。高德纳微微一笑，我都能用编程语言写书，何况有意境的程序了，我的口号是：程序员也能得普利策奖（这是全球新闻写作领域的最高奖项）。</p>
<p>文学化编程还为高德纳报了一个小仇。我们第6章中讲过的迪科斯彻，当年提出了一个“结构化编程”，提倡不要在编程时使用“goto”语句，高德纳偏要唱反调，结果被迪科斯彻称为“没结构”。这下可好，高德纳狡黠一笑，嘿嘿，如果你不跟我混，你就是“没文化”咯（literate也有“文化”之意）。</p>
<p>歇笔十年的高德纳，手捧这三项成果重出江湖，打消了一切质疑。这时他才对十年前的歇笔事件做了一个轻描淡写的解释：一个人要想把事情做得漂亮，就必须要跟上帝保持和谐，现在，上帝终于让我去写四卷了。</p>
<p>他的笔，又拿了起来。在写作第四卷的过程中，为了帮助读者打好数学基础，以便面对TAOCP中的数学高峰，他又专门撰写了一本《Concrete Mathematics》。这本书有中文版 ，翻译为《具体数学》，我一直觉得稍有不妥。Concrete到底是什么意思呢，高德纳说，意思就是我不教那些软绵绵的数学，我要教的是扔到地上能砸个响儿的数学。据说，他在课堂上说完这番话，有好几个同学扭头走出了教室──他们是土木工程系的学生，还以为高德纳是讲混凝土的呢（Concrete在土木领域意为“混凝土”）。说到高德纳的教学，还有个趣闻，他批改作业的时候只抽查第314页，就能判断出这份作业的质量。为此，我们这本书的第314页用来向高德纳致敬。</p>
<p>1992年，高德纳为了专心写作，宣布提前退休，并停用电子邮箱。高德纳一共带了28位博士生，他觉得28这个数字很好，于是便宣布不再收学生了。尽管如此，他仍然为想要师从于他的人们留下了一个盼头：他开了一门叫做Computer Musing的公开课，每次会提出一个问题，如果谁能快速解出来，高德纳就会为他的博士论文签名。不知道哪位后起之秀能够获得如此殊荣呢，我们拭目以待吧。</p>
<p>2008年，在TAOCP的前三卷面市30年之后，第四卷终于千呼万唤始出来，而高德纳，却已是白发苍苍的古稀老人了。一句话，一辈子，一生情，一杯酒，他对计算机科学的热爱，使他为这套丛书耗费了一生的心血。在这一章的最后，我想用一个词，来形容这位天才的计算机科学大师，但是思前想后，我只能想到唯一的一个词：God。</p>
<p>我想，尽管高德纳是一位虔诚的基督徒（他还专门写过关于圣经研究的书），但他一定会欣然接受这样的形容。正如当年Linux的作者Linus说：上帝在梦中告诉我，我做出了最优秀的操作系统。</p>
<p>高德纳回答说：我可没这么说过。</p>
<p>（\end{第八章}）</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/334/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>[天齐印拓] 西乔</title>
		<link>http://skylersun.info/321</link>
		<comments>http://skylersun.info/321#comments</comments>
		<pubDate>Fri, 19 Feb 2010 13:29:02 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[文艺青年 Art]]></category>
		<category><![CDATA[天齐印拓]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=321</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-322" title="xiqiao" src="http://skylersun.info/wp-content/uploads/2010/02/xiqiao.jpg" alt="" width="400" height="297" /></p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/321/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>近看图灵碗 (8. 我就是上帝) (上)</title>
		<link>http://skylersun.info/281</link>
		<comments>http://skylersun.info/281#comments</comments>
		<pubDate>Thu, 04 Feb 2010 20:18:07 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>
		<category><![CDATA[近看图灵碗]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=281</guid>
		<description><![CDATA[密尔沃基市，是美国威斯康辛州最大的城市。1938年1月10日，圣诞刚过不久，密尔沃基市民像往常一样平静地生活着。咖啡店里，有人在议论着罗斯福总统的救市新政策，有人在议论着到底该不该限制公民持枪。而更多的人呢，则一边品尝着密尔沃基闻名全国的啤酒，一边听着广播里面的实时战况：侵华日军登陆青岛了。谁也没有想到，这个平静的日子将载入这座城市的史册。这天，密尔沃基路德教会高中的一名印刷管理员，高兴地迎来了一个健康的儿子。他为儿子取了一个响亮的名字，这个名字在不久的将来，成为了计算机编程艺术的旗帜：Donald Ervin Knuth。
为了方便讲述，请各位读者允许我先剧透一件39年后的事儿。在1977年Knuth造访中国前夕，姚期智的夫人为他取了一个中文名字：高德纳。在下面的故事里，我们就使用这个名字来称呼他。

高德纳天资聪颖，他的超凡智力在8岁时就显示出来了。当时，一家糖果商在孩子们当中举办了一项有趣的比赛，要求用“Ziegler&#8217;s Giant Bar”里面的字母，写出尽可能多的单词。裁判事先准备了一份2500个单词的列表，可他却远远低估了小选手的能力，高德纳令人惊讶写出了4500多个单词，毫无疑问地获得了冠军。他为学校赢得了一台电视机，还为每个同学赢得了一只棒棒糖，他的赛后感言是，我还能写出更多。
高德纳的高中就读于他父亲所在的路德教会高中，在这期间，他发表了此生第一篇学术文章。尽管如此，但这个充满了才华和个性的年轻小伙，并没有把心思放在科学上，他的主业是音乐和作曲。他的老师，甚至包括他自己，十分怀疑他将来进入大学后，是否能够顺利学习数学。这种想法给高德纳造成了不小的自卑，尽管他的平均分是学校历史上最高的。不过有句话说，真正的天才是1%的灵感加上99%的汗水，这话用在高德纳身上毫不夸张，18岁的他，在进入大学之后，丝毫没有向数学屈服，而是花费无数的课余时间，大量练习数学难题，这种努力的劲头再加上他的天份，使他很快就在数学方面超过了其他同学。其实我们与其关注一些科学家们不可模仿的机会和天赋，莫不如更关注他们如何面对困难和挫折。高德纳告诉我们，没有什么过不去的坎儿，方法就是抓紧时间干活。
高德纳就读的大学是凯斯理工学院，在这里他接触了IBM650计算机，这导致高德纳的音乐家梦想一去不复返，科学天赋终于重新占领了他的心扉。1956年，在他第一次使用IBM650之后，他就躇踌满志地相信，说明书上介绍的程序，一定比不上他自己编写的。于是高德纳开始学习编程，他的第一个程序是因数分解，不久之后，高德纳就对编程有了许多体会。当时高德纳还兼职管理学校的篮球队，于是他编写了一个程序，能够自动评估每名球员的价值，令球队的教练非常欣赏。这件事还吸引了CBS电视台的报道，后来高德纳、球队教练和IBM650的一张合影，还被印到了IBM650的宣传册上。1960年，高德纳以公认出色的成就，打破了学校的惯例，同时获得了学士和硕士两个学位，大家来做个减法吧，算算高德纳此时年岁几何。
随后，高德纳从五大湖区，来到了美国西南岸，进入伯克利攻读数学博士学位。在此期间，他的编程生涯也正式开始了，他对外提供软件服务，为各种不同机器设计各种稀奇古怪的编译器，曾经一个程序卖到5000美元。最值得一提的，就是他对ALGOL60编译器提出的测试方法。不知道大家是否还记得ALGOL，这盏批量生产图灵奖的阿拉丁神灯。当时我们介绍过，ALGOL60的设计目标要求支持递归，而在设计编译器时，对递归的处理是很复杂的，所以经常会因为编译器不成熟而出故障。高德纳编写了一段非常简单的测试程序，江湖人称“Man or boy test”，俗名“是男人就得-67”。高德纳说，只要用ALGOL60编译器来编译我的这段程序，如果运行结果等于-67，就说明这个编译器是纯爷们儿，否则就只能算小男孩。
1963年，25岁的高德纳顺利拿到了博士学位，并留在伯克利任教。在毕业前一年，虽然还是研究生，但高德纳已经因为设计编译器而响誉计算机行业。于是著名的Addison-Wesley出版社与他约稿，请他写一本关于编译器和程序设计方面的书。这本来是很平常的一件事，但您看看高德纳是何许人也，不久之后，他简直把这件事做成了一件计算机科学史上的奇观。1962年约的稿，高德纳一直写到1966年还没交，在此期间他又是毕业，又是教书，终于人家出版社急了。编辑找到高德纳，说这都四年了你写了多少啊，高德纳说，才写3000页手稿。编辑大囧，忙问都3000页了你怎么还不交，高德纳答曰，急啥，我还没写到正题呢。编辑彻底雷住了，说那你出个多卷本吧……
《计算机程序设计艺术》，就这么诞生了。
把一件平常的事做到人间极致，这就是高德纳。他不是故弄玄虚，他的心里攒着一股劲儿，要写出一部与牛顿的《自然哲学的数学原理》相媲美的传世巨著。他一开始计划了六卷，后来觉得这个数字不怎么好，又改成了七卷。1968年，《计算机程序设计艺术》（The Art Of Computer Programming，江湖人称TAOCP）的第一卷正式出版了。这一卷的标题叫《基本算法》，但难度却并不低。比尔盖茨曾经花了几个月的时间读完这一卷，并且做了大量的练习，然后他说，如果你想成为一个优秀的程序员，那就去读这个《基本算法》吧，确保自己能够解决里面的每一个问题。然而，高德纳本人的说法却比盖茨犀利多了：要是看不懂，就别当程序员。
就在这同一年，高德纳跳槽到斯坦福大学，并当上了教授，一边带博士，一边继续写书。一年后，TAOCP第二卷《半数值算法》正式出版，又过了三年，也就是1973年，第三卷《排序与查找》也相继付梓。这三卷书立即被计算机界惊为神作，在那几年之内就卖出去了100多万套，至今仍然是编程书籍中的最高经典。有一些对我们来说巧妙得不能再巧妙的算法，在这三卷书中顺手掂来，比比皆是，这个我们等会再说，现在有件要紧的事儿。按照高德纳的计划，这套书一共是七卷，但是现在刚刚写完三卷，就已是震古烁今。震到什么程度呢，连图灵奖颁奖委员都坐不住了，他们做了一件前所未有的事。按照惯例，图灵奖的获奖者都是成就等身，要经过时代的检验，然而高德纳却是例外，在他的七卷本刚刚写完三卷时，ACM便决定立即为其颁发图灵奖：
授予高德纳图灵奖，以表彰其在算法分析、程序设计语言的设计和程序设计领域的杰出贡献，特别是其著名的《The Art of Computer Programming》系列丛书。
这是1974年的ACM图灵奖颁奖词，高德纳捧走了历史上第9个图灵碗。这对高德纳来说，无疑是个殊荣，因为这一年他只有36岁，直到现在，他仍然保持着获奖年龄最小的纪录。
我们故事才讲到一半，可天才的高德纳却已经得到了图灵奖。各位读者可能要问，那下面还讲啥，他无非就是接着写书，接着带博士，就别废话啦。您要是这么想，那就大错特错了，他要是那么做，他就不是高德纳。提前剧透一下，这个看上去顺理成章的计划，很快就被打破了，计划中的七卷本，直到今天都没有完成。欲知发生了什么，且听下回分解。
]]></description>
			<content:encoded><![CDATA[<p>密尔沃基市，是美国威斯康辛州最大的城市。1938年1月10日，圣诞刚过不久，密尔沃基市民像往常一样平静地生活着。咖啡店里，有人在议论着罗斯福总统的救市新政策，有人在议论着到底该不该限制公民持枪。而更多的人呢，则一边品尝着密尔沃基闻名全国的啤酒，一边听着广播里面的实时战况：侵华日军登陆青岛了。谁也没有想到，这个平静的日子将载入这座城市的史册。这天，密尔沃基路德教会高中的一名印刷管理员，高兴地迎来了一个健康的儿子。他为儿子取了一个响亮的名字，这个名字在不久的将来，成为了计算机编程艺术的旗帜：Donald Ervin Knuth。</p>
<p>为了方便讲述，请各位读者允许我先剧透一件39年后的事儿。在1977年Knuth造访中国前夕，姚期智的夫人为他取了一个中文名字：高德纳。在下面的故事里，我们就使用这个名字来称呼他。</p>
<p style="text-align: center;"><span id="more-281"></span><img class="size-medium wp-image-287 aligncenter" title="KnuthAtOpenContentAlliance" src="http://skylersun.info/wp-content/uploads/2010/02/KnuthAtOpenContentAlliance-253x300.jpg" alt="" width="253" height="300" /></p>
<p>高德纳天资聪颖，他的超凡智力在8岁时就显示出来了。当时，一家糖果商在孩子们当中举办了一项有趣的比赛，要求用“Ziegler&#8217;s Giant Bar”里面的字母，写出尽可能多的单词。裁判事先准备了一份2500个单词的列表，可他却远远低估了小选手的能力，高德纳令人惊讶写出了4500多个单词，毫无疑问地获得了冠军。他为学校赢得了一台电视机，还为每个同学赢得了一只棒棒糖，他的赛后感言是，我还能写出更多。</p>
<p>高德纳的高中就读于他父亲所在的路德教会高中，在这期间，他发表了此生第一篇学术文章。尽管如此，但这个充满了才华和个性的年轻小伙，并没有把心思放在科学上，他的主业是音乐和作曲。他的老师，甚至包括他自己，十分怀疑他将来进入大学后，是否能够顺利学习数学。这种想法给高德纳造成了不小的自卑，尽管他的平均分是学校历史上最高的。不过有句话说，真正的天才是1%的灵感加上99%的汗水，这话用在高德纳身上毫不夸张，18岁的他，在进入大学之后，丝毫没有向数学屈服，而是花费无数的课余时间，大量练习数学难题，这种努力的劲头再加上他的天份，使他很快就在数学方面超过了其他同学。其实我们与其关注一些科学家们不可模仿的机会和天赋，莫不如更关注他们如何面对困难和挫折。高德纳告诉我们，没有什么过不去的坎儿，方法就是抓紧时间干活。</p>
<p>高德纳就读的大学是凯斯理工学院，在这里他接触了IBM650计算机，这导致高德纳的音乐家梦想一去不复返，科学天赋终于重新占领了他的心扉。1956年，在他第一次使用IBM650之后，他就躇踌满志地相信，说明书上介绍的程序，一定比不上他自己编写的。于是高德纳开始学习编程，他的第一个程序是因数分解，不久之后，高德纳就对编程有了许多体会。当时高德纳还兼职管理学校的篮球队，于是他编写了一个程序，能够自动评估每名球员的价值，令球队的教练非常欣赏。这件事还吸引了CBS电视台的报道，后来高德纳、球队教练和IBM650的一张合影，还被印到了IBM650的宣传册上。1960年，高德纳以公认出色的成就，打破了学校的惯例，同时获得了学士和硕士两个学位，大家来做个减法吧，算算高德纳此时年岁几何。</p>
<p>随后，高德纳从五大湖区，来到了美国西南岸，进入伯克利攻读数学博士学位。在此期间，他的编程生涯也正式开始了，他对外提供软件服务，为各种不同机器设计各种稀奇古怪的编译器，曾经一个程序卖到5000美元。最值得一提的，就是他对ALGOL60编译器提出的测试方法。不知道大家是否还记得ALGOL，这盏批量生产图灵奖的阿拉丁神灯。当时我们介绍过，ALGOL60的设计目标要求支持递归，而在设计编译器时，对递归的处理是很复杂的，所以经常会因为编译器不成熟而出故障。高德纳编写了一段非常简单的测试程序，江湖人称“Man or boy test”，俗名“是男人就得-67”。高德纳说，只要用ALGOL60编译器来编译我的这段程序，如果运行结果等于-67，就说明这个编译器是纯爷们儿，否则就只能算小男孩。</p>
<p>1963年，25岁的高德纳顺利拿到了博士学位，并留在伯克利任教。在毕业前一年，虽然还是研究生，但高德纳已经因为设计编译器而响誉计算机行业。于是著名的Addison-Wesley出版社与他约稿，请他写一本关于编译器和程序设计方面的书。这本来是很平常的一件事，但您看看高德纳是何许人也，不久之后，他简直把这件事做成了一件计算机科学史上的奇观。1962年约的稿，高德纳一直写到1966年还没交，在此期间他又是毕业，又是教书，终于人家出版社急了。编辑找到高德纳，说这都四年了你写了多少啊，高德纳说，才写3000页手稿。编辑大囧，忙问都3000页了你怎么还不交，高德纳答曰，急啥，我还没写到正题呢。编辑彻底雷住了，说那你出个多卷本吧……</p>
<p>《计算机程序设计艺术》，就这么诞生了。</p>
<p>把一件平常的事做到人间极致，这就是高德纳。他不是故弄玄虚，他的心里攒着一股劲儿，要写出一部与牛顿的《自然哲学的数学原理》相媲美的传世巨著。他一开始计划了六卷，后来觉得这个数字不怎么好，又改成了七卷。1968年，《计算机程序设计艺术》（The Art Of Computer Programming，江湖人称TAOCP）的第一卷正式出版了。这一卷的标题叫《基本算法》，但难度却并不低。比尔盖茨曾经花了几个月的时间读完这一卷，并且做了大量的练习，然后他说，如果你想成为一个优秀的程序员，那就去读这个《基本算法》吧，确保自己能够解决里面的每一个问题。然而，高德纳本人的说法却比盖茨犀利多了：要是看不懂，就别当程序员。</p>
<p>就在这同一年，高德纳跳槽到斯坦福大学，并当上了教授，一边带博士，一边继续写书。一年后，TAOCP第二卷《半数值算法》正式出版，又过了三年，也就是1973年，第三卷《排序与查找》也相继付梓。这三卷书立即被计算机界惊为神作，在那几年之内就卖出去了100多万套，至今仍然是编程书籍中的最高经典。有一些对我们来说巧妙得不能再巧妙的算法，在这三卷书中顺手掂来，比比皆是，这个我们等会再说，现在有件要紧的事儿。按照高德纳的计划，这套书一共是七卷，但是现在刚刚写完三卷，就已是震古烁今。震到什么程度呢，连图灵奖颁奖委员都坐不住了，他们做了一件前所未有的事。按照惯例，图灵奖的获奖者都是成就等身，要经过时代的检验，然而高德纳却是例外，在他的七卷本刚刚写完三卷时，ACM便决定立即为其颁发图灵奖：</p>
<blockquote><p>授予高德纳图灵奖，以表彰其在算法分析、程序设计语言的设计和程序设计领域的杰出贡献，特别是其著名的《The Art of Computer Programming》系列丛书。</p></blockquote>
<p>这是1974年的ACM图灵奖颁奖词，高德纳捧走了历史上第9个图灵碗。这对高德纳来说，无疑是个殊荣，因为这一年他只有36岁，直到现在，他仍然保持着获奖年龄最小的纪录。</p>
<p>我们故事才讲到一半，可天才的高德纳却已经得到了图灵奖。各位读者可能要问，那下面还讲啥，他无非就是接着写书，接着带博士，就别废话啦。您要是这么想，那就大错特错了，他要是那么做，他就不是高德纳。提前剧透一下，这个看上去顺理成章的计划，很快就被打破了，计划中的七卷本，直到今天都没有完成。欲知发生了什么，且听下回分解。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/281/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>近看图灵碗 (1. 从苏黎世到巴黎) (下)</title>
		<link>http://skylersun.info/264</link>
		<comments>http://skylersun.info/264#comments</comments>
		<pubDate>Tue, 29 Dec 2009 10:48:56 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>
		<category><![CDATA[近看图灵碗]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=264</guid>
		<description><![CDATA[1960年新年刚过，浪漫之都巴黎正是白雪皑皑的冬天。游客们缓缓登上埃菲尔铁塔，鸟瞰美丽的花都，弥满着四处纷飞的雪花，陷于一片朦胧。
这时候，ALGOL58已经诞生一年多了（58年末至60年初），佩利、巴科斯等主要参与者们，都在实践当中对新语言有了新的体会。革命的脚步不会停下，很快，他们集合了紧密团结在ALGOL58周围的13名计算机科学家，来到巴黎，再次对语言设计进行讨论。尽管苏黎世会议的大部分老朋友都又来到了巴黎，然而这次研究会的主角儿，对我们而言却是一个新面孔，他是丹麦计算机科学家诺尔（Peter Naur）。
诺尔1928年出生在丹麦，29岁获得了天文学博士学位，后来在哥本哈根天文台工作时，为了计算天文数字，他设计了丹麦第一台电子计算机DASK。诺尔是一位兼具才华与情趣的科学家，读者不妨检索一下他发表的学术论文，涵盖了天文学，计算机科学，古典音乐，心理学等诸多领域，是学术界当之无愧的一名男子全能选手。就在巴黎会议召开不久前，诺尔进入了丹麦计算研究院工作，并为玻尔研究所授课，同时还被选为了欧洲语言设计小组成员。尽管如此，这时诺尔的主要兴趣仍是天文学，计算机对它来说，不过是研究天文的工具。

主角儿到了，那就让会议开始吧。还记得苏黎世会议上提出的巴科斯范式吧，巴黎会议的首要任务，就是继续完善这个范式，诺尔在第一局就立了大功。为了更清晰地描述下一代ALGOL语言，诺尔对巴科斯范式进行了大幅度的简化，缩减了它的符号集，如今使用的巴科斯范式，均是经过诺尔改进后的。后来高德纳（Donald Knuth）指出，应该将巴科斯范式改称为巴科斯-诺尔范式，以肯定诺尔为其做出的贡献，然而谦虚的诺尔却并不乐意这样。在《人类行为——计算》一书中（这本书记载了诺尔为计算机科学所做的大量贡献），诺尔曾说，我没有打算要把我的名字加进去，其实我觉得，它叫“巴科斯范式”挺好的。
范式并非难题，随着诺尔的工作，很快就通过了，13位代表开始讨论新一代ALGOL本身的设计。这次会议，大家吸取了上次苏黎世的教训，要求坚决不能再留下争议，对每一个细节都不能含糊。于是，每名代表都铆足了劲儿，进行了旷日持久的讨论，整个会议竟然持续了半个多月才闭幕。后来佩利回忆这次巴黎会议，他说最大的感觉就是累，实在太累，感觉简直就是没完没了。而且像上次一样，这些人论战起来丝毫不留情面，很多人的想法刚说出来就被彻底否定，一点翻身机会都不给。佩利说，这13名代表的精神头儿实在令人感叹，在那半个多月里，他们每天一见面，个个都像打了鸡血。
13个人马不停蹄地论战半个月，平均下来，每个人要叭啦叭啦说上一整天还多。然而，他们的努力却没有白费，这次会议终于终一了意见，完整地规划出了新一代ALGOL语言，按照年份，命名为ALGOL60。在会议的最后，由诺尔对此进行总结，整理会议讨论出的ALGOL60的所有特性，形成了后来名扬江湖的《算法语言ALGOL60报告》。这个总结工作充分体现了诺尔的才华和巴科斯范式的力量。在这之前的编程语言，是由编译器代码来描述的，既冗长又混乱，学习起来很有难度，而且非常难以在人类之间进行交流。这就好比你买了一部手机，发现附带的说明书很有特色，是这个手机的全部电路图，请你根据这些图来学习使用手机。当时学习编程，就是这么尴尬，但诺尔改变了这些，他首开先例，使用巴科斯范式对语言进行定义，用人类语言精心措词，短短17页报告，简洁优雅至极。这份报告成为了计算机科学史上的名作，它完整地描述了ALGOL60语言的所有特性，却不依赖任何机器细节，便于在人类之间交流——编程语言第一次拥有了“使用说明”而不是“电路全图”。诺尔的这项工作，改变了此后描述编程语言的方式，直到现在仍在使用。
巴黎会议，诺尔一鸣惊人。这个来自童话王国，热爱古典音乐的天文学家，站在这里告诉世界，计算机科学也可以很美的。
各位读者，我们已经从苏黎世的春天，一路走到了巴黎的冬天，ALGOL语言的正式版本终于被确定下来了。接下来要做的，就是把它付诸实践。冬去春来，万物复苏，1960年夏天，荷兰计算机科学家狄克斯特拉（Edsger Dijkstra）开发出了ALGOL60的编译器，ALGOL正式登上了计算机科学的舞台。随后，佩利将它引入了大学的课堂，在那个计算机科学的初始混沌期，此举一下子让无数的人们看到计算机科学到底应该是什么样子（“哇塞，原来不是电路全图耶～”）。狄克斯特拉说，这是一个伟大的标志，这标志着计算机科学真正地诞生了，ALGOL60是个绝对的奇迹。在接下来的30年里，ALGOL一直是教课书和学术界用来描述算法的不二之选。
说到这里，按照学习编程的惯例，认识一种语言，要先看它的“Hello,world”样例。下面就是ALGOL60的例子，我们共同一睹这个“绝对的奇迹”芳容如何。没有学习过编程的读者不必担心，这段程序的功能，就是在屏幕上显示一行“Hello,world!”，要是您实在看得一头雾水，那就直接跳过这些蝌蚪文，我保证不会影响您享受接下来的旅途。当然，我相信以ALGOL语言的优美，一头雾水的可能性并不大的。
BEGIN
DISPLAY("HELLO WORLD!") ;
END.

值得注意的是，这个写法并不唯一，因为ALGOL60仍然保持了ALGOL58的那个奇怪特性：分成文言文和白话文。事实上，ALGOL60主要是在ALGOL58的基础上改进得来的，所以它在许多地方都继承了ALGOL58的特性。如今，很难再找到编译器来让这段程序跑起来了，因为半个世纪荏苒而逝，时代的浪潮不饶人，想让ALGOL复活，已经不太可能了。然而，ALGOL的灵魂却从未离开，它简洁而优雅的定义（这主要归功于诺尔），影响了后面一系列编程语言的设计。ALGOL提出的许多概念都被后来的编程语言沿用，例如“代码块结构”这些我们习以为常的编程方式，都是由ALGOL率先使用的。包括C和C++在内的大部分五星级上将语言，都因为师出 ALGOL而被称为“类ALGOL语言”。可以说，ALGOL直接影响了整个计算机科学界和工业界的发展，影响之程度深入骨髓，而且至今经久不衰。
好了，我们旅途的第一站已经游览完了，不知这一路上大家感觉如何，是否感受到了瑞士的美丽和法国的浪漫，是否感受到了巴科斯揭竿而起改造编程语言的决心，是否感受到了佩利在语言设计和教育方面的高瞻远瞩，是否感受到了诺尔才华横溢的优雅气质，是否感受到了舌战群儒半个多月的激烈气氛，是否感受到了两次会议每名代表的聪明才智，是否感受到了ALGOL是一个“绝对的奇迹”。现在，女士们先生们，让我们屏住呼吸，颁奖的时刻到了。
那位认为“IAL”绕嘴又狂妄的艾伦佩利，因为在卡内基和普渡创建了计算机专业，并在ALGOL早期发展中带队做了大量工作，于1962年当选为美国计算机学会（ACM）主席。四年后，也许是近水楼台先得月，佩利成为历史上首位ACM图灵奖得主，捧走了历史上的第一个图灵碗。ACM对他的颁奖词是：
授予艾伦佩利图灵奖，以表彰其在高级编程技术及其编译器构造领域的影响 。
五年后，佩利再次跳槽，来到了耶鲁大学，连任多届计算机科学系主任，期间还一度执教于加州理工大学。1982年，退休后的佩利返老还童，写下了一系统关于编程的幽默，发表于ACM的SIGPLAN期刊上。其中他写道，如果你给别人讲解程序时，看到对方在点头，那就拍他一下吧，他一定是睡着了。 1990年2月7日，佩利因心脏病在纽哈芬去世，享年68岁。
还记得这场“绝对的奇迹”的导火索、不爱学习、后来在IBM揭竿而起的巴科斯吗？在佩利获得图灵奖11年后，1977年10月17日，巴科斯也凭着ALGOL的设计工作，在西雅图ACM年会上获得了图灵奖，捧走了第14个图灵碗。ACM对他的颁奖词是：
授于约翰巴科斯图灵奖，以表彰其在高级编程系统，程序设计语言规范的形式化定义方面所做的贡献。
巴科斯随后发表了获奖演讲，不知是不是因为他最初提议设计新语言时，曾经遭到冯诺伊曼的反对，从而对冯诺伊曼记恨在心（哈哈开个玩笑），他演讲的题目是《程序设计能从冯诺伊曼形式中解脱出来吗？》。2007年3月17日，巴科斯在美国俄勒冈州的家中去世，享年82岁。
已经两个了，可是还没有结束，我们一定没有忘记后来出场的那位才华横溢的科学家诺尔，他的图灵奖比前面两位来得似乎晚了一些。2005年，已经77 岁高龄的诺尔，在ALGOL60报告发布的45年后，终于等到了迟来的图灵奖，捧走了第50个ACM图灵碗。ACM给诺尔的颁奖词是：
授予彼得诺尔图灵奖，以表彰其在定义ALGOL60程序设计语言方面的先驱性工作。
虽然他的图灵碗迟到了40年，但是以诺尔的淡泊和平和，我们不难想见，他不会太介意的。
计算机科学早期的程序语言设计，是一项很艰难的工作，在这十多位科学家的努力下，创造了ALGOL这个绝对的奇迹。其中，上面这三位直接因为 ALGOL捧得了图灵碗，事实上参加巴黎会议的13名科学家中，还包括麦卡锡（John McCarthy），他后来因为在人工智能领域的杰出贡献获得了图灵奖，我们将在后面单独欣赏他的工作。为ALGOL60开发编译器的狄克斯特拉，也紧跟着麦卡锡，作为一位编程艺术大师而获得了次年的图灵奖。此外，还有高德纳、安东尼何尔、尼古拉斯沃斯等许多与ALGOL系列语言关系亲密的科学家，后来都陆续获得了图灵奖。正所谓时势造英雄，那个时代的ALGOL就像一盏阿拉丁神灯，亲手触摸过它的寥寥十几位科学家中，几乎全都戴上了计算机科学界的最高桂冠，从这个意义上来说，它真的是一个“绝对的奇迹”。
（第一章完）
]]></description>
			<content:encoded><![CDATA[<p>1960年新年刚过，浪漫之都巴黎正是白雪皑皑的冬天。游客们缓缓登上埃菲尔铁塔，鸟瞰美丽的花都，弥满着四处纷飞的雪花，陷于一片朦胧。</p>
<p>这时候，ALGOL58已经诞生一年多了（58年末至60年初），佩利、巴科斯等主要参与者们，都在实践当中对新语言有了新的体会。革命的脚步不会停下，很快，他们集合了紧密团结在ALGOL58周围的13名计算机科学家，来到巴黎，再次对语言设计进行讨论。尽管苏黎世会议的大部分老朋友都又来到了巴黎，然而这次研究会的主角儿，对我们而言却是一个新面孔，他是丹麦计算机科学家诺尔（Peter Naur）。</p>
<p>诺尔1928年出生在丹麦，29岁获得了天文学博士学位，后来在哥本哈根天文台工作时，为了计算天文数字，他设计了丹麦第一台电子计算机DASK。诺尔是一位兼具才华与情趣的科学家，读者不妨检索一下他发表的学术论文，涵盖了天文学，计算机科学，古典音乐，心理学等诸多领域，是学术界当之无愧的一名男子全能选手。就在巴黎会议召开不久前，诺尔进入了丹麦计算研究院工作，并为玻尔研究所授课，同时还被选为了欧洲语言设计小组成员。尽管如此，这时诺尔的主要兴趣仍是天文学，计算机对它来说，不过是研究天文的工具。<span id="more-264"></span></p>
<p><img class="aligncenter size-medium wp-image-276" title="450px-Peternaur" src="http://skylersun.info/wp-content/uploads/2009/12/450px-Peternaur-225x300.jpg" alt="" width="225" height="300" /></p>
<p>主角儿到了，那就让会议开始吧。还记得苏黎世会议上提出的巴科斯范式吧，巴黎会议的首要任务，就是继续完善这个范式，诺尔在第一局就立了大功。为了更清晰地描述下一代ALGOL语言，诺尔对巴科斯范式进行了大幅度的简化，缩减了它的符号集，如今使用的巴科斯范式，均是经过诺尔改进后的。后来高德纳（Donald Knuth）指出，应该将巴科斯范式改称为巴科斯-诺尔范式，以肯定诺尔为其做出的贡献，然而谦虚的诺尔却并不乐意这样。在《人类行为——计算》一书中（这本书记载了诺尔为计算机科学所做的大量贡献），诺尔曾说，我没有打算要把我的名字加进去，其实我觉得，它叫“巴科斯范式”挺好的。</p>
<p>范式并非难题，随着诺尔的工作，很快就通过了，13位代表开始讨论新一代ALGOL本身的设计。这次会议，大家吸取了上次苏黎世的教训，要求坚决不能再留下争议，对每一个细节都不能含糊。于是，每名代表都铆足了劲儿，进行了旷日持久的讨论，整个会议竟然持续了半个多月才闭幕。后来佩利回忆这次巴黎会议，他说最大的感觉就是累，实在太累，感觉简直就是没完没了。而且像上次一样，这些人论战起来丝毫不留情面，很多人的想法刚说出来就被彻底否定，一点翻身机会都不给。佩利说，这13名代表的精神头儿实在令人感叹，在那半个多月里，他们每天一见面，个个都像打了鸡血。</p>
<p>13个人马不停蹄地论战半个月，平均下来，每个人要叭啦叭啦说上一整天还多。然而，他们的努力却没有白费，这次会议终于终一了意见，完整地规划出了新一代ALGOL语言，按照年份，命名为ALGOL60。在会议的最后，由诺尔对此进行总结，整理会议讨论出的ALGOL60的所有特性，形成了后来名扬江湖的《算法语言ALGOL60报告》。这个总结工作充分体现了诺尔的才华和巴科斯范式的力量。在这之前的编程语言，是由编译器代码来描述的，既冗长又混乱，学习起来很有难度，而且非常难以在人类之间进行交流。这就好比你买了一部手机，发现附带的说明书很有特色，是这个手机的全部电路图，请你根据这些图来学习使用手机。当时学习编程，就是这么尴尬，但诺尔改变了这些，他首开先例，使用巴科斯范式对语言进行定义，用人类语言精心措词，短短17页报告，简洁优雅至极。这份报告成为了计算机科学史上的名作，它完整地描述了ALGOL60语言的所有特性，却不依赖任何机器细节，便于在人类之间交流——编程语言第一次拥有了“使用说明”而不是“电路全图”。诺尔的这项工作，改变了此后描述编程语言的方式，直到现在仍在使用。</p>
<p>巴黎会议，诺尔一鸣惊人。这个来自童话王国，热爱古典音乐的天文学家，站在这里告诉世界，计算机科学也可以很美的。</p>
<p>各位读者，我们已经从苏黎世的春天，一路走到了巴黎的冬天，ALGOL语言的正式版本终于被确定下来了。接下来要做的，就是把它付诸实践。冬去春来，万物复苏，1960年夏天，荷兰计算机科学家狄克斯特拉（Edsger Dijkstra）开发出了ALGOL60的编译器，ALGOL正式登上了计算机科学的舞台。随后，佩利将它引入了大学的课堂，在那个计算机科学的初始混沌期，此举一下子让无数的人们看到计算机科学到底应该是什么样子（“哇塞，原来不是电路全图耶～”）。狄克斯特拉说，这是一个伟大的标志，这标志着计算机科学真正地诞生了，ALGOL60是个绝对的奇迹。在接下来的30年里，ALGOL一直是教课书和学术界用来描述算法的不二之选。</p>
<p>说到这里，按照学习编程的惯例，认识一种语言，要先看它的“Hello,world”样例。下面就是ALGOL60的例子，我们共同一睹这个“绝对的奇迹”芳容如何。没有学习过编程的读者不必担心，这段程序的功能，就是在屏幕上显示一行“Hello,world!”，要是您实在看得一头雾水，那就直接跳过这些蝌蚪文，我保证不会影响您享受接下来的旅途。当然，我相信以ALGOL语言的优美，一头雾水的可能性并不大的。</p>
<pre name="code" class="c">BEGIN
DISPLAY("HELLO WORLD!") ;
END.
</pre>
<p>值得注意的是，这个写法并不唯一，因为ALGOL60仍然保持了ALGOL58的那个奇怪特性：分成文言文和白话文。事实上，ALGOL60主要是在ALGOL58的基础上改进得来的，所以它在许多地方都继承了ALGOL58的特性。如今，很难再找到编译器来让这段程序跑起来了，因为半个世纪荏苒而逝，时代的浪潮不饶人，想让ALGOL复活，已经不太可能了。然而，ALGOL的灵魂却从未离开，它简洁而优雅的定义（这主要归功于诺尔），影响了后面一系列编程语言的设计。ALGOL提出的许多概念都被后来的编程语言沿用，例如“代码块结构”这些我们习以为常的编程方式，都是由ALGOL率先使用的。包括C和C++在内的大部分五星级上将语言，都因为师出 ALGOL而被称为“类ALGOL语言”。可以说，ALGOL直接影响了整个计算机科学界和工业界的发展，影响之程度深入骨髓，而且至今经久不衰。</p>
<p>好了，我们旅途的第一站已经游览完了，不知这一路上大家感觉如何，是否感受到了瑞士的美丽和法国的浪漫，是否感受到了巴科斯揭竿而起改造编程语言的决心，是否感受到了佩利在语言设计和教育方面的高瞻远瞩，是否感受到了诺尔才华横溢的优雅气质，是否感受到了舌战群儒半个多月的激烈气氛，是否感受到了两次会议每名代表的聪明才智，是否感受到了ALGOL是一个“绝对的奇迹”。现在，女士们先生们，让我们屏住呼吸，颁奖的时刻到了。</p>
<p>那位认为“IAL”绕嘴又狂妄的艾伦佩利，因为在卡内基和普渡创建了计算机专业，并在ALGOL早期发展中带队做了大量工作，于1962年当选为美国计算机学会（ACM）主席。四年后，也许是近水楼台先得月，佩利成为历史上首位ACM图灵奖得主，捧走了历史上的第一个图灵碗。ACM对他的颁奖词是：</p>
<blockquote><p>授予艾伦佩利图灵奖，以表彰其在高级编程技术及其编译器构造领域的影响 。</p></blockquote>
<p>五年后，佩利再次跳槽，来到了耶鲁大学，连任多届计算机科学系主任，期间还一度执教于加州理工大学。1982年，退休后的佩利返老还童，写下了一系统关于编程的幽默，发表于ACM的SIGPLAN期刊上。其中他写道，如果你给别人讲解程序时，看到对方在点头，那就拍他一下吧，他一定是睡着了。 1990年2月7日，佩利因心脏病在纽哈芬去世，享年68岁。</p>
<p>还记得这场“绝对的奇迹”的导火索、不爱学习、后来在IBM揭竿而起的巴科斯吗？在佩利获得图灵奖11年后，1977年10月17日，巴科斯也凭着ALGOL的设计工作，在西雅图ACM年会上获得了图灵奖，捧走了第14个图灵碗。ACM对他的颁奖词是：</p>
<blockquote><p>授于约翰巴科斯图灵奖，以表彰其在高级编程系统，程序设计语言规范的形式化定义方面所做的贡献。</p></blockquote>
<p>巴科斯随后发表了获奖演讲，不知是不是因为他最初提议设计新语言时，曾经遭到冯诺伊曼的反对，从而对冯诺伊曼记恨在心（哈哈开个玩笑），他演讲的题目是《程序设计能从冯诺伊曼形式中解脱出来吗？》。2007年3月17日，巴科斯在美国俄勒冈州的家中去世，享年82岁。</p>
<p>已经两个了，可是还没有结束，我们一定没有忘记后来出场的那位才华横溢的科学家诺尔，他的图灵奖比前面两位来得似乎晚了一些。2005年，已经77 岁高龄的诺尔，在ALGOL60报告发布的45年后，终于等到了迟来的图灵奖，捧走了第50个ACM图灵碗。ACM给诺尔的颁奖词是：</p>
<blockquote><p>授予彼得诺尔图灵奖，以表彰其在定义ALGOL60程序设计语言方面的先驱性工作。</p></blockquote>
<p>虽然他的图灵碗迟到了40年，但是以诺尔的淡泊和平和，我们不难想见，他不会太介意的。</p>
<p>计算机科学早期的程序语言设计，是一项很艰难的工作，在这十多位科学家的努力下，创造了ALGOL这个绝对的奇迹。其中，上面这三位直接因为 ALGOL捧得了图灵碗，事实上参加巴黎会议的13名科学家中，还包括麦卡锡（John McCarthy），他后来因为在人工智能领域的杰出贡献获得了图灵奖，我们将在后面单独欣赏他的工作。为ALGOL60开发编译器的狄克斯特拉，也紧跟着麦卡锡，作为一位编程艺术大师而获得了次年的图灵奖。此外，还有高德纳、安东尼何尔、尼古拉斯沃斯等许多与ALGOL系列语言关系亲密的科学家，后来都陆续获得了图灵奖。正所谓时势造英雄，那个时代的ALGOL就像一盏阿拉丁神灯，亲手触摸过它的寥寥十几位科学家中，几乎全都戴上了计算机科学界的最高桂冠，从这个意义上来说，它真的是一个“绝对的奇迹”。</p>
<p>（第一章完）</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/264/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>近看图灵碗 (1. 从苏黎世到巴黎) (上)</title>
		<link>http://skylersun.info/258</link>
		<comments>http://skylersun.info/258#comments</comments>
		<pubDate>Mon, 28 Dec 2009 10:37:26 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>
		<category><![CDATA[近看图灵碗]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=258</guid>
		<description><![CDATA[我们的旅程从世界花园瑞士开始，1958年5月27日，苏黎世过完了六鸣节，到处春暖花开。就在4年前的这个季节，图灵离开了人间。
这一天，一场8个人的讨论会将在苏黎世召开，没有花，没有酒，连个专门的会议名称都没有。会议桌的一边，是美国计算机学会（ACM）的4名代表，另一边是德国应用数学和力学学会（GAMM）的4名代表，索性把地点和双方名称连起来，就叫苏黎世ACM-GAMM会议。后来的历史将会证明，这场毫不隆重、甚至不太圆满的会议，改变了此后的计算机科学，特别是对于1922年成立的GAMM来说，这场会议几乎成了它唯一的光辉事迹。8名代表陆续抵达了苏黎世，他们将要在此讨论，规划一种新型的编程语言，叫作国际代数语言（IAL）。
在电子计算机刚刚出现时，想让它干活十分不容易，关键的问题就在于，计算机听不懂人类语言。既然没法让计算机说人话，人们只好使用机器语言跟它们沟通。

左手是电线，右手是开关，这就是最早的机器语言（图为1946年的ENIAC计算机）。程序员先在纸上把程序设计好，然后进行持续数周的扳开关和接电线的工作，读者如果做过数字电路的课程实验，就能体会到那是怎样的麻烦，万一哪根儿线断了，排查起来那就是恶梦的样板。后来，程序员们有了新方法，把程序设计成打孔卡片（有孔没孔就是二进制），于是编程的主要工作变成了打孔，大家要是有兴趣，把自己身份证号码转成二进制，打在纸条上，看看是什么滋味。打一个数尚属不易，打一个程序就不难想象了。再后来，冯诺伊曼提出的存储程序实现了，人们把程序像数据一样保存在机器里，随时调用，编程从这时起才正式变成脑力劳动。但别高兴得太早，虽然不用接电线和打孔，但编程还是要用0101001111，就像《麦兜的故事》里面麦太太说的，鸡包纸包纸包鸡包鸡包纸包再包鸡鸡鸡。这种程序，编的时候只有作者和上帝能看懂，过一阵子之后，恐怕只有上帝能看懂了。随后，人们把一些常用的指令用一些“助记符”来代替，有了ADD、MOV这样的写法，形成了汇编语言，但本质上跟鸡包纸包鸡还是同一码事。
1953年，IBM公司的巴科斯（John Backus）再也忍不下去了，这哪里是编程，这不跟受刑一样么。他揭竿而起上书董事长，要为IBM704系列计算机开发一种新型编程语言。号称计算机之父的冯诺伊曼当时是IBM的顾问，他坚决认为这个提议十分不靠谱，但也许是应了有心人天不负，董事长Hurd同意了这个计划。

巴科斯1924年出生在美国费城，他的父亲是一家火药公司的员工。巴科斯小时候不爱读书，勉勉强强混了个中学毕业，进入弗吉尼亚大学学习化学，成绩依然很不好。二战爆发后，巴科斯参加了美国陆军，在Haverford学院（这可不是哈佛）接受医疗训练，准备治病救人，结果别人没救成，倒是发现自己长了一个脑瘤，于是接受了手术。后来，巴科斯打算当一名无线电技术员，在训练过程中，突然对数学产生了极大的兴趣，于是进入哥伦比亚大学学习数学，于1949年获得硕士学位，进入了IBM公司工作。
巴科斯开发新语言的提议得到了批准后，立即组建了一个开发小组，并担任组长，主持开发工作。1957年4月，第一套Fortran语言诞生了，尽管呱呱坠地时哭声不响，第一次演示就出了编译错误，但还是坚强地活了下来。本文不是编程教材，对于Fortran的具体细节，就不过多叙述了，但是我们要记住这个名字，因为它是非常耀眼的。Fortran是世界上第一个被正式应用的高级语言，所谓高级语言，是说它的语法更接近人类语言，而不是鸡包纸包鸡。从此以后，程序员不必再背那些枯燥的机器码，只需用“IF (x &#62; 0) THEN x = 0”这样的简单易懂的方式编程，可想而之它的推出让人多么兴奋。在电影《硅谷海盗》中，微软CEO鲍尔默讽刺说，要想激起比尔盖茨的性欲，必须这样叫床：Oh!Fortran~Oh~For~~Tran～。直到如今，经过多年改进的Fortran仍然在计算机界占有一席之地。不知道知天命之年的 Fortran是否会记恨，当年冯诺伊曼差点把它掐死在摇篮里，戏剧的是，就在第一套Fortran诞生之前两个月，冯诺伊曼因癌症去世了。关于Fortran就先说到这里，尽管它光辉夺目，但对于本文来说，它只是配角。在上世纪50年代末，编程语言的矛盾已经白热化，并非Fortran一己能够力挽狂澜。况且Fortran本身还有一些严重缺陷，比如它为IBM704而生，依赖特定的机器型号，很难移植到别的机器上。再比如，它不支持递归。革命尚未成功，同志仍需努力，在这个时候，ACM和GAMM都对编程语言有一些想法，于是他们决定坐在一起讨论讨论，规划一种更好的语言。苏黎世讨论会就是在这样的背景下召开的。
Fortran语言之父巴科斯这回又没闲着，作为ACM的代表之一，他也来到了苏黎世，想再次参与锻造新刀。这次制定语言，主要有两个原则，第一点毫无疑问，要使它更容易被人类理解，这是一直以来的革命方针；第二点，是要弥补Fortran的一些不足，主要是要兼容不同型号的机器，并支持递归，等等。
讨论会开始了。由于只有8人，不必拘泥形式，再加上诸位代表都是理工背景，说起话来锱铢必较，这场讨论，注定激烈无比。
为了描述即将诞生的国际代数语言，巴科斯用他带着重重鼻音的费城口音，首先提出了一套用来描述语言的语言，称为巴科斯范式。我们知道，学英语的时候，有一些“主+系+表”之类的句套子，对学习英语有很大帮助。对于计算机语言，也需要这样的句套子来描述它，巴科斯范式就是为了描述IAL而提出的。当然这个范式并非这么简单，它也能描述其它编程语言，甚至一部分自然语言，是一套非常了不起的设计。
有了巴科斯范式，8名代表你一言我一语，将自己在设计语言方面的经验倾囊而出，开始制定国际代数语言的标准。正所谓众口难调，每个人都对自己心中的新语言有着自己的观点，大家很快就陷入了争执，谁也不让谁，抢着用飞快的语速反驳对方，屋里的空气陷入了紧张，一个接一个的“IAL”、“IAL”、 “IAL”飘在空中，不停地游荡。这时，ACM小组的主席艾伦佩利（Alan Perlis）突然瞪着圆圆的眼睛大声说：停！你们难道没发现“IAL”这个词很绕嘴吗？

佩利比巴科斯大两岁，1922年出生于美国匹兹堡，与巴科斯的家乡费城同在宾夕法尼亚州，俩人也算是半个老乡。佩利虽然出生在愚人节，但他一点儿也不笨，比起巴科斯，佩利可算是年轻有为。无巧不成书，佩利初入大学时也是化学专业，他在21岁时，获得了卡内基理工学院的化学学士学位，这个学院就是现在美国计算机专业排名第一的著名学府，卡内基梅隆大学。与巴科斯巧合的是，刚刚走出大学校园的佩利，看到满街都是征兵海报，看到山姆大叔紧盯着他说“I want you”，看到珍珠港事件后神经绷紧的美国，也选择了参军。更加惊人的巧合是，佩利也是在服役期间突然对数学产生了强烈兴趣，并转而攻读之。1950年，他在麻省理工学院获得了博士学位。两年后他来到普渡大学，出任普渡大学计算中心首任主任，在普渡安装了IBM CPC计算机，并为其设计了一个叫作IT(Internal Translator)的编程语言。过了四年，这个毕业才6年的34岁年轻人，又一跃当上了卡内基理工学院第一任计算机科学系主任，为卡耐基配置了IBM 650，顺便把IT语言移植到650上。这些工作使佩利在程序语言的设计方面，有了许多经验和体会，所以在ACM成立这个程序设计语言委员会时，佩里坐上了主席的位置。诸位读者，假如这个惊人的成长步伐让您吃惊，那您可要好好地适应一下了，在我们这个系列的文章中，比比皆是这样的天才人物，会让您脊背发凉。
言归正传，我们刚才说到，佩利在讨论时，认为“IAL”这个词很绕嘴。假如他懂一点中文，没准还会发现，这个词一旦读快起来，很像汉语中的“哎哟”。佩利扶了一下眼镜，继续说道：我想不明白为什么要起这么个名字，不但很绕嘴，而且狂妄自大，不就是个语言么，何必扯虎皮做大旗，叫什么“国际语言”？佩利此言并无它意，然而他一心只顾着说，没有注意到身边的巴科斯此时已是脸红耳热，巴科斯所在的公司，早在1924年还在卖人口统计卡片的时候，就“狂妄自大”地改名叫作国际商用机器公司。
尽管佩利认为IAL这个名字既绕嘴又狂妄，但其他代表却觉得这个名字好听又大气，再说这又不是什么要紧的事，何必在这上面浪费口舌。这件事情仿佛成了插曲，直到五天后会议结束时，新语言的名字仍然是IAL，并写进了会议总结。也许这些代表怎么也没预料到，佩利在一年之后，还是执意改掉了这个名字，他们更没预料到在多年之后，新的名称将以烫金大字铭刻在计算机科学的历史上，而IAL却鲜为人知。
取代“IAL”的新名字，叫作ALGOL。这是ALGOrithmic Language的缩写，即算法语言。后来Bauer强调说，ALGOL这个名字，是Bottenbruch最先提出的，这两位都是苏黎世讨论会的德国代表。
除了名字没有达成共识之外，最终大家对新语言的句法也没能统一意见，苏黎世ACM-GAMM会议带着许多未尽的争议，在1958年5月1日草草落下了帷幕。然而，对于这些科学家来说，事实胜于一切雄辩，绝不能陷入驴子的困境。会议结束后，他们立即投入到实现新语言的工作中——既然分歧不能解决，那就干脆两种都做出来再说。他们成立了一个ZMMD小组，旨在开发一种ALGOL语言的编译器，ZMMD这个名称的由来，是其几位组员以及他们使用的一台Z22计算机分别所在的四个城市的开头字母。
请计算机专业的读者们在此稍息片刻，容我给其它专业的读者稍微解释一下什么是编译器。前面我们说过，因为计算机没法理解人类语言，我们需要用机器指令来编写程序，我们现在有了高级编程语言，不必使用麻烦的机器指令，这并不是因为计算机学会了人类语言，而是因为我们请了一位翻译。简单地说，它能够把高级语言翻译成机器指令，既使我们不用再做那些机械劳动，也能满足机器们的冰冷胃口，这个翻译就是编译器，它本身也是一套程序。好了，大家回回神，继续我们的故事。
就在不久之后的1958年年底，欧洲的冬天到来了，世界各地的游客纷纷来到壮丽的阿尔卑斯山，体验激动人心的滑雪运动。就在这个冬天，在ZMMD小组的努力下，第一套ALGOL语言及其编译器成功地开发出来了，按照年份，命名为ALGOL58。好玩的是，ALGOL58有三种不同版本的语法，在实际编程和书面表达时写法是不同的，有点像汉语分白话文和文言文，其差异之大，连小数点的写法都不一样。由于巴科斯的参与，ALGOL58既继承了Fortran的许多优点，又弥补了Fortran的许多不足，一度使Fortran的地位面临着严竣的挑战。这里我们不详细介绍ALGOL58的样子，它的生命实在太短暂，很快就退出了历史舞台。因为，就在一年多以后，ALGOL58的创造者，包括巴科斯和佩利等，对这种新语言有了许多新的体会和感受。1960年1 月，他们召集了其他几位参与ALGOL工作的计算机科学家，来到了浪漫之都巴黎，再次召开了一场关于ALGOL语言的研讨会。
(未完待续)
]]></description>
			<content:encoded><![CDATA[<p>我们的旅程从世界花园瑞士开始，1958年5月27日，苏黎世过完了六鸣节，到处春暖花开。就在4年前的这个季节，图灵离开了人间。</p>
<p>这一天，一场8个人的讨论会将在苏黎世召开，没有花，没有酒，连个专门的会议名称都没有。会议桌的一边，是美国计算机学会（ACM）的4名代表，另一边是德国应用数学和力学学会（GAMM）的4名代表，索性把地点和双方名称连起来，就叫苏黎世ACM-GAMM会议。后来的历史将会证明，这场毫不隆重、甚至不太圆满的会议，改变了此后的计算机科学，特别是对于1922年成立的GAMM来说，这场会议几乎成了它唯一的光辉事迹。8名代表陆续抵达了苏黎世，他们将要在此讨论，规划一种新型的编程语言，叫作国际代数语言（IAL）。<span id="more-258"></span></p>
<p>在电子计算机刚刚出现时，想让它干活十分不容易，关键的问题就在于，计算机听不懂人类语言。既然没法让计算机说人话，人们只好使用机器语言跟它们沟通。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2009/12/Eniac.jpg"><img class="aligncenter size-medium wp-image-269" title="Eniac" src="http://skylersun.info/wp-content/uploads/2009/12/Eniac-300x229.jpg" alt="" width="300" height="229" /></a></p>
<p>左手是电线，右手是开关，这就是最早的机器语言（图为1946年的ENIAC计算机）。程序员先在纸上把程序设计好，然后进行持续数周的扳开关和接电线的工作，读者如果做过数字电路的课程实验，就能体会到那是怎样的麻烦，万一哪根儿线断了，排查起来那就是恶梦的样板。后来，程序员们有了新方法，把程序设计成打孔卡片（有孔没孔就是二进制），于是编程的主要工作变成了打孔，大家要是有兴趣，把自己身份证号码转成二进制，打在纸条上，看看是什么滋味。打一个数尚属不易，打一个程序就不难想象了。再后来，冯诺伊曼提出的存储程序实现了，人们把程序像数据一样保存在机器里，随时调用，编程从这时起才正式变成脑力劳动。但别高兴得太早，虽然不用接电线和打孔，但编程还是要用0101001111，就像《麦兜的故事》里面麦太太说的，鸡包纸包纸包鸡包鸡包纸包再包鸡鸡鸡。这种程序，编的时候只有作者和上帝能看懂，过一阵子之后，恐怕只有上帝能看懂了。随后，人们把一些常用的指令用一些“助记符”来代替，有了ADD、MOV这样的写法，形成了汇编语言，但本质上跟鸡包纸包鸡还是同一码事。</p>
<p>1953年，IBM公司的巴科斯（John Backus）再也忍不下去了，这哪里是编程，这不跟受刑一样么。他揭竿而起上书董事长，要为IBM704系列计算机开发一种新型编程语言。号称计算机之父的冯诺伊曼当时是IBM的顾问，他坚决认为这个提议十分不靠谱，但也许是应了有心人天不负，董事长Hurd同意了这个计划。</p>
<p><img class="aligncenter size-full wp-image-270" title="John_Backus" src="http://skylersun.info/wp-content/uploads/2009/12/John_Backus.jpg" alt="" width="267" height="363" /></p>
<p>巴科斯1924年出生在美国费城，他的父亲是一家火药公司的员工。巴科斯小时候不爱读书，勉勉强强混了个中学毕业，进入弗吉尼亚大学学习化学，成绩依然很不好。二战爆发后，巴科斯参加了美国陆军，在Haverford学院（这可不是哈佛）接受医疗训练，准备治病救人，结果别人没救成，倒是发现自己长了一个脑瘤，于是接受了手术。后来，巴科斯打算当一名无线电技术员，在训练过程中，突然对数学产生了极大的兴趣，于是进入哥伦比亚大学学习数学，于1949年获得硕士学位，进入了IBM公司工作。</p>
<p>巴科斯开发新语言的提议得到了批准后，立即组建了一个开发小组，并担任组长，主持开发工作。1957年4月，第一套Fortran语言诞生了，尽管呱呱坠地时哭声不响，第一次演示就出了编译错误，但还是坚强地活了下来。本文不是编程教材，对于Fortran的具体细节，就不过多叙述了，但是我们要记住这个名字，因为它是非常耀眼的。Fortran是世界上第一个被正式应用的高级语言，所谓高级语言，是说它的语法更接近人类语言，而不是鸡包纸包鸡。从此以后，程序员不必再背那些枯燥的机器码，只需用“IF (x &gt; 0) THEN x = 0”这样的简单易懂的方式编程，可想而之它的推出让人多么兴奋。在电影《硅谷海盗》中，微软CEO鲍尔默讽刺说，要想激起比尔盖茨的性欲，必须这样叫床：Oh!Fortran~Oh~For~~Tran～。直到如今，经过多年改进的Fortran仍然在计算机界占有一席之地。不知道知天命之年的 Fortran是否会记恨，当年冯诺伊曼差点把它掐死在摇篮里，戏剧的是，就在第一套Fortran诞生之前两个月，冯诺伊曼因癌症去世了。关于Fortran就先说到这里，尽管它光辉夺目，但对于本文来说，它只是配角。在上世纪50年代末，编程语言的矛盾已经白热化，并非Fortran一己能够力挽狂澜。况且Fortran本身还有一些严重缺陷，比如它为IBM704而生，依赖特定的机器型号，很难移植到别的机器上。再比如，它不支持递归。革命尚未成功，同志仍需努力，在这个时候，ACM和GAMM都对编程语言有一些想法，于是他们决定坐在一起讨论讨论，规划一种更好的语言。苏黎世讨论会就是在这样的背景下召开的。</p>
<p>Fortran语言之父巴科斯这回又没闲着，作为ACM的代表之一，他也来到了苏黎世，想再次参与锻造新刀。这次制定语言，主要有两个原则，第一点毫无疑问，要使它更容易被人类理解，这是一直以来的革命方针；第二点，是要弥补Fortran的一些不足，主要是要兼容不同型号的机器，并支持递归，等等。</p>
<p>讨论会开始了。由于只有8人，不必拘泥形式，再加上诸位代表都是理工背景，说起话来锱铢必较，这场讨论，注定激烈无比。</p>
<p>为了描述即将诞生的国际代数语言，巴科斯用他带着重重鼻音的费城口音，首先提出了一套用来描述语言的语言，称为巴科斯范式。我们知道，学英语的时候，有一些“主+系+表”之类的句套子，对学习英语有很大帮助。对于计算机语言，也需要这样的句套子来描述它，巴科斯范式就是为了描述IAL而提出的。当然这个范式并非这么简单，它也能描述其它编程语言，甚至一部分自然语言，是一套非常了不起的设计。</p>
<p>有了巴科斯范式，8名代表你一言我一语，将自己在设计语言方面的经验倾囊而出，开始制定国际代数语言的标准。正所谓众口难调，每个人都对自己心中的新语言有着自己的观点，大家很快就陷入了争执，谁也不让谁，抢着用飞快的语速反驳对方，屋里的空气陷入了紧张，一个接一个的“IAL”、“IAL”、 “IAL”飘在空中，不停地游荡。这时，ACM小组的主席艾伦佩利（Alan Perlis）突然瞪着圆圆的眼睛大声说：停！你们难道没发现“IAL”这个词很绕嘴吗？</p>
<p style="text-align: center;"><img class="size-medium wp-image-271 aligncenter" title="perlis" src="http://skylersun.info/wp-content/uploads/2009/12/perlis-231x300.gif" alt="" width="231" height="300" /></p>
<p>佩利比巴科斯大两岁，1922年出生于美国匹兹堡，与巴科斯的家乡费城同在宾夕法尼亚州，俩人也算是半个老乡。佩利虽然出生在愚人节，但他一点儿也不笨，比起巴科斯，佩利可算是年轻有为。无巧不成书，佩利初入大学时也是化学专业，他在21岁时，获得了卡内基理工学院的化学学士学位，这个学院就是现在美国计算机专业排名第一的著名学府，卡内基梅隆大学。与巴科斯巧合的是，刚刚走出大学校园的佩利，看到满街都是征兵海报，看到山姆大叔紧盯着他说“I want you”，看到珍珠港事件后神经绷紧的美国，也选择了参军。更加惊人的巧合是，佩利也是在服役期间突然对数学产生了强烈兴趣，并转而攻读之。1950年，他在麻省理工学院获得了博士学位。两年后他来到普渡大学，出任普渡大学计算中心首任主任，在普渡安装了IBM CPC计算机，并为其设计了一个叫作IT(Internal Translator)的编程语言。过了四年，这个毕业才6年的34岁年轻人，又一跃当上了卡内基理工学院第一任计算机科学系主任，为卡耐基配置了IBM 650，顺便把IT语言移植到650上。这些工作使佩利在程序语言的设计方面，有了许多经验和体会，所以在ACM成立这个程序设计语言委员会时，佩里坐上了主席的位置。诸位读者，假如这个惊人的成长步伐让您吃惊，那您可要好好地适应一下了，在我们这个系列的文章中，比比皆是这样的天才人物，会让您脊背发凉。</p>
<p>言归正传，我们刚才说到，佩利在讨论时，认为“IAL”这个词很绕嘴。假如他懂一点中文，没准还会发现，这个词一旦读快起来，很像汉语中的“哎哟”。佩利扶了一下眼镜，继续说道：我想不明白为什么要起这么个名字，不但很绕嘴，而且狂妄自大，不就是个语言么，何必扯虎皮做大旗，叫什么“国际语言”？佩利此言并无它意，然而他一心只顾着说，没有注意到身边的巴科斯此时已是脸红耳热，巴科斯所在的公司，早在1924年还在卖人口统计卡片的时候，就“狂妄自大”地改名叫作国际商用机器公司。</p>
<p>尽管佩利认为IAL这个名字既绕嘴又狂妄，但其他代表却觉得这个名字好听又大气，再说这又不是什么要紧的事，何必在这上面浪费口舌。这件事情仿佛成了插曲，直到五天后会议结束时，新语言的名字仍然是IAL，并写进了会议总结。也许这些代表怎么也没预料到，佩利在一年之后，还是执意改掉了这个名字，他们更没预料到在多年之后，新的名称将以烫金大字铭刻在计算机科学的历史上，而IAL却鲜为人知。</p>
<p>取代“IAL”的新名字，叫作ALGOL。这是ALGOrithmic Language的缩写，即算法语言。后来Bauer强调说，ALGOL这个名字，是Bottenbruch最先提出的，这两位都是苏黎世讨论会的德国代表。</p>
<p>除了名字没有达成共识之外，最终大家对新语言的句法也没能统一意见，苏黎世ACM-GAMM会议带着许多未尽的争议，在1958年5月1日草草落下了帷幕。然而，对于这些科学家来说，事实胜于一切雄辩，绝不能陷入驴子的困境。会议结束后，他们立即投入到实现新语言的工作中——既然分歧不能解决，那就干脆两种都做出来再说。他们成立了一个ZMMD小组，旨在开发一种ALGOL语言的编译器，ZMMD这个名称的由来，是其几位组员以及他们使用的一台Z22计算机分别所在的四个城市的开头字母。</p>
<p>请计算机专业的读者们在此稍息片刻，容我给其它专业的读者稍微解释一下什么是编译器。前面我们说过，因为计算机没法理解人类语言，我们需要用机器指令来编写程序，我们现在有了高级编程语言，不必使用麻烦的机器指令，这并不是因为计算机学会了人类语言，而是因为我们请了一位翻译。简单地说，它能够把高级语言翻译成机器指令，既使我们不用再做那些机械劳动，也能满足机器们的冰冷胃口，这个翻译就是编译器，它本身也是一套程序。好了，大家回回神，继续我们的故事。</p>
<p>就在不久之后的1958年年底，欧洲的冬天到来了，世界各地的游客纷纷来到壮丽的阿尔卑斯山，体验激动人心的滑雪运动。就在这个冬天，在ZMMD小组的努力下，第一套ALGOL语言及其编译器成功地开发出来了，按照年份，命名为ALGOL58。好玩的是，ALGOL58有三种不同版本的语法，在实际编程和书面表达时写法是不同的，有点像汉语分白话文和文言文，其差异之大，连小数点的写法都不一样。由于巴科斯的参与，ALGOL58既继承了Fortran的许多优点，又弥补了Fortran的许多不足，一度使Fortran的地位面临着严竣的挑战。这里我们不详细介绍ALGOL58的样子，它的生命实在太短暂，很快就退出了历史舞台。因为，就在一年多以后，ALGOL58的创造者，包括巴科斯和佩利等，对这种新语言有了许多新的体会和感受。1960年1 月，他们召集了其他几位参与ALGOL工作的计算机科学家，来到了浪漫之都巴黎，再次召开了一场关于ALGOL语言的研讨会。</p>
<p>(未完待续)</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/258/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>大脑只开发了10%？</title>
		<link>http://skylersun.info/213</link>
		<comments>http://skylersun.info/213#comments</comments>
		<pubDate>Mon, 14 Dec 2009 12:39:37 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=213</guid>
		<description><![CDATA[今天又见有文章宣传说，人的大脑只利用了10%。这种说法由来已久，还有很多健脑药品打着这个旗号，号称能够发掘另外90%的大脑潜力。我检索了一下，没有找到这种说法的依据，它似乎出自William James的《人的能量》，又据说爱因斯坦如此解释自己的智商，但没有任何科学研究对此进行证实。
我们从理论上考虑，大脑是个耗能大户，它单位质量消耗的能量，在所有人体器官中是最大的。人体如果保留一个耗能巨大，却只用到10%的器官，这不符合进化规律，它早该被精兵精简了。从实验结果上看（比如fMRI），大脑也确实不存在闲置不用的所谓潜力区，事实上，人在睡觉的时候用到的脑资源都不只10%。
对于这种说法的来源，我有以下三点猜测，只是猜测。
第一，跟微柱体（mini-column）有关。人脑在工作时，实现其功能的最小组件，并不是神经元，而是由80~110个神经元组成的微柱体。一个微柱体内的神经元总是同时激活或抑制，发射同样的脉冲，简单地说，它们在做同样的事。也许有人据此认为，80个神经元彼此重复，这是一种浪费，假如改成 8个一组，微柱体的数量就能变成现在的10倍，大脑的性能也就可以提高10倍，所以大脑还有很大潜力。人脑为啥要这样组织，这我也不知道，但可以肯定的是，这个结构不是人力能够改变的。无论花多少心思，上多少健脑班，吃多少补脑药，也不能把一个微柱体改成8个神经元。
第二，跟脑区（area）有关。大脑的皮层不是一团糟，而是划分成不同功能区，各司其职，这在脑科学中是普遍接受的理论。按照常用的 Brodmann分区系统，大脑皮层分为52个功能区，其中用于理解和思考的只有少数几个脑区。可能因为脑的这个特征，有人就认为，思考只用了10％的脑资源（估计这个数字也是瞎猜的）。但是，其它的脑功能区并不是闲着的，它们负责维持人体的其它生命功能，比如呼吸、心跳、环境感知等等，如果整个皮层都用来思考，那就连命都没了，况且，这也不是人力能改变的。
第三，跟连接（Connection）有关。大脑通过神经元的连接来表征信息，脑中没有实体，一切都是连接，连接就是信息。假如一个脑有n个神经单元，理论上就能建立n2个连接，但实际中的连接数量，却远远没有达到。可能有人以为，既然连接就是信息，那就应该努力全部连起来，所以大脑还有很大潜力。但是，正如计算机有1也有0，表征信息至少要二进制，不连接也是表达信息所必须的。如果所有的神经元都连起来，那就表示不了信息。
]]></description>
			<content:encoded><![CDATA[<p>今天又见有文章宣传说，人的大脑只利用了10%。这种说法由来已久，还有很多健脑药品打着这个旗号，号称能够发掘另外90%的大脑潜力。我检索了一下，没有找到这种说法的依据，它似乎出自William James的《人的能量》，又据说爱因斯坦如此解释自己的智商，但没有任何科学研究对此进行证实。</p>
<p>我们从理论上考虑，大脑是个耗能大户，它单位质量消耗的能量，在所有人体器官中是最大的。人体如果保留一个耗能巨大，却只用到10%的器官，这不符合进化规律，它早该被精兵精简了。从实验结果上看（比如fMRI），大脑也确实不存在闲置不用的所谓潜力区，事实上，人在睡觉的时候用到的脑资源都不只10%。</p>
<p><span id="more-213"></span>对于这种说法的来源，我有以下三点猜测，只是猜测。</p>
<p>第一，跟微柱体（mini-column）有关。人脑在工作时，实现其功能的最小组件，并不是神经元，而是由80~110个神经元组成的微柱体。一个微柱体内的神经元总是同时激活或抑制，发射同样的脉冲，简单地说，它们在做同样的事。也许有人据此认为，80个神经元彼此重复，这是一种浪费，假如改成 8个一组，微柱体的数量就能变成现在的10倍，大脑的性能也就可以提高10倍，所以大脑还有很大潜力。人脑为啥要这样组织，这我也不知道，但可以肯定的是，这个结构不是人力能够改变的。无论花多少心思，上多少健脑班，吃多少补脑药，也不能把一个微柱体改成8个神经元。</p>
<p>第二，跟脑区（area）有关。大脑的皮层不是一团糟，而是划分成不同功能区，各司其职，这在脑科学中是普遍接受的理论。按照常用的 Brodmann分区系统，大脑皮层分为52个功能区，其中用于理解和思考的只有少数几个脑区。可能因为脑的这个特征，有人就认为，思考只用了10％的脑资源（估计这个数字也是瞎猜的）。但是，其它的脑功能区并不是闲着的，它们负责维持人体的其它生命功能，比如呼吸、心跳、环境感知等等，如果整个皮层都用来思考，那就连命都没了，况且，这也不是人力能改变的。</p>
<p>第三，跟连接（Connection）有关。大脑通过神经元的连接来表征信息，脑中没有实体，一切都是连接，连接就是信息。假如一个脑有n个神经单元，理论上就能建立n<sup>2</sup>个连接，但实际中的连接数量，却远远没有达到。可能有人以为，既然连接就是信息，那就应该努力全部连起来，所以大脑还有很大潜力。但是，正如计算机有1也有0，表征信息至少要二进制，不连接也是表达信息所必须的。如果所有的神经元都连起来，那就表示不了信息。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/213/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>生日悖论与生日攻击</title>
		<link>http://skylersun.info/221</link>
		<comments>http://skylersun.info/221#comments</comments>
		<pubDate>Sat, 12 Dec 2009 04:23:47 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=221</guid>
		<description><![CDATA[每个人都有生日，也会遇到与自己同一天过生日的人，但在生活中，这种缘分似乎并不常有。我们猜猜看，在50个人当中，出现这种缘分的概率有多大，是10%，20%，还是50%？
大家先猜一个答案，然后再动手计算一下。算不出来的读者也别急，搜索一下“相互独立事件同时发生的概率”，用这个方法先算出50个人都不相同的概率，然后用100%减掉它，就得到出现重复生日的概率了。
答案是97%，这个数字恐怕高出了绝大多数人的意料。我们没有算错，是我们的直觉错了。这个问题，因为计算结果与日常经验有很大矛盾，所以被称为“生日悖论(Birthday Paradox)”，它的原始表述是在23个人中出现相同生日的概率高达50%。为了让矛盾更突出，我把人数换成了50，如果事先不知道答案，猜测的结果会远远小于97%。有人说，我们在计算时假设人的生日是均匀而随机分布的，但生活中却未必如此——别担心，研究者已经证明，在不平均分布的情况下，得到的概率只会更高。此外，D.Knuth还计算了平均多少人中能够找到一对相同生日，答案是25人。这实在不可思议，与我们的日常经验相差太大了。
对于为何出现这种矛盾，我没有看到专门的研究。我的想法是，首先，当只有1个人时，重复率是0%，当人数大于365时，重复率是 100%，在1到365这个区间内，我们直觉上会认为概率是线性增长的。所以对于50人来说，该概率应该在50/365，即七分之一左右。但事实上，它的增长不是线性的，而是急速地陡升（下图中绿色曲线）。

可是，为什么我们会误以为它是线性的？我们把问题稍作改动，就能得到启发。新的问题是，在一群人当中，有人与你同一天生日，这个概率有多大？同样地，我们把概率曲线描出来（上图蓝色曲线），就可以看到，它是十分平缓的。我认为，就是因为当我们看到“有人生日相同”时，下意识地用“与我生日相同”去推测，以致于把火箭发射当成了平稳增长，造成了生日悖论。
所以，生日悖论的本质是，随着元素增多，出现重复元素的概率会以惊人速度增长，而我们低估了它的速度。这个问题不容忽视，因为它意味着，在密码学中，我们低估了散列值出现碰撞的概率。这一结论应用于寻找散列函数的碰撞，被称作“生日攻击(Birthday Attack)”。下面我们要使用一点数学语言了，感到头疼的读者，可以只读到这里，了解这个现象就很有趣了:-)
我们先把这个问题与生日脱钩，写成一般形式。从离散均匀分布的区间[1,d]中取出n个整数，至少两个数字相同的概率

下面考虑一个64位散列函数，它有种可能的散列值，要想100%地找到一组碰撞，就需要次攻击。但是生日悖论却提醒我们一个事实，只需要次攻击，就有约50%的概率能够攻击成功，这是不难计算的。

考虑，于是两端整理得：

当P=0.5时

在次攻击中，就有约50%的概率发生碰撞，收益降低一半，成本却开了根号，对于这些大数字来说，开根号是件不得了的事。为了提高碰撞率，我们以个散列作为一组，用独立的10组分别进行攻击，则一共需要约次攻击，出现碰撞的概率高于99.9%——这是一个非常理想的成功率，需要的攻击次数却仅是原来的1/1,000,000,000。
]]></description>
			<content:encoded><![CDATA[<p>每个人都有生日，也会遇到与自己同一天过生日的人，但在生活中，这种缘分似乎并不常有。我们猜猜看，在50个人当中，出现这种缘分的概率有多大，是10%，20%，还是50%？</p>
<p>大家先猜一个答案，然后再动手计算一下。算不出来的读者也别急，搜索一下“相互独立事件同时发生的概率”，用这个方法先算出50个人都不相同的概率，然后用100%减掉它，就得到出现重复生日的概率了。<span id="more-221"></span></p>
<p>答案是97%，这个数字恐怕高出了绝大多数人的意料。我们没有算错，是我们的直觉错了。这个问题，因为计算结果与日常经验有很大矛盾，所以被称为“生日悖论(Birthday Paradox)”，它的原始表述是在23个人中出现相同生日的概率高达50%。为了让矛盾更突出，我把人数换成了50，如果事先不知道答案，猜测的结果会远远小于97%。有人说，我们在计算时假设人的生日是均匀而随机分布的，但生活中却未必如此——别担心，研究者已经证明，在不平均分布的情况下，得到的概率只会更高。此外，D.Knuth还计算了平均多少人中能够找到一对相同生日，答案是25人。这实在不可思议，与我们的日常经验相差太大了。</p>
<p>对于为何出现这种矛盾，我没有看到专门的研究。我的想法是，首先，当只有1个人时，重复率是0%，当人数大于365时，重复率是 100%，在1到365这个区间内，我们直觉上会认为概率是线性增长的。所以对于50人来说，该概率应该在50/365，即七分之一左右。但事实上，它的增长不是线性的，而是急速地陡升（下图中绿色曲线）。</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-24" title="birthday_attack" src="http://skylersun.info/wp-content/uploads/2010/01/birthday_attack.png" alt="" width="460" height="233" /></p>
<p>可是，为什么我们会误以为它是线性的？我们把问题稍作改动，就能得到启发。新的问题是，在一群人当中，有人与你同一天生日，这个概率有多大？同样地，我们把概率曲线描出来（上图蓝色曲线），就可以看到，它是十分平缓的。我认为，就是因为当我们看到“有人生日相同”时，下意识地用“与我生日相同”去推测，以致于把火箭发射当成了平稳增长，造成了生日悖论。</p>
<p>所以，生日悖论的本质是，随着元素增多，出现重复元素的概率会以惊人速度增长，而我们低估了它的速度。这个问题不容忽视，因为它意味着，在密码学中，我们低估了散列值出现碰撞的概率。这一结论应用于寻找散列函数的碰撞，被称作“生日攻击(Birthday Attack)”。下面我们要使用一点数学语言了，感到头疼的读者，可以只读到这里，了解这个现象就很有趣了:-)</p>
<p>我们先把这个问题与生日脱钩，写成一般形式。从离散均匀分布的区间[1,d]中取出n个整数，至少两个数字相同的概率</p>
<p><img src="http://skylersun.info/wp-content/cache/tex_42028505cadd660cb591a37777b3ca0c.png" align="absmiddle" class="tex" alt="P(d,n) = \left\{\begin{matrix} 1-\prod_{i=1}^{n-1}(1-\frac{i}{d}), &amp; n\le d \\ &amp; \\ 1, &amp; n &gt; d \end{matrix} \right. " /></p>
<p>下面考虑一个64位散列函数，它有<img src="http://skylersun.info/wp-content/cache/tex_5212463e37406b73b693fe832f7bc8c2.png" align="absmiddle" class="tex" alt="2^{64}" />种可能的散列值，要想100%地找到一组碰撞，就需要<img src="http://skylersun.info/wp-content/cache/tex_3b2efa73970776937534e8b522db5e90.png" align="absmiddle" class="tex" alt="2^{64}+1\approx 10^{19}" />次攻击。但是生日悖论却提醒我们一个事实，只需要<img src="http://skylersun.info/wp-content/cache/tex_fd87fa517affd26288cedc4d6eb34cd5.png" align="absmiddle" class="tex" alt=" 2^{32}\approx 10^9" />次攻击，就有约50%的概率能够攻击成功，这是不难计算的。</p>
<p><img src="http://skylersun.info/wp-content/cache/tex_82769cdb6a436ca1d45c47550b35f6d6.png" align="absmiddle" class="tex" alt="P<br />
= 1-\prod_{i=1}^{n-1}(1-\frac{i}{d})<br />
\sim  1- \prod_{i=1}^{n-1}e^{-\frac{i}{d}}<br />
=  1- e^{-\sum_{i=1}^{n-1}\frac{i}{d}}<br />
=  1- e^{-\frac{n(n-1)}{2d}} " /></p>
<p>考虑<img src="http://skylersun.info/wp-content/cache/tex_e382c15f4c4381793d37bfe5c3ad451d.png" align="absmiddle" class="tex" alt="n(n-1) \sim n^2" />，于是两端整理得：</p>
<p><img src="http://skylersun.info/wp-content/cache/tex_4fb6a35c809cda9dbdfa68b213aceacf.png" align="absmiddle" class="tex" alt=" n \sim  \sqrt{-2ln(1-P)} \sqrt{d} " /></p>
<p>当P=0.5时</p>
<p><img src="http://skylersun.info/wp-content/cache/tex_f8d9db2d212de5a4e2c2c74243893814.png" align="absmiddle" class="tex" alt=" n \sim 1.17\sqrt{d} \sim \sqrt{d} " /></p>
<p>在<img src="http://skylersun.info/wp-content/cache/tex_1453deaa2024d6835e7c2730ff2acd80.png" align="absmiddle" class="tex" alt="\sqrt{d} = 2^{32}" />次攻击中，就有约50%的概率发生碰撞，收益降低一半，成本却开了根号，对于这些大数字来说，开根号是件不得了的事。为了提高碰撞率，我们以<img src="http://skylersun.info/wp-content/cache/tex_f19901f1c817ad846a411e6712e8db66.png" align="absmiddle" class="tex" alt="2^{32}" />个散列作为一组，用独立的10组分别进行攻击，则一共需要约<img src="http://skylersun.info/wp-content/cache/tex_ad21fdeb1f673b4bc277ad36506384f2.png" align="absmiddle" class="tex" alt="10^{10}" />次攻击，出现碰撞的概率高于99.9%——这是一个非常理想的成功率，需要的攻击次数却仅是原来的1/1,000,000,000。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/221/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>近看图灵碗 (0. 引言)</title>
		<link>http://skylersun.info/255</link>
		<comments>http://skylersun.info/255#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:36:17 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>
		<category><![CDATA[近看图灵碗]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=255</guid>
		<description><![CDATA[一说起图灵奖，好像就得这么介绍：计算机科学界的诺贝尔奖。这说明，“诺贝尔奖”这四个字已是形容词，它本身就代表着科学的顶峰，相比之下，其内容倒是次要的。用它来形容图灵奖，就暗示了一个可怕的隐喻，图灵奖也将被符号化，人们将只关注它的象征意义，不在乎它背后的那些成果。所以，我不喜欢这个比喻，我觉得不妨直接一些，这样来解释图灵奖：它代表着计算机科学历史最耀眼的杰作。
不知道有多少有心人留心过图灵奖的奖杯，那是一个银碗，外形朴实得很，但却光彩夺目。

这种亮得晃眼的碗，中国古代也有，就是定窑的白瓷碗。现在几乎公认，宋瓷是中国瓷器的巅峰，定窑作为宋朝的五大名窑之一，在艺术上的造谐是杰出的。可是，当时的皇帝却不喜欢它，“本朝以定州白瓷有芒不堪用”，就因为它太亮，没法用。
图灵碗也是“有芒不堪用”的，它们太亮太耀眼，几乎没有哪项图灵奖的成果，能够直接应用于日常生活。但是，正如这并不妨碍定州白瓷成为艺术佳品，图灵奖的作品，同样值得我们细细品味，感叹它们的美。计算机科学不是关于计算机的，它也不是一门科学，的确，它是一门艺术。
从1966年到2009年，图灵奖已经走过了近半个世纪，这也是计算机科学走过的半个世纪。获奖的成果串起来，就是一部计算机科学史。这条旅途跌宕起伏，光影变幻，人类历史上从没有过哪个学科，在创建后的短短半个世纪里，能够推进如此之远（如果不把量子物理看成独立学科的话）。
接下来，我们大家结伴同行，去近看这55个图灵碗。它们中的每一个，都是铭文清晰，包浆温润。请别把我当成导游，我也只是观光团的一员，而这本书，就是想跟大家在路上聊聊天。其中错误难免，还请听者有心，及时挠我一下，帮忙斧正。
好了，旅途开始了。
]]></description>
			<content:encoded><![CDATA[<p>一说起图灵奖，好像就得这么介绍：计算机科学界的诺贝尔奖。这说明，“诺贝尔奖”这四个字已是形容词，它本身就代表着科学的顶峰，相比之下，其内容倒是次要的。用它来形容图灵奖，就暗示了一个可怕的隐喻，图灵奖也将被符号化，人们将只关注它的象征意义，不在乎它背后的那些成果。所以，我不喜欢这个比喻，我觉得不妨直接一些，这样来解释图灵奖：它代表着计算机科学历史最耀眼的杰作。</p>
<p>不知道有多少有心人留心过图灵奖的奖杯，那是一个银碗，外形朴实得很，但却光彩夺目。<span id="more-255"></span></p>
<p><img class="aligncenter size-full wp-image-33" title="turing_bowl_0" src="http://skylersun.info/wp-content/uploads/2010/01/turing_bowl_0.jpg" alt="" width="326" height="243" /></p>
<p>这种亮得晃眼的碗，中国古代也有，就是定窑的白瓷碗。现在几乎公认，宋瓷是中国瓷器的巅峰，定窑作为宋朝的五大名窑之一，在艺术上的造谐是杰出的。可是，当时的皇帝却不喜欢它，“本朝以定州白瓷有芒不堪用”，就因为它太亮，没法用。</p>
<p>图灵碗也是“有芒不堪用”的，它们太亮太耀眼，几乎没有哪项图灵奖的成果，能够直接应用于日常生活。但是，正如这并不妨碍定州白瓷成为艺术佳品，图灵奖的作品，同样值得我们细细品味，感叹它们的美。计算机科学不是关于计算机的，它也不是一门科学，的确，它是一门艺术。</p>
<p>从1966年到2009年，图灵奖已经走过了近半个世纪，这也是计算机科学走过的半个世纪。获奖的成果串起来，就是一部计算机科学史。这条旅途跌宕起伏，光影变幻，人类历史上从没有过哪个学科，在创建后的短短半个世纪里，能够推进如此之远（如果不把量子物理看成独立学科的话）。</p>
<p>接下来，我们大家结伴同行，去近看这55个图灵碗。它们中的每一个，都是铭文清晰，包浆温润。请别把我当成导游，我也只是观光团的一员，而这本书，就是想跟大家在路上聊聊天。其中错误难免，还请听者有心，及时挠我一下，帮忙斧正。</p>
<p>好了，旅途开始了。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/255/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ubuntu不能调节屏幕亮度的解决方法</title>
		<link>http://skylersun.info/185</link>
		<comments>http://skylersun.info/185#comments</comments>
		<pubDate>Sat, 21 Nov 2009 05:13:12 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[与机器斗争 Conquer Machines]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=185</guid>
		<description><![CDATA[我的笔记本装了Ubuntu之后一直不能调节屏幕亮度，现在发现了一个解决方法。
只需要安装：$ sudo apt-get install nvclock
然后就可以使用这样的命令了：
$ nvclock -S -20 //将屏幕亮度降低 20
$ nvclock -S +20 //将屏幕亮度提高 20
$ nvclock -S 20 //将屏幕亮度设定为 20
（可调的范围是15~100）
如果想绑定到笔记本电脑的特殊快捷键上，可以先使用 $ acpi_listen 命令来获得该键的keycode。有了这两个命令，还可以搞点好玩的小花样，比如在启动某个程序时自动调整屏幕亮度，或者周期性的忽明忽暗，随便大家怎么玩。
（本文内容在nVidia 8400M GS+ Ubuntu 9.10下是正确的，在其它环境下请谨慎）
]]></description>
			<content:encoded><![CDATA[<p>我的笔记本装了Ubuntu之后一直不能调节屏幕亮度，现在发现了一个解决方法。</p>
<p>只需要安装：<strong>$ sudo apt-get install nvclock</strong><br />
然后就可以使用这样的命令了：<br />
<strong>$ nvclock -S -20</strong> //将屏幕亮度降低 20<br />
<strong>$ nvclock -S +20</strong> //将屏幕亮度提高 20<br />
<strong>$ nvclock -S 20</strong> //将屏幕亮度设定为 20<br />
（可调的范围是15~100）</p>
<p>如果想绑定到笔记本电脑的特殊快捷键上，可以先使用<strong> $ acpi_listen </strong>命令来获得该键的keycode。有了这两个命令，还可以搞点好玩的小花样，比如在启动某个程序时自动调整屏幕亮度，或者周期性的忽明忽暗，随便大家怎么玩。<br />
（本文内容在nVidia 8400M GS+ Ubuntu 9.10下是正确的，在其它环境下请谨慎）</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/185/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>人工智能与图灵测试（3. 一切皆连接）</title>
		<link>http://skylersun.info/249</link>
		<comments>http://skylersun.info/249#comments</comments>
		<pubDate>Tue, 17 Nov 2009 10:12:19 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科研 Academic Science]]></category>
		<category><![CDATA[人工智能与图灵测试]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=249</guid>
		<description><![CDATA[毕达格拉斯有句很拉风的名言，一切皆数。神经语言学的主旨也很拉风：脑中无实体，一切皆连接。说拉风是开玩笑，但这个一刀切的结论如果正确，那么对于降低智能体的训练成本而言，有着重要的意义。
这个训练成本，并不是指训料语料的多少，而是指形式规则的数量。在互联网时代，我们可以容易地得到大量语料，但要建立大规模的形式规则，则成本很高。神经模型的规则非常底层，所以一个小规则集就有很好的完备性，这有点类似于C语言仅有很少的关键字，但其函数却有无穷多。符号和行为方法不够底层，在这方面很不利，他们理论上需要无穷大的决策规则集，即使划定一个有限的子集（这个有限集也够大了），成本也是很高的。从另一个角度来说，这也不符合自然机制。
举个例子，假如机器有这样一条规则：对于输入A，返回response(A)。这看上去并没有什么问题，但当我们反复对它说10次同样的话时，则显得不自然，我们需要让它学会计数，这时就要编写新的规则：对于第n次输入A，返回response(A,n)。我们又发现，当对话双方的社会关系不同时（如朋友或仇敌），返回的内容也应不同，我们又需要将规则改成：对于一个关系为relation的人，当他第n次输入A时，返回 response(A,n,relation)。然后我们又想，人类在不同的情绪下，会使用不同的语言来回应同一个输入，因此规则又要改为：当机器的情绪状态为emotion，一个关系为relation的人第n次输入A时，返回response(A,n,emotion,relation)……。但是可以想见，对于神经模型，则不存在这个问题，因为一切皆连接，只需要一套神经元规则，就可以概括一切。
对于计算机模拟NCL这项工作，Sydney的学生Colin曾在博士论文中做了大量前期工作，他得知我要继续进行这项研究，特意来信表达支持。目前我还在详细考查他的成果。
]]></description>
			<content:encoded><![CDATA[<p>毕达格拉斯有句很拉风的名言，一切皆数。神经语言学的主旨也很拉风：脑中无实体，一切皆连接。说拉风是开玩笑，但这个一刀切的结论如果正确，那么对于降低智能体的训练成本而言，有着重要的意义。<span id="more-249"></span></p>
<p>这个训练成本，并不是指训料语料的多少，而是指形式规则的数量。在互联网时代，我们可以容易地得到大量语料，但要建立大规模的形式规则，则成本很高。神经模型的规则非常底层，所以一个小规则集就有很好的完备性，这有点类似于C语言仅有很少的关键字，但其函数却有无穷多。符号和行为方法不够底层，在这方面很不利，他们理论上需要无穷大的决策规则集，即使划定一个有限的子集（这个有限集也够大了），成本也是很高的。从另一个角度来说，这也不符合自然机制。</p>
<p>举个例子，假如机器有这样一条规则：对于输入A，返回response(A)。这看上去并没有什么问题，但当我们反复对它说10次同样的话时，则显得不自然，我们需要让它学会计数，这时就要编写新的规则：对于第n次输入A，返回response(A,n)。我们又发现，当对话双方的社会关系不同时（如朋友或仇敌），返回的内容也应不同，我们又需要将规则改成：对于一个关系为relation的人，当他第n次输入A时，返回 response(A,n,relation)。然后我们又想，人类在不同的情绪下，会使用不同的语言来回应同一个输入，因此规则又要改为：当机器的情绪状态为emotion，一个关系为relation的人第n次输入A时，返回response(A,n,emotion,relation)……。但是可以想见，对于神经模型，则不存在这个问题，因为一切皆连接，只需要一套神经元规则，就可以概括一切。</p>
<p>对于计算机模拟NCL这项工作，Sydney的学生Colin曾在博士论文中做了大量前期工作，他得知我要继续进行这项研究，特意来信表达支持。目前我还在详细考查他的成果。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/249/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>听侯捷老师的课</title>
		<link>http://skylersun.info/208</link>
		<comments>http://skylersun.info/208#comments</comments>
		<pubDate>Fri, 13 Nov 2009 11:59:53 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[与机器斗争 Conquer Machines]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=208</guid>
		<description><![CDATA[侯捷老师来南京了，在南京大学软件学院授课，得益于周筠老师的介绍，今天我前去结识他。这节课的内容是malloc函数的具体实现，侯老师讲解得清晰又透彻，令我印象更深的是他对课堂节奏的把握，非常值得学习。
我现在不做一线开发，也不研究程序设计，但是对于编程，我有如下的一点想法。无论我研究的是什么，只要工作的对象是机器，那就有必要透彻理解编程，因为这是体会机器特性的最好途径。这种透彻理解意味着，不能只把编程视为一个技能，还要深入它的底层细节，并在哲学角度上去体会它，这种体会能使我在研究工作中少走弯路。这好比司机可能不必亲自修车，但如果他很会修车，那么对车的理解就会反映在驾驶水平上。
上面就是我坚持大量写代码的原因，也是我前去结识侯捷老师的原因，侯老师对编程有着十分深刻的理解，我很荣幸能够与他讨论。

]]></description>
			<content:encoded><![CDATA[<p>侯捷老师来南京了，在南京大学软件学院授课，得益于周筠老师的介绍，今天我前去结识他。这节课的内容是malloc函数的具体实现，侯老师讲解得清晰又透彻，令我印象更深的是他对课堂节奏的把握，非常值得学习。</p>
<p>我现在不做一线开发，也不研究程序设计，但是对于编程，我有如下的一点想法。无论我研究的是什么，只要工作的对象是机器，那就有必要透彻理解编程，因为这是体会机器特性的最好途径。这种透彻理解意味着，不能只把编程视为一个技能，还要深入它的底层细节，并在哲学角度上去体会它，这种体会能使我在研究工作中少走弯路。这好比司机可能不必亲自修车，但如果他很会修车，那么对车的理解就会反映在驾驶水平上。<span id="more-208"></span></p>
<p>上面就是我坚持大量写代码的原因，也是我前去结识侯捷老师的原因，侯老师对编程有着十分深刻的理解，我很荣幸能够与他讨论。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2010/01/jjhou.jpg"><img class="aligncenter size-medium wp-image-30" title="jjhou" src="http://skylersun.info/wp-content/uploads/2010/01/jjhou-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/208/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>我的20年</title>
		<link>http://skylersun.info/240</link>
		<comments>http://skylersun.info/240#comments</comments>
		<pubDate>Sun, 11 Oct 2009 06:04:42 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[边走边想 Life]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=240</guid>
		<description><![CDATA[今天是20周岁生日，特别撰文纪念一下。这20年总结起来，有过荣誉，也犯过错误，哭过笑过，也乐过囧过，但我从未向平庸和虚无屈服，从未放弃追求梦想。我拥有了美好的20年。
20年前，我在大连出生，很健康，全家人都很高兴。八个月时，我学会了走路，直到现在，我走路的姿势还和父亲一模一样。抓周的时候，我抓的是笔，家人大为欣喜，觉得我将来有出息。还有一个令人高兴的现象是，我关门时从不肯抓门边，总是推门板，所以从来没有夹到手，而且这不是在被夹到之后才注意的，是始终如此。我觉得这大概是我的一种天赋，比较擅长从别人的行为和后果中归纳出一点道理，来指导自己。可以想见，家人认为我非常聪明，这种观念一直笼罩着我，导致我在读高中以前，一直瞧不起努力，走了许多弯路。
我的童年是在姥姥家度过的，每天早晨，我都会背着一个小书包，拿着父亲给我做的小黑板，步行到姥姥家。姥姥初中毕业，既明理又识字，每天都要教我剪纸、识字以及算术。所以，当别的孩子在外面疯跑打闹时，我却常年待在屋里写写算算，我现在如此之宅的生活态度，想必是那时打下的基础。大概到五岁时，我已经能认得报纸上几乎所有的汉字，并且可以进行任意位数的加减运算。上学之前，虽然我没有男孩子应有的打打杀杀，但我已经读过各种各样的童话和历史故事，因此，我的童年十分精彩，可能也就是在那个时候形成了对书籍的崇拜。我至今都很怀念那段时光，那个背着小包和小黑板走在小路上的小男孩，转眼已是奔三的人了，那时每天都要经过两次的小台阶，如今已经长满杂草。
7岁那年，我上小学了。由于之前打下的基础，学校的课程对我来说非常轻松，听课和作业都不太认真，但每次考试基本上都是满分，有时还在考卷上恶搞。课余时间，我主要的乐趣就是做手工，我订了份报纸叫《动手做》，上面所有的手工制作我都亲手做过一遍。那时送礼流行送草莓，用一个塑料盒子装着，我非常喜欢那些盒子，因为可以做工具箱。我有四个这样的盒子，分门别类收集了各种工具和材料，像钳子扳手，钉子螺丝，电池导线，大大小小的泡沫塑料和木板，我都有。每逢遇到别人丢弃的这类东西，我都会把它捡回来，放到我的盒子里。都说七八岁的孩子最淘气，但我的七八岁就是在这些盒子中安静度过的，它们是我全部的天地。前段时间搬家，我还看到了这四个盒子，虽然早已落满灰尘，但里面还是装满了钉子螺丝，电池导线。我的童年很孤独，但在它们的陪伴下，却又一点也不孤独。多年之后，我对机械和计算机的热爱，也许都是源自这四个盒子。
这个时期还发生了一件重要的事情，我第一次跟计算机结缘了。我是班里的学习委员，每天都要给同学们听写课文里的生字，我们的语文书没有集中的生字表，生字都是分布在每篇课文的后面，每次听写，我都要捧着一本大书，翻来翻去。那时我父亲的办公室已经有了电脑，我也见过电脑打印出来的精美文件，所以就想把生字集中打印到一张纸上，直接拿着这张纸就可以给同学们听写。我父亲倒是很支持我做这件事（几年之后，他一见我坐在电脑前面就头疼），于是教我打字和排版，就在那段时间，父亲的单位组织大家学习五笔输入法，我也跟着凑热闹，晚上跟父亲一起背那些“王旁青头兼五一”之类的东西。后来，我父亲没学会，我倒是学会了，我一个一个地把生字全都打印出来，觉得电脑这东西实在是好。如果我没记错，那是一台586，DOS系统，打字用WPS，照当时看还是蛮先进的。这就是我第一次接触电脑，从此结下了不解之缘，我觉得自己特别幸运，能够在那个年龄就找到自己真正的兴趣。
小学四年级时，父亲给我转学了，转到市区新成立的一所优质学校。那里的学费不低，绝大多数同学都是家境富裕，而我家当时则比较落后，我是凭着学习成绩硬挤进去的。同学们整天聊着一些我没见过的玩意，电脑游戏（那时主要是“红警”和“拳皇”），高档文具，高档零食，而我则土里土气，对这些一窍不通，同学都不怎么搭理我，这一度给我造成了不小的自卑感。然而我们注意到，少年时经历过自卑的孩子，往往心里都会憋一股劲，所以那些改变世界的大野心家，往往都是身材矮小如拿破仑和希特勒。我当时憋的劲就是，我比你们懂计算机。在我的百般恳求下，家里终于在四年级期末给我买了一台赛扬500的计算机，这起初对我的影响还不算大，就是学学应用软件，玩玩游戏，还没连过网络。直到六年级那年，发生了一件大事，这台电脑坏了，拿到电脑城去修理，我跑去凑热闹，这一凑可不得了，一下子被“修电脑”这个工作给迷住了。从那时候起，我开始逃课，自习课的时候，偷偷跑到电脑城看人家修电脑。电脑城除了修电脑之外，还卖各种软件和书籍，看着看着，我就对这些有了兴趣。可是，那时家里不给我零花钱，只有姥爷不定期的给一些，再加上我谎称学校收某某费，能骗来一些攒起来，最后全部换成了各种电脑书和光盘。那时候班里流行喝百事可乐，三块钱一瓶，我非常喜欢喝，但从来都舍不得买。我的全部开销就是买书，还有每期的《大众软件》杂志，我至今都记得清楚，我买的第一本是2002年第6期，白色背景的封面。我一直买了三年，厚厚的一摞，除了有几本被我妈撕了，其余的现在还整整齐齐摆在书柜里。经常逛电脑城，以及有了《大众软件》，我的世界就完全不一样了，对计算机应用的了解也越来越多。
计算机爱好者往往是一些控制欲很强的人，这种控制欲体现在，他在使用程序的过程中，会忍不住想要编程序。在这段时期，我的控制欲体现出来了，想制作自己的程序，于是我自学了QBasic语言。然而不同的是，很多朋友当初学编程是为了编游戏，但我对游戏却没兴趣，只对数值和字符这些东西敏感。直到现在，我写的程序绝大多数都没有图形界面:-)  那时编的程序，主要是就替我做数学题，进行一些自动操作，等等。
到了初中，我的计算机水平已经能超过当时学校里的电脑老师了，于是班主任老师安排我管理教室的电脑，那台电脑装的是赛扬900处理器，Windows 98操作系统，更让我兴奋的是，那台电脑是联网的。从此我就混迹于各大论坛BBS，跟各种各样的人QQ聊天，以非常迅猛的速度了解外面的社会，想法和思维变得跟其他同学有很大不同了。初一下学期，一个很偶然的机会，我给《计算机应用文摘》杂志写了一篇稿子，从此成为了该刊的特约撰稿，直到初中毕业。我那时候的稿费是千字120元钱，每个月能发表三四千字，对于一个初中生来说，这是一个很高的收入。但是，这些钱仍然“取之于书，用之于书”，电脑书几十元一本，我从不眨眼，但是对于三块钱的百事可乐，仍然不舍得买。
这个时期，对于玩电脑这件事，家里的矛盾越来越激烈，我都不记得为此挨了多少打，多少骂，多少次眼睁睁地看着我辛苦攒钱买来的书被撕掉，多少次说好了要谈谈心最后却陷入争吵。初二时，父亲把家里的电脑搬走了，霎那间，我觉得自己突然变得一无所有。就在这时，我的姥爷突然提出要给我再买一台电脑，这件事改变了我许多，至今每当我想到他当年的决定，都会经历一次强烈的惊异和感动。姥爷一生节俭，吃药都舍不得买贵的，电脑在当时属于奢侈品，但他并无任何犹豫。那台电脑是我自己选的，为了省钱，是一台二手 IBM T22，再加上我帮助那个商家做网站，最后的价格是5500元，在当时算是较便宜的。此事在家里引起了海啸，大家纷纷指责，不该在我即将上初三时买电脑，但最后姥爷一个人还是坚持下来了。那种感动，我至今难忘，一位花甲老人，多么理解一个孩子的梦想。这次事件过后，我对父母一直心存逆反和隔阂，至今都没能完全消除。
在这台T22上，我学习编程的劲头更足了。随着不断的实践，我慢慢体会到QBasic的局限性，于是自学了C语言。实际上初中三年级这一年，我学了许多东西，除了C语言之外，还有基本的数据结构和算法，操作系统的结构，甚至还有软件项目管理。当然，那时对这些只是纸上得来，都没有什么深刻体会。这段时间我也编写了许多小程序，现在都找不到了，我记得有一键清理系统垃圾，还有管理光盘的软件等等。印深较深的是这么一个故事：我班有个同学，他妈妈每天的工作就是接收一些数据，然后套用一些复杂的公式进行计算，把算好的结果发回去，算完了就下班。她本来用的是电脑上的“计算器”，后来我帮她编了个程序，她每天到公司敲两下回车键，就可以下班了，而且从不出错。为此，我的这位同学请我吃了许多雪糕:-)
初中三年级，在同学们努力拼搏考重点高中时，我却完全不想升学，我想退学开软件公司。我自己做了个网站，又在论坛里拉了几个好友当员工，公司就算是开起来了，结果没过多久就倒闭了，因为一笔生意都没有。后来我又想，如果考不上高中，公司又开不起来，那我就去找工作，肯定有地方要我。除此之外，我还打算在初中毕业之前，考个微软MCSD认证专家，最好还能成为微软MVP。这些不靠谱的梦，一直持续到初三下学期开学那天。那天，我的班主任老师对我说，我这一辈子都没求过人，这回就算我求你了，能不能暂时别研究电脑了，好好学习考重点。这位班主任老师叫袁弘，是我屈指可数的几位特别敬佩的人之一。这一席话对我的感动，再加上姥爷买电脑事件对我的感动，导致我那个学期真的把心思花在了学习上。终于，我以语文满分、作文满分的成绩考上了省重中，报答了这位教语文的班主任老师。
上了高中之后，我遇到了一个令人哭笑不得的班主任。好在那时候我的价值观已经比较成熟，所以没有对我造成太大的影响，反而有一个好处，她几乎管不了我，我有了许多自由的时间和空间。高中的学习生活更紧张，大家都为了高考而拼命奋斗，而我却又回到了不靠谱状态，觉得最好是考不上大学，我就喜欢自学。这时候，我又遇到了一个人生的关键节点，我参加计算机奥赛得了一等奖，得到了保送大学的资格。说它是关键节点，是不言而喻的，假如我真是不上大学，可能一切都是另一番样子。这件事十分偶然，本来我都不知道奥林匹克竞赛是怎么回事，听别人说觉得挺有意思，就想去比试一下，结果直接得了一等奖。我现在觉得，其实是因为那年的题简单，我学的 C语言，它在字符串处理这种问题上比较灵活，我就是靠语言特性才得奖的。有了保送资格，我把更多的时间花在计算机上，高二又参加了一次奥赛，又是一等奖。随后我开始玩机器人，又组织一个学生社团给学校做网站，后来更不靠谱，我跑到古玩店去打工鉴定古董。
高中三年，我对计算机的兴趣与日俱增，而且不再对开公司和微软认证之类的感兴趣，而是开始想一些计算机科学领域的学术问题。NP是否等于P，特殊形式的数据怎么组织，图灵测试如何通过，怎样让生物进化成计算机，这都是我当时想过的。可惜那时没有博客，这些异想天开没有记录下来。但这使我有了一个明确的目标，将来要做科学研究，虽然这看上去与物欲横流的社会环境相背，但却符合了我童年时的想当科学家的梦想。
高中毕业时，我接到了南京航空航天大学的录取通知，没有悬念地选择了计算机科学与技术，来到了南京。上大学之前，我又拥有了一台新电脑，爸爸给我买的索尼SZ667，姥爷买的那台T22完成了历史使命，成了永远的珍藏。大学一开始，我就开始寻找我感兴趣的科研领域的老师，走上实现理想的道路。南航的刘绍翰老师热情地帮助了我，我开始做机器学习和模式分类方面的研究。现在大学生活才过去一年，要做总结还为时尚早，就说我在大学里明白的一句话吧：潜龙勿用，宁静致远。
20年韶华流水，浮上心头，仿佛历历在目。感谢这个世界，把我从一无所有的婴儿，培养成有性格、有梦想、有自我世界的人。我希望十年之后，我能拥有一份事业，有能力享受美好的世界。我希望十年之后，好朋友们都没离开，还能坐在一起忆往昔峥嵘岁月稠。我希望十年之后，世界能给和平一个机会，中国能实现科学与民主，社会能让每个人都快乐。我希望十年之后，我仍然拥有激情和动力，去继续开拓和创造再下一个十年。20年就这样过去了，十年后枫叶红时，让我们再来在一起，读读我的30年。
]]></description>
			<content:encoded><![CDATA[<p>今天是20周岁生日，特别撰文纪念一下。这20年总结起来，有过荣誉，也犯过错误，哭过笑过，也乐过囧过，但我从未向平庸和虚无屈服，从未放弃追求梦想。我拥有了美好的20年。<span id="more-240"></span></p>
<p>20年前，我在大连出生，很健康，全家人都很高兴。八个月时，我学会了走路，直到现在，我走路的姿势还和父亲一模一样。抓周的时候，我抓的是笔，家人大为欣喜，觉得我将来有出息。还有一个令人高兴的现象是，我关门时从不肯抓门边，总是推门板，所以从来没有夹到手，而且这不是在被夹到之后才注意的，是始终如此。我觉得这大概是我的一种天赋，比较擅长从别人的行为和后果中归纳出一点道理，来指导自己。可以想见，家人认为我非常聪明，这种观念一直笼罩着我，导致我在读高中以前，一直瞧不起努力，走了许多弯路。</p>
<p>我的童年是在姥姥家度过的，每天早晨，我都会背着一个小书包，拿着父亲给我做的小黑板，步行到姥姥家。姥姥初中毕业，既明理又识字，每天都要教我剪纸、识字以及算术。所以，当别的孩子在外面疯跑打闹时，我却常年待在屋里写写算算，我现在如此之宅的生活态度，想必是那时打下的基础。大概到五岁时，我已经能认得报纸上几乎所有的汉字，并且可以进行任意位数的加减运算。上学之前，虽然我没有男孩子应有的打打杀杀，但我已经读过各种各样的童话和历史故事，因此，我的童年十分精彩，可能也就是在那个时候形成了对书籍的崇拜。我至今都很怀念那段时光，那个背着小包和小黑板走在小路上的小男孩，转眼已是奔三的人了，那时每天都要经过两次的小台阶，如今已经长满杂草。</p>
<p>7岁那年，我上小学了。由于之前打下的基础，学校的课程对我来说非常轻松，听课和作业都不太认真，但每次考试基本上都是满分，有时还在考卷上恶搞。课余时间，我主要的乐趣就是做手工，我订了份报纸叫《动手做》，上面所有的手工制作我都亲手做过一遍。那时送礼流行送草莓，用一个塑料盒子装着，我非常喜欢那些盒子，因为可以做工具箱。我有四个这样的盒子，分门别类收集了各种工具和材料，像钳子扳手，钉子螺丝，电池导线，大大小小的泡沫塑料和木板，我都有。每逢遇到别人丢弃的这类东西，我都会把它捡回来，放到我的盒子里。都说七八岁的孩子最淘气，但我的七八岁就是在这些盒子中安静度过的，它们是我全部的天地。前段时间搬家，我还看到了这四个盒子，虽然早已落满灰尘，但里面还是装满了钉子螺丝，电池导线。我的童年很孤独，但在它们的陪伴下，却又一点也不孤独。多年之后，我对机械和计算机的热爱，也许都是源自这四个盒子。</p>
<p>这个时期还发生了一件重要的事情，我第一次跟计算机结缘了。我是班里的学习委员，每天都要给同学们听写课文里的生字，我们的语文书没有集中的生字表，生字都是分布在每篇课文的后面，每次听写，我都要捧着一本大书，翻来翻去。那时我父亲的办公室已经有了电脑，我也见过电脑打印出来的精美文件，所以就想把生字集中打印到一张纸上，直接拿着这张纸就可以给同学们听写。我父亲倒是很支持我做这件事（几年之后，他一见我坐在电脑前面就头疼），于是教我打字和排版，就在那段时间，父亲的单位组织大家学习五笔输入法，我也跟着凑热闹，晚上跟父亲一起背那些“王旁青头兼五一”之类的东西。后来，我父亲没学会，我倒是学会了，我一个一个地把生字全都打印出来，觉得电脑这东西实在是好。如果我没记错，那是一台586，DOS系统，打字用WPS，照当时看还是蛮先进的。这就是我第一次接触电脑，从此结下了不解之缘，我觉得自己特别幸运，能够在那个年龄就找到自己真正的兴趣。</p>
<p>小学四年级时，父亲给我转学了，转到市区新成立的一所优质学校。那里的学费不低，绝大多数同学都是家境富裕，而我家当时则比较落后，我是凭着学习成绩硬挤进去的。同学们整天聊着一些我没见过的玩意，电脑游戏（那时主要是“红警”和“拳皇”），高档文具，高档零食，而我则土里土气，对这些一窍不通，同学都不怎么搭理我，这一度给我造成了不小的自卑感。然而我们注意到，少年时经历过自卑的孩子，往往心里都会憋一股劲，所以那些改变世界的大野心家，往往都是身材矮小如拿破仑和希特勒。我当时憋的劲就是，我比你们懂计算机。在我的百般恳求下，家里终于在四年级期末给我买了一台赛扬500的计算机，这起初对我的影响还不算大，就是学学应用软件，玩玩游戏，还没连过网络。直到六年级那年，发生了一件大事，这台电脑坏了，拿到电脑城去修理，我跑去凑热闹，这一凑可不得了，一下子被“修电脑”这个工作给迷住了。从那时候起，我开始逃课，自习课的时候，偷偷跑到电脑城看人家修电脑。电脑城除了修电脑之外，还卖各种软件和书籍，看着看着，我就对这些有了兴趣。可是，那时家里不给我零花钱，只有姥爷不定期的给一些，再加上我谎称学校收某某费，能骗来一些攒起来，最后全部换成了各种电脑书和光盘。那时候班里流行喝百事可乐，三块钱一瓶，我非常喜欢喝，但从来都舍不得买。我的全部开销就是买书，还有每期的《大众软件》杂志，我至今都记得清楚，我买的第一本是2002年第6期，白色背景的封面。我一直买了三年，厚厚的一摞，除了有几本被我妈撕了，其余的现在还整整齐齐摆在书柜里。经常逛电脑城，以及有了《大众软件》，我的世界就完全不一样了，对计算机应用的了解也越来越多。</p>
<p>计算机爱好者往往是一些控制欲很强的人，这种控制欲体现在，他在使用程序的过程中，会忍不住想要编程序。在这段时期，我的控制欲体现出来了，想制作自己的程序，于是我自学了QBasic语言。然而不同的是，很多朋友当初学编程是为了编游戏，但我对游戏却没兴趣，只对数值和字符这些东西敏感。直到现在，我写的程序绝大多数都没有图形界面:-)  那时编的程序，主要是就替我做数学题，进行一些自动操作，等等。</p>
<p>到了初中，我的计算机水平已经能超过当时学校里的电脑老师了，于是班主任老师安排我管理教室的电脑，那台电脑装的是赛扬900处理器，Windows 98操作系统，更让我兴奋的是，那台电脑是联网的。从此我就混迹于各大论坛BBS，跟各种各样的人QQ聊天，以非常迅猛的速度了解外面的社会，想法和思维变得跟其他同学有很大不同了。初一下学期，一个很偶然的机会，我给《计算机应用文摘》杂志写了一篇稿子，从此成为了该刊的特约撰稿，直到初中毕业。我那时候的稿费是千字120元钱，每个月能发表三四千字，对于一个初中生来说，这是一个很高的收入。但是，这些钱仍然“取之于书，用之于书”，电脑书几十元一本，我从不眨眼，但是对于三块钱的百事可乐，仍然不舍得买。</p>
<p>这个时期，对于玩电脑这件事，家里的矛盾越来越激烈，我都不记得为此挨了多少打，多少骂，多少次眼睁睁地看着我辛苦攒钱买来的书被撕掉，多少次说好了要谈谈心最后却陷入争吵。初二时，父亲把家里的电脑搬走了，霎那间，我觉得自己突然变得一无所有。就在这时，我的姥爷突然提出要给我再买一台电脑，这件事改变了我许多，至今每当我想到他当年的决定，都会经历一次强烈的惊异和感动。姥爷一生节俭，吃药都舍不得买贵的，电脑在当时属于奢侈品，但他并无任何犹豫。那台电脑是我自己选的，为了省钱，是一台二手 IBM T22，再加上我帮助那个商家做网站，最后的价格是5500元，在当时算是较便宜的。此事在家里引起了海啸，大家纷纷指责，不该在我即将上初三时买电脑，但最后姥爷一个人还是坚持下来了。那种感动，我至今难忘，一位花甲老人，多么理解一个孩子的梦想。这次事件过后，我对父母一直心存逆反和隔阂，至今都没能完全消除。</p>
<p>在这台T22上，我学习编程的劲头更足了。随着不断的实践，我慢慢体会到QBasic的局限性，于是自学了C语言。实际上初中三年级这一年，我学了许多东西，除了C语言之外，还有基本的数据结构和算法，操作系统的结构，甚至还有软件项目管理。当然，那时对这些只是纸上得来，都没有什么深刻体会。这段时间我也编写了许多小程序，现在都找不到了，我记得有一键清理系统垃圾，还有管理光盘的软件等等。印深较深的是这么一个故事：我班有个同学，他妈妈每天的工作就是接收一些数据，然后套用一些复杂的公式进行计算，把算好的结果发回去，算完了就下班。她本来用的是电脑上的“计算器”，后来我帮她编了个程序，她每天到公司敲两下回车键，就可以下班了，而且从不出错。为此，我的这位同学请我吃了许多雪糕:-)</p>
<p>初中三年级，在同学们努力拼搏考重点高中时，我却完全不想升学，我想退学开软件公司。我自己做了个网站，又在论坛里拉了几个好友当员工，公司就算是开起来了，结果没过多久就倒闭了，因为一笔生意都没有。后来我又想，如果考不上高中，公司又开不起来，那我就去找工作，肯定有地方要我。除此之外，我还打算在初中毕业之前，考个微软MCSD认证专家，最好还能成为微软MVP。这些不靠谱的梦，一直持续到初三下学期开学那天。那天，我的班主任老师对我说，我这一辈子都没求过人，这回就算我求你了，能不能暂时别研究电脑了，好好学习考重点。这位班主任老师叫袁弘，是我屈指可数的几位特别敬佩的人之一。这一席话对我的感动，再加上姥爷买电脑事件对我的感动，导致我那个学期真的把心思花在了学习上。终于，我以语文满分、作文满分的成绩考上了省重中，报答了这位教语文的班主任老师。</p>
<p>上了高中之后，我遇到了一个令人哭笑不得的班主任。好在那时候我的价值观已经比较成熟，所以没有对我造成太大的影响，反而有一个好处，她几乎管不了我，我有了许多自由的时间和空间。高中的学习生活更紧张，大家都为了高考而拼命奋斗，而我却又回到了不靠谱状态，觉得最好是考不上大学，我就喜欢自学。这时候，我又遇到了一个人生的关键节点，我参加计算机奥赛得了一等奖，得到了保送大学的资格。说它是关键节点，是不言而喻的，假如我真是不上大学，可能一切都是另一番样子。这件事十分偶然，本来我都不知道奥林匹克竞赛是怎么回事，听别人说觉得挺有意思，就想去比试一下，结果直接得了一等奖。我现在觉得，其实是因为那年的题简单，我学的 C语言，它在字符串处理这种问题上比较灵活，我就是靠语言特性才得奖的。有了保送资格，我把更多的时间花在计算机上，高二又参加了一次奥赛，又是一等奖。随后我开始玩机器人，又组织一个学生社团给学校做网站，后来更不靠谱，我跑到古玩店去打工鉴定古董。</p>
<p>高中三年，我对计算机的兴趣与日俱增，而且不再对开公司和微软认证之类的感兴趣，而是开始想一些计算机科学领域的学术问题。NP是否等于P，特殊形式的数据怎么组织，图灵测试如何通过，怎样让生物进化成计算机，这都是我当时想过的。可惜那时没有博客，这些异想天开没有记录下来。但这使我有了一个明确的目标，将来要做科学研究，虽然这看上去与物欲横流的社会环境相背，但却符合了我童年时的想当科学家的梦想。</p>
<p>高中毕业时，我接到了南京航空航天大学的录取通知，没有悬念地选择了计算机科学与技术，来到了南京。上大学之前，我又拥有了一台新电脑，爸爸给我买的索尼SZ667，姥爷买的那台T22完成了历史使命，成了永远的珍藏。大学一开始，我就开始寻找我感兴趣的科研领域的老师，走上实现理想的道路。南航的刘绍翰老师热情地帮助了我，我开始做机器学习和模式分类方面的研究。现在大学生活才过去一年，要做总结还为时尚早，就说我在大学里明白的一句话吧：潜龙勿用，宁静致远。</p>
<p>20年韶华流水，浮上心头，仿佛历历在目。感谢这个世界，把我从一无所有的婴儿，培养成有性格、有梦想、有自我世界的人。我希望十年之后，我能拥有一份事业，有能力享受美好的世界。我希望十年之后，好朋友们都没离开，还能坐在一起忆往昔峥嵘岁月稠。我希望十年之后，世界能给和平一个机会，中国能实现科学与民主，社会能让每个人都快乐。我希望十年之后，我仍然拥有激情和动力，去继续开拓和创造再下一个十年。20年就这样过去了，十年后枫叶红时，让我们再来在一起，读读我的30年。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/240/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>[天齐印拓] 紫今</title>
		<link>http://skylersun.info/324</link>
		<comments>http://skylersun.info/324#comments</comments>
		<pubDate>Wed, 26 Aug 2009 13:40:00 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[文艺青年 Art]]></category>
		<category><![CDATA[天齐印拓]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=324</guid>
		<description><![CDATA[
半园紫霭，缘叶今来。
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-326" title="zijin" src="http://skylersun.info/wp-content/uploads/2010/02/zijin.jpg" alt="" width="400" height="297" /></p>
<p>半园紫霭，缘叶今来。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>人工智能与图灵测试（2. 神经语言学）</title>
		<link>http://skylersun.info/246</link>
		<comments>http://skylersun.info/246#comments</comments>
		<pubDate>Thu, 20 Aug 2009 10:01:26 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科研 Academic Science]]></category>
		<category><![CDATA[人工智能与图灵测试]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=246</guid>
		<description><![CDATA[神经语言学是Sydney Lamb教授创始的一种新的语言学学说，他反对大脑中有一种符号性的表征系统的观点，认为语言是以网络连接的方式储存在大脑中的（这不同于计算机学科的人工神经网络），这个观点在神经科学中是有依据的，神经科学普遍认为人的大脑是一个网络结构。接下来，Lamb研究了语言在神经系统中，是如何表征和运行的，为了描述该过程，他提出了“关系网络模型”。在该模型中，他定义了关系网络的基本概念、组成要素，并阐述了运作的过程，即语音是如何被层层解释到语义。该模型令人兴奋之处有两点，其一，它所表征的语言现象，与日常经验是吻合的；其二，这个模型脱离了大脑的物质基础，作为一个抽象模型，它可以用任何物理结构来还原，包括计算机。
当然，这只是一个立脚点，对于前途还不能过早下结论，过于美好的观点往往要出问题。我目前想到的问题有三：
第一，关系网络模型仅仅建立了一个语言各界面上的关系，它从神经网络的角度上，把语音上升到语义，或把语义下降到语音，在这个过程中，语法体现不出来。
第二，我们把从听到一句话到做出回答的整个过程，看成是语音先上升到语义，输入到概念子系统中进行推理，然后把输出的语义再下降成语音。关系网络模型或许能解决这个过程的两端，但是不知如何解决中间的推理过程。
第三，人类的语言现象中，有很多取决于其它参量的地方，比如说社会关系，情绪，知识储备，个人经历，身体的感官刺激等，这些参量如何在神经系统中表征，如果与关系网络模型融合，并在其中起作用，这都是现在还不了解的。
]]></description>
			<content:encoded><![CDATA[<p>神经语言学是Sydney Lamb教授创始的一种新的语言学学说，他反对大脑中有一种符号性的表征系统的观点，认为语言是以网络连接的方式储存在大脑中的（这不同于计算机学科的人工神经网络），这个观点在神经科学中是有依据的，神经科学普遍认为人的大脑是一个网络结构。接下来，Lamb研究了语言在神经系统中，是如何表征和运行的，为了描述该过程，他提出了“关系网络模型”。在该模型中，他定义了关系网络的基本概念、组成要素，并阐述了运作的过程，即语音是如何被层层解释到语义。该模型令人兴奋之处有两点，其一，它所表征的语言现象，与日常经验是吻合的；其二，这个模型脱离了大脑的物质基础，作为一个抽象模型，它可以用任何物理结构来还原，包括计算机。<span id="more-246"></span></p>
<p>当然，这只是一个立脚点，对于前途还不能过早下结论，过于美好的观点往往要出问题。我目前想到的问题有三：</p>
<p>第一，关系网络模型仅仅建立了一个语言各界面上的关系，它从神经网络的角度上，把语音上升到语义，或把语义下降到语音，在这个过程中，语法体现不出来。</p>
<p>第二，我们把从听到一句话到做出回答的整个过程，看成是语音先上升到语义，输入到概念子系统中进行推理，然后把输出的语义再下降成语音。关系网络模型或许能解决这个过程的两端，但是不知如何解决中间的推理过程。</p>
<p>第三，人类的语言现象中，有很多取决于其它参量的地方，比如说社会关系，情绪，知识储备，个人经历，身体的感官刺激等，这些参量如何在神经系统中表征，如果与关系网络模型融合，并在其中起作用，这都是现在还不了解的。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/246/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>拜访董振东教授</title>
		<link>http://skylersun.info/199</link>
		<comments>http://skylersun.info/199#comments</comments>
		<pubDate>Sat, 15 Aug 2009 06:01:13 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科研 Academic Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=199</guid>
		<description><![CDATA[我与刘宇红教授最近合作一个实验，其中用到知网系统，但我们需要计算的几个生僻词条，在目前的知网版本中却找不到。为了这件事，我们通过邮件，与知网负责人董振东教授沟通过，但一直没能彻底解决。恰逢最近我在北京，于是我就产生了拜访董教授的念头，经过电话联系，他很慈祥地说：可以，请你到我家里来。
董教授给我介绍了接下来的基于知网的研究方向，比如自动消歧。知网的自动消歧采用两种方法，一是通过自动学习，为多义词建立一个词组库，通过相邻词的语义相似度来消歧，这主要用于动词和形容词；二是为多义词的不同义项分别建立一个相关词库，通过计算语料中的周边词语与各个相关词库的相似度来消歧，该方法主要用于名词。此外，董老还给我介绍了知网新的在线工具，包括相似度计算、相关度计算和语块判别系统。
对于做科研的态度，董教授说，无论是做神经模型，还是符号模型，这都不是问题，但不要纠缠于小修小补，最关键的是敢想敢做，每做一件事就要留下一样东西。他说他有一个梦想，也是他几十年科研中不断问自己的问题，什么时候机器翻译系统能成为普通老百姓的装机必备软件。
当我提到实验中遇到的缺词问题，董教授戴上眼镜，招呼我走进书房，亲自帮我修改和讲解程序，并为我演示知网在线工具的使用方法，介绍了目前还存在的一些问题。董教授对待后生晚辈的态度之亲切，令我肃然起敬。

]]></description>
			<content:encoded><![CDATA[<p>我与刘宇红教授最近合作一个实验，其中用到知网系统，但我们需要计算的几个生僻词条，在目前的知网版本中却找不到。为了这件事，我们通过邮件，与知网负责人董振东教授沟通过，但一直没能彻底解决。恰逢最近我在北京，于是我就产生了拜访董教授的念头，经过电话联系，他很慈祥地说：可以，请你到我家里来。</p>
<p><span id="more-199"></span>董教授给我介绍了接下来的基于知网的研究方向，比如自动消歧。知网的自动消歧采用两种方法，一是通过自动学习，为多义词建立一个词组库，通过相邻词的语义相似度来消歧，这主要用于动词和形容词；二是为多义词的不同义项分别建立一个相关词库，通过计算语料中的周边词语与各个相关词库的相似度来消歧，该方法主要用于名词。此外，董老还给我介绍了知网新的在线工具，包括相似度计算、相关度计算和语块判别系统。</p>
<p>对于做科研的态度，董教授说，无论是做神经模型，还是符号模型，这都不是问题，但不要纠缠于小修小补，最关键的是敢想敢做，每做一件事就要留下一样东西。他说他有一个梦想，也是他几十年科研中不断问自己的问题，什么时候机器翻译系统能成为普通老百姓的装机必备软件。</p>
<p>当我提到实验中遇到的缺词问题，董教授戴上眼镜，招呼我走进书房，亲自帮我修改和讲解程序，并为我演示知网在线工具的使用方法，介绍了目前还存在的一些问题。董教授对待后生晚辈的态度之亲切，令我肃然起敬。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2010/01/dzd.jpg"><img class="aligncenter size-medium wp-image-28" title="dzd" src="http://skylersun.info/wp-content/uploads/2010/01/dzd-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/199/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>访问微软亚洲研究院</title>
		<link>http://skylersun.info/194</link>
		<comments>http://skylersun.info/194#comments</comments>
		<pubDate>Wed, 05 Aug 2009 05:49:26 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科研 Academic Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=194</guid>
		<description><![CDATA[七年前我在杂志上看到微软亚洲研究院，对于刚上初中的我来说，那是一个遥远的地方。七年之后的今天我走出地铁站，远望希格玛大厦上面那行“Microsoft”，它不再是杂志上的插图，我告诉七年前的自己，你的愿望实现了。
我在人工智能的研究中，不赞同基于统计的方法，但在MSRA的宋謌平老师那里，我看到了一个基于统计模型的有力成果。它是一个语音合成程序（TTS），性能非常出色，能流利读出文本，处理各种方言，配合嘴唇动作，甚至可以根据midi乐谱唱歌。这个例子表明，统计方法在工程上确实有效。后来宋老师在邮件当中说，做科研不要有偏见，如果能把神经模型与统计学习模型融合，可以减少对训练数据的需求。
随后在与林钦佑老师的谈话中，也透着这股兼容并包。林老师说，对于金融趋势，有人说涨，有人说跌，最后说对的人就成功了。对于你来说，你希望自己成功，但对于金融趋势来说，你成功还是他成功，并无大碍。科研也是如此，统计和神经两种模型，支持哪个只是个人问题，对于科学发展而言不是问题。大家各自探索，孰胜孰败，对于科学而言都是进步。我很钦佩林老师的视角，作为一个科学家，谁都希望自己是个体的成功者，能够站在整个科学界的角度去定义“成功”，这种境界是很高的。
在张峥老师那里，他听完我对神经关系模型的介绍后，提出了许多具体问题，主题仍然是放弃偏见。我们后来谈到了Minsky，他作为神经网络之父，在学术生涯后期仍然提出，智能不是单一机制的产物，而是不同策略共同作用的结果，这种多样性是必要的。最后，张老师给我推荐了《On Intelligence》，一篇取自New Yorker的文章，还有Steven Pinker的书。

]]></description>
			<content:encoded><![CDATA[<p>七年前我在杂志上看到微软亚洲研究院，对于刚上初中的我来说，那是一个遥远的地方。七年之后的今天我走出地铁站，远望希格玛大厦上面那行“Microsoft”，它不再是杂志上的插图，我告诉七年前的自己，你的愿望实现了。</p>
<p><span id="more-194"></span>我在人工智能的研究中，不赞同基于统计的方法，但在MSRA的宋謌平老师那里，我看到了一个基于统计模型的有力成果。它是一个语音合成程序（TTS），性能非常出色，能流利读出文本，处理各种方言，配合嘴唇动作，甚至可以根据midi乐谱唱歌。这个例子表明，统计方法在工程上确实有效。后来宋老师在邮件当中说，做科研不要有偏见，如果能把神经模型与统计学习模型融合，可以减少对训练数据的需求。</p>
<p>随后在与林钦佑老师的谈话中，也透着这股兼容并包。林老师说，对于金融趋势，有人说涨，有人说跌，最后说对的人就成功了。对于你来说，你希望自己成功，但对于金融趋势来说，你成功还是他成功，并无大碍。科研也是如此，统计和神经两种模型，支持哪个只是个人问题，对于科学发展而言不是问题。大家各自探索，孰胜孰败，对于科学而言都是进步。我很钦佩林老师的视角，作为一个科学家，谁都希望自己是个体的成功者，能够站在整个科学界的角度去定义“成功”，这种境界是很高的。</p>
<p>在张峥老师那里，他听完我对神经关系模型的介绍后，提出了许多具体问题，主题仍然是放弃偏见。我们后来谈到了Minsky，他作为神经网络之父，在学术生涯后期仍然提出，智能不是单一机制的产物，而是不同策略共同作用的结果，这种多样性是必要的。最后，张老师给我推荐了《On Intelligence》，一篇取自New Yorker的文章，还有Steven Pinker的书。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2010/01/msra.jpg"><img class="aligncenter size-medium wp-image-31" title="msra" src="http://skylersun.info/wp-content/uploads/2010/01/msra-300x225.jpg" alt="" width="300" height="225" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/194/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>计算机如何显示颜色</title>
		<link>http://skylersun.info/179</link>
		<comments>http://skylersun.info/179#comments</comments>
		<pubDate>Sun, 12 Jul 2009 04:34:47 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=179</guid>
		<description><![CDATA[计算机不过是一台装满了0和1的机器，但它却能显示五彩缤纷的颜色，我们不禁要问问，它是怎么做到的。
在广大计算机的心中，宇宙的一切都可以编号，这是宇宙存在的基础。要让计算机表示颜色，首先就要给颜色编号。如果每种颜色用一位数字表示，比如0表示黑，1表示白，这样就能表示2种颜色，可以画个太极图。如果每种颜色用两位数字表示，00=红，01=黄，10=蓝，11=绿，这就可以表示4种颜色，可以画张不错的儿童画。如果用更多的位，那就能表示更多的颜色，因此，我们就用这个位数来描述颜色的丰富程度，比如说，8位色是256种不同的颜色，16位是65536种，而24位是16,777,216种。要是给这么多颜色编码，就不能像4色那样乱点鸳鸯谱了，什么色对应几号，要有规则。否则，编码倒是没问题，但在显示时就不方便了。比如说，画画的时候，红黄蓝三原色能调出各种颜色，现在请你调出第100207号颜色，如果编号没有规则，你就不知道怎样调。但如果这个号码恰好表示“10份红色+2份黄色+7份蓝色”（10,02,07），你马上就可以调出来，我们就参照这样的规则给颜色编码。计算机屏幕通过发光来显示颜色，光的三基色是红绿蓝，所以要表示任何一种颜色，只要知道红绿蓝三种光的强度分别是多少。
我们把一种光的强度分成256种等级，0表示不发光，255表示最高强度，那么用三个0~255的数字就能分别表示红、绿、蓝三色光的强度。比如说，（0，0，0）表示红绿蓝都不发光，对应为黑色，而（255，255，255）就对应着白色，（100，100，100）是灰色，（255，0，0）是纯红色，等等。0~255是十进制，我们把它转换成二进制，黑色就是000000000000000000000000，纯绿色就是 000000001111111100000000，计算机就这样表示它们。由于这些数字太长，人们习惯在书写时使用16进制，黑色记作 000000，纯绿色记作00FF00，由于是用红（Red）、绿（Green）、蓝（Blue）三种光的强度来表示颜色，所以这种编码称为RGB码。下图就是一些常见颜色的RGB码。

现在颜色们有了自己的编码，计算机可以通过0和1来表示它们，下一步就是要根据号码来控制三色光的强度，把不同的颜色显示出来，这就是显示器的功能。1888年，奥地利植物学家F. Renitzer发现了液晶这种物质有一个特殊的物理特性：液晶能使通过其中的光线发生扭转，而且外电场的强度能够决定扭转的程度。作为一位植物学家，Renitzer却因为发现了液晶而名垂于世。
等等，不是说要改变光的强度吗，可液晶的作用却是扭转光线，那它有什么用呢？对于一般的光线来说，扭转确实不能改变强度，但是对于夹在两层互相垂直的偏振片之间的光线来说，情况就不同了。假如读者不了解偏振光，不妨自己搜索一下，这是很好玩的一个物理知识:-)

液晶显示器里面有一个发射白光的灯管，灯管发出的光线首先通过垂直偏振片，转换成垂直方向的偏振光。不难想见，如果这束垂直的偏振光不经过扭转，就会被前面的水平偏振片完全挡住，而如果扭转90度，就会完全通过，那么如果扭转30度、45度、60度呢？像这样，我们控制光线扭转的程度，也就控制了出射光线的强度。
出来的光线，还要经过滤色片，把它转换成红色、绿色或是蓝色。相邻的红绿蓝三股光线可以看成一组，称为一个像素。显示器给一个像素中的三股光线加上不同的电场，调出不同强度的三基色，于是这个像素就能表现出五彩缤纷的颜色了。

现在我们来举个例子吧，让一个像素显示桔色。桔色=251份红色光+134份绿色光+29份蓝色光，RGB码就是FB861D，对应的二进制形式是 111110111000011000011101。然后，主机把这串数字告诉显示器，显示器就给这个像素的三个单元的液晶分别加上对应强度的电场，使它们能把光线分别拧到相应的方向。这时灯管发出的三股白光通过垂直偏振片转换成垂直偏振光，然后分别穿过三个单元的液晶分子，被拧成了不同方向的三股斜偏振光，再通过水平偏振片，就能射出三股强度不同（分别是251，134，29）的白光来。前方等待这三股白光的，分别是红、绿、蓝三个滤色片，于是它们又被转换成了251份红光+134份绿光+29份蓝光，混合在一起，人的眼睛就看到了桔色。
]]></description>
			<content:encoded><![CDATA[<p>计算机不过是一台装满了0和1的机器，但它却能显示五彩缤纷的颜色，我们不禁要问问，它是怎么做到的。</p>
<p>在广大计算机的心中，宇宙的一切都可以编号，这是宇宙存在的基础。要让计算机表示颜色，首先就要给颜色编号。如果每种颜色用一位数字表示，比如0表示黑，1表示白，这样就能表示2种颜色，可以画个太极图。如果每种颜色用两位数字表示，00=红，01=黄，10=蓝，11=绿，这就可以表示4种颜色，可以画张不错的儿童画。如果用更多的位，那就能表示更多的颜色，因此，我们就用这个位数来描述颜色的丰富程度，比如说，8位色是256种不同的颜色，16位是65536种，而24位是16,777,216种。<span id="more-179"></span>要是给这么多颜色编码，就不能像4色那样乱点鸳鸯谱了，什么色对应几号，要有规则。否则，编码倒是没问题，但在显示时就不方便了。比如说，画画的时候，红黄蓝三原色能调出各种颜色，现在请你调出第100207号颜色，如果编号没有规则，你就不知道怎样调。但如果这个号码恰好表示“10份红色+2份黄色+7份蓝色”（10,02,07），你马上就可以调出来，我们就参照这样的规则给颜色编码。计算机屏幕通过发光来显示颜色，光的三基色是红绿蓝，所以要表示任何一种颜色，只要知道红绿蓝三种光的强度分别是多少。</p>
<p>我们把一种光的强度分成256种等级，0表示不发光，255表示最高强度，那么用三个0~255的数字就能分别表示红、绿、蓝三色光的强度。比如说，（0，0，0）表示红绿蓝都不发光，对应为黑色，而（255，255，255）就对应着白色，（100，100，100）是灰色，（255，0，0）是纯红色，等等。0~255是十进制，我们把它转换成二进制，黑色就是000000000000000000000000，纯绿色就是 000000001111111100000000，计算机就这样表示它们。由于这些数字太长，人们习惯在书写时使用16进制，黑色记作 000000，纯绿色记作00FF00，由于是用红（Red）、绿（Green）、蓝（Blue）三种光的强度来表示颜色，所以这种编码称为RGB码。下图就是一些常见颜色的RGB码。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2010/01/computer_color_all_rgb.gif"><img class="aligncenter size-medium wp-image-25" title="computer_color_all_rgb" src="http://skylersun.info/wp-content/uploads/2010/01/computer_color_all_rgb-266x300.gif" alt="" width="266" height="300" /></a></p>
<p>现在颜色们有了自己的编码，计算机可以通过0和1来表示它们，下一步就是要根据号码来控制三色光的强度，把不同的颜色显示出来，这就是显示器的功能。1888年，奥地利植物学家F. Renitzer发现了液晶这种物质有一个特殊的物理特性：液晶能使通过其中的光线发生扭转，而且外电场的强度能够决定扭转的程度。作为一位植物学家，Renitzer却因为发现了液晶而名垂于世。</p>
<p>等等，不是说要改变光的强度吗，可液晶的作用却是扭转光线，那它有什么用呢？对于一般的光线来说，扭转确实不能改变强度，但是对于夹在两层互相垂直的偏振片之间的光线来说，情况就不同了。假如读者不了解偏振光，不妨自己搜索一下，这是很好玩的一个物理知识:-)</p>
<p><img class="aligncenter size-full wp-image-26" title="computer_color_liquid" src="http://skylersun.info/wp-content/uploads/2010/01/computer_color_liquid.jpg" alt="" width="400" height="320" /></p>
<p>液晶显示器里面有一个发射白光的灯管，灯管发出的光线首先通过垂直偏振片，转换成垂直方向的偏振光。不难想见，如果这束垂直的偏振光不经过扭转，就会被前面的水平偏振片完全挡住，而如果扭转90度，就会完全通过，那么如果扭转30度、45度、60度呢？像这样，我们控制光线扭转的程度，也就控制了出射光线的强度。</p>
<p>出来的光线，还要经过滤色片，把它转换成红色、绿色或是蓝色。相邻的红绿蓝三股光线可以看成一组，称为一个像素。显示器给一个像素中的三股光线加上不同的电场，调出不同强度的三基色，于是这个像素就能表现出五彩缤纷的颜色了。</p>
<p><img class="aligncenter size-full wp-image-27" title="computer_color_pixel" src="http://skylersun.info/wp-content/uploads/2010/01/computer_color_pixel.jpg" alt="" width="400" height="354" /></p>
<p>现在我们来举个例子吧，让一个像素显示桔色。桔色=251份红色光+134份绿色光+29份蓝色光，RGB码就是FB861D，对应的二进制形式是 111110111000011000011101。然后，主机把这串数字告诉显示器，显示器就给这个像素的三个单元的液晶分别加上对应强度的电场，使它们能把光线分别拧到相应的方向。这时灯管发出的三股白光通过垂直偏振片转换成垂直偏振光，然后分别穿过三个单元的液晶分子，被拧成了不同方向的三股斜偏振光，再通过水平偏振片，就能射出三股强度不同（分别是251，134，29）的白光来。前方等待这三股白光的，分别是红、绿、蓝三个滤色片，于是它们又被转换成了251份红光+134份绿光+29份蓝光，混合在一起，人的眼睛就看到了桔色。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/179/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>第六届全国认知语言研讨会</title>
		<link>http://skylersun.info/191</link>
		<comments>http://skylersun.info/191#comments</comments>
		<pubDate>Wed, 08 Jul 2009 05:26:26 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科研 Academic Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=191</guid>
		<description><![CDATA[这是我第一次参加文科会议，主要是因为做NLP时感觉缺少语言学方面的知识背景，经冯原推荐读了刘宇红教授的著作后，对Sydney Lamb的神经认知语言学观点十分有兴趣。我报到之后，在宾馆趴了一下午，读了所有的abstract，但是有些失望，有关神经语言学的文章非常少，可见该理论在国内还没有进行广泛研究。
整个会议的主题普遍围绕传统的认知语言理论展开，国际认知语言学会的前主席Panther教授报告了有关”nice and adj.”这个结构与其它”adj. and adj.”结构在认知角度上的不同：前者不表示混合词义，nice只作为一个标志，表示说话者认为后面的形容词是positive。社科院沈家煊院士报告关于汉语中的 “名词”和英语中的“noun”的认知差别，前者是构成型隐喻，后者是实现型隐喻。关于隐喻这个问题，我认为值得人工智能研究者重视，因为隐喻是日常语言活动中必须的认知能力（lakoff,1980:3），但目前的人工智能成果却不能妥善地处理隐喻。
下午的大会发言分成两个会场，我去了图书馆会场听了熊学亮教授和张韧教授的报告，还有一个研究生做一个关于“X客”的报告，分析了黑客、极客、博客等中文词汇的认知来源，挺好玩的。结论是，“黑客”是“hacker”的音译，然后由它产生了一个造词的构式，其它的“X客”都是“黑客”的类推和本身音译的共同作用。
分组讨论的时候，我在语言哲学组，因为这个相对来说跟我的研究方向最相关，可惜没有听到什么突破性的观点。第二天上午的报告与我的研究方向离得太远，我听不懂，坐在下面如坐针毡，只好安慰自己毕竟是外行。下午的分组讨论我没去，窝在宾馆整理了一下前面的笔记。

]]></description>
			<content:encoded><![CDATA[<p>这是我第一次参加文科会议，主要是因为做NLP时感觉缺少语言学方面的知识背景，经冯原推荐读了刘宇红教授的著作后，对Sydney Lamb的神经认知语言学观点十分有兴趣。我报到之后，在宾馆趴了一下午，读了所有的abstract，但是有些失望，有关神经语言学的文章非常少，可见该理论在国内还没有进行广泛研究。<span id="more-191"></span></p>
<p>整个会议的主题普遍围绕传统的认知语言理论展开，国际认知语言学会的前主席Panther教授报告了有关”nice and adj.”这个结构与其它”adj. and adj.”结构在认知角度上的不同：前者不表示混合词义，nice只作为一个标志，表示说话者认为后面的形容词是positive。社科院沈家煊院士报告关于汉语中的 “名词”和英语中的“noun”的认知差别，前者是构成型隐喻，后者是实现型隐喻。关于隐喻这个问题，我认为值得人工智能研究者重视，因为隐喻是日常语言活动中必须的认知能力（lakoff,1980:3），但目前的人工智能成果却不能妥善地处理隐喻。</p>
<p>下午的大会发言分成两个会场，我去了图书馆会场听了熊学亮教授和张韧教授的报告，还有一个研究生做一个关于“X客”的报告，分析了黑客、极客、博客等中文词汇的认知来源，挺好玩的。结论是，“黑客”是“hacker”的音译，然后由它产生了一个造词的构式，其它的“X客”都是“黑客”的类推和本身音译的共同作用。</p>
<p>分组讨论的时候，我在语言哲学组，因为这个相对来说跟我的研究方向最相关，可惜没有听到什么突破性的观点。第二天上午的报告与我的研究方向离得太远，我听不懂，坐在下面如坐针毡，只好安慰自己毕竟是外行。下午的分组讨论我没去，窝在宾馆整理了一下前面的笔记。</p>
<p><a href="http://skylersun.info/wp-content/uploads/2010/01/6th_nccl.jpg"><img class="aligncenter size-medium wp-image-23" title="6th_nccl" src="http://skylersun.info/wp-content/uploads/2010/01/6th_nccl-300x200.jpg" alt="" width="300" height="200" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/191/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>民航飞机上为什么没有降落伞</title>
		<link>http://skylersun.info/175</link>
		<comments>http://skylersun.info/175#comments</comments>
		<pubDate>Wed, 27 May 2009 03:57:39 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[科普 Popular Science]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=175</guid>
		<description><![CDATA[今年对于民用航空来说，不是一个安稳年，每当提到民航事故，总会有人质问民航飞机上为什么不装备降落伞。其实在民航业内，飞机上不装降落伞，已是一个盖棺定论的问题，不存在什么争议。
我们把飞行中的事故分成两种情况，首先假设飞机失控了，其实这是十分罕见的事，现代民航机要想完全失控还真不容易。完全失控意味着，要么飞机进入了无法改出的危险状态（如尾旋或风切变），要么就是爆炸了，总之机身不能稳定。在这种情况下，飞机就像调酒师手中的摇壶，乘客根本无法站立，更不用说跳伞。
然而在绝大多数航空事故中，飞机都是仍然可控的，可控状态下，我们面临二选一：跳伞还是迫降，选择一个就放弃了另一个。根据统计，迫降的成功率是非常高的，通俗地说，飞机无论出了什么事最终都会落地，飞机员要做的只是让它落得轻一些，这并没有想象的那么难。举例来说，加拿大航空公司的一架波音767，在40000英尺的高空燃油耗尽，依靠无动力滑翔最终成功迫降，无一人受伤。美国阿罗哈航空公司一架波音737，机舱突然完全破损，前半段机身仅剩下地板，仍以过山车的外表迫降，仅失去了一名没系安全带的空姐。这是因为，民航机的动力和控制系统都有多套冗余，如果排除严重的人为失误，出现伤亡性事故的机率极小。波音747有四套液压操纵系统，坏掉三套仍能正常操纵飞机，波音777有两台发动机，只要一台工作就能越洋飞行。
而跳伞则情况不同了。在一个摄氏零下40度，严重缺氧的高度，一个既不是超人也不是007的普通人，打开舱门造成客舱失压，然后抱着降落伞从接近0.8马赫的飞机上跳下来，他可能既不会拉伞，也不会着地动作，也不知道落在什么地方……可以想见，这个生存机率是非常低的，远远低于迫降。
所以，迫降是发生飞行事故时的最佳选项。一个理智的人，在危机情况下会选择两害相权取其轻，而不是跳下去总比听天由命强。因为此时并不是听天由命，站在身后的是100年来无数的顶尖科学家和工程师，还有经过大量应急训练的机组团队。也许有的人说，我就不相信科学，就不相信技术，就不相信飞行员，我就相信我自己——那这就是一种癖。放弃安全来满足乘客的癖，这就不属于航空公司该做的事了。
还有的人会举出这样的例子，有的飞机在发生事故后，在低空盘旋了很久才坠毁，这个时间完全可以跳伞。但问题是，在飞机没有坠毁之前，迫降的成功期望始终大于跳伞。而坠机往往是在几秒钟内发生的，在这之前没人能够预料，所以这种事后诸葛的论断，相当于用过去发生的小概率事件指导未来，这并不具有说服力，好比你把今天的彩票头奖号码背下来，去买明天的彩票。
]]></description>
			<content:encoded><![CDATA[<p>今年对于民用航空来说，不是一个安稳年，每当提到民航事故，总会有人质问民航飞机上为什么不装备降落伞。其实在民航业内，飞机上不装降落伞，已是一个盖棺定论的问题，不存在什么争议。</p>
<p>我们把飞行中的事故分成两种情况，首先假设飞机失控了，其实这是十分罕见的事，现代民航机要想完全失控还真不容易。完全失控意味着，要么飞机进入了无法改出的危险状态（如尾旋或风切变），要么就是爆炸了，总之机身不能稳定。在这种情况下，飞机就像调酒师手中的摇壶，乘客根本无法站立，更不用说跳伞。<span id="more-175"></span></p>
<p>然而在绝大多数航空事故中，飞机都是仍然可控的，可控状态下，我们面临二选一：跳伞还是迫降，选择一个就放弃了另一个。根据统计，迫降的成功率是非常高的，通俗地说，飞机无论出了什么事最终都会落地，飞机员要做的只是让它落得轻一些，这并没有想象的那么难。举例来说，加拿大航空公司的一架波音767，在40000英尺的高空燃油耗尽，依靠无动力滑翔最终成功迫降，无一人受伤。美国阿罗哈航空公司一架波音737，机舱突然完全破损，前半段机身仅剩下地板，仍以过山车的外表迫降，仅失去了一名没系安全带的空姐。这是因为，民航机的动力和控制系统都有多套冗余，如果排除严重的人为失误，出现伤亡性事故的机率极小。波音747有四套液压操纵系统，坏掉三套仍能正常操纵飞机，波音777有两台发动机，只要一台工作就能越洋飞行。</p>
<p>而跳伞则情况不同了。在一个摄氏零下40度，严重缺氧的高度，一个既不是超人也不是007的普通人，打开舱门造成客舱失压，然后抱着降落伞从接近0.8马赫的飞机上跳下来，他可能既不会拉伞，也不会着地动作，也不知道落在什么地方……可以想见，这个生存机率是非常低的，远远低于迫降。</p>
<p>所以，迫降是发生飞行事故时的最佳选项。一个理智的人，在危机情况下会选择两害相权取其轻，而不是跳下去总比听天由命强。因为此时并不是听天由命，站在身后的是100年来无数的顶尖科学家和工程师，还有经过大量应急训练的机组团队。也许有的人说，我就不相信科学，就不相信技术，就不相信飞行员，我就相信我自己——那这就是一种癖。放弃安全来满足乘客的癖，这就不属于航空公司该做的事了。</p>
<p>还有的人会举出这样的例子，有的飞机在发生事故后，在低空盘旋了很久才坠毁，这个时间完全可以跳伞。但问题是，在飞机没有坠毁之前，迫降的成功期望始终大于跳伞。而坠机往往是在几秒钟内发生的，在这之前没人能够预料，所以这种事后诸葛的论断，相当于用过去发生的小概率事件指导未来，这并不具有说服力，好比你把今天的彩票头奖号码背下来，去买明天的彩票。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>非典型批量重命名一例</title>
		<link>http://skylersun.info/166</link>
		<comments>http://skylersun.info/166#comments</comments>
		<pubDate>Sat, 25 Apr 2009 03:32:24 +0000</pubDate>
		<dc:creator>Schuyler</dc:creator>
				<category><![CDATA[与机器斗争 Conquer Machines]]></category>

		<guid isPermaLink="false">http://skylersun.info/?p=166</guid>
		<description><![CDATA[昨天晚上熬夜敲文章，早上5点才睡，中午醒来一看手机，老板发来个任务。不知道ICML2008的网站想干啥，他们把所有的会议论文打个压缩包，158个 PDF 全用序号命名，我的任务是把它们重命名为“文章标题.PDF”。158个文件，逐个“打开-选中-复制-关闭-选中-重命名-粘贴-确定”，实在太烦了，非得与它斗争一下不可。我到 ICML 的网站上看了看，找到有一个带序号的摘要列表，其中每个条目的格式是这样的：
paper ID: 158
Localized Multiple Kernel Learning
Mehmet Gonen and Ethem Alpaydin
Recently, instead of selecting a single kernel, multiple kernel learning (MKL) has been proposed which uses a convex combination of kernels, where the &#8230;

我把这个列表存下来，然后写个小程序，把序号和对应的标题读出来，生成一个批处理。
using namespace std;

#include&#60;fstream&#62;
#include&#60;string&#62;

int main()
{
        ifstream file_in("ICML2008.txt");
       [...]]]></description>
			<content:encoded><![CDATA[<p>昨天晚上熬夜敲文章，早上5点才睡，中午醒来一看手机，老板发来个任务。不知道ICML2008的网站想干啥，他们把所有的会议论文打个压缩包，158个 PDF 全用序号命名，我的任务是把它们重命名为“文章标题.PDF”。158个文件，逐个“打开-选中-复制-关闭-选中-重命名-粘贴-确定”，实在太烦了，非得与它斗争一下不可。我到 ICML 的网站上看了看，找到有一个带序号的摘要列表，其中每个条目的格式是这样的：<img src="http://skylersun.info/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" mce_src="http://skylersun.info/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" class="mceWPmore mceItemNoResize" title="更多..."/></p>
<blockquote><p>paper ID: 158<br />
Localized Multiple Kernel Learning<br />
Mehmet Gonen and Ethem Alpaydin<br />
Recently, instead of selecting a single kernel, multiple kernel learning (MKL) has been proposed which uses a convex combination of kernels, where the &#8230;</p>
</blockquote>
<p>我把这个列表存下来，然后写个小程序，把序号和对应的标题读出来，生成一个批处理。</p>
<pre class="cpp" name="code">using namespace std;

#include&lt;fstream&gt;
#include&lt;string&gt;

int main()
{
        ifstream file_in("ICML2008.txt");
        ofstream file_out("rename.bat");

        string str_read;
        string str_original;
        string str_converted;

        string::size_type none=-1;
        string::size_type position;

        while(!file_in.eof())
        {
                getline(file_in,str_read);

                if((position=str_read.find("ID:",0))!=none)
                {
                        str_original=str_read.erase(0,position+3)+".pdf \"";

                        getline(file_in,str_read);

                        //erase the chars which are unusable in a filename
                                while((position=str_read.find_first_of("\\:/",0))!=none)
                                str_read[position]=' ';

                        str_converted=str_read+".pdf\"";

                        file_out&lt;&lt;"rename "&lt;&lt;str_original&lt;&lt;str_converted&lt;&lt;endl;
                }
        }

        return 0;
}</pre>
<p>编译运行这个程序，就会得到一个批处理文件，一共158行，每行都是这样的格式：</p>
<p>rename 111.pdf “Preconditioned Temporal Difference Learning.pdf”</p>
<p>双击运行这个批处理，任务完成 。</p>
]]></content:encoded>
			<wfw:commentRss>http://skylersun.info/166/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 2.161 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2010-03-10 16:28:17 -->
