
王垠系列
文章平均质量分 84
unsv29
嵌入式软件开发、物联网...
展开
-
[王垠系列]谈“测试驱动的开发”
谈“测试驱动的开发”现在的很多公司,包括 Google 和我现在的公司 Coverity,都喜欢一种“测试驱动的开发”(test-driven development)。它的原理是,在写程序的时候同时写上自动化的“单元测试”(unit test)。在代码修改之后,这些测试可以批量的被运行,这样就可以避免不应该出现的错误。这不是一个坏主意。我在 Kent 的编译器课程上也使用了很多测转载 2016-01-07 09:19:46 · 638 阅读 · 0 评论 -
[王垠系列]论对东西的崇拜
论对东西的崇拜在之前的几篇博文里面,我多次提到了 Lisp,它相对于其它语言的优势,以及 Lisp Machine 相对于 Unix 的优点。于是有人来信请教我如何学习 Lisp,也有人问我为什么 Lisp Machine 没有“流行”起来。我感觉到了他们言语中对 Lisp 的敬畏和好奇心,但也感觉到了一些隐含的怀疑。这是一种复杂的感觉,仿佛我在原始人的部落兜售一些原子能小玩具,却转载 2016-01-07 09:17:48 · 493 阅读 · 0 评论 -
[王垠系列]Braid - 一个发人深思的游戏
Braid - 一个发人深思的游戏我已经很久很久没有打游戏了(如果不算 Angry Birds 之类用来打发时间的游戏的话)。我的最后一个真正意义上的游戏机,是 PlayStation 1。在那上面,我真正欣赏的最后一个游戏,是 [Metal Gear Solid (1)]。我曾经是一个游戏迷,可是进入了计算机专业的学习之后,我就开始失去对游戏的兴趣,基本上每玩一个都让我失转载 2016-01-07 09:10:38 · 1191 阅读 · 0 评论 -
[王垠系列]谈程序的“通用性”
谈程序的“通用性”在现实的软件工程中,我经常发现这样的一种现象。本来用很简单的代码就可以解决的问题,却因为设计者过分的关注了“通用性”,“可维护性”和“可扩展性”,被搞得绕了几道弯,让人琢磨不透。这些人的思维方式是这样的:“将来这段代码可能会被用到更多的场合,所以我现在就考虑到扩展问题。”于是乎,他们在代码中加入了各种各样的“框架结构”,目的是为了在将来有新的需要的时候,代码能够“转载 2016-01-07 09:20:36 · 685 阅读 · 0 评论 -
[王垠系列]一种新的操作系统设计
一种新的操作系统设计我一直在试图利用程序语言的设计原理,设计一种超越“Unix 哲学”的操作系统。这里是我的设想:这种系统里面的程序间通信不使用无结构的字符串,而是使用带有类型和结构的数据。在这样的系统里面,Unix 和其它类似操作系统(比如 Windows)里的所谓“应用程序”的概念基本上完全消失。系统由一个个很小的“函数”组成,每个函数都可以调用另外一个函数,通过参数传递数转载 2016-01-07 09:21:21 · 1663 阅读 · 0 评论 -
[王垠系列]编辑器与IDE
无谓的编辑器战争很多人都喜欢争论哪个编辑器是最好的。其中最大的争论莫过于 Emacs 与 vi 之争。vi 的支持者喜欢说:“看 vi 打起字来多快,手指完全不离键盘,连方向键都可以不用。”Emacs 的支持者往往对此不屑一顾,说:“打字再快又有什么用。我在 Emacs 里面按一个键,等于你在 vi 里面按几十个键。”其实还有另外一帮人,这些人喜欢说:“对于 Emacs 与 vi转载 2016-01-07 09:22:38 · 1670 阅读 · 0 评论 -
[王垠系列]所谓软件工程
所谓软件工程很多编程的人包括我,头衔叫做“软件工程师”(software engineer),然而我却不喜欢这个名字。我喜欢把自己叫做“程序员”(programmer)或者“计算机科学家”(computer scientist)。这是为什么呢?这需要从“软件工程”(software engineering)在现实中的涵义谈起。有人把软件工程这个领域的本质总结为:“How to pr转载 2016-01-07 09:23:43 · 930 阅读 · 3 评论 -
[王垠系列]谈程序的正确性
谈程序的正确性不管在学术圈还是在工业界,总有很多人过度的关心所谓“程序的正确性”,有些甚至到了战战兢兢,舍本逐末的地步。下面举几个例子:很多人把测试(test)看得过于重要。代码八字还没一撇呢,就吵着要怎么怎么严格的测试,防止“将来”有人把代码改错了。这些人到后来往往被测试捆住了手脚,寸步难行。不但代码bug百出,连测试里面也很多bug。有些人对于“使用什么语言”这个问转载 2016-01-07 09:30:27 · 854 阅读 · 1 评论 -
[王垠系列]什么是“对用户友好”
什么是“对用户友好”当我提到一个工具“对用户不友好”(user-unfriendly)的时候,我总是被人“鄙视”。难道这就叫“以其人之道还治其人之身”?想当年有人对我抱怨 Linux 或者 TeX 对用户不友好的时候,我貌似也差不多的态度吧。现在当我指出 TeX 的各种缺点,提出新的解决方案的时候,往往会有美国同学眼角一抬,说:“菜鸟们抱怨工具不好用,那是因为他们不会用。LaTeX转载 2016-01-07 09:04:38 · 582 阅读 · 0 评论 -
[王垠系列]什么是“脚本语言”
什么是“脚本语言”很多人都会用一些“脚本语言”(scripting language),却很少有人真正的知道到底什么是脚本语言。很多人用 shell 写一些“脚本”来完成日常的任务,用 Perl 或者 sed 来处理一些文本文件,很多公司用“脚本”来跑它们的“build”(叫做 build script)。那么,到底什么是“脚本语言”与“非脚本语言”的区别呢?其实“脚本语言”与“非转载 2016-01-07 09:18:58 · 3039 阅读 · 0 评论 -
[王垠系列]“解决问题”与“消灭问题”
“解决问题”与“消灭问题”一直以来,人们都重视“解决问题”的能力,却忽视了另一种重要的能力:“消灭问题”的能力。各种各样的竞赛,分数和排名,让很多人从小就片面的认为,能“解决问题”的人,就是最厉害的人。拿到一个问题就埋头求解,很少考虑这问题到底有什么意义。这种呆板的思维方式,不仅存在于低级的“应试”和“解题”过程,而且蔓延到了很多艰深的研究领域。如果你仔细观察就会发现,很多“难题”转载 2016-01-07 09:16:28 · 623 阅读 · 0 评论 -
[王垠系列]什么是语义学
什么是语义学很多人问我如何在掌握基本的程序语言技能之后进入“语义学”的学习。现在我就简单介绍一下什么是“语义”,然后推荐一本入门的书。这里我说的“语义”主要是针对程序语言,不过自然语言里的语义,其实本质上也是一样的。一个程序的“语义”通常是由另一个程序决定的,这另一个程序叫做“解释器”(interpreter)。程序只是一个数据结构,通常表示为语法树(abstract sy转载 2016-01-07 09:07:01 · 1129 阅读 · 0 评论 -
[王垠系列]怎样写一个解释器
怎样写一个解释器这是一篇解释器的入门教程。虽然我试图从最基本的原理讲起,尽量让这篇文章不依赖于其它知识,但是这篇教程并不是针对编程的入门知识,所以我假设你已经学会了最基本的 Scheme 和函数式编程。我不是很推崇函数式编程,但它里面确实包含了很重要的一些方法。如果你完全不了解这些,可以读一下 SICP 的第一,二章(或者接下去读 The Little Schemer)。当然你也可以继续读转载 2016-01-07 09:08:01 · 983 阅读 · 0 评论 -
[王垠系列]TeXmacs:一个真正“所见即所得”的排版系统
TeXmacs:一个真正“所见即所得”的排版系统好久没有推荐过自己喜欢的软件了,现在推荐一款我在美国做数学作业的私家法宝:TeXmacs。我恐怕不可能跟以前那么有闲心写个长篇的 TeXmacs 说明文档了,不过这东西如此的简单好用,所以基本上不用我写什么文档了。鉴于知道的人很少,不理解它的人很多,这里只是帮它打个广告,吊一下胃口。TeXmacs 的主要特点是:跟转载 2016-01-07 09:09:18 · 3611 阅读 · 4 评论 -
[王垠系列]解密“设计模式”
解密“设计模式”有些人问我,你说学习操作系统的最好办法是学习程序设计。那我们是不是应该学习一些“设计模式”(design patterns)。这是一个我很早就有定论,而且经过实践检验的问题,所以想在这里做一个总结。总的来说,如果光从字面上讲,程序里确实是有一些“模式”可以发掘的。因为你总是可以借鉴以前的经验,用来构造新的程序。你可以把这种经验叫做“模式”。可是自从《设计模式》(通常转载 2016-01-07 09:11:29 · 872 阅读 · 2 评论 -
[王垠系列]谈 Linux,Windows 和 Mac
谈 Linux,Windows 和 Mac这段时间受到很多人的来信。他们看了我很早以前写的推崇 Linux 的文章,想知道如何“抛弃 Windows,学习 Linux”。天知道他们在哪里找到那么老的文章,真是好事不出门…… 我觉得我有责任消除我以前的文章对人的误导,洗清我这个“Linux 狂热分子”的恶名。我觉得我已经写过一些澄清的文章了,可是怎么还是有人来信问 Linux 的问题。也许因转载 2016-01-07 09:12:43 · 720 阅读 · 0 评论 -
[王垠系列]Oberon 操作系统:被忽略的珍宝
Oberon 操作系统:被忽略的珍宝推荐一篇很久以前看的文章:Oberon - The Overlooked Jewel它介绍的是 Niklaus Wirth 设计的一种操作系统,叫做 Oberon。Niklaus Wirth 就是大家熟知的 Pascal 语言的设计者。绝大部分人都没听说过有 Oberon 这个东西存在,更难以把它跟 Niklaus Wirth 的大名挂上钩。所以转载 2016-01-07 09:13:41 · 1690 阅读 · 0 评论 -
[王垠系列]谈语法
谈语法使用和研究过这么多程序语言之后,我觉得几乎不包含多余功能的语言,只有一个:Scheme。所以我觉得它是学习程序设计最好的入手点和进阶工具。当然 Scheme 也有少数的问题,而且缺少一些我想要的功能,但这些都瑕不掩瑜。在用了很多其它的语言之后,我觉得 Scheme 真的是非常优美的语言。要想指出 Scheme 所有的优点,并且跟其它语言比较,恐怕要写一本书才讲的清楚。转载 2016-01-07 09:14:37 · 912 阅读 · 0 评论 -
[王垠系列]程序语言的常见设计错误(1) - 片面追求短小
程序语言的常见设计错误(1) - 片面追求短小我经常以自己写“非常短小”的代码为豪。有一些人听了之后很赞赏,然后说他也很喜欢写短小的代码,接着就开始说 C 语言其实有很多巧妙的设计,可以让代码变得非常短小。然后我才发现,这些人所谓的“短小”跟我所说的“短小”完全不是一回事。我的程序的“短小”是建立在语义明确,概念清晰的基础上的。在此基础上,我力求去掉冗余的,绕弯子的,混淆的代码,让转载 2016-01-07 09:15:30 · 645 阅读 · 0 评论 -
[王垠系列]GTF - Great Teacher Friedman
GTF - Great Teacher Friedman写小人书的老顽童Dan Friedman 是 Indiana 大学的教授,程序语言领域的创始人之一。他主要的著作《The Little Schemer》(前身叫《The Little Lisper》) 是程序语言界最具影响力的书籍之一。现在很多程序语言界的元老级人物,当年都是看这本“小人书”学会了 Lisp/Scheme,才决转载 2016-01-07 09:06:02 · 1522 阅读 · 0 评论