Google 软件工程 - 重写代码

Fergus Henderson 是 Google 的资深工程师,他领导着google的 Text-to-speech 开发团队。过去的十多年来,他在 Google 还开发了编译工具 Blaze,以及语音识别和声音操控产品,这些技术和产品是 Siri 的前身。

2017 年 1 月份他发布了一本书,叫做 《Google 软件工程》,介绍了 Google 公司在软件开发中的工程方法。

这是一本薄薄的只有 20 页的书,概要介绍了 Google 软件工程中的“软件开发”、“项目管理”、“HR 管理”。其它部分回头再细说,其中一下子吸引了我的,是“软件开发”部分的第11节,该节介绍的是 Google 公司如何“频繁的重写代码”。为了便于大家领会,这里附上我的翻译。

频繁的重写代码

Google 的大部分软件,每过几年,就要重写一遍

这样做无疑是成本高昂的。确实,重写代码耗费了 Google 很多资源。然而,这种做法也带来了巨大的好处,对于 Google 的能力提供以及长期的成功,可谓至关重要。一般来说,每过几年时间,产品的需求就会发生巨大的变化。这种变化是随着产品周围的软件环境和其他技术的变化而发生的,而且技术和市场的变化,也影响了用户的需求、欲求和期望。 用过几年的软件,都是在过去老的需求下设计的,其设计思路并不适应当前的需求。还有,老的软件通常复杂度上升。重写代码就能够降低复杂度,造成复杂度升高的那些历史包袱是完全不必要的,它们所应对的需求已经不重要了。另外,重写代码也是转移知识的好方法,同时还给新加入的团队成员带来主人翁的感觉。这种主人的体验,对于提高生产率是必不可少的: 当工程师们感到软件是属于“自己的”,他们才会投入忘我地开发功能并解决问题。频繁的重写代码还能够鼓励工程师在不同项目之间流动,这种流动将多样化的、新鲜的思想带到项目中来。  频繁的重写代码,也有助于确保代码所用的技术和方法都是最先进的。

先说这一句:“另外,重写代码也是转移知识的好方法,同时还给新加入的团队成员带来主人翁的感觉。”  

这个说法雷人雷到外焦里嫩。地主家真的有余粮啊! 为了让收麦子的长工们有主人翁的感觉,干脆烧了装满陈粮的仓库.......这就是有钱人的风格啊,买豆浆要买两碗,喝一碗倒一碗。

还有这一句:“重写代码也是转移知识的好方法”。 眼前立刻浮现一个场景:开发经理发愁的对部门经理说离职员工的代码交接工作不顺利,部门经理大手一挥说,小鬼啊,思想再开放一些嘛,步子再迈大一些嘛,把代码重写一遍就不用交接了。

当然,这些都是开玩笑。代码重写一直是个少有人关注、少有人研究的课题。通常,都是产品不成功,或者产品实在老到没法再用了,我们才会考虑重写。这都是发扬了我们节约的好传统,软件也都是补丁摞补丁鹑衣百结。经常能看到一些软件产品,已经用了10年,20年都不新鲜。Vb的,Delphi的,开发团队要小心翼翼的维护那早已停止支持的开发环境。

在软件产品还能够运行,甚至运行情况良好的时候,就痛下毒手,行霹雳手段开始重写,这人心得多狠呢。

这句话:“一般来说,每过几年时间,产品的需求就会发生巨大的变化。这种变化是随着产品周围的软件环境和其他技术的变化而发生的,而且技术和市场的变化,也影响了用户的需求、欲求和期望。 ” 

女孩们应该最喜欢这句话,把其中的产品换成服饰看看:“一般来说,每过几年时间,女士服装的需求就会发生巨大的变化。这种变化是随着时尚的环境和其他潮流的变化而发生的,而且市场和潮流的变化,也影响了女士们的的需求、欲求和期望。” Google 就像白富美,一柜子的衣服,每件只穿了一次两次,马上就换。常常在早上发愁,没有合适的“貂儿”来配今天的指甲油。

重写代码来降低软件复杂度,去掉其中无用的那些功能和特性。维护过产品的人,都应该深有体会,看着那叠床架屋的功能和代码,心里仿佛塞满了稻草。要查个 Bug,做个调试,那心头有一万头草尼马呼啸而过。唉,歧视啊歧视偏见啊偏见,不论是软件,还是女朋友,程序员们都喜欢简单、纯洁的。带着心已沧桑、满腹故事的她去看旋转木马,虽然一样浪漫,但毕竟她已爬不上木马了。所有的程序员都不愿意维护别人的老代码,都宁愿重写.......然后留下自己的老代码,让别人发愁。

重写代码,较之优化和维护老代码,区别仿佛革命与改良。在社会层面,人们已经从上个200年的革命热情中,冷静下来,认可改良主义,认可保守主义。但是,代码的社会,与人的社会不一样,人存在习俗、惯性和新旧利益之争,而代码扔掉也就扔掉,没有旧代码会抵触,也不需要做思想工作。可以说,只要你舍得浪费,扔代码比甩男朋友女朋友容易得多。

Google这样的大土豪,当然不必考虑成本了,它投资个几百亿美元就跟我们苦逼程序员买个机械键盘一样轻松。但我这样穷苦出身的程序员,总是对扔掉的代码、浪费的人月,感到心疼不已。平常吃个饭,都要把米粒扒拉干净,可想而知,扔掉十万行还可以运行的代码,那就跟割肉差不多了。乡亲们那,这是要遭雷劈的啊.....

我觉得,早晚的,科技界会出台“代码伦理”或者“代码法”,用来约束对代码资源的浪费。就像管理垃圾的《垃圾处理法》......

不过,要想产品好,就不能太小气。农村老太太用破布烂棉花纳鞋底的价值观和工作方法,并不适合今天的科技界啦。该扔就扔吧,历史的潮流要向前,女人的衣服要时尚。做不到象Google 那样土豪,人家每几年重写一遍,咱们可以每十年重写一遍。钱紧张,没有预算? 那就少喝一碗豆浆,别涂指甲油,也别穿貂,更别去骑旋转木马,省下钱来雇程序员。再穷不能穷软件,再苦不能苦程序员。软件产品,还是要追求精益求精的。下定决心、排除万难,团结一心向前看,马上开始重新写......程序员们摩拳擦掌好兴奋。

只是,重写后,新的一定比老的好吗? 

全世界的程序员都笑了:好还是不好,那还不都是听我们的?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,398评论 25 707
  • 先说项目开发过程中团队人员的分工协作。 一 人员安排 毕业至今的大部分项目都是独立完成,虽然也有和其他同事协作的时...
    SnowflakeCloud阅读 10,735评论 3 59
  • 这个人一出现,突然想未来里全部都是他。
    左耳_阅读 300评论 0 0
  • 冬日偶作 閑書讀罢半壶茶 聽雨還期聽落花 冷眼猶觀人世事 紅塵漠漠度年華
    听泉阅读 180评论 0 2
  • 刚刚发生了一件莫名其妙的事,两个室友因为一件小事互相生气,现在空气中尴尬的气氛越来越强,啊,我仿佛要窒息了,作为此...
    悦心语阅读 186评论 0 0