早上上班,听Software Engineering Radio对Joe Armstrong的访谈。Software Engineering Radio办得真不错。请来业界风云人物娱乐大众。访谈前主持人做了功课,提的问题颇为有趣,引得被采访着侃侃而谈。上期对Galen Hunt的访谈也挺精彩,把Singularity OS吹得比Singularity还有卖点。
Joe在谈到并发编程对程序员冲击时提到2006年的新闻:2010年Intel会推出32核的CPU Keifer。到时候,写惯顺序处理程序的程序员在老板面前抱怨性能问题时需要三思。因为老板到你机器上一看,保证怒从心头起,恶向胆边生:靠!你丫才用了3%的CPU cycle,也好意思说遇到性能问题!想来一枚对并发编程无所谓的程序员,听了这段话应该对并发编程兴趣大增吧?
除开便于跟踪状态出错地点外,我以前一直奇怪Erlang的变量只能赋值一次的原因。要说支持合理并发,进程间禁止共享数据,强化消息传递就行了。进程内还是可以支持私有状态嘛。结果Joe说Erlang变量赋值的规则是当年用Prolog时传承下来的风格,并没有特别的原阅读全文>
发表于 @ 2008年03月21日 02:03:00|评论(loading...)|编辑
接着八卦前先回答老大们直指灵魂的问题。不就是系统状态遍历的问题么?干嘛非得用什么时序逻辑、模型一类的形式化手段啊?搞得比陈凯歌还深沉。做人不能这么无耻不是?找个真正的程序员,放出手里的蝴蝶不就搞定了?
嗯,很多程序的确可以靠程序达人强大的自觉和天才的排错能力搞定。问题是,模型检验的对象是高并发复杂系统(比如说1020个状态),目标是绝对可靠地查出系统的错误,既不错杀三千,也不放过一个。这些系统失败时的代价也高昂。奔腾94年的FDIV错误花掉Intel至少5亿美元。偏偏我们对并发系统编程也没有什么特别有效的手段,不然大家也不至于对Heisenbug津津乐道了。我们在这种情况下怎么能全靠自己的直觉?何况直觉有时相当不可靠。在这篇让人崩溃的论文问世前,谁能想到在一个异步多进程拥有可靠网络的的分布系统中,哪怕一个出错的进程就能所有进程无法通过消息传递对一个值达成共识呢?当我们需要确保设计无错的时候,形式推理非常称手的工具。有些老大可能不知道,我们只所以能放心使用常用的数据结构和算法,多少也因为那些算法经过了严格的证明。当初Purely Functional Data St阅读全文>
发表于 @ 2008年03月18日 10:34:00|评论(loading...)|编辑
2007图灵奖和模型检验不知道长达半年的疯狂加班是否损害了自己的心理健康。回顾过去几个月,似乎除了工作嘛都没干。人仿佛颓了,觉得时光了无意义地飞逝,过去半年的泰半记忆好像盛夏阳光里的冰块,蒸发得不剩一丝水汽。幸好不是全无亮点,比如看到好朋友幸福无比地结婚。中学好友到家里盘桓月余,也是一大快事。Steve McConnell在Rapid Development里的案例分析里提到death march之后程序员往往大批离开。想不到这次亲自体会了一把,人生又完整了一点。过去几周一系列戏剧性的事件让我仔细思考了一下激励团队士气的问题,也算小小的收获。跑题了。本来想说什么来着?对了,图灵奖和模型检验。2007年的图灵奖授予Edmund M. Clarke, E. Allen Emerson, and Joseph Sifakis,表彰他们在模型验证方面做出的开创性贡献。前段时间白天忙项目,晚上改简和历准备面试,也就没有心情八卦。刘江老师在他的博客里做了详细介绍,在这里推荐一下。关于几位大牛,俺没有什么补充的,就八卦一下他们的研究方向:模型检验。模型检验是计算机科学理论与实践结阅读全文>
发表于 @ 2008年03月03日 11:00:00|评论(loading...)|编辑
从LtU上看到的。这张图根据CTM的思路,勾画了不同编程范式的特性和联系。方框代表某种编程范式。箭头边的黑体字表示箭头上方编程范式的代表性语言。以“+”为前缀的斜体小字是一种编程范式过渡到另一种编程范式需要的语言特性。CTM从阳春版的核心语言(kernel language)开始,逐步解释语言不足之处,并由此加入新的语言特性,最后就得到了几乎完整的语言—Oz。这就是为什么Oz出现在多条分支的末端。对学习编程语言没有兴趣,又想了解不同编程范式的老大们,可以专攻Oz了。:-) 奇怪的是SQL居然在命令式语言分支的末端。作者大概是值Trans-SQL一类的语言吧。
阅读全文>
发表于 @ 2007年08月20日 23:10:00|评论(loading...)|编辑
通过Programming Redit,从这里看到的。Amazon.ca果然发飙了,Lisp In Small Pieces软皮本才3.95加元。对比一下amazon.com上同样的书,50美元。怪不得冲到amazon.ca排行榜的第二。顺便扫了一眼排行榜,看到那本龌龊的The Secret居然排名第7,和amazon.com上一样。看来在心想事成不劳而获这坨美梦面前,南北同心。这本The Secret一度在amazon.com上排行第一。用书网站上(嘿嘿,网站地址我就不给了。嫌我自虐得不够的老大可以自虐地去google)的话说,这本书包含了宇宙中一切快乐,财富,健康,爱情,等等的终极秘密。历史上的伟人们,远到柏拉图,近到爱因斯坦,都知晓这个秘密。他们的人生也因为这坨秘密而彻底改变。。。这坨秘密是什么嗫?就是所谓的吸引力定律(Law of Attractions)。简单说,就是这个世界因为你的思维而重组。调动自己的思维,向宇宙发送你的能量信息,你就可以予取予求乐。。。 算了,还是说回Lisp In Small Pieces。俺向来觉得,看书时觉得懂了不是真懂,因为做题时阅读全文>
发表于 @ 2007年08月09日 07:55: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...)|编辑
就是把习题当成项目来做。十年寒窗。半世煎熬。习题做完,世界随之改变。例子:A = B这本200来页的书(免费下载。作者是好心银啊),解决了《编程的艺术》上一道难度系数为50的习题:自动化多维几何级数的求和。如果有封闭解,则自动找到该解。不然自动证明无解。这好比20年前Wolfman的Mathematica搞定自动积分,号称机器不能积的,人肉也不用想。又好比优化编译器生成人肉编译器们望尘莫及的全局优化代码。众多老大多年积累引为自豪的技巧转眼成为自娱自乐的玩具,价值可比1949年太祖登位前的法币。技巧贬值事小,附着于技巧上的汗水,骄傲,地位,以及掌控未来的安全感也烟消云散恐怕更有杀伤力。所以愤怒和抵制情绪就象巴普洛夫狗的唾液一样自然分泌。一将功成万骨枯。世界就这么残酷。工业革命萌芽时疯狂打砸自动纺织机器的英国纺织工人们想必早有体会。历史上喜剧也总在重演。我们至少已经看过机器语言高手们对汇编的鄙视,汇编语言高手们对C的不屑,C语言高手们对使用垃圾收集器的愤怒。靠,又扯远了。还是说回这本书。
做过算法分析的老大们都知道,求和是门诡异的艺术,不然Concrete Mathematics阅读全文>
发表于 @ 2007年07月14日 00:52:00|评论(loading...)|编辑
为什么大家一放假(还不是我放), 俺就跟打了鸡血一样兴奋,拼命灌水嗫?Coding Horror(这哥们儿惊人高产,估计每天直接向血管注射Espresso)的新帖子科普了一把贝叶斯理论和Markov链。这两年机器学习的成功应用越来越多,人们对它的依赖也越来越重。毕竟现在信息太多,而我们真正需要的是知识。让程序帮我们发现知识自然成为应用热点。一微软高官跳槽到Google后说,相比微软,Google在更高的抽象层思考。在Google里,贝叶斯过滤相当与微软的if else。嘿嘿。所以这两坨理论受人追捧也不新鲜。新鲜的是Coding Horror提到一坨调查,用下面这道简单题目考了很多医生,居然只有15%的答题人做对。结论是贝叶斯推理和直觉相悖,不容易自然掌握。很多人学而不懂,懂而不会,会了就忘。
参加常规检查的40岁女人中,1%有乳腺癌。80%的乳腺癌患者的X-射线诊断结果呈阳性。确诊没有得乳腺癌的人中,也有9.6%的人X-射线诊断结果呈阳性。如果一个40岁妇女在常规检查中X射线诊断结果呈阳性,她的乳腺癌的几率是多少?
朋友修了一门概率入门。教材前言提到一道Monty Ha阅读全文>
发表于 @ 2007年05月02日 01:13:00|评论(loading...)|编辑
上篇帖子里聊到Sussman认为构造出健壮软件需要我们的系统支持continuation, 回溯,和生成-测试的方法。对生成-测试方法最直观简单的方式是为系统提供多项输入或结果。系统一个一个地测试这些输入,并接受符合要求的一个。Sussman举了一个例子:平方根函数通常返回正根,而抛弃那个负根。那按照生成-测试的方法,一个平方根函数应该将负根和正根一起返回,然后由系统决定到底哪个根更好。后来他进一步提到(第20页最后一段)可以返回正负根的AMB值。昨天写帖子写得头晕眼花,竟然忘记讨论这坨精彩的函数(编程意义上)。今天补上。我们可以看到一个简单(简单不等于浅显哈)的抽象,居然能实现众多美妙的功能。一个看似无意创造的玩具,竟然是有助于揭示构建辉煌软件大厦的秘密。
AMB这个操作符历史久远。AI大牛,LISP的奠基人,John McCarthy在这篇1961年的论文里首次提出了模糊函数(ambiguous function)。我们一般把这个函数简写为AMB。似乎最近俺读的文章也好,书也好,都越来越年代久远。不过不怕打击喜欢追新的老大们:现在流行和将要流行的技术背后的理念都至少有20年阅读全文>
发表于 @ 2007年04月23日 14:00:00|评论(loading...)|编辑
什么是牛人灌水的榜样?看看这篇Peter Norvig在飞机上写的灌水文章就知道了。20行Python代码,直观应用贝叶斯定理,一个阳春版的Google拼写纠错就出来了。80%到90%的准确率。当然,当然,单词的模型也是一个大头,不过这不影响这篇文章的价值。作者反复强调建立对问题的直观理解也值得注意。都是妈生的,银和银差别咋恁大嗫,大兄弟?这两天灌了好几篇水,已经用光HP和RP,没有兴致长篇大论介绍了。有兴趣的老大看原文吧。长安街裸体倒立穿鱼网袜追公车攀爬红绿灯吐血推荐。
P.S., 俺老为用错fewer vs less而惭愧。看programming.reddit.com上的评论时发现,原来也不用那么惭愧老:
阅读全文>
发表于 @ 2007年04月10日 12:23:00|评论(loading...)|编辑