Minecraft应该怎么玩? 编译原理解放生产力!

语言之争

哪一种编程语言更好这个问题, 自计算机科学诞生以来就争论不休. 计算机发展之初, 各种语言相当简陋, 今天新出现的各种编程语言已经比过去的概念先进了很多很多, 但是语言之争依旧.

各种编程语言发展到今天, 编程的方式也多样化起来, 有用鼠标就能完成编程的, 有语音识别编程的. 语言的概念也十分丰富, 从传统的面向过程编程, 到流行的面向对象编程, 到函数式编程, 还有别的更抽象更神奇的小众语言.

如今对一个技术上的特定问题, 基本上能够找到对应的最适合的语言来进行开发. 例如要写和硬件密切相关的驱动程序, 那么C语言和C++语言是十分合适的; 如果要写网站, 那么PHP, HTML5, JS等等诸多语言也是非常方便的; 如果要写网络爬虫, 那么Python, C#, Java会节省我们非常多的时间. 没有一种语言能够全方位的适用于解决各种不同的技术问题, 例如用C++来写一个类似php功能的东西就非常费劲, 用来写爬虫更费劲. 而且这种费劲并非是因为你需要用到更高深的算法和技术所带来的费劲, 而纯粹是因为这种语言本身就不适合做这样的工作, 而让你感到费劲. 这种费劲是没有意义的.

 

Minecraft

这个火爆的积木游戏与一门编程语言有很多共同之处. 都是要用一些基本元素, 来构建复杂的系统. 这个构建的过程都很让人着迷, 可以自由发挥出作者的想象力.

我认为Minecraft目前的玩法十分淳朴, 甚至有些过于淳朴. MC的世界基本单位是一块石头, 或者一块木头, 或者一块别的什么.

如果一个人要用这样的基本单位建造自己的小屋, 那么这个过程是令人享受的, 因为一个小屋的规模不大. 这就像我们用汇编语言写一个简单的十进制BCD码转换器差不多, 我们用最基本的操作, 在寄存器之间移动数字, 令各个寄存器互相加加减减, 最后搬运数字到指定的内存里.

如果一个人要用这样的基本单位来建造一个旺园学生公寓这样的建筑, 那么这个过程是激动人心的. 这里面有非常枯燥的部分, 但是在枯燥之中又充满了雄心. 最后成功的欲望会让人克服掉过程中的枯燥. 这就像当年求伯君一个人在房子里闭关敲汇编代码. 一个星期不出屋. 最后DOS 版的汉字字处理软件 WPS 横空出世.

如果一个人要用这样的基本单位来建造一个西安市, 那么这个过程是非常无聊的. 这个过程不知道要花掉多少的游戏时去做挖矿, 砍树这样的无聊的事情, 不知道要耗费多少精力去日复一日做重复的事情. 如果要一个人用汇编语言去写一个搜索引擎, 也是非常非常痛苦的. 这时候Minecraft 出现了团队合作, 程序员们想出了软件工程学. 众多的网友聚在一起建造宏伟的建筑物, 温馨的小镇, 繁华的街道; 众多的程序员通过规范化接口, 文档共享, 模块化编程来开发大项目.

如果MC允许玩家一回合就能造出一堵墙, 或者能够让玩家自定义一个基本元素, 那么建造的速度就会大大提升, 人类的生产力就得到解放. 这是一种递归式速度增长的生产力解放. 面相对象编程思想的诞生, 带来了继承与派生, 带来了很方便的黑匣子思想.

这还远远不够.

 

现今编程语言的局限

过去汇编语言时代, 越多的开发人员同时开发一个项目, 耗费的时间反而越长, 因为最后大家都陷入了混乱之中. 软件工程的出现大大解放了软件开发的生产力, 使得越来越多的人可以同时并行开发一个大项目. 软件工程思想越现今, 一个项目的"并发线程"就能开得越多而不紊乱.

软件工程学让技术密集的工程可以转化为产品流水线那样的形式, 用堆砌人力的方法来加速产出产品的速度. 但是并不能够让一个人的开发效率得到提升.

我相信这一天终会到来, 那时候一个人就能够轻松开发出搜索引擎, 能够轻松做出操作系统, 搭建庞大的网站, 或者物流管理系统. 多人的团队合作在此基础上开始开发巨型工程. 这种时代的来临不再依靠软件工程学, 而是依靠编译原理技术的下一个质变. 如今的编程语言, 在进行大数据处理的时候, 对重复的数据抓取, 数据清洗, 矩阵运算, 都要用很原始的方法来拼凑出来, 有种每次都要用砖来砌墙的感觉. 如今的策略游戏已经越来越没有创意, 其复杂程度如果太复杂, 人类不好入手, 很多概念记不清楚; 如果太过简单, 游戏就失去了可持续性的乐趣, 摸清游戏规律之后就没有兴趣再去探索. 而如果编译原理技术空前发展, 学会一种简单而又强大的编程语言是人人必备的本领, 那么策略游戏的玩法就不再是玩家亲自想策略, 而是开发出自己的一套决策规则, 让机器人去智能玩游戏, 机器人的思想是人们通过编程语言塑造出来, 而这个塑造的过程却并不复杂, 不需要new一块内存空间, 开一个红黑树, 不需要, 只需要像设置防火墙规则那么简单, 但又比防火墙规则要有趣.

Wolfram 这门语言让我看到了科学家们的积极尝试. 虽然这门语言只是把诸多领域的算法打包成为非常容易调用的api接口, 让人们可以非常傻瓜化的求出最短路, 求出最小费用最大流, 甚至傻瓜化进行人脸识别, 但是他并没有达到让人轻松接入各类问题的本领, 我们也没有看到他变得流行起来. 但这样的尝试让我感到非常开心, 我希望有更多这样的伟大的尝试出现.

 

创造一门新的编程语言的门槛过高

创造一门新的编程语言需要非常多的计算机理论知识, 用到很多离散数学里面抽象的概念以及基础算法里面的很多纷繁的算法. 这些都是语言诞生的障碍. 如果未来的游戏能够让人设定属于自己的机器人去自动玩游戏, 那么每个游戏单独配备一门适合这个游戏的语言是非常必要的, 这种语言并非要玩家去敲代码.

无论开发出多么先进的编程语言, 如果编译原理科学没有得到空前的发展, 那么我们仍然得不到递归式增长的生产力解放加速度, 进入不了编程语言爆炸式进步的时代.