Glean 拾遗
专辑 / Paul Graham 文集 / 编程语言设计五问:为人、为友、为简洁、为实用

编程语言设计五问:为人、为友、为简洁、为实用

原文 www.paulgraham.com 收录 2026-07-07 14:46 阅读 17 min
AI 解读

Paul Graham在2001年MIT小组讨论中提出的关于编程语言设计的五个核心问题,至今仍极具启发性。他强调编程语言应以人为本,为人类大脑的局限性而设计;最好的语言往往是作者为自己和朋友写的,而非为“较差”的程序员;语言应给予程序员最大控制权,而非像家庭教师般限制;简洁(包括代码和手册)是优秀语言的重要标志;同时应承认黑客本质——编写优秀程序本身就是值得尊敬的智力活动。此外,他还前瞻性地讨论了服务器端软件带来的新需求(如支持频繁变更、延续)、库的组织、语法的意义、面向对象编程并非万能、委员会设计的风险等。适合所有对编程语言设计、软件工程哲学感兴趣的工程师阅读。

原文 17 分钟
原文 www.paulgraham.com ↗
§ 1

(These are some notes I made for a panel discussion on programming language design at MIT on May 10, 2001.)

(这是我在2001年5月10日于麻省理工学院参加的一场编程语言设计小组讨论中整理的一些笔记。)

§ 2

§ 3
  1. Programming Languages Are for People.

Programming languages are how people talk to computers. The computer would be just as happy speaking any language that was unambiguous. The reason we have high level languages is because people can't deal with machine language. The point of programming languages is to prevent our poor frail human brains from being overwhelmed by a mass of detail.

Architects know that some kinds of design problems are more personal than others. One of the cleanest, most abstract design problems is designing bridges. There your job is largely a matter of spanning a given distance with the least material. The other end of the spectrum is designing chairs. Chair designers have to spend their time thinking about human butts.

Software varies in the same way. Designing algorithms for routing data through a network is a nice, abstract problem, like designing bridges. Whereas designing programming languages is like designing chairs: it's all about dealing with human weaknesses.

Most of us hate to acknowledge this. Designing systems of great mathematical elegance sounds a lot more appealing to most of us than pandering to human weaknesses. And there is a role for mathematical elegance: some kinds of elegance make programs easier to understand. But elegance is not an end in itself.

And when I say languages have to be designed to suit human weaknesses, I don't mean that languages have to be designed for bad programmers. In fact I think you ought to design for the best programmers, but even the best programmers have limitations. I don't think anyone would like programming in a language where all the variables were the letter x with integer subscripts.

  1. 编程语言以人为本。

编程语言是人们与计算机交流的方式。计算机本身没有任何偏好,任何无歧义的语言它都能接受。我们之所以需要高级语言,是因为人类无法直接处理机器语言。编程语言的目的,就是防止我们脆弱的人类大脑被海量细节淹没。

建筑师知道,有些设计问题比其他问题更贴近人性。最简洁、最抽象的设计问题之一是桥梁设计:你的任务基本上就是用最少的材料跨越给定的距离。而另一个极端是椅子设计:设计师需要花大量时间思考人类的臀部。

软件设计也是如此。设计网络路由算法是一个漂亮的抽象问题,就像设计桥梁;而设计编程语言就像设计椅子:核心是应对人类的弱点。

我们大多数人不愿意承认这一点。相比于迎合人类弱点,设计数学上优雅的系统显然更具吸引力。数学优雅确实有它的价值:某些优雅能让程序更容易理解。但优雅本身并非目的。

当我说语言必须为适应人类弱点而设计时,我不是说语言必须为糟糕的程序员设计。实际上,我认为应该为最优秀的程序员设计,但即便最优秀的程序员也有局限。我不认为有人会喜欢所有变量都是带整数下标的字母x的语言。

§ 4
  1. Design for Yourself and Your Friends.

If you look at the history of programming languages, a lot of the best ones were languages designed for their own authors to use, and a lot of the worst ones were designed for other people to use.

When languages are designed for other people, it's always a specific group of other people: people not as smart as the language designer. So you get a language that talks down to you. Cobol is the most extreme case, but a lot of languages are pervaded by this spirit.

It has nothing to do with how abstract the language is. C is pretty low-level, but it was designed for its authors to use, and that's why hackers like it.

The argument for designing languages for bad programmers is that there are more bad programmers than good programmers. That may be so. But those few good programmers write a disproportionately large percentage of the software.

I'm interested in the question, how do you design a language that the very best hackers will like? I happen to think this is identical to the question, how do you design a good programming language?, but even if it isn't, it is at least an interesting question.

  1. 为自己和朋友设计。

回顾编程语言的历史,许多最好的语言都是为设计者自己使用而设计的,而许多最差的语言则是为他人设计的。

当语言为他人设计时,目标群体总是那些不如设计者聪明的人。结果就是语言居高临下地对你说话。COBOL是最极端的例子,但很多语言都弥漫着这种精神。

这与语言的抽象程度无关。C语言相当底层,但它为设计者自己使用而设计,因此受到黑客的喜爱。

为糟糕程序员设计语言的论点是:糟糕程序员的数量多于优秀程序员。也许如此,但那些少数优秀程序员却编写了不成比例的大量软件。

我感兴趣的问题是:如何设计一种最优秀的黑客会喜欢的语言?我碰巧认为这与“如何设计一种好的编程语言”是同一个问题。即使不是,这至少也是一个有趣的问题。

§ 5
  1. Give the Programmer as Much Control as Possible.

Many languages (especially the ones designed for other people) have the attitude of a governess: they try to prevent you from doing things that they think aren't good for you. I like the opposite approach: give the programmer as much control as you can.

When I first learned Lisp, what I liked most about it was that it considered me an equal partner. In the other languages I had learned up till then, there was the language and there was my program, written in the language, and the two were very separate. But in Lisp the functions and macros I wrote were just like those that made up the language itself. I could rewrite the language if I wanted. It had the same appeal as open-source software.

  1. 赋予程序员尽可能多的控制权。

许多语言(尤其是那些为他人设计的语言)持有一种家庭教师的态度:它们试图阻止你做一些它们认为对你无益的事情。我倾向于相反的方法:尽可能多地给程序员控制权。

当我第一次学习Lisp时,我最喜欢的是它把我视为平等的伙伴。在我之前学过的其他语言中,语言和我的程序是分离的,而Lisp中我编写的函数和宏与构成语言本身的那些并无二致。如果我想,我甚至可以重写语言。这种吸引力与开源软件如出一辙。

§ 6
  1. Aim for Brevity.

Brevity is underestimated and even scorned. But if you look into the hearts of hackers, you'll see that they really love it. How many times have you heard hackers speak fondly of how in, say, APL, they could do amazing things with just a couple lines of code? I think anything that really smart people really love is worth paying attention to.

I think almost anything you can do to make programs shorter is good. There should be lots of library functions; anything that can be implicit should be; the syntax should be terse to a fault; even the names of things should be short.

And it's not only programs that should be short. The manual should be thin as well. A good part of manuals is taken up with clarifications and reservations and warnings and special cases. If you force yourself to shorten the manual, in the best case you do it by fixing the things in the language that required so much explanation.

  1. 追求简洁。

简洁被低估甚至被鄙视。但如果你深入黑客的内心,你会发现他们真的很爱简洁。你多少次听到黑客们满怀喜爱地谈论,比如在APL中,仅用几行代码就能完成令人惊叹的事情?我认为任何真正聪明的人真正热爱的东西都值得关注。

我认为几乎所有能让程序更短的做法都是好的。应该有大量的库函数;任何可以隐含的东西都应该隐含;语法应该短到极致;甚至事物的名称也应该简短。

不仅是程序要短,手册也应该薄。手册中有大量篇幅用于澄清、保留、警告和特殊情况。如果你强迫自己缩短手册,最理想的情况是通过修复语言中那些需要大量解释的问题来实现。

§ 7
  1. Admit What Hacking Is.

A lot of people wish that hacking was mathematics, or at least something like a natural science. I think hacking is more like architecture. Architecture is related to physics, in the sense that architects have to design buildings that don't fall down, but the actual goal of architects is to make great buildings, not to make discoveries about statics.

What hackers like to do is make great programs. And I think, at least in our own minds, we have to remember that it's an admirable thing to write great programs, even when this work doesn't translate easily into the conventional intellectual currency of research papers. Intellectually, it is just as worthwhile to design a language programmers will love as it is to design a horrible one that embodies some idea you can publish a paper about.

  1. 承认黑客的本质。

许多人希望黑客行为是数学,或者至少像自然科学。我认为黑客更像建筑学。建筑学与物理学相关,因为建筑师必须设计不会倒塌的建筑,但建筑师的真正目标是建造伟大的建筑,而不是做出静力学发现。

黑客喜欢做的是写出伟大的程序。我认为,至少在我们心中,必须记住写出伟大程序是值得赞赏的,即使这些工作难以转化为传统的研究论文智力成果。从智力上讲,设计一种程序员热爱的语言与设计一种丑陋但能发表论文的语言同样有价值。

§ 8

§ 9
  1. How to Organize Big Libraries?

Libraries are becoming an increasingly important component of programming languages. They're also getting bigger, and this can be dangerous. If it takes longer to find the library function that will do what you want than it would take to write it yourself, then all that code is doing nothing but make your manual thick. (The Symbolics manuals were a case in point.) So I think we will have to work on ways to organize libraries. The ideal would be to design them so that the programmer could guess what library call would do the right thing.

  1. 如何组织大型库?

库正在成为编程语言越来越重要的组成部分。它们也变得越来越庞大,这可能带来危险。如果找到能完成所需功能的库函数所花的时间比自己编写还要长,那么这些代码只是徒增手册的厚度(Symbolics的手册就是典型例子)。因此,我认为我们必须研究组织库的方法。理想的情况是,库的设计能让程序员猜出哪个库调用能完成所需功能。

§ 10
  1. Are People Really Scared of Prefix Syntax?

This is an open problem in the sense that I have wondered about it for years and still don't know the answer. Prefix syntax seems perfectly natural to me, except possibly for math. But it could be that a lot of Lisp's unpopularity is simply due to having an unfamiliar syntax. Whether to do anything about it, if it is true, is another question.

  1. 人们真的害怕前缀语法吗?

这是一个悬而未决的问题,多年来我一直疑惑,仍不知道答案。前缀语法对我来说似乎完全自然,可能除了数学领域。但Lisp不受欢迎的很大一部分原因可能仅仅是其不熟悉的语法。如果真是这样,是否要对此采取行动,则是另一个问题。

§ 11
  1. What Do You Need for Server-Based Software?

I think a lot of the most exciting new applications that get written in the next twenty years will be Web-based applications, meaning programs that sit on the server and talk to you through a Web browser. And to write these kinds of programs we may need some new things.

One thing we'll need is support for the new way that server-based apps get released. Instead of having one or two big releases a year, like desktop software, server-based apps get released as a series of small changes. You may have as many as five or ten releases a day. And as a rule everyone will always use the latest version.

You know how you can design programs to be debuggable? Well, server-based software likewise has to be designed to be changeable. You have to be able to change it easily, or at least to know what is a small change and what is a momentous one.

Another thing that might turn out to be useful for server based software, surprisingly, is continuations. In Web-based software you can use something like continuation-passing style to get the effect of subroutines in the inherently stateless world of a Web session. Maybe it would be worthwhile having actual continuations, if it was not too expensive.

  1. 服务器端软件需要什么?

我认为未来二十年中许多最令人兴奋的新应用将是基于Web的应用,即运行在服务器上、通过浏览器与你对话的程序。编写这类程序可能需要一些新东西。

我们需要的一项支持是服务器端应用发布的新方式。与桌面软件每年一两次大版本发布不同,服务器端应用以一系列小变更的形式发布,可能每天多达五到十次。而且通常情况下,所有用户都会使用最新版本。

你知道如何设计可调试的程序吗?同样,服务器端软件必须设计为可变更的。你必须能够轻松修改它,或者至少能区分小变更和重大变更。

另一个可能对服务器端软件有用的东西,令人惊讶地,是延续(continuations)。在基于Web的软件中,你可以使用类似延续传递风格(continuation-passing style)来在本质上无状态的Web会话中实现子程序的效果。如果代价不高,实际支持延续可能是值得的。

§ 12
  1. What New Abstractions Are Left to Discover?

I'm not sure how reasonable a hope this is, but one thing I would really love to do, personally, is discover a new abstraction-- something that would make as much of a difference as having first class functions or recursion or even keyword parameters. This may be an impossible dream. These things don't get discovered that often. But I am always looking.

  1. 还有哪些新抽象有待发现?

我不确定这个希望有多大合理性,但就个人而言,我非常想发现一种新的抽象——一种能像一等函数、递归甚至关键字参数那样带来巨大改变的抽象。这或许是不切实际的梦想,这样的发现并不常见,但我一直在寻找。

§ 13

§ 14
  1. You Can Use Whatever Language You Want.

Writing application programs used to mean writing desktop software. And in desktop software there is a big bias toward writing the application in the same language as the operating system. And so ten years ago, writing software pretty much meant writing software in C. Eventually a tradition evolved: application programs must not be written in unusual languages. And this tradition had so long to develop that nontechnical people like managers and venture capitalists also learned it.

Server-based software blows away this whole model. With server-based software you can use any language you want. Almost nobody understands this yet (especially not managers and venture capitalists). A few hackers understand it, and that's why we even hear about new, indy languages like Perl and Python. We're not hearing about Perl and Python because people are using them to write Windows apps.

What this means for us, as people interested in designing programming languages, is that there is now potentially an actual audience for our work.

  1. 你可以使用任何你喜欢的语言。

过去编写应用程序意味着编写桌面软件。在桌面软件领域,人们强烈倾向于使用与操作系统相同的语言来编写应用程序。因此十年前,编写软件基本意味着用C语言。最终形成了一种传统:应用程序不能使用不寻常的语言。这一传统发展得如此之久,以至于像经理和风险投资人这样的非技术人员也学会了它。

服务器端软件彻底颠覆了这一模式。使用服务器端软件,你可以选择任何语言。几乎没有人意识到这一点(尤其是经理和风险投资人)。少数黑客明白,这就是我们还能听到Perl、Python之类新兴独立语言的原因。我们之所以听说Perl和Python,不是因为人们用它们写Windows应用。

对我们这些对设计编程语言感兴趣的人来说,这意味着现在我们的工作有了潜在的真正受众。

§ 15
  1. Speed Comes from Profilers.

Language designers, or at least language implementors, like to write compilers that generate fast code. But I don't think this is what makes languages fast for users. Knuth pointed out long ago that speed only matters in a few critical bottlenecks. And anyone who's tried it knows that you can't guess where these bottlenecks are. Profilers are the answer.

Language designers are solving the wrong problem. Users don't need benchmarks to run fast. What they need is a language that can show them what parts of their own programs need to be rewritten. That's where speed comes from in practice. So maybe it would be a net win if language implementors took half the time they would have spent doing compiler optimizations and spent it writing a good profiler instead.

  1. 速度源自性能剖析器。

语言设计者(至少是语言实现者)喜欢编写生成快速代码的编译器。但我认为这并不是让用户觉得语言快的原因。Knuth很久前就指出,速度只在少数关键瓶颈处重要。任何尝试过的人都知道,你无法猜测这些瓶颈在哪里。性能剖析器才是答案。

语言设计者正在解决错误的问题。用户不需要基准测试跑得快。他们需要的是一种能显示程序中哪些部分需要重写的语言。这才是实践中速度的来源。因此,如果语言实现者将原本用于编译器优化的一半时间用来编写一个好的性能剖析器,这或许是一个净收益。

§ 16
  1. You Need an Application to Drive the Design of a Language.

This may not be an absolute rule, but it seems like the best languages all evolved together with some application they were being used to write. C was written by people who needed it for systems programming. Lisp was developed partly to do symbolic differentiation, and McCarthy was so eager to get started that he was writing differentiation programs even in the first paper on Lisp, in 1960.

It's especially good if your application solves some new problem. That will tend to drive your language to have new features that programmers need. I personally am interested in writing a language that will be good for writing server-based applications.

[During the panel, Guy Steele also made this point, with the additional suggestion that the application should not consist of writing the compiler for your language, unless your language happens to be intended for writing compilers.]

  1. 需要应用驱动语言设计。

这不是绝对规则,但最好的语言似乎都是与它们所用来编写的应用程序共同演进的。C语言是由需要它进行系统编程的人编写的。Lisp的部分发展是为了做符号微分,McCarthy急于开始,甚至在1960年第一篇关于Lisp的论文中就已经在编写微分程序了。

如果你的应用程序能解决一些新问题,那就更好了。这往往会驱使你的语言具备程序员需要的新特性。我个人对编写一种适合编写服务器端应用的语言感兴趣。

[小组讨论期间,Guy Steele也提出了这个观点,并补充建议:应用程序不应该是编写你语言的编译器,除非你的语言恰好是为编写编译器而设计的。]

§ 17
  1. A Language Has to Be Good for Writing Throwaway Programs.

You know what a throwaway program is: something you write quickly for some limited task. I think if you looked around you'd find that a lot of big, serious programs started as throwaway programs. I would not be surprised if most programs started as throwaway programs. And so if you want to make a language that's good for writing software in general, it has to be good for writing throwaway programs, because that is the larval stage of most software.

  1. 语言必须擅长编写一次性程序。

你知道什么是“一次性程序”:为某个有限任务快速编写的程序。我认为环顾四周,你会发现很多大型、严肃的程序最初都是一次性程序。如果大多数程序都始于一次性程序,我一点也不会惊讶。因此,如果你想设计一种普遍适合编写软件的语言,它必须擅长编写一次性程序,因为那是大多数软件的幼虫阶段。

§ 18
  1. Syntax Is Connected to Semantics.

It's traditional to think of syntax and semantics as being completely separate. This will sound shocking, but it may be that they aren't. I think that what you want in your language may be related to how you express it.

I was talking recently to Robert Morris, and he pointed out that operator overloading is a bigger win in languages with infix syntax. In a language with prefix syntax, any function you define is effectively an operator. If you want to define a plus for a new type of number you've made up, you can just define a new function to add them. If you do that in a language with infix syntax, there's a big difference in appearance between the use of an overloaded operator and a function call.

  1. 语法与语义相连。

传统上认为语法和语义是完全分离的。这可能听起来令人震惊,但事实或许并非如此。我认为你在语言中想要的东西可能与表达方式有关。

最近我和Robert Morris聊天,他指出运算符重载在中缀语法语言中更占优势。在前缀语法语言中,你定义的任何函数实际上都是运算符。如果你想为自创的新数字类型定义加法,只需定义一个加法函数。而在中缀语法语言中,重载运算符的使用与函数调用在形式上存在很大差异。

§ 19

§ 20
  1. New Programming Languages.

Back in the 1970s it was fashionable to design new programming languages. Recently it hasn't been. But I think server-based software will make new languages fashionable again. With server-based software, you can use any language you want, so if someone does design a language that actually seems better than others that are available, there will be people who take a risk and use it.

  1. 新编程语言。

上世纪70年代,设计新编程语言是一种时尚。近来已不再流行。但我认为服务器端软件将使新语言再次流行。使用服务器端软件,你可以选择任何语言,因此如果有人设计出一种确实比现有语言更好的语言,就会有人冒险使用它。

§ 21
  1. Time-Sharing.

Richard Kelsey gave this as an idea whose time has come again in the last panel, and I completely agree with him. My guess (and Microsoft's guess, it seems) is that much computing will move from the desktop onto remote servers. In other words, time-sharing is back. And I think there will need to be support for it at the language level. For example, I know that Richard and Jonathan Rees have done a lot of work implementing process scheduling within Scheme 48.

  1. 分时共享。

Richard Kelsey在上一次小组讨论中提出这个想法已经再次成熟,我完全同意。我猜测(微软似乎也这么猜)大量计算将从桌面转移到远程服务器。换句话说,分时共享回来了。我认为需要在语言层面提供支持。例如,我知道Richard和Jonathan Rees在Scheme 48中做了大量工作来实现进程调度。

§ 22
  1. Efficiency.

Recently it was starting to seem that computers were finally fast enough. More and more we were starting to hear about byte code, which implies to me at least that we feel we have cycles to spare. But I don't think we will, with server-based software. Someone is going to have to pay for the servers that the software runs on, and the number of users they can support per machine will be the divisor of their capital cost.

So I think efficiency will matter, at least in computational bottlenecks. It will be especially important to do i/o fast, because server-based applications do a lot of i/o.

It may turn out that byte code is not a win, in the end. Sun and Microsoft seem to be facing off in a kind of a battle of the byte codes at the moment. But they're doing it because byte code is a convenient place to insert themselves into the process, not because byte code is in itself a good idea. It may turn out that this whole battleground gets bypassed. That would be kind of amusing.

  1. 效率。

最近人们开始觉得计算机终于足够快了。我们越来越多地听到字节码(byte code),至少在我看来这意味着我们觉得有闲置的计算周期。但我认为在服务器端软件中并非如此。运行软件的服务器需要有人买单,每台机器能支持的用户数将决定资本成本的除数。

因此,我认为效率将很重要,至少在计算瓶颈上。特别是I/O速度,因为服务器端应用有大量I/O操作。

最终可能会发现字节码并不是赢家。目前Sun和Microsoft似乎正在展开一场字节码之战,但他们这么做是因为字节码是介入过程的方便切入点,而非字节码本身是个好主意。也许整个战场都会被绕过,那将有点意思。

§ 23

§ 24
  1. Clients.

This is just a guess, but my guess is that the winning model for most applications will be purely server-based. Designing software that works on the assumption that everyone will have your client is like designing a society on the assumption that everyone will just be honest. It would certainly be convenient, but you have to assume it will never happen.

I think there will be a proliferation of devices that have some kind of Web access, and all you'll be able to assume about them is that they can support simple html and forms. Will you have a browser on your cell phone? Will there be a phone in your palm pilot? Will your blackberry get a bigger screen? Will you be able to browse the Web on your gameboy? Your watch? I don't know. And I don't have to know if I bet on everything just being on the server. It's just so much more robust to have all the brains on the server.

  1. 客户端。

这只是猜测,但我猜测大多数应用的成功模式将是纯服务器端。假设每个人都会安装你的客户端来设计软件,就像假设每个人都会诚实来设计社会一样。这当然方便,但你必须假设这永远不会发生。

我认为未来会有大量具备Web访问能力的设备,你唯一能假设的是它们支持简单的HTML和表单。你的手机上会有浏览器吗?你的掌上电脑里会有电话吗?你的黑莓会拥有更大的屏幕吗?你能在Gameboy上浏览网页吗?你的手表呢?我不知道。但如果我把赌注押在一切在服务器端,我就无需知道。把所有智能放在服务器端要健壮得多。

§ 25
  1. Object-Oriented Programming.

I realize this is a controversial one, but I don't think object-oriented programming is such a big deal. I think it is a fine model for certain kinds of applications that need that specific kind of data structure, like window systems, simulations, and cad programs. But I don't see why it ought to be the model for all programming.

I think part of the reason people in big companies like object-oriented programming is because it yields a lot of what looks like work. Something that might naturally be represented as, say, a list of integers, can now be represented as a class with all kinds of scaffolding and hustle and bustle.

Another attraction of object-oriented programming is that methods give you some of the effect of first class functions. But this is old news to Lisp programmers. When you have actual first class functions, you can just use them in whatever way is appropriate to the task at hand, instead of forcing everything into a mold of classes and methods.

What this means for language design, I think, is that you shouldn't build object-oriented programming in too deeply. Maybe the answer is to offer more general, underlying stuff, and let people design whatever object systems they want as libraries.

  1. 面向对象编程。

我意识到这是一个有争议的观点,但我并不认为面向对象编程有那么了不起。对于某些需要特定数据结构的应用,如窗口系统、模拟和CAD程序,它是一个很好的模型。但我不明白为什么它应该成为所有编程的模型。

我认为大公司的人们喜欢面向对象编程的部分原因是它产生了大量看似工作的东西。原本可以自然地表示为整数列表的东西,现在可以表示为一个带有各种脚手架和忙碌的类。

面向对象编程的另一个吸引力是方法提供了一等函数的部分效果。但对于Lisp程序员来说,这已是旧闻。当你拥有真正的一等函数时,你可以根据手头任务以合适的方式使用它们,而不是将一切强行塞入类和方法的模子。

这对语言设计意味着,你不应该将面向对象编程构建得太深入。或许答案应该是提供更通用的底层机制,让人们通过库设计他们想要的任何对象系统。

§ 26
  1. Design by Committee.

Having your language designed by a committee is a big pitfall, and not just for the reasons everyone knows about. Everyone knows that committees tend to yield lumpy, inconsistent designs. But I think a greater danger is that they won't take risks. When one person is in charge he can take risks that a committee would never agree on.

Is it necessary to take risks to design a good language though? Many people might suspect that language design is something where you should stick fairly close to the conventional wisdom. I bet this isn't true. In everything else people do, reward is proportionate to risk. Why should language design be any different?

  1. 委员会设计。

由委员会设计语言是一个大陷阱,原因不仅限于人们已知的那些。每个人都知道委员会往往产生笨拙、不一致的设计。但我认为更大的危险是它们不愿承担风险。当一个人负责时,他可以承担委员会永远不会同意的风险。

然而,设计一门好语言有必要冒险吗?许多人可能认为语言设计应该相当贴近传统智慧。我敢打赌事实并非如此。在人们所做的其他所有事情中,回报与风险成正比。语言设计为何应该不同?

打开原文 ↗