读:《Google 软件工程》 之 “软件工程”
🤔☕️🤔☕️🤔
翻看目录:“第一章 什么是软件工程”,经历刚才 Code Review 的颠覆式观念后,看这个章节的好奇心陡增,似乎谷歌在做出一套之后,还真有自己另一套玩法。
谷歌说,如果这套软件体系,或者这套软件的最终产品,典型就是指谷歌他们自己家的搜索呗;
假设,它具有 10 年以上的生命期,所谓生命周期,说白了就是,这 10 年得拿它来挣钱,绝不是个赔钱货。在这 10 年里要不停修修补补、不停添加新功能、新特性,别问我软件为何要这样(据说叫软件的恶魔之圈,据说也叫作地狱补丁)。实际上,所谓的 10 年生命期,就是这样修修补补过 10 年,差别在于一直修一直赚,还是一直修一直亏。
对使用方而言,看到的界面没啥变化,我们现在登录谷歌首页,跟 2000 年,也就是千禧年的时候,登录上去看到的样子,记忆里没有啥明显变化。要知道,这可是 20 多年的时间差。细想起来的确会惊到自己,这 20 年有多大的变化,手指头上的汗毛加起来都不够数,更是有多少人头发已经变颜色,有多少人头发开始变得有的没的。可是,谷歌的搜索页面,居然没啥变化。实际上,我没有看到的是,界面背后的软件实现,在持续重构,甚至已经全部重写。
举个例子:就像我在月球看地球,最近这 1000 年,蓝色基调保持不变,规律性小白点在移动,那是台风在太平洋耍存在感;可是要知道,人类最近 400 年,进行的各种活动,建城市、造高铁、拦大坝,产生的地表物质移动,已经超过地球自然条件下,10 亿年以上会产生的物质移动总量,月球看到的地球界面,没啥变化,而地球表面的物质,已经被人类科技重构。
这样的 10 年为起点,在这样长时间变化之下,谷歌开始谈软件工程。这听起来也对,只有长期维护的需求,才能催生出软件工程,至少谷歌这么认为。
实际上,在我脑子里,之前的软件工程概念,似乎是敲代码之外的事情,把它们叫做软件工程,跟谷歌所谓的软件工程,讲的不是一种软件工程。毕竟,直觉上的软件工程,这个词就像架构这个词,很容易跟建筑工程联系起来。而映像中的建筑工程,不就是除了搬砖之外的任何事情,都叫做建筑工程嘛。不管这个对不对,现在看来跟谷歌的软件工程,肯定是两码事情。
谷歌说,编程(Programming)、软件工程(Software Engineering)、计算机科学(Computer Science),这是三码事。只有学生谈 CS,也只有学生时代可以谈谈 CS,工作后就只谈 Programming,当工作很久(Time)、很久很久(5xYear+)、很多人一起工作(Scale)、很多很多人(5xK+)、面临各种约束,不得不的权衡(Trade-offs)、想要很多资源和能力,受限就是基本局面。这个时候,用变化(Change)这个词,用它来窜起 Time、Scale、Trade-offs 时,大家面临真正的挑战出现了,即所谓的可维护性(Maintainability),这个真身,或者说这个恶魔出现时,再谈 SE 不迟,再谈 SE 也更为真切。
Software engineering is programming integrated over time
Programming:日常点滴工作,跨越时间周期去集成,就成了软件工程。
Software Engineering:大白话说出来就是,平时点点滴滴做的东西,持续有用不浪费。
有人会说,不就是可维护性嘛,这有点难度,但也不至于这么难吧。找个老兵维护一下,或者拉个新兵来顶替一下。说得也是。不过这么简单,算不算维护,如果要说维护难,到底难在哪里?
维护难,难在用最小维护投入赚最大钱,或者说难在如何最小维护避免最大的浪费。
在谈可维护性,切换一下思路和视角,越基础越需要维护,越没变化越需要维护,维护基础可以训练自己应大变化的能力,寻找维护时刻,提醒自己技能的边界和价值识别的眼光,要持续突破和打磨。这些反常识和反直觉的维护思维,本身就难以在自己脑子里维护,要能留下深刻痕迹,我们需要一场灾难性的工程技术事故。
接着,谷歌说,在他们的软件工程语境里,“可持续性(Sustainability)”,取代我们刚才聊的维护性,对,是用可持续性取代可维护性,谷歌有可维持性的说法,谷歌不太提可维护性的说法。它,可维持性,特指“响应任何有价值的改动”,来自技术驱动,或来自商业驱动,更指能够做出改动的团队和成员。一方面,我要改,来自商业的力量,改了能卖得更多更贵,来自技术的力量,改了能卖得更贵或用电更少,另一方面,我要有能改的团队和成员,他们不只是保持现有水平,他们要持续成长突破自己的技术水准。如果说可维护性的重点在被维护的系统和模块,它就是表格里被打钩的选项,要与不要的差别,那么可维持性除了待维护的系统,还有能维护系统的人员,以及人员与系统之间的能力匹配,它更像是天平(⚖),左边是系统、右边是人员、平衡左右需要能力这个杠杆。系统越大越复杂,左边偏重,人员越多越强大,右边偏重,能力的杠杆也要粗壮起来,才能平衡住左边的复杂和右边的强大。
it works -> its maintainable -> we sustainable
它能工作,这叫 Programming,它们要维护,这叫 Software Engineering,我们要维持,这叫 Software Engineering at Google
仔细想来,谷歌的软件工程,我把它叫做“体面工程”,所谓体面,就是要解决,在白天,人与人之间过得去,在夜里,人与自己之间要过得去。谷歌的白天,就是它的业务时刻,谷歌的夜间,就是它的维护时刻。很多人白天都过得去,到晚上就过不了自己这一关。很多公司同样情况,白天在客户、在投资方都过得去,到夜里就不在想去过维护这一关。当变化来临的时候,要么拿不出新东西来应变,要么降不下去成本来应变,所有的效率都体现在个人和技巧,在组织层面养出房间里的大象,而不是训练出会跳舞的大象。
列举一个案例,谷歌每两个礼拜,就会升级它们使用的编译器的版本。你说这不是神经病嘛?实际效果是,谷歌的数据中心,因编译器更新,带来更少内存用量和算力用量,运营成本的降低带来的竞争力,以及相同市场价格下的高利润,让基础技术显得犀利无比。只是,谷歌的这个做法,并非拍脑袋而来,书中有那场灾难性技术事故的细节。
---- by 术子米德 @2023 年 8 月 12 日
版权声明: 本文为 InfoQ 作者【术子米德】的原创文章。
原文链接:【http://xie.infoq.cn/article/5b95cd28b245e128067b09f34】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论