2007年05月
刚看完Heroes第一季大结局。原来Heroes是一思想品德教育之青少年励志节目,告诉我们家庭不可替代,爱心战胜一切,骄傲导致失败,粗心酿成大祸。这点还不如Nicolas Cage的新片Next。Next好歹告诉我们一连串的局部优化不一定让我们得到全局最优结果,比如贪婪算法只适用某些情况,比如敏捷开发推崇的频繁迭代不能保证得到稳定适用的架构。
我想说什么来着?对了,代码民工养成计划。前两天在Reddit上读到Mark Tarver一篇颇有意思的文章,Hackers and Fighters。文章回答了新闻组上提出的一个问题:对于从事编程这门有前途的手艺,是一桌一椅一电脑自度即悟,还是在学校里若干年才能明心见性,师度成佛?
在Mark Tarver看来,靠大量编程横练出来的高手们是实战派,好比街头打架出身,讲究招招见血。学院派的好比武馆出身,往往拳头不如嘴硬,搞不好就成了只讲究"寸止",被泰国人打得满地找牙的传统空手道。一般来说街头喋血的老大们可以轻松干掉武馆的毕业生。但能够开宗立派,睥睨武林的,还是骑墙派:既深研武道,又身经百战。文章挺好看,于是俺又顺藤摸到作者另外阅读全文>
发表于 @ 2007年05月23日 07:53:00|评论(loading...)|编辑
从 Joe Marshall论证编程是艺术的文章上看到的。编程到底是不是艺术已经快变成继编程语言和Emacs vs Vi之后另一Flame War话题。有兴趣的可以去看reddit的讨论。有意思的是一段漂亮的代码,实现SICP上一坨练习题1.3:
实现一个带三个参数的函数。这个函数返回三个参数中最大的两个参数的平方和。
题目用来训练学生对条件分支的理解。常规的解法是(迎合一下各位老大,改成C了):
int sum_square_largest(int x, int y, int z){
if(y > x && z > x){
return y * y + z * z;
}
if(x > y && z > y){
return x * x + z * z;
}
if(x > z && y > z){
return x * x + y * y;
}
}
但Joe老大给出了一个非常漂亮的解法。简洁直观,巧妙地利用递归大幅简化判断。
int 阅读全文>
发表于 @ 2007年05月16日 13:33:00|评论(loading...)|编辑
坚决鄙视一介绍Prolog就用家谱树做例子的帖子/教材/指南。跟我八辈子不搭界的某银的家谱关我P事啊?就算自己的家谱。我爷爷的姑姑的侄儿的表姐的大舅子关我P事啊?
和朋友聊到用Prolog实现上次借助amb解决的谜题。Prolog内置了搜索和裁剪。写出的代码近乎琐碎,根本不需要amb。想想看,用amb时,那些描述约束的语句(调用must()函数的那几行)在选择语句之后执行,但竟然能左右之前被执行的语句的执行结果。而所有的细节都被封装在一个平淡的callcc里面。程序员可以专注于描述问题,而不用考虑代码执行的细节(在某种程度上),甚至不用考虑代码执行的顺序,这是何等强大的抽象和表达能力。而Prolog把这种抽象能力在语言级别实现,更进一步。只不过上次用和伪代码无异的Ruby代码都让很多老大望而却步,用句法和语义与流行编程语言迥异的Prolog不是更费力不讨好?再说代码本身也不出奇,不能给已经知道Prolog的老大们带来快感,用作简介恐怕又不够周详。不过既然写出来了,就忍不住手痒想贴出来。典型的egoblogging。先鄙视一下自己。
Prolog也是门“古老”的语言。Pro阅读全文>
发表于 @ 2007年05月15日 13:52:00|评论(loading...)|编辑
洪峰的黑客道在这里。没有在中文媒介上看到相关报道,而是在Oreilly的Python DevCenter博客上看到的。如果是旧闻,只能说明俺自己人品不好。黑客道是洪峰成立的培训组织,用来培训功力扎实的程序员,尤其是热衷开源的程序员。这里的黑客用这个词的本来意思,指功力深厚的程序员,而不是好莱坞化或者生活里异化的破解怪人。这里有黑客道的课程目录,内容挺吸引人。从基本的汇编和C语言到用C构造Scheme解释器和用Scheme语言构造C编译器。从底层的体系结构到抽象的逻辑编程,都有所涉及。用到的范例从简单的CGI程序扩展到复杂的内核编程。这年头用Lisp/Scheme教人编程的还真少见。不过掌握超越现有工具的手段和思想从来都应该是程序员追求的目标。排除语言的干扰,专注编程的本质,大概也是选取Lisp/Scheme的原因。当然,超前的技术并不等于新的技术。洪峰教程里的8段以上东东并非新鲜玩意儿,只不过很多程序员不加注意而已。哪位老大要教训俺不流行的东西没必要学就免了。用成败论英雄从来都是目光短浅的行为。且不说重要的思想往往需要人们长时间的理解才得到重视(比如这段录像提到Curry-Howar阅读全文>
发表于 @ 2007年05月09日 07:54:00|评论(loading...)|编辑
杜琪峰的脸皮够厚,把20分钟的短片拍成两小时的《放逐》。难道杜的前生是注水猪肉贩子?吴彦祖在《门徒》里因为不堪忍受空虚,不惜吸毒。其实如果他看《放逐》,才知道空虚不算什么。当然,本着领导不喊走,自己不开口的原则,我还是蜷在沙发上,和领导有一搭没一搭地看完了这部大闷片。为了解闷,一边看一边用OpenLaszlo写了一个原始版本的生命游戏,用Conway版的23/3规则,权当熟悉下工作中将要用到的OpenLaszlo。游戏本来简单,OpenLaszlo的文档也组织得不错(可惜没有索引,过于诡异),所以游戏很快写玩。OpenLaszlo还挺好用。它的约束系统和事件模型直观。基于View的GUI系统也简单明白。基本上看看指南就可以上手。Runtime也足够稳定。45x45的20像素见方的网格,200毫秒执行一步模拟,没有停滞的感觉。CPU的消耗稳定在50%(单核50%。双核的CPU上消耗再大也是50%,也许说明OpenLaszlo的运行时不能利用双核)。看着屏幕上不停变幻的黑格子绿格子,又有了大学里第一次写出生命游戏的感觉。高中时读关于混沌的书(好像叫《从混沌到有序》,不确定是不是《第阅读全文>
发表于 @ 2007年05月05日 02:09: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...)|编辑
MiX07上宣布的。DLR = Dynamic Language Runtime。DLR和IronPython全部开源,可以到codeplex下载。有了DLR,在.NET上开发动态语言的工作可以简化许多。目前DLR支持Python, Ruby, JavaScript,和VB,只能在Silverlight下运行。不过把支持面扩展到普通CLR运行时应该只是时间问题。微软的CLR已是牛B的运行时,有一流的GC,高效的JIT,完整的类型系统,和相对强健的安全机制。DLR在CLR的基础上又加入对动态类型的支持。在DLR上开发的动态语言可以共享这些基础功能。这非常重要。光开发高质量的GC和JIT就需要好几代程序员和计算机科学家忘我工作,而现在牛人们不用再为这些基础设施耗费额外的精力,可以专注于语言的设计。DLR上的动态语言编译成IL的字节码后,可直接在CLR上运行。在俺看来,这才是真正的杀手卖点:动态语言们能够共享.NET庞大的类库。Ruby+LINQ,多爽啊!一门语言光有炫目的功能是不够的。语言背后的平台本就是语言的一部分。功能完善、运行稳定的一整套类库向来是做大型系统开发的老大们考虑的重点阅读全文>
发表于 @ 2007年05月01日 13:31:00|评论(loading...)|编辑