[译] 可工作软件的重要性

2019独角兽企业重金招聘Python工程师标准>>>

很多软件开发的费用是固定的。真正重要的费用在于时间。

用于发现客户价值并编写代码来提供所消耗的时间是我们关键的资源。好消息是时间是免费的。坏消息是一个开发人员的效率是固定的,而我们不能根据需要去提高它。我们要想充分我们的关键资源,最好的求助方式就是识别出所浪费的时间并把它最小化。

期望落差浪费的时间

我们今天所创造的软件已日益复杂。为了创造软件,开发人员必须同时在他们的大脑中构造一个与软件同样复杂的模型。

不管什么时间,当开发人员被要求修复一个问题或者添加一个新特性时,他们都会在一头扎进去做出改变前先咨询他们意识中的软件模型。如果模型与软件匹配得很好,那么这个过程的时间是高效的。如果出现分歧,开发人员就得花时间来问“为什么这样不行(像我期望的那样)

在你的软件开发中,用于问这个问题的时间所占的百分比是多少花在问这个问题的时间都会与更有价值的问题“我们怎样才能为用户发现更多的价值道而驰。

当其他程序员要着手工作于一个软件,却因为没有机会建立一个意识模型而不能立即马上就做出有意义的改变时,分歧点就有可能增加。构建模型是非常耗时的,且通常被可以看得到源代码却未能发现与之相随的意识模型的管理者低估。你不能把100份源代码文件从一个开发人员交给另一个开发人员,然后期望第二个开发人员阅读完后马上就可以开始工作。

特别当下一个开发人员不是在同一个团队时,分歧点提高的可能性会更高。某种程度上,可以通过内部团队的沟通来减少期望落差。追加的开发人员并没有很多的机会和原始的开发人员进行沟通。

那么,我们怎样才能最小化期望落差呢p>

我们不是在创建软件,而在发现软件

最小化期望落差的关键在于明白我们不是在创建软件,而是在发现软件。想一下你最后工作的那个软件项目,可能起初花了你数月的时间来编写它,但你需要从零开始,从某个人告诉你输入哪些字符开始,从多久后你要重新再次编写开始。很可能不超过一天。事实上敲打代码并不需要太长时间。搞明白敲打什么代码才花时间。

一旦你把软件开发看作是一个发现的过程,你就会发现基本的舞蹈就是进行实验。每一次我们添加一个新特性或者修复一个bug,我们都是在进行一个实验。编写代码,或许再编译一下。可以吗问这样的问题时,你正在看着你的实验结果。进行实验最关键的是什么制。

我发现用攀岩来作类比是很有帮助的。当攀登一个岩石壁时,谨慎的攀登者在他们前进时会花上一些时间来把钉子敲进岩壁。钉完钉子后,攀登者会尝试一条新的路线(相当于他在进行一个实验)。如果实验失败了,他会回退到上一个钉子。钉子限制了他浪费在发现路线这个过程中的时间。

自动化测试 = 攀岩的钉子

在软件的世界中,与攀登所用的钉子类似的是什么的类比就是我们一系列的自动化测试。

不要期望有用户反馈bug 告,特性请求,和其他有用的表单,如果你发布了不可工作的软件。

把你的软件想象成一辆车。如果它开起来很顺畅,能把它的乘客带到新的地方,他们会很积极地让你知道后尾灯是否坏了或者对提高燃料有效率的渴望。通常都能很好工作的汽车这一事实,使得隔离一个缺陷或者一个特性,以及描述其简单性都很容易。另一方面,假如汽车离不开车道的话,用户就会没有动力为你写一份bug 告。他们会假设这辆汽车明显是不能工作的,也就不会花时间去让你知道。

在交给另一位开发前要确保软件是可以工作的

为最小化第二位开发人员构造意识模型所需要的时间,最好的方法就是可以工作的并且拥有一套自动化测试套件。请记住,要想做有用的工作,第二位开发人员需要为之进行实验,所以也就需要获得控制。如果全部的测试都通过了,那么他就拥有了控制并且可以使用10%的代码进行隔离的实验而不需要为其他90%的代码构造意识模型。

这是巨大的胜利!大部分从他人接手到软件的开发人员,花费了大量的时间在 a)为它构造一个意识模型,以及 b)找出为什么没有按预期那样工作。假设你给的是有着可靠自动化测试套件、可以工作的软件,他们则可以立即投入时间开始创建特性交付更多的客户价值。

更坏的情况,当专业的开发人员继承了既不能工作又没有自动化测试套件的软件时,他们通常会重新构建整个项目而不是搜刮。我一次又一次看到过这样的情况,并且实际上这是最明智的做法因为(反直觉的)相比彻底搞清楚不可工作的软件,重新构建需要的时间更少。谈谈浪费吧!

结论

当编写代码时,有很多不同的优先级需要满足。尤其是在开源项目中,开发的动力也许是来自内部的驱动,包括编程的乐趣。

当开发人员学会把他们外部的注意力放在让可工作的代码成为客户的优先级之一时,协同反馈循环也就出来了。用户使用这些软件并且如果有需要的话,则上 关于提高的请求。开发人员获得的这些先前的反馈,反过来又可以提高软件的价值,吸引更多的用户。

在短期时间内取得火箭式前进的项目(如Docker、Node.js等)与那些辛勤工作数年都没有太大演进的项目,之间的区别就在于协同反馈循环。

把你的项目变成火箭吧。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览212711 人正在系统学习中 相关资源:revisionist:保守版本R软件包安装-其它代码类资源-CSDN文库

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年1月26日
下一篇 2016年1月27日

相关推荐