让我们观察一下计算机领域的发展过程,从一百年前到今天,IT 领域的热点,其实一直在向上移动的,所谓向上移动,是指抽象的层级,而这个过程始终都指向一个目的,就是屏蔽更多的底层细节,让计算机的使用者/开发者能够花更多的时间在创造和享受上。
我们从打孔机走到了操作系统,再从操作系统走到了容器化,再从容器化走到了云计算,Serverless,操作系统屏蔽了硬件的细节,k8s 屏蔽了物理机的细节,而 Serverless 则更进一步,直接把集群的细节也屏蔽了,而我们可以确定的是,这个过程在能看到的几十年内,还会持续下去,而且会继续加速。
还记得我刚接触 Web 开发的时候,那会儿 VSCode 也还没有像现在这么好用,部署网站也还是要用 ssh 连接服务器,启动 apache,那会儿 typescript 的普及率和现在也完全无法相比,完成一个基于 Web 的软件开发,需要很多繁杂的小知识,给人的感觉就像是古代的人,既要自己种田,又要自己做饭,还要自己劈柴,烧水,cover 了全部的事情,可是做出来的东西并不好,效率也很低下。
虽然我接触编程很晚,但几年前学到的很多应用层的操作,也基本可以说是报废了,典型的如怎么在 Windows 里设置环境变量,怎么装 Java 之类,现在哪里需要干这些事情。
当某些关键的问题解决之后,或是某些关键的技术成熟之后,一些问题可能就不再是问题,一些经验也将不再适用,一些技能会被淘汰,一些人会失业,这个过程不会停滞,只会持续下去。
再过一百年,可能人类的燃油车的技术,反而会退步,但这对于人类来讲,并不是退步,只是我们的关注点变了,二十年前从事塞班手机开发的工程师,掌握的很多开发技术,也会报废,因为塞班没了。
正在发生的和过去发生的告诉我,作为一个工程师,有这么几点要始终铭记在心:
- 如果没有明确的偏好,那就选择正在蓬勃发展的领域,这里有更多的机会,如果有偏好,要仔细想想,这个偏好是不是仅仅因为你更倾向于喜欢自己擅长的所带来的幻觉。
- 对技术的发展始终保持乐观态度和想象力,不要只做一个新技术的接受者,要尽可能做一个前瞻者。
- 离技术革命越近越好,如果可以,要参与其中,也就是成为造下一代轮子的人。
- 与谁同行,比做什么更重要,尽量多接触喜欢关注前沿技术,倒腾新技术的人,如果他们是你的同事,那再好不过。
- 任何技术和语言,都只是工具,工具的唯一目的就是把东西做出来,不要因为熟练使用某个工具而沾沾自喜,躲在舒适圈不出来。
- 如果每次的新技术出现,都在你的预期之外,那说明你并没有花时间去思考技术的发展趋势和底层逻辑,这对于工程师,是一个危险的信号。
- 一切能通过明晰的路径做到的事情,都具备替代性,要想提升自己的不可替代性,最重要的是抓住机会,在关键的产品中,担任关键的位置,取得关键的成果。
最近有两个让我看了很感动的视频,一个是 Vercel 的 2021 Conf:
还有一个是虚幻 5 引擎发布的黑客帝国觉醒游戏真机演示:
Vercel 和 Unreal Engine,是 Web 和 游戏行业的两个非常具有代表性的明星公司,今年都有非常好的融资成绩,Unreal Engine 今年四月拿了 10 亿刀的融资用以支持元宇宙的愿景:
Vercel 今年连续完成了 C 轮和 D 轮融资:

其实这两家公司做的事情是同一件,那就是为自己领域的生产者,提供门槛更低,性能更强的生产平台,让好的软件/游戏更快地被更少的人开发出来,本质上是一样的。
但我们发现,Web 开发的抽象层级,其实是不如游戏开发的,从这两家的产品切入去看,对比就十分明显,虚幻引擎是 “Engine”,而 Vercel 离开发者最近的部分,其实是 Next.js,它仍然是一个 “Framework“ ,如果把抽象层级排个序,大概是这样:
语言 -> 库 -> 框架 -> 引擎
如果用语言定义一下,我们可以说框架是为专业开发者提供的一整套开发工具集,它在解决专业开发者开发专业代码上,做的很好,开发者可以借助 next.js 提供的各种开箱即用的能力,迅速的开始开发,并且借助 Serverless 完成一键部署。
而引擎,则在框架的基础上,更进一步,提供了多工种的协作平台,不同类型的生产者,可以在引擎之上无缝协同,将生产过程,真正的圆桌化,流水线化。
在虚幻引擎中,开发者可以直接安装市场上发布的各种地图,角色等物料:

当然,你在市场中能买到的,绝不仅仅是地图/角色/纹理/动画,还有音效,材质,蓝图,代码插件等等:

有了价格,就会形成经济系统,能让更多的人全职生产物料,而上层的游戏开发者,则可以直接使用生产好的物料,快速的开始游戏开发。
在引擎中,你既可以使用拖拽卡片来进行编程:

也同样可以使用 C++ 来编写游戏逻辑,完成复杂性高,用卡片连线描述过于复杂的部分,它既让没有 C++ 基础的人,可以借助已有的物料来完成游戏的搭建,同时也让专业的开发者可以在引擎中完成高复杂度模块的开发。
大家都知道,软件开发一直以来都在向着降低门槛的方向进发,但是直到今天,C 语言依然没有落伍,这是为什么呢?其实这并不矛盾,三十年前,我们可能只能用 C 来完成所有场景的编程,而今天,我们只需要使用 C 来完成最底层模块的编写,需要使用 C 的人越来越少,需要使用 C 的场景也越来越少,根本的变化在于,需求复杂度是分层的,不同的层级,有不同的工具,而工具匮乏的年代,所有层级的需求,都只能用较为底层的工具来实现。
还有一个我想讨论的是,很多人都担心,更上层的工具,会有自由度的限制,比方说,带 gc 的语言让我们失去了对内存的自由控制,拖拽卡片式编程则很难实现复杂逻辑的编写,看似更高层次的工具是剥夺了生产者的自由度,然而我的观点是,每一次更高层次的工具出现,其实都是让人们生产出了更好的软件,这些更好的软件,你用更底层的工具去做,未必能做出来。
降低门槛,屏蔽细节,反而让更优秀,更复杂(甚至是性能更高)的软件被生产出来了,一个典型的例子就是,绝大多数工程师用汇编写的代码,还不如用 C 写,然后 gcc 编译出来的代码执行效率高。
抽象层级的改变,会带来范式的转移,什么是范式?当从原子角度看,桌子,电脑,甚至是芯片都没有意义,因为都是一个一个的原子,而从宏观角度看,我们则可以定义固体,液体,虽然电脑和桌子之间有分子相互传递,可这不影响我们把电脑和桌子看成两个独立的部分,同样道理,你也没办法直接用汇编,去进行声明式,或是响应式的编程。
最近元宇宙非常火,我也可以说是一个资深的 VR 玩家,我发现,国外非常火的元宇宙游戏,典型如 Roblox,Rec Room,Horizon,它们和往常的游戏最大的一个区别就是,它们是 UGC(User Generate Content),也就是用户生成内容,在视频赛道,国内的 b 站,国外的 youtube 其实也是如此。
视频剪辑软件降低了视频制作的门槛,让每个独立的个体都可以成为 Up 主,Youtuber,作曲软件降低了作曲的门槛,让独立的个体也可以完成一首多音轨的,现代的电子乐的制作,而在过去,视频可能只有专业的剧组/电视台才能做,音乐也只能专业的乐队和录音室才能完成。
包括现在的短视频,其实也是 UGC,抖音和剪映让视频的创作门槛更低了一步,连背景音乐,过场等,都可以进行推荐,五分钟,就能生产出一个视频,而它和专业的视频剪辑软件相比,自由度,强大程度,当然是差了非常多,可是它成功吗?它非常成功,因为 80% 的人不需要使用那么专业的软件,抽象层级进一步提高,门槛进一步下沉。
而元宇宙游戏,其实就是游戏平台的 UGC 化,游戏提供非常简易,门槛极低的低代码工具,让很多有创造力的用户,可以创造各种各样的小游戏,我最喜欢玩的 VR 游戏 Rec Room 就是其一,它应该是第一个把游戏引擎做到了 VR 游戏中的游戏,玩家可以直接使用 Maker Pen 在 VR 中完成游戏的创造,包括模型,动画,游戏逻辑:
游戏的创造门槛进一步下沉,非常多十几岁的小孩子,在这个游戏中,创造了很多精美的 VR 游戏,包括鱿鱼游戏,吃鸡等等,这也让它成为了一款永远都玩不腻的“元宇宙“。
那回到我们最开始讨论的部分,让我们看看 Web 开发目前处在什么阶段?
在 2021 年即将结束的这个时间点,它处于,框架逐渐成熟收敛,低代码工具市场开始爆发的前夜。
我现在所在的部门,正在为着这个愿景而努力,我们的愿景是让软件开发能够像游戏行业一样高效,富有创造力,这也是我们部门名称的由来:Web Dev Engine(Web 开发引擎)。
我们并不是要做低代码,也不是要做框架,我们最终目标,是打造一个既能让专业开发者编写复杂代码,也能让只懂业务的同学进行业务流程的配置,甚至可以直接让设计师在平台上完成软件的设计,设计的产物,可能就是一个可以运行的前端界面,而不是一张绝对定位的矢量图,让现在割裂的工具链条统一起来,低效的协作方式高效起来,门槛进一步降低,并且让它形成一个能让各种物料生产方盈利的经济生态,显著加速一个软件从无到有的过程。