王垠和权威的故事

王垠和权威的故事 每个人小时候心里都是没有权威的,就像每个人小时候也都不相信广告一样。可是权威就像广告,它埋伏在你的潜意识里。听一遍不信,听两

丘奇和图灵

丘奇和图灵 丘奇(Alonzo Church)和图灵(Alan Turing)是两位对计算机科学具有最大影响力的人物,然而他们却具有非常对立的观点

原因与证明

原因与证明 证明 我在 Cornell 的时候经常遇到这样的问题,那就是教授们一上课就在黑板上写长篇的“定理证明”,全体同学认认真真在下面抄笔记,就连只有十来个

编辑器与IDE 无谓的编辑器战争

编辑器与IDE 无谓的编辑器战争 很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手

关于语言的思考

关于语言的思考 之前写了那么多 Haskell 的不好的地方,却没有提到它好的地方,其实我必须承认我从 Haskell 身上学到了非常重要的东西,那就是对于“类型”的思考。虽

软件行业里几个超炫的专业词汇

软件行业里几个超炫的专业词汇 从同事的博客上学会了几个超炫的专业词汇,激动不已。觉得这些词汇可以言简意赅的概括我的好几篇博文,自己的文章水准真

Markdown 的一些问题

Markdown 的一些问题 把我之前的博文基本上转换成了 markdown 格式。我发现 markdown 虽然在编辑器里看起来比 HTML 清晰一些,但也有一些不足。 这些 markup 语言的格式都有点像我本科的时

谈程序的“通用性”

谈程序的“通用性” 在现实的软件工程中,我经常发现这样的一种现象。本来用很简单的代码就可以解决的问题,却因为设计者过分的关注了“通用性”,“可

Scheme 编程环境的设置

Scheme 编程环境的设置 介绍了这么久的 Scheme,却没有讲过如何配置一个高效的 Scheme 的编程环境。有些人开始学习 Scheme 的时候感觉无从下手,所以今天讲一下它的

测试驱动开发

测试驱动开发 现在的很多公司,包括 Google 和我现在的公司 Coverity,都喜欢一种“测试驱动的开发”(test-driven development

Currying 的局限性

Currying 的局限性 很多基于 lambda calculus 的程序语言,比如 ML 和 Haskell,都习惯用一种叫做 currying 的手法来表示函数。比如,如果你在 Haskell 里面这样写一个函数: f x y = x

惰性求值

惰性求值 从之前的几篇博文里面你也许已经看到了,Haskell 其实是问题相当严重的语言,然而这些问题却没有引起足够的重视。我能看到的 Haskell 的问题在

函数式语言的宗教

函数式语言的宗教 很早的时候,“函数式语言”对于我来说就是 Lisp,因为 Lisp 可以在程序的几乎任意位置定义函数,并且把它们作为值来传递(这叫做 first-class f

什么是“脚本语言”

什么是“脚本语言” 很多人都会用一些“脚本语言”(scripting language),却很少有人真正的知道到底什么是脚本语言。很多人用 shell 写一

Chez Scheme 的传说

Chez Scheme 的传说 在上一篇博文的最后,我提到了 Lisp 编译器的问题。由于早期的 Lisp 编译器生成的代码效率普遍低下,成为了 Lisp 失败的主要原因之一。而现在的高性能 Lisp

Lisp 已死,Lisp 万岁!

Lisp 已死,Lisp 万岁! 有一句古话,叫做“国王已死,国王万岁!”它的意思是,老国王已经死去,国王的儿子现在继位。这句话的幽默,就在于这两个“国

论对东西的崇拜

论对东西的崇拜 在之前的几篇博文里面,我多次提到了 Lisp,它相对于其它语言的优势,以及 Lisp Machine 相对于 Unix 的优点。于是有人来信请教我如何学习 Lisp

“解决问题”与“消灭问题”

“解决问题”与“消灭问题” 一直以来,人们都重视“解决问题”的能力,却忽视了另一种重要的能力:“消灭问题”的能力。各种各样的竞赛,分数和排名,

谈程序语言语法

谈程序语言语法 使用和研究过这么多程序语言之后,我觉得几乎不包含多余功能的语言,只有一个:Scheme。所以我觉得它是学习程序设计最好的入手点

谈 Linux,Windows 和 Mac

谈 Linux,Windows 和 Mac 这段时间受到很多人的来信。他们看了我很早以前写的推崇 Linux 的文章,想知道如何“抛弃 Windows,学习 Linux

Braid - 一个发人深思的游戏

Braid - 一个发人深思的游戏 我已经很久很久没有打游戏了(如果不算 Angry Birds 之类用来打发时间的游戏的话)。我的最后一个真正意义上的游戏机是 PlayStation 1。在那上面,

程序语言技能 什么是语义学

程序语言技能 什么是语义学 很多人问我如何在掌握基本的程序语言技能之后进入“语义学”的学习。现在我就简单介绍一下什么是“语义”,然后推荐一本入门