不忘初心,id Software对软件生产的启示

软件的研发看起来已经是一种类似工业的大规模生产了,大公司有数万甚至数十万“码农”,一个项目动不动几百几千的策划、设计、开发、测试等等工种,开发又分iOS、Web、Android、服务端、数据开发、算法等等,这样的演化路线很大程度上模拟了工业的生产,结果呢到处都在叫时间紧、任务重、人不够。

软件确实成为一种生产活动,但软件生产的不是标品,特别是在互联网行业,大量需要做的是产品、市场、运营的创新。产品、运营成为业务发展的核心引擎,这与工业时代往往比拼生产率或渠道有本质区别。过往十多年这种工种不断细分,流程不断复杂化的趋势也带来很多弊端。好的软件生产模式是什么着这个问题,最近我回顾了id Software的软件研发原则。

id Software是早期最著名的游戏公司之一,代表作DOOM、Quake都是游戏史上丰碑,CS也是基于Quake的引擎制作。《DOOM启示录》介绍了id的故事,现在的年轻人可能不大看这个了,但当年几乎程序员必读,无论做不做游戏。这么成功的公司有多少人呢就不到十个人。

id Software为什么这么少的人如此具有创新力和效率,id的创始人之一John Romero分享了id的11条软件研发原则(https://medium.com/@aloukissas/programming-principles-from-id-software-bed83e762210),由此应该可见一斑。这11条原则翻译如下(注意我没有直译,而是包含了我的理解,增强了逻辑,且不太只针对游戏):

1、干就是了(要干就要干好)。不要做原型,说干就干,过程中打磨,随时保证代码是可交付的(不要依赖于后面还需要打磨的东西)。

2、保持代码时刻可运行。特别注意你提交的代码团队成员都可运行,因此对缺失的属性要设定合理的default值。

3、保持简洁。KISS或奥卡姆剃刀原则,每个函数的逻辑是不是简洁的不能再简洁了。

4、花时间构建优秀的工具。

5、充分测试。自己吃狗粮,自测最搞笑,不要借助他人(QA、客户)等来发现bug。

6、发现bug就随手fix,否则bug会越积越多。

7、用比目标客户更好的设备开发。这一条对非游戏软件未必适用,比如Web网站要考虑网速慢用户的体验。

8、针对当前的版本写代码。不要面向未来做过度设计,也不要让旧的设计缺陷一直流传下去。

9、组件抽象要仔细争取一次性做好,因为一旦对外提供了API,改起来就伤筋动骨了。这很难,但追求这个才能成为高手。

10、充分的与伙伴们交流思路获得反馈,不要一个人闷着头干。

11、给程序员创造的自由。编程是基于逻辑的创造,每个程序员都不一样,给他们自由。

Id Software距今已经近三十年了,读他们的原则可以感受到这些早期编程英雄们压根不需要复杂的流程,而是两三个人结对就把事给干了。如果读《苹果往事》一书,也是一样的。想起2000年和几个同学帮浙大做远程教学系统,那也是一个人把用Dreamweawer、PS把设计、网页、JS、CSS都干了。早期的软件开发是编程英雄们的主场。

今天我们虽然不能完全去套用id的模式,今天我们很多时候产品、运营成为业务的主角,程序员很多时候变成被动完成工作,但时不时回顾一下id的模式和精神,能够让我们从过度工业化的窠臼里走出来,让我们明白模式不只是当前这一种,给我们启示。我觉得主要有几点:

1、要给创新者赋能:id时代程序员是主角,因此要给程序员创造的自由,我们现在不但要给程序员创造的自由,更要给产品、运营创新的自由。要给他们自由,就要提供好的工具,让他们能够自助的完成创新活动。比方说让开发转为产品开发,一个人完成产品的设计和开发;让产品自己做设计;让运营能够自主的完成活动页的设计与开发,分析活动效果而不需要数据开发来给他提供数据。

2、尽量缩短流程环节:流程中多一个环节,沟通的成本就高很多。为了减少返工,就往往要求需求方越来越细的明确需求,实施方越来越严格的保障交付质量。如果流程跨越了组织边界,因为绩效考核因素,这个问题会更严重。如果不跨越组织边界,又可能导致实施方的资源无法池化利用。一旦陷入到这样的循环中,就会导致大家都很忙,但毫无办法,唯有打破循环才能本质改变,如可以让开发自测、DevOps。

3、持续交付:保持软件时刻可交付,每日构建,尽早发现需求和实施的差异。越早发现,修改的成本越小。

4、质量要求不要过度:质量是约束条件,敏捷、效率才是优化目标。无论是软件质量、系统可用率、用户体验设计的质量,都应该适可而止。

5、要投入资源到软件工程系统和工具的建设,这将成为组织能力的核心部分。要做什么工程系统和工具,要从前面4点去挖掘、导出。

软件的生产确实复杂,但一个组织的理想始终应该是尽量让其简单高效。一个组织不能过度标准化,所有团队都是一个模式,这样就会限制组织的思维,认为现状是无可奈何的。一个组织应该始终不放弃在一些方面去试点能否有高度简化的全新模式,尝试要大胆,矫枉必须过正。只有通过这样的大胆试点加推广的模式,才能与过度工业化的趋势形成对抗。

一个创新的行业,不能让组织中的人成为生产线上的螺丝钉。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91765 人正在系统学习中

来源:wangyuanzju

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年2月5日
下一篇 2020年2月5日

相关推荐