## 《柏拉图和技术呆子》3:分层与革命机会

今天的中国拥有全世界最发达的互联网应用，但是在信息技术上，我们还没有什么特别拿得出手的创新。比如说，现在有很多很多种编程语言，有的是第一流的计算机科学家发明的，但也有的像PHP和JavaScript是工程师在工作中随手发明的，也都流行了。我最近还听说一个新编程语言叫 Jeeves，是麻省理工学院一个女研究生发明的……

可是有哪个编程语言是中国人发明的呢？

真没有。

发明好用、流行的编程语言似乎也不是什么了不得的事情，可是堂堂的信息大国，居然就没有。那是不是我国工程师的工作思路有点问题？

我们非常希望用高级的工程技术赚高级的钱。几年前有个移动网络的“标准之争”，中国说我们这么大的市场必须搞一个中国标准，谁抓住了标准谁就能收取专利费，谁就厉害。可标准是从哪来的呢？难道不是应该你提供了一个众人都急需的解决方案，才*需要*制定新标准吗？

以赚钱为核心的思路恐怕还不是工程师的大道。工程师的大道应该是开创一个可供后人追随的新路线。标准、专利费和作为祖师爷的声望都只不过是副产品。

最近我们非常关心中国怎么做，才能在芯片这个最尖端的领域赶超美国。很多人意识到，按照现有的芯片技术框架发展，一直跟在美国后面追赶的话，中国没啥机会 —— 芯片是个胜者通吃的领域，中国擅长的价格优势和大市场优势都不存在。

我们需要一个“弯道超车”的机会。最好另起炉灶，中国主导搭建一个新框架。那这样的机会在哪呢？如果有这样的机会，我们有人准备好了吗？

今天我们继续讲《柏拉图和技术呆子》这本书。这本书的一个主题是“分层”。信息技术最核心的思想就是分层，在每一层上有不同的范式，给工程师最大的创作自由。我们看看能不能从这个思路找到新机会。

Lee 做了个估算，运行在云端服务器上的一个软件，大约要调动10^24个晶体管。这大约是人类设计出来的最复杂的东西了。分层是解决复杂问题最好的办法。上一讲我们说了从晶体管到CPU的硬件分层，今天接着说软件的分层。

软件的底层是“指令集”。计算机直接能读的东西，是全是0和1组成的机器代码，比如像下面这样 ——

0011010111010100

最早的程序员就是这么跟计算机对话的……一般是在纸带上打卡。这么操作实在太复杂，所以工程师发明了“指令集”。有了指令集，我们就可以用“汇编语言”操作计算机，比如上面那行代码可以写成 ——

cmp eax, ebx

它的意思是比较两个字符串是否相同。现在最常用的是英特尔的“x86”指令集，它具有向后兼容的特点，确保新一代的机器能运行老一代的代码。

我非常不理解为什么现在大学仍然要求所有理工科专业的学生都学习汇编语言。汇编语言不会让学生爱上编程。在底层编程非常麻烦，要事无巨细地操心很多东西，简直反人性。我大学学的可是物理学，但是我也按要求上了一个学期的汇编语言课，我记得我考的还不错……但是现在已经全忘了。我向你保证，哪怕你将来的工作就是编程，你也不会用到汇编语言。

汇编语言再往上一层，才是所谓“高级”编程语言。这里“高级”的唯一意思就是这些语言是建立在汇编语言的层次上面的一层。比如我们常用的C语言、Fortran语言、Python、Java等等等等，这些才是给人用的编程语言。你用高级语言写个程序，它会被“编译”成汇编语言，然后再操纵硬件。你几乎就不需要考虑硬件，你面对的是纯逻辑模型。

再往上一层是“云”。在云这一层整个硬件都被虚拟化，软件实际在哪台计算机上运行已经没有关系了。比如 Google 存储了几十亿个网页的检索系统，这些数据存在于无数台主机上。当你搜索的时候，你不是跟一台计算机互动，而是在和“云”互动。

Lee在书中给了个不完全总结，从最底层到我们的日常应用，计算机技术至少可以分成下面这九层 ——

1.半导体物理学

2.晶体管数字开关

3.逻辑门

4.运算器代表的逻辑图

5.CPU代表的数字机

6.汇编语言、指令集

7.编程语言

8.各种可供调用的公共库函数

9.云计算

互联网通信协议，包括TCP/IP和SMTP等等，则是另一个用分层的方法解决复杂性的例子。

所有分层自下而上建立，每一层都建立在前一层的基础之上，而不提供它上面一层的功能。每一层的程序员完全不用考虑前面一层的事儿，这样就给了各层的工程师最大的自由度。

那你说如果我掌控了一个底层技术，上面所有层岂不是都要从我这里出发？我不就建立了标准吗？我不就可以坐地收取专利费了吗？原则上的确是这样的。中国要搞国产通用芯片，就面临x86指令集的专利问题。

但专利壁垒并不是中国搞国产芯片真正的困难。模型都是人为的，如果仅仅是为了避开专利，你完全可以自己弄一套指令集。问题不在于别人允不允许你另起炉灶，问题在于你另起炉灶之后有没有别人跟进。

分层模型是程序员们想象的共同体，而这个共同体现在已经无法撼动。这些层已经被历史沉淀成了文化，所有新产品都在这些层上生长。中国错过了计算机技术的奠基时代，我们来晚了。

但是这也不是说中国就完全没机会了。有一种机会是建立新层。

苹果公司“发明” iPhone 的时候，并没有使用什么独创的新技术。iPhone 用到的所有技术当时都已经有了，但是 Lee 认为，iPhone 仍然是一个革命 —— 因为它解决了“机会危机”。

2007年，手机已经可上网，而人们不知道这代表什么新机会。难道说手机上网就是用手机浏览网页吗？

iPhone 的真正革命性贡献在于APP开发平台。苹果在现有的技术之上又增加了一层，提供了一个新的开发环境 —— 任何人都可以在这一层上开发手机应用。

今天我们用手机做的事情，十年前的人连想都想不到。微信和手机支付是重大的“范式转移（paradigm shift）”，它们在技术上是谁第一个实现的已经不重要了，它们可以说就是中国的创新。

要论工程师的大道，能左右国运的创新还得跟“层”有关。

以前我们搞过一些行为艺术式的伪创新。比如说中国没有自己的编程语言，有人说要“发明”“国产编程语言”，结果就是把别人的语言给中文化而已。人家用个“if”，两个字符就能说明白的话，你非得变成“如果”，这有意义吗？没有任何意义。包括“国产操作系统”，也是这种思路。

你说我爱国，所以我要支持国产操作系统 —— 可以。但从技术进步本身来说，把别人的操作系统重新包装一遍并不是创新。

Lee 看到了两个信息产业革命的机会。一个是现在的人们做所有事情、将来用的所有东西都可能上网，而网络在与人方便的同时，也影响到了个人隐私。方便和隐私之间有一个矛盾，那能不能用创新来解决这个矛盾，就是一个机会。这个领域现在有很多人讨论我们就不细说了，但是有一点值得说 —— 前面说的那个 MIT 研究生发明的 Jeeves 语言，就是专门为隐私和保密数据编程的语言。

Lee 的另一个洞见可能对中国更有用。IT 技术的这个用分层解决复杂问题的方法，现在还没有被用到物理设备的制造中来。

比如说造大飞机，现在就没有软件层面的分层。这里面有个根本矛盾。

普通计算机如果同时运行多个程序，那哪个程序先结束运行、哪个程序运行得快一点慢一点、都无所谓，其中没有什么时间协调。而飞机就不一样了。飞机各种部件的运动，是通过不同程序分别控制的。飞机的各种机械动作必须协调得非常好才行，每个控制程序什么时候启动、什么时候结束，必须分毫不差。可是这种时间协调不是通过什么“飞机操作系统”统一指挥的 —— 各个参数都是在实验中分别微调出来的。

这就意味着芯片一旦调好就不能换了。新一代芯片的计算速度会不一样，原有的协调就会被打破。大飞机一旦设计定型，当初用什么芯片就得以后一直用这个芯片。飞机制造公司不得不买很多芯片长期备用，要保存好几十年 —— 像空中客车公司甚至是用液氮保存芯片。

不但飞机，现在包括汽车在内，凡是涉及到物理操作的机械设备的计算机化，都存在时间协调的问题。我们急需一个“协调层”。

我觉得这可能是中国的一次弯道超车的机会。中国是个制造业大国，而且恰恰正在制造大飞机，将来必定是这项技术的最大用户。不过美国已经有了一些积累，2006年就有了称为“赛博物理系统（cyberphysical systems）”的研究立项。

总而言之，现在中国面对的不是一两项关键技术，而是一个建立在分层模型上、树大根深的信息技术文化。除非有新的分层机会，你很难另起炉灶。“中国标准”不能刻意为之，最好抓住关键机遇，解决真问题，才有可能创造一个新体系，那才是真正的大国风范。

![图片](https://piccdn3.umiwi.com/img/201807/10/201807102236110060493196.jpg)
