Steve McConnell的博客帖子。详述了程序员产率相差10倍的来历。插草标 卖身推荐。引用一段:80年代中期,波音上了一坨重要项目。80枚程序员参与其中。项目不顺利,眼看要错过一坨不容错过的最后期限。为了保证该项目成功,波音调走了这80枚老大,请来一个人。于是这枚老大以一人之力,按时按量交割项目。
剩下的问题是:我们怎么才能培养出这种一击必杀的能力?
阅读全文>
发表于 @ 2008年03月28日 21:42:00|评论(loading...)|编辑
从傅国涌的 民国往事看来的。那个时代的风骨啊。按理说不应该全文转帖,但是考虑到牛博上反动文人们随时会被和谐,就破例抄在这里了。CSDN的大大们放心,这篇文章一点都不反动。“人各有志,给分六十” 物理老师魏荣爵在学生谢邦敏富的试卷上赋诗一首:“卷虽白卷,词却好词。人各有志,给分六十。” 天津南开中学名动天下,在抗战前后创办于沙坪坝的重庆南开中学,在“允公允能”的校训下,也有无数值得莘莘学子追忆的往事。经济学家吴敬链回忆:“我虽然只在南开念过两年书,但南开给予我的基本训练方面的影响,却是极其深远的。除语文、数学等功课外,从逻辑思维、语言表达,‘公民’课上关于如何开会、如何选举、如何表决的训练,……都使我终身受用不尽。总之,就我的亲身感受而言,南开教育之所谓的‘高贵’,指的并不是生活上的奢侈和安逸,也不是目中无人和颐指气使,而是对于德、智、体、美四育并进的高素质要求。”南开中学自编国文课本,首席语文教师孟志荪是主编之一,蒋介石所喜欢的王阳明一篇也未能入选,曾国藩家书也只选了一篇。蒋介石几次亲临沙坪坝看望张伯苓,“未闻校方出来组织三呼万岁之类的举阅读全文>
发表于 @ 2008年03月08日 00:50:00|评论(loading...)|编辑
Joe Armstrong 在他的新书Programming Erlang里提到我们不该随便应用函数返回高端函数的技巧,因为这个技巧容易让代码难以分析和调试。但是也有一些明显的例外,比如说构造parser combinator。高度精简的代码却能实现高度灵活复杂的操作。多少程序员用不靠谱的XML实现自己的DSL就是被解析这一环逼的啊?最近在项目里实现了一个parser combinator的库,更体会到组合的方法并不限于解析,甚至不限于高端函数的应用。互联网的好处(或者说坏处?)之一就是当自己对某项技术有所灰心时,我们总可以在网上发现牛银们做出了更为深广的探索。比如说ajoo老大2005年的系列帖子,面向组合的开发。我不过写了一个简单的parser combinator库而已,而Ajoo不仅写了Java下的JParsec,还写了Ruby下的rparsec。哦,我说了A老大还实现了C#的NParsec,和支持monadic combinator的jaskell脚本语言么?所以还等什么嗫?点击这里,开始享受吧。
P.S., 这样谈技术灰常邪恶:
“所谓ioc就是这样的思想的一种阅读全文>
发表于 @ 2007年12月19日 03:23:00|评论(loading...)|编辑
还是Beta,限量供应。简而言之,SimpleDB提供简单的数据存储和查询服务。加上EC2和S3,Amazon又向公共服务公司(比如水电气公司)迈向了一步。网上铺天盖地的讨论,有兴趣的老大百度/google吧。从技术角度来说,SimpleDB用Erlang实现,原因是要保证高度可靠性。对Erlang社区来说应该是好消息。
阅读全文>
发表于 @ 2007年12月16日 12:17:00|评论(loading...)|编辑
更新:忘记加入对generic function的概述了。刚才补上。另外chenxiaoshun老大提了个很好的问题:generic function和function overloading有什么区别?区别就是,调用哪个generic function是在运行时决定的,同调用虚函数实现多态一致。而重载函数是在编译时确定的。补充的内容是:
Generic function就是用来解决这类多分派问题的。运行时调用generic function时,会根据该函数的*所有*参数决定分派对象。总的规则是越具体的类型占用越高的优先级。比如说foo(Number)比foo(Object)有更高的优先级,因为Number是Object的子类,比Object具体。另外,generic 函数里所有参数的分派权重一样,所谓的对称多分派。Groovy采用了不对称多分派。系统会先比较第一个参数。如果不能决定,再比较第二个。。。
两个半月前的旧闻。不过今天才稍有闲暇,抽空八卦。JavaScript 2, 也即ECMAScript 4(简称ES4)的官方综述出笼,Yahoo!的Douglas Cr阅读全文>
发表于 @ 2007年12月13日 13:48:00|评论(loading...)|编辑
最近奇忙。从早到晚工作。别说写博客,连读博客都 没有时间。虽然一直想八卦一下JavaScript那浓眉大眼的也背叛革命了这件大事,却抽不出空。不过看到这么精彩的代码,还是忍不住转载。起因是这样的:大家都熟悉fold函数,也就是Ruby里常用的inject()函数:给出起始值,把某个Collection里的值叠加上去。比如说,给出起始值0,累加数组[1, 2, 3, 4, 5]: [1, 2, 3, 4, 5].inject(0){|sum, n| sum = sum + n}有了fold,便有相反的unfold:把单个的对象映射到Collection上。比如说 10.unfold { |n| n-1 unless n == 1 }.inspect => [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]10.class.unfold(&:superclass).inspect => [Fixnum, Integer, Numeric, Object]它的实现也出奇地漂亮:通过递归把unfold调用改写为数组操作。颇有term re阅读全文>
发表于 @ 2007年11月08日 14:52:00|评论(loading...)|编辑
PC时代初期犹如拓荒小说里的南非。拓荒者们没有精巧的工具,没有丰厚的财力,没有经验,甚至没有足够的食物。一人一镐一簸箕,和百折不挠的狂热而已。然而风云际会,不定一镐下去,就是非洲之星。二、三十年前的黑客们就是PC时代的拓荒者。技术原始,无损他们奔放的想象力。工具粗陋,却激起他们征服的雄心。那时没有铺天盖地的类库,所以他们钻研P.J. Plauger的雄文。那时没有巨无霸一样的操作系统,所以他们细读Lion的经典。那时没有趁手的软件,所以他们创造奇迹。作为程序员,想来多少对这段动人往事好奇。Dan Bricklin怎么就做出了spreadsheet?Ray Ozzie从哪里得到关于群件的灵感?Jef Raskin如何让Machintosh成为PC的不朽经典?Butler Lampson发明所见即所得编辑器和Ethernet时,经历了怎样的顿悟?正如Peter Norvig在书评里所说,理解编程,除了学习黑客们铿锵的代码外,也许还要了解他们丰富的内心。虽说高手不可模仿,因为“学问跟他整个的性情陶融为一片,不仅有丰富的数量,还添上个别的性质;每一个琐细的事实,都在他的心血里沉浸滋养,长了神经阅读全文>
发表于 @ 2007年09月06日 08:59: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...)|编辑
为了读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...)|编辑