我学过一点点软件工程,但这次,我不想描摹它光鲜的样貌,相反,我想带你到幕后瞧一瞧,看看这门学科的初衷与现状,看看能不能窥到未来的一鳞半角。
这门学科被设计出来,是因为在上世纪的八九十年代,很多项目如雨后春笋出现,电脑性能飞跃,软件项目暴增,这时小手工业者的模式无以为继,这一般被称作软件危机。
But in the next decades something completely different happened: more powerful machines became available, not just an order of magnitude more powerful, even several orders of magnitude more powerful. But instead of finding ourselves in the state of eternal bliss of all programming problems solved, we found ourselves up to our necks in the software crisis!
— Edsger Dijkstra, The Humble Programmer (EWD340), Communications of the ACM
但未来的几十年里,完全不同的事情发生了:我们有更多更强的机器,甚至有多个数量级的性能提升,而非仅仅一个数量级。但我们没有一劳永逸解决全部编程问题,相反,我们更深地陷入软件危机之中。
——艾兹赫尔·戴克斯特拉,谦逊的程序员,《Communications of the ACM》
要知道,在此之前,编程往往是匹夫之勇,几乎都有点个人英雄主义,或者带点偷拆电器的私密感。但那个时候的产物,很难说多么可圈可点。就好像现在看七八十年代的电子游戏,如同你小时候很爱的拨浪鼓,当然你可能还喜欢,但它已经不能满足你对玩具的预期了。那时候的软件就是这样,青涩、粗糙,一个人就能包圆,几个通宵就能赶出来,包在盒子里面寄出去就是一份收入。
但当项目与需求更具体更复杂的时候,合作与社会分工的舞台就搭好了。我们习以为常的软件逐渐出现,浏览器、办公套件、聊天软件、视频会议等等等等。它们九成九都出自大公司之手,或者更严谨一些,出自大公司里无名的雇员之手。不同于 自由软件运动的黑客 ,这群参与分工的人,是想老老实实在软件行业谋生的。 如果一个行业有许多人参与,这时候,这群人之中爱好与兴趣不再是基本标准,那就势必要超越特定成员的个体性,因此我们需要一种程序员的技能考量,而非软件开发的品味与气质。例如,设计与执行的流程要被切割开,但设计者往往不需要太多,但物以稀为贵,designing会比engineering更吃香。
可以说软件工程是一次软件开发的“理性化”过程,这种理性化接近于韦伯的定义。一个系统达到某个界限或者阈值,就步入了人类所无力驾驭的复杂甚至混乱之中。而人类驾驭混乱的方法?那自然是利用聪明才智。我们的工具箱里有什么?量化、计划、监督、对比如此种种不一而足。
这里面我最感兴趣的是计划。我们喜欢讲预则立不预则废,几乎也是这种理性化逻辑的延伸。而预期,就是把未来提前度过的方案。我们也见到过某些视频里面一个人迅速变老,或者延时摄影下的星轨、花朵开放或者食物腐烂。对我而言,这就是理性化的视觉化呈现,而理性化的力量在于,用一条可以依赖的轨道,限定了来路与去处。
这种可预期性,就如同人类的有死性。实际上,软件工程的一大要义,在于使用较低的成本在更高抽象层次上模拟实际的经过,更早地砍掉不要的枝节。翻过来说,混乱的软件开发,诸多方向并存的方案,是生命力流泻的表现,各个倾向都可以试试,各种方向都还没走远,如同年轻有朝气的青年,时光大把,肆意挥洒。
理性化的一大效用在于其决断力,这种说一不二的能力,可以预先解决掉浪费的资源。在一种更加抽象的意义上,非理性的路径已经失落了,尽管在现在这个时间点这尚未明确。它提前下了断语:“这是死路一条”。
但这种理性的自我确证与自我开拓,可能也有一种单一化的缺陷。为什么这样讲?在理性的世界里,每次开战永远是一样的胜负,进而再次进行下次备战。在任何可以理性探究的宇宙里面,存在的样貌都是相似的,就如同广泛推广的商住一体楼,经济有效广泛推行。如同卡尔维诺小说里面那个巨大的城市,不同区域通过机场相互联系,除了机场牌子上不同的地名,建筑与布局别无二致。从道理上讲,生命之流类似于绵延的开展形式,具备一切的生命可能。但这毕竟是一种受限的形式,导致其单一乏味的原因,可能就在于这条通道太过笔直,太过清晰了,你见过一颗不长旁支笔直向上的树吗?除非你一刻不停地用力砍。
但道理的推演一定是流溢发散的吗?这难道不是你自己的思维习惯,将它扩大为普遍现象是否欠妥?我完全同意。但我们看看英文里面,sup-pose是向下安置,ex-pect是看向外面,这是定位与观察动作的缩影。而日神,阿波罗,明晰理性的确纠缠在这上面,需要看得见才能有稳定边界,才能有公序良俗。讲公序良俗不是危言耸听,如果所有人都失明,这个社会会即刻停转停摆,如同《失明症漫记》里面描绘的炼狱式场景。从结果上来说,我们离不开视觉,需要理性,但完全的视觉与理性也会让生活失色。试想只有视觉这一个感官的人,听不见也没有触感,他几乎是难以独立完成任何事情的。
但不要误会我,理性未见得只有那种乏善可陈的平板未来,德里克·帕菲特,令人肃然起敬的英国伦理学家,与威廉斯并立。他以谨慎严密的分析哲学近路阐述了人的自我同一性,还原视角下的契约,在《理与人》中以理性保全了人类的伦理,在还原论下保全了正直、诚实。有趣的是,他在书里也提到了管道这个讲法,最终也超出了隧道的束缚:
真相令人感到压抑吗?一些人可能发现如此,但是我却发现,它是令人感到解放和感到欣慰的。当我过去认为我的存在,是这样一个进一步事实的时候,我就好像囚禁在自我之中,我的生活就像一个隧道,我在其中一年比一年快地穿行着,而在隧道的尽头是一片黑暗。当我改变了我的观点的时候,我的玻璃隧道的墙壁就都消失了,我现在生活在露天之中,在我的生活和他人的生活之间,仍然存在着一种差异,但是差异变小了,他人更加近了,我对自己余生的关心,比以前少了,而对他人生活的关心,则比以前多了。当我过去相信非还原论者的观点的时候,我还对我不可避免的死亡更加关心。在我死亡之后,没有一个活着的人是我,现在我能够对这个事实加以重新描述,尽管后来将有很多经验,但是这些经验中没有哪一个经验将通过诸如经验记忆中多包含的那样的直接联系与我现在的经验直接联系,这些未来的经验中的某一些经验,可能通过一些较不直接的方式,与我现在的经验相关联,后来将有一些关于我的生活的记忆,而且后来可能有些受到我的思想影响的思想,或者有些遵照我的建议所带来的结果,我的死亡将打破我现在的经验与未来的经验之间的更加直接的关系,但是将不打破其他各种各样的关系,就没有一个活着的人将是我这个事实而言,这就是全部。既然我已经看清了这一点,那么我的死亡,在我看来就不再那么糟了,代之以说,我将死亡,我应该说,将没有什么与现在的这些经验以某些方式相关联的未来经验。
死亡就是死亡,对个体而言,连续性在此终止。即使是在纸面上或虚拟环境下,死亡仍然是一种损伤,或者更广泛的,至亲之人的离去,也是对我的损伤。因此,体验、阅读和思索,某种程度上也是先走一轮鬼门关。
讲到这里,我会想起电影《一一》里面借年轻人之口讲的,看电影让人生变成之前的三倍。在电影之前,这是阅读的特殊能力。而且,跟电影里面这位少年的悲剧结局类似,这种生命经验与真实体验并不相同。
最直接的,在古代中国,能够驾驭文字的人,是士人阶层,他们熟习的经典,远远超越自身的处境。那时候的交通与大范围流动都很罕见,没有大饥荒或者王朝更迭几乎见不到,一件事情发生后要花很长时间收到消息,就像我们现在才观测到宇宙大爆炸的余晖。但于此形成对比的,是士人的天下观念,周人大翦商、鲁国的混乱、楚国的辞句、高飞的鹏鸟、不死的老树、天上的仙宫、远方的神界…思维世界的充溢使得偏居一隅不再煎熬,小地方出来的士人依然能有世界视野。
可以说,阅读能给人提供别的生活,甚至是别的生命体验。我们常有对游戏的批评,即用虚拟取代现实,给人以虚假的生命意义。后半句可能还比较有针对性,但前半句其实对书籍一样有效,认真阅读书籍,就会把整个人完全吸进另一个环境中,而游戏的缺陷,也许不在于不真,而是这种真别有用意。读者就是“位面穿行者”,我们可能在书里不务正业、男盗女娼、杀人越货,也可能幡然醒悟、纤尘不染、崇高不朽,或者居于两者之间,平平无奇,成为大时代的背景板。
现在来看,阅读是不是一件最最奢侈的事情?它需要长时间的投入,我倒不是要用时间就是金钱这种理由,而是说,这是牺牲自我时间的多样性,来成就思想领域的另一种多样性。
是不是有点像在纸面先把软件设计好,再开始编写?当然这时候我们从设计者走到了使用者这边,这个流程从一端到了另一端。但为什么这里的感受,不是逼仄明确,而是开阔甚至有点混乱的呢?
区别可能有很多,但我认为很鲜明的是,这时候读者的“我执”前所未有地弱,而这不代表个人的消弭,而只是暂时关闭了免疫系统,说真的,文化领域真的有免疫可言吗?中华文明的伟大难道在故步自封敝帚自珍吗?这不是说软件没有设计感,软件当然也试图塑造我们的生活,我们对世界的某些理解已经完全组织成了新的形式:我们会在手机上选择菜品,选择目的地,选择商品,选择…你也发现了,为什么都是选择呢?
选择有时候被看作是个人证明自身存在的一种方式,“我选即我在”,想想在备考期间连续做很久的选择题,这种既视感就出现了。实际上,抛开考试的压力,这种反馈循环是非常让人安心的,在这种结构下,人生目的就被压缩进几个有限的选项之间,而最终的巨大成功,就来自于所有这些选择的正确数目。
再有,现在的心理测试逐渐成为一种社交手段,让人喜爱的测试会将人生映射到几百道题目之中,你自己的生活困境断然不在它的视野之中。心理测试作为一种时尚风潮,很关键的因素在于,它给予你一种选择中的姿态,这种姿态是个人自我确证的样子,可能是几个字母,只要得到命名,只要这个我选择了,这种存在方式就获得了合理性。
其实还是理性化的策略,我们有时候叫做剪枝,就有点类似于上面说的砍树干,设想你在不同时间做出的所有选择都会诞生不同的世界,那么所有的决策会组成一颗倒着长的树,或者说构成一棵树的树根,上面生长的人就是你。
但这里的生长,当然不是生理上的滋养,而是一种文化意义上的叙事构成。而语言文字的想象边界远远少于其他媒介。这有点人文主义者的自持,但我觉得一定程度上无关立场。之前我也提过不同媒介的不同侧重,当时是按照媒介与感官的关系来切入的,实际上不同点不仅体现在感官上。
我们可以借助莱辛《拉奥孔》的分析来看,莱辛区分了诗与画的不同属性。诗是声音性的,画是视觉性的;诗是时间性的,画是空间性的。举凡古典主义的雕塑绘画,往往只能反映形象在空间中的一个切面,比如被蛇吞噬的拉奥孔、目光炯炯顾盼自雄的大卫,高天上衣带飘飘的众仙…由此也可以看出杜尚《下楼梯的裸女》的特殊性,空间性陈列的优势与缺陷都是太过直接,它会立刻唤起你的感受,且多半是欣快的。而诗歌,或曰文学,必须关照作为过程的一段时间,而对于时间的刻画,没法具备特定的判断,因此诗歌中可以出现极端丑恶的过程,随着令人不快的声音延续下去,甚至给人一种自己已经作恶的感受。
可以说视觉性媒介,包括视频,其中画的面向是明显的。而文学作品的声音性与时间性也是突出的。但这种媒介命理学的分类,我也不完全买账,没有必要把莱辛的分析过分扩大,有生拉硬套之嫌。如今的媒介多半尝试取得多种媒介的混合效果,例如电子游戏,叙事性的时间延伸与空间性的囊括笼罩并重,是玩家所期待的。当然某些游戏有侧重,观光游览类与战略决策分别构成了光谱的两端。
电影,或者说电子游戏产品其实是兼具诗画风格的,那么制作过程中呢?前面所提到的管道与树枝形象其实是很真实的,可以说在软件设计的流程中,我们试图用视觉化的形式做约束,将文本的内容映照到视觉形象上。
提到视觉形象,这与选择也有关系,选项往往有种漫画化的情态:这个情况下你会如何做?你在这里会有什么心情?与文学性的内容相比,令人感到愉快的视觉形象相对而言比较有限,是明确而可以界定的。在软件设计里面,我们难以忍受某种可能性的蔓延与衍生,我们所期待的是明确而可选择的前景。
在软件设计中,存在很多时髦的框架与结构,但代表上世纪软件工程思想的,其实叫做设计模式,有点类似于武林门派的最早原典,现阶段的实践很大程度上还是之前设计模式的扩张与覆盖。
你会发现,无数的软件,按照设计模式被分门别类,将不同的模式组合,就可以得到具备特殊功能的软件。而作为有限选项之一的模式,其本身也是具备漫画化情景的。包括工厂模式、单例模式、代理模式、桥接模式。可以说软件设计采撷了不同领域的基础隐喻,成为自身设计工具库的一个部分。
软件设计其实很大程度上都是隐喻抽取,这一点非常有文学创作的特色,即用特殊的组织模式进行创作,材料源于生活中内容的演绎与引申,包括线程管理、内存管理、系统调度其实都有餐厅、宾馆、流水线的影子。包括某些调度模式,其实非常像工厂所有者对员工剩余价值的攫取,当然现阶段电子元器件不能被认为有智能。但至少可以说明,这与计算机的逻辑电路和数理逻辑的重要性可以等量齐观。对于软件而言,可以说其诗性与画性是相互龃龉的。
你有可能说,我不编写软件,也不从事直接的创作,知道这些有多大的意义?我自己也很怀疑,对我来讲这些东西主要是兴趣使然。但真要说起来,似乎还有其他的意义。
你的人生虽然不是软件,但对于你人生的谋划,是不是也往往滑入某几个场景的放大?带薪假期的畅游、田园牧歌的驰骋、科层体制的高处。非常视觉化,非常有限。某种讲法说,其实人生也是自己的创造,甚至有种说法,人是自己创造的叙事。
我们当然会想,人生只有一次,必须在有限的时间中获得好的结果,我们一定要做计划,这是为了取得更好的结果必经的过程。这是与有限资源的斗争,这是努力削尖脑袋的尝试,这是残酷的竞争之路,也是令人疲惫的漫游。
这几乎成为一种诅咒,而在现在计划与理性化模式如此强势主导的情况下,我们很渴望将自己的人生活成一种软件,这样就可以按照可见模式生存了。这正像是1844手稿里面所讲的,人在从事工作的时候,只觉得自己像个动物,而从事动物性活动时候,才觉得自己像个人。
此时人性已经被放逐出这个失乐园,真正的人性永远需要在精密计算与严格规章的后面,“等我实现财富自由之后就…”但财富自由者寡,多数人都要为生存持续工作。真正实现财富自由的人呢,他们会停下来,陷入我们在匮乏之中想出的奢靡环境之中吗?且不说会不会,这种丰裕想象,由于缺乏实际的经济基础,势必因为材料匮乏陷入空洞。最终留下来的,就是几个连贯想象中的断片,而这些形象从未连贯成为24帧的动画,而同时,你的人生在沉思中匆匆流过。
这种否定逻辑,力量始终是有限的,在否决现实之后,就陷入了高人一等的自满之中。但真正的人生,是软件结构的一鳞半爪吗?还是说,如同多线程,一片混沌,纷乱如麻,但仍然运转得起来?又或者说,用软件来拟合生活,恰是一种本末倒置?软件的代偿与人格的影子,消耗的是你的人生,是实打实的人生,即使经过软件抽象与多层掩蔽。
评论区
共 5 条评论热门最新