h8

我为什么要写e8vm

我读phd的时候写程序搭系统常常自己从头手搭。有些人因此经常觉得我傻,觉得我做得不对。但我其实心里有个很简单的原因:我更愿意在我自己了解的软件上工作,而自己从头写能保证我对我用的软件了如指掌。

我也不是没试过用别人的软件。我也见证过身边的人用别人的软件。用其他人的软件,弄个东西跑起来往往很容易,但是要做深度调整和优化就往往很难了。结果往往没有自由,也就没有创新,只是一层抽象上面再叠加另一层抽象。

然而,从头写软件其实也并不解决本质问题。往往其实只有写的那个人是唯一懂的人,其他人都是外人。当这个软件作者换了个工作,或者仅仅是对一个项目不再有兴趣的时候,项目实际上往往就死掉了。代码可能折腾一下还是能编译能跑的,但是要做深度调整和优化就往往很难了,即便是有其他人有愿意来做这个事情。我自己写的软件对于他人来说也会变成别人的软件。轮回往复。

我想止住这轮回。

代码本质是一段可执行逻辑的形式描述。它其实是可以有自己独立的生命而存在于世的,就像文学作品一样。人们应该通过阅读一段代码就能了解它是在做什么。

代码可读性甚至比代码性能更重要,因为时间往往能打败一切。《射雕》里黄裳为报家仇避世练《九阴真经》,几十年练成之后出山发现仇人已经都死光了。岁月是最牛逼的杀猪刀,这在代码界也是一样的。而只有可读的代码才是不朽。不朽才能笑到最后。

然而,今天的代码往往极为难读。随便上github或者coding.net上找一个有几千行的项目,你能准确估计出要彻底了解这个项目的代码需要多少时间吗?“彻底了解”可能是个不太好定义的概念,那我们换个问法:你能准确估计出把这个项目徒手翻译成另一种语言需要多少时间吗?

我曾经尝试把v86翻译成Go语言,但简直不知从哪儿开始下手。逐个文件逐行翻译恐怕是行不通的,因为总不能连写几千行的代码但甚至编译都没编译过一次。一个可能更可行的办法是对照着git日志从头用Go语言重复一遍开发历史,但这就相当于要把原来走过的弯路也都重新走一遍,似乎并不比自己从头开发好到哪儿去。

如果有文档呢?有文档和注释的代码更可读吗?

有可能,但写代码的人都不喜欢写文档,并且他们有十分充足的理由。首先,他们自己写的时候不需要文档,因为代码的设计都在他们自己脑袋里,不用写出来。文档在当下是没有用的,只是可能在以后才有用。其次,代码总在变,刚写过的文档经常没多久就过时了。所以问题来了:大概注定要被删掉重写的文档,又怎么能说是在以后会有用呢?最后,好的代码往往是自解释而不一定需要文档的。模块名、文件名和符号名都是可读的文字,关键字也都是可读的文字,为什么要把代码所表达的逻辑再以另一种方式用可读的文字重新写一遍呢?而且还没有代码本身精准?

这事儿应该有更好的办法。

所以我常常琢磨,为什么代码本身常常不那么可读呢?

对于这个问题,很多人给过很多解释,也做过很多改进的尝试。但大部分都是技术性的,比如设计一种新的语言,一种新的编程模式,一种新的可读性测量标准……

这些当然都很好。但我觉得其实有个更本质的问题:代码不可读是因为代码写出来就基本上不是去给人读的。就没人去读。

我们读书,读文章,读博客,读微博,解读绘画作品,甚至读剧本读食谱,但是我们几乎从来不读代码。甚至即便是IT界的职业程序员,也常常对读大项目的代码心存畏惧,能不读就不读。就更别说各种初学者和业余爱好者了。

我五年半的博士读下来可能还不是总能写出极好的论文——写作还是很难的——但我至少懂得了如何提高自己的写作能力,那就是必须不断写东西给别人看,听取别人的反馈意见,让其他读者告诉你文章哪部分他们没读懂,读哪部分的时候开始犯迷糊了。听取别人的阅读反馈是提高写作的唯一办法。

代码也是一样。

所以,我想建一个网站,让人们可以在上面发表自己的代码,订阅别人的代码,互相读代码,就像互相读微博读博客读对方生活中的故事一样。

有人可能会说:不是已经有Github了吗?

说的好。但我以为,Github是分享平台,而不是阅读平台,而只要没有阅读,就不会有可读性的进步。在我看来,一个代码阅读平台要鼓励大家阅读必须满足以下这些特征:

  • 所有的代码都是用一种可读性很好的语言来写的。
  • 它要能自动把一个大项目拆分成小块,让读者可以从小读起,开卷有益,而不是要把所有代码都读完才能知道这段代码到底在说什么。
  • 它要能自动为一个大项目生成一个提纲挈领的目录,使得读者可以对项目的结构一目了然。
  • 代码必须在网页里直接一个点击就能编译运行。代码不仅仅是文本,它不是死物,而是活物。

这是我想建的网站,一个代码阅读的网站。而E8VM是这个网站的核心基础技术。E8VM为可读代码而构筑,同时自己也要构筑成可读的代码——至少这是我的愿望。它到底是否可读,只有在网站上线人们真的读过之后才可知道。

这将是一个历史被创造的时刻。这个时刻起,代码将以可读逻辑的形式,独立于它的造物者存在并获得永生。

你愿意和我一起创造这历史吗?