2007年07月
今年OSCON的幻灯片出来了。个别讲座还有录像。可以到这里下载。 正在看Simon Peyton Jones关于Haskell的讲座幻灯片。开头四张编程语言生命周期的曲线很有意思。血淋淋的啊。大部分研究型语言三年内夭折,用户不超过50人。大部分成功的研究型语言8年内寿终正寝,用户不超过100人。100万用户数是语言不朽的底线。Haskell度过了差不多10年的漫长平台期。现在好像焕发了第二春(总觉得programming.reddit.com功不可没。每天都有关于Haskell的帖子。)。设计编程语言的老大们,现实是残酷滴。让自己的语言流行和中六合彩有一拼。不过用来学习和找乐倒还不错。
阅读全文>
发表于 @ 2007年07月28日 13:53:00|评论(loading...)|编辑
为了读Concepts, Techniques, and Models of Computer Programming这本书,去下了Mozart,一个支持编程语言Oz的开发系统。照这书里的指点,运行Oz.exe,居然看到Emacs窗口弹出来。瀑布汗。。。这就是Mozart编程界面啊。怪不得只要8MB的安装空间。这时才注意到书里直接就用Emacs的黑话了,什么编辑器分成两个frames。我就纳闷,如果俺不用Emacs怎么办呢?为这么彪悍的编程系统,失意体前屈一把,也算说得过去吧?
刚看完书的前言,已经被撩拨得心痒难忍。这本书和诸如SICP, PAIP, TAOCP这类大部头一样,也有自己的简写,CTM。Lambda the Ultimate上的常客们热荐这本书。LtU是理论牛人(比如Erik Meijer)和理论叶公(比如俺)扎堆的地方,推荐的书多少都偏重理论、公式满篇。但从前言来看,CTM注重讨论对程序员重要的编程概念。摘几条有意思的片段:
作者选取计算模型的主要标准是对编程实践有没有用
什么时候向编程语言里加入新概念取决于“创造性扩展原则”:当程序出于技术原阅读全文>
发表于 @ 2007年07月28日 07:17:00|评论(loading...)|编辑
上学最宝贵的收获之一是结交学识过人的朋友。自己闷头学得山穷水尽时,高手轻轻一句点拨,眼前便峰回路转,柳暗花明。每次上完课,有幸和朋友小聚,请教弱智问题,听朋友妙语解惑,实在是难得的人生乐事。读The Little Schemer,也有同样的感受。读The Little Schemer的过程,就是被良师引导的过程。
用作者的话说,The Little Schemer是一本教人理解计算本质的书。编程语言Scheme不过是传道的载体。书的体例独特。每页分成两列。每列寥寥几行代码,数段散句。左边一列问个问题。右边一列给出答案。作者就用这种轻松对话的形式讲解递归和函数编程。例如下面的截图。
这本书最吸引我的地方是它讲解的方式:书里仿佛没有什么难点,也没有长篇讨论。每章都是逐层推进的问题和相应的解答。比如翻看书第一页,就是“atom是不是atom?”。我差点以为买了本缺页的书,下意识的向前翻了一下,看是不是漏掉了开头。J 在这些精心设计的例子启发下,我们自然地总结出编程的概念和方法。一切水到渠成。和朋友讨论做报告的技巧时,我们的口头禅是“Don't tell. Show.”阅读全文>
发表于 @ 2007年07月27日 15:01:00|评论(loading...)|编辑
Jim Gray离奇失踪快半年了。 Wired上有篇文章介绍Jim Gray和搜索他行踪的活动。虽然题目叫高科技搜索硅谷传奇人物内幕云云,文章重点不是搜索用到的技术和人力,而是Jim Gray的生平,他生活的不同侧面:朋友,导师,丈夫,传奇高手。值得一读。阅读全文>
发表于 @ 2007年07月24日 13:47:00|评论(loading...)|编辑
好像最近C++标准地下工会在公司附近开会,所以我们上班时偶尔可以看到工会成员矫健的身影。我们也近水楼台,得以听到关于C++0x进展的一些科普报告。上次Bjarne Stroustrup做了关于泛型编程的讲座后,Symantec实验室的Michael Spertus也做了一个关于C++ 0x里垃圾收集的讲座。Michael Spertus当年写出了IBM PC上最早的C编译器,也是C++ 0x里垃圾收集器的主要倡议人。
Michael从什么是GC开始讲起。三言两语后,谈到在C++ 0x里加入GC的动机。一是许多数据结构,对象,或者资源的生命期难以事先确定、静态管理。我们需要某种形式的动态管理技术。很多老大以为C++高手的标志之一是不需要GC。如果这样想,Unreal的Tim Sweeney就笑了。Unreal引擎里就大量使用GC。如果一个系统需要管理大量对象,要求高吞吐量,但可以容忍偶尔的系统延迟的话,GC是颇为不错的工具。所以3D/建模,2D图像处理等计算都可以用到GC。第二个理由非常有煽动力:帮助C++程序清除内存泄露。我们不必在C++里排斥人肉内存管理。问题是,人肉内存管理阅读全文>
发表于 @ 2007年07月23日 11:56:00|评论(loading...)|编辑
从Reddit看到的。BBC报道Alberta大学的一个研究小组号称解决了双陆棋(跳棋)(checker, 又叫draught),他们的程序可以保证每盘棋是胜局或者平局。值得注意的是,这个研究小组用的方法相当“粗暴”:计算机集群遍历所有的可能对局(一局棋大概有1020种可能性)后,存下对局过程备查。程序在实际对局时,根据局面选择最佳步骤,并且预测并证明可能的结局。有兴趣的老大可以到这里实时体验一下。
这套解决办法倒符合Google创始人Larry Page对AI的预见:当AI成为现实的时候,我们会看到大量的计算。不是科学家在白板上勾画出的巧妙算法。就是大量的计算。看看我们自己的程序,DNA,压缩后不过区区600MB,远小于现代操作系统的尺寸,但我们的模式匹配能力轻易超越任何一台计算机。所以Larry猜真正的AI来自于海量的计算能力,而不是什么精绝的算法。说到模式匹配能力,可以到这个网站体验一下:我们可以轻易地分辨出那些简单人形的性别,体型,甚至情绪。
另外一方面,海量数据的收集和处理也是非常有趣的问题。比如怎么自动遍历每种棋局,怎么组织得到的棋谱,和怎阅读全文>
发表于 @ 2007年07月20日 05:58:00|评论(loading...)|编辑
想知道细节的,可以直接到wg21的网站上看论文。这里是零散的笔记。
今天Bjarne Stroustrup到公司来做关于C++ 0x泛型编程的讲座。秉着不吃鸡蛋也可以看看母鸡的原则,我还是提前20分钟去前排占了个位子 —— 虽 说我们实验室除了编译器部门和数据库部门狂用C++外,主要还是Java作坊,我还是不能低估了这群老大赏鸡的好奇心。虽说有了心理准备,大家热情之高还是吓了俺一跳:讲座开始前300多人的大厅居然基本满了。
没有什么开场白。Bjarne直切主题,高唱Template的赞歌:template灵活,通用,时间和空间的性能良好,广泛用于现代C++类库的构建,高性能C++类库的构建,和元编程。接着过度在类库的问题。一是亲者痛仇者快的编译错误信息。模板的编译检查在扩展以后做,错误信息总是庞大繁杂,难以理解。用g++编译过list list; sort(list.begin(), list.end())的老大们肯定对2K字节的出错信息记忆深刻。二是overloading不好用。三是不少人滥用各种奇技淫巧,写出花哨但脆弱的代码。Bjarne说很多老大看到templat阅读全文>
发表于 @ 2007年07月17日 13:28:00|评论(loading...)|编辑
就是把习题当成项目来做。十年寒窗。半世煎熬。习题做完,世界随之改变。例子:A = B这本200来页的书(免费下载。作者是好心银啊),解决了《编程的艺术》上一道难度系数为50的习题:自动化多维几何级数的求和。如果有封闭解,则自动找到该解。不然自动证明无解。这好比20年前Wolfman的Mathematica搞定自动积分,号称机器不能积的,人肉也不用想。又好比优化编译器生成人肉编译器们望尘莫及的全局优化代码。众多老大多年积累引为自豪的技巧转眼成为自娱自乐的玩具,价值可比1949年太祖登位前的法币。技巧贬值事小,附着于技巧上的汗水,骄傲,地位,以及掌控未来的安全感也烟消云散恐怕更有杀伤力。所以愤怒和抵制情绪就象巴普洛夫狗的唾液一样自然分泌。一将功成万骨枯。世界就这么残酷。工业革命萌芽时疯狂打砸自动纺织机器的英国纺织工人们想必早有体会。历史上喜剧也总在重演。我们至少已经看过机器语言高手们对汇编的鄙视,汇编语言高手们对C的不屑,C语言高手们对使用垃圾收集器的愤怒。靠,又扯远了。还是说回这本书。
做过算法分析的老大们都知道,求和是门诡异的艺术,不然Concrete Mathematics阅读全文>
发表于 @ 2007年07月14日 00:52:00|评论(loading...)|编辑
从这个论坛上看到的。莫比乌斯变换是一个简单的函数,f(z) = (az+b)/(cz+d)。这里的a, b c, d, z都是复数,满足条件ad-bc != 0。这段录像展示了f(z)的几何意义。对球面投影时球面旋转造成平面翻转的演示部分最为精彩。看不出一坨简单的公式,也能描述球面投影里看似复杂的关系。
阅读全文>
发表于 @ 2007年07月09日 13:43:00|评论(loading...)|编辑
从三表的博客看到的。 去年初看到天涯上的连载,一口气读完已经写好的几十节后,就陷入这个超级大坑。不仅自己读,还在领导做饭时念给领导听。我俩无数次为曹三的精彩桥段狂笑。这年头少见这类历史文章了,古文写得这么流畅雅致,调侃得那么到位,抖包袱抖得那么痛快,旁征博引得那么出人意料。用三表的话说,就是“还木乃伊般的史料于血肉”。现在好,不用跳坑了。阅读全文>
发表于 @ 2007年07月07日 02:52:00|评论(loading...)|编辑
发表在《程序员》2007年7月刊上。不log上写帖子不用考虑版面限制,所以这里的帖子比发表的啰嗦点。赵健平编辑,Jacky,和刘未鹏都给了我很多帮助,在这里一并谢了。免费的Scheme实现很多。我用的是PLT Scheme,可以到这里下载。PLT Scheme的IDE(Dr. Scheme)支持Emacs的键盘绑定,用emacs的老大们应该喜欢。Dr.Scheme内置中文支持:
下面是正文:
不能影响你思考方式的编程语言不值得学习 – Alan Perlis [1]
不少朋友问,为什么要学Scheme这样无数括号包裹的语言。答案很简单:帮你理解计算的本质,成为更优秀的程序员。Scheme好比大还丹。没人拿药丸儿当板砖拍人,但服了它却能指望十步杀一人,千里不留行。
1975年问世的Scheme是Lisp方言。所以不妨从Lisp谈起。Lisp是一门传奇语言,诞生50年,仍然影响深远。程序员们似乎不断“发现”Lisp里简单却深刻,浅显但强大的特性,并应用到不同地方,取得非凡成就。比如最近热火的Ruby、Python、以及JavaScript中许多为人称阅读全文>
发表于 @ 2007年07月03日 13:49:00|评论(loading...)|编辑