技术塑造了我们现在的生活,那么又是什么在塑造技术自身呢?很多人会联想到程序员在其中起到的作用。但是,如果我们把人从技术的整体里分离出来,去探究技术内生的秩序或规律,或许答案就不那么直观了。而且从长远来看,这种方法比争论是人主导技术还是技术主导人更能增强个体的主体意识,因为排除个性的技术能帮我们避免陷入权威和神性的陷阱。
在谈论什么塑造了技术之前,我们不得不回答一个前置问题:技术是什么?布兰恩·阿瑟的《技术的本质》中给出了一个我认为比较合理的定义。
第一点,技术是由已有的系统组件组合而成的,这话不难理解,我们做软件项目也会引用很多外部组件。那么组件又是什么呢?所以他紧接着给出了第二点解释,技术的每个组件自身也是微缩的技术。这才是该定义最有趣的地方——递归解释。我们知道凡是递归总得有个出口,所以他最后给出了第三点解释,所有的技术都会利用或开发某种效应。也就是说,每一个技术都能发挥某种功能。
听完这番解释,是否有一种不明觉厉,又有一种听君一席话如听一席话的感觉?是的话,咱也先别急着否定。看看下面的这张图,它是著名的计算机科学的入门书《计算机程序的构造和解释》,简称SICP,关于解释器工作原理的图示。解释器就是利用 Eval 和 Apply 两个函数相互递归解释的。在软件的世界里,类似的例子还有很多。例如,编译器实现自举——利用老的语言写新的编译器,再用新的编译器编译出新的语言。
Eval & Apply
如果从软件的规模这个角度来考察这个定义,我们就会发现软件可以无限庞大下去。基于这样的假设,我们可以推论出软件并不是一种物理现象。1972年,荷兰计算机科学家迪杰斯特拉(Edsger W. Dijkstra)将软件描述为“分层系统”,因为我们需要用分层来解释和实现我们所构造的现象,而不是经由物理规律来考验这些现象。所以 SICP 一书中将软件称为“程序认知论”(阿贝尔森和萨斯曼)就非常有道理了。
软件工程师常常把分层系统看做是解决某些复杂软件问题的良药,然而事实上,软件其实就是分层系统,基于 OSI(Open System Interconnection) 模型的技术栈就是一种典型的例子。在 OSI 出现之前,曾经有项目尝试适配各种主机以完成各种异构网络之间的联通,但是均以失败告终。而 OSI 引领的标准让世界各地的工程师们协作起来逐步推进了网络技术栈的发展。现如今,我们操作图片时,已经完全无法想象它和比特之间的关联,因为它们已经相差得太远了。远到我们无需考虑有比特这么回事,更不用说底层的半导体控制的电流开关。
1962年,美国著名科学哲学家库恩在《科学革命的结构》提到是范式危机引发了科学革命,例如海森堡的测不准原理对物理学的冲击,在经典物理学无法解释微观现象时科学革命发生了。我们承认自工业革命以来,技术发生了巨大的变化。如果假定技术的发展也存在范式革命,那么其中的危机是什么呢?爱德华·阿什福德·李的《柏拉图与技术呆子》一书给出了两点总结,他认为软件日益增加的复杂性和意想不到的功能是技术革命中的危险和机遇。
复杂性体现在以前可以工作良好的工具和模型,在更复杂的情况下,不能很好地工作,甚至崩溃。比如应付几十人并发的系统在面对上万人的并发时很容易就崩溃了。另一个表现则是项目失败的可能性增加了。比如,用瀑布过程开发大型系统,这种管理复杂性的方式会导致在需求设计阶段的异想天开,更可能招致错误和失败。
至于意想不到的功能,就是想常人不敢想、做常人不敢做的事情。2007年,苹果公司推出的苹果手机。它的创新性在于突破了手机是用来打电话的惯性思维,原来手机可以当电脑使用,反而原来打电话的功能才是附加功能。事实上,苹果手机最具革命性的一点是引入了应用程序的开发平台,这就让全球数百万富有创造力的程序员能够为苹果手机开发各种应用程序。程序员、苹果公司的应用商店和用户就形成了良性的服务网络,从此开启了移动互联网的时代。与苹果手机相近的创新就要数区块链网络了。它的意想不到之处在于货币居然可以由个人发行。区块链网络自带生态快速形成了以开发者、投资(ji)者和矿(Miner)工为一体的服务网络。
危机是技术革命结构重要的组成部分,但是如何清晰、准确和精准地界定危机依然是个麻烦的问题。当事物发展到复杂难懂的地步时,我们应当回到最初的基本假设上重新思考,这个过程也被称为第一性原理思维。在信息技术的历史学脉络中,我们能迅速地把握到几个关键的定律。
首先是摩尔定律。1965年,八叛徒之一、英特尔的联合创始人戈登、摩尔做出一个著名的预测,集成电路中的元件的数量将在未来每18个月翻一番。这一定律就一直是半导体行业的指导原则,而且延续至今。不过,大家有没有思考过一个问题,那就是既然摩尔定律一直起作用,那么要么硬件逐渐便宜下去,我们怎么还没有实现硬件自由呢?
因此,我们不得不提到另一个安迪-比尔定律。这个定律的原话是安迪所给的,比尔全都拿走。其中的安迪就是今天全球最大的个人计算机零件和CPU制造商英特尔公司的创始人兼当时的 CEO 安迪·格鲁夫,而比尔就是比尔盖茨。这条定律的意思是微软等软件公司的新软件总是比从前的软件更加耗费资源,以至于完全抵消了英特尔等硬件公司带来的性能提升。我们的切身体验也是,你拿着老旧的手机去运行现在的软件会感觉慢得不要不要的。
摩尔定律和安迪-比尔定律带来的最直接影响就是在产业上规定了技术的发展会越来越复杂。
另一个比较关键的定律就是梅特卡尔定律。 1980年,3com公司的联合创始人罗伯特·梅特卡夫提出一个现在被称为梅特卡夫的定律,该定律认为,网络的价值与网络上兼容的通信设备的数量的平方成正比。如果单台设备的价格为1块钱,那么一个连接10台设备的网络的价值就是 100 块,100台就是1w块,以此类推。
梅特卡尔定律在经济层面上肯定了网络的规模效应,互联网或区块链行业都是这一定律的实践者。
如图所示。Z 字模型,其上层是技术革命的危与机,下层是技术发展的基本定律,而中间这条线就是从基础规律寻求技术革命的攀爬梯。如果把技术发展比作修仙小说,底下三条定律就是筑基,上面那条线就是羽化成仙,也就是凡人的终极目标。
Z 字模型
在 Z 字模型中,危机并不是一蹴而就的,虽然三条基本定律告诉我们危机迟早会发生,但是依然需要做很多的工作,而这些工作都是由工程师完成的。
工程师们的日常工作到底是什么呢?我知道有人会说写代码,但更为清晰的描述是《技术的本质》中的标准工程:
标准执行一个新项目时,在已知可接受的原则下聚集方法和设备的过程,是对已有技术的新的计划、试制和集成过程。
这个描述比较拗口,我实例化一下。以敏捷软件工程为例,我们在执行一个新项目时,在时间、资源和成本的约束原则之下,通过 Discovery、Inception 等方法快速识别问题并启动项目,购买云服务资源,整备环境,管理和配置持续集成服务器,使用 DDD 建模,TDD 持续交付可工作的软件。整个过程中,我们会评估和选择满足功能及跨功能需求依赖的技术组件,试验和探究新的技术组件,并且集成遗留的系统、多个代码分支、多套测试和发布环境。
根据康威定律,当项目较大时,标准工程就演变成了一种企业组织形式,此时项目的成败会更加依赖围绕其周遭的利益关系网:技术团队、业务部门、财务预算、部门领导以及其他利益相关者。
总而言之,技术发展要求工程师处理的事务更加多元化,也更加复杂。优秀的工程师是什么样的呢?这就不得不提《浪潮之巅》的作者吴军划分出的工程师的五个等级说。
吴军借鉴了前苏联著名物理学家朗道提出来的朗道等级。朗道曾经根据物理学家的贡献把他们分成了五级,每一级之间的贡献相差一个数量级。对于工程师,也可以做同样的划分。
工程师的五个等级
从这个等级阶梯上,我们看得出来,成为拔尖的工程师有多难。每个等级的工程师之间的差距是数十倍的。好的企业想要获得第二等甚至第一等的工程师,就需要一个由工程师构建的完整金字塔:要想出几个第一等的工程师,就需要有足够数量的第二等工程师,以此类推。
苏格拉底曾经说过“我是思想的助产婆”,他说的是自己能够通过苏格拉底似的提问引发别人积极思考。那么,工程师们则可以理直气壮地说“我们是技术的助产婆”,工程师必须学会迎接软件复杂性的挑战,坚定地不放过任何细小的机遇荡起的涟漪。在标准工程的日常工作中,一脚把新生的技术踹出去。
所以,自信点,我们工程师的使命无上光荣。
于 2022-01-16