为什么我们程序员不把软件开发当回事?


最近,我一直在想为什么大多数公司认为软件的构建过程与现实世界基础设施的构建有很大的不同呢?

我想谈一谈我们必须像构建现实世界的基础设施那样重视软件的构建。每当我与其他人谈起这件事时,我们都非常震惊, 作为软件开发人员,为什么我们未能认真对待自己的工作呢?

在从事软件开发的最近十年中,我见识了很多收集需求的方法。大多数人并没有认真对待这项工作,他们的思想非常“敏捷”,并没有真正理解自己在构建什么。

虽然他们制定计划本身就遇到了问题,但依然会义无反顾地开始写代码。没有任何需求,只有我们需要构建什么的想法。一边写代码一边思考需求。这些项目迟早会因为缺乏清晰的目标而受阻。

当需要在现实世界盖楼、搭建桥梁、建购物中心或其他基础设施时,人们首先会讨论需求。

目标用户需要什么?需要解决的问题是什么?需要在哪一块土地上建造?为什么人们需要这个建筑?……

为什么人们会如此重视现实世界基础设施的构建呢?可能是因为他们不想花冤枉钱,他们不希望发生事故,他们希望为最终用户创造成功。当然,他们也想赚钱。

为什么我们大多数人(从事软件开发的人)不会严肃认真地想清楚需求呢? 我们不在乎吗?我们不想为我们的用户创造成功吗?我们不在乎钱吗?我并不这样认为!

你的老板也不会这样想。但他们知道些什么?你的老板很有可能并不是软件开发人员、架构师或设计师。即便你的老板是,你会听他的吗?

但我认为,作为软件开发人员,我们必须更加认真地对待我们的需求。我们必须为我们的工作感到更加自豪。为了给这些人提供建议,我们必须提出需求。

如果比较构建软件开发与构建现实世界的基础设施,就会发现二者在灵活性方面有很多差异。深入研究一下,看看是否真的有很大的不同,还是说软件开发人员推动了新事物的发展?

几个世纪以来,我们从瀑布式开发过渡到了敏捷开发。在瀑布式开发中,所有流程都依序而建:编写需求、构建软件、测试软件,然后发布。

瀑布式开发的效果不是很好,因此一些聪明人提出了《敏捷宣言》。这套准则可以帮助我们更灵活地构建软件。因为在开发过程中,需求可能会发生变化。

也许是软件公司不知道究竟应该为用户解决什么问题。因此敏捷开发应该让应用程序的开发成为学习的过程,敏捷是企业成功的关键。

然而当一家公司从瀑布式转变为敏捷式后,他们就认为不再有需求了,他们可以随时根据需要提出任何变更,即便他们没有意识到变更带来的影响。于是问题出现了。

作为一家软件公司,如何才能以敏捷的形式开展工作,这个话题足以写一本书或一系列的文章。

如果公司制定出需求,而且这些需求都能得到满足,那么就可以将影响降到最低。但是大多数公司不会花时间来制定需求。

因此在大多数情况下,影响都会超出估计。每当需求不断变化,或者我们需要更新依赖关系,或者从一个框架改为另一个框架时,每个人都会有点过于轻敌。

在现实世界基础设施的构建过程中,一旦发生任何变故,每个人都知道这可能会对金钱或完工日期造成巨大的影响。

当必须有所变动时,整个工程都需要暂停。而且还需要看看变动带来的影响。但是这种效果可能会很大。

因此,整个建筑团队、建筑师和其他人员都必须回到图纸上。需求的变化会产生巨大的影响!团队中的每个人都清楚这一点。

因为他们知道每次变动都需要付出金钱和时间的代价,而且可能还会对项目的成功带来风险。

将两个世界相比较,我认为我们必须更加清醒地意识到变化带来的影响。依赖关系的变化、架构的变更。在做出决定之前,我们应该针对每项变化进行适当的调查。

因此,我们应该意识到这一点。此外,如果你非常清楚变更造成的影响,那么就有责任为做出决定的人员提供建议。

说起维护,我们都知道软件开发和现实世界的基础设施都离不开维护工作。但是公司处理软件和现实世界基础设施的维护方式却有很多差异。

我见过很多公司都没有人来维护软件。当开发结束,你要求投入维护人员时,有些公司甚至会感到很惊讶。有些人甚至会很愤怒!

当然,也并非所有公司都会轻视软件的维护工作。谢天谢地,有很多优秀的公司,在软件发布后就会投入人员来更新软件或改Bug,甚至改进软件。

这些公司里的大多数经理都认为:“开发团队应该为软件的未来做好万全的保障,不应该有任何Bug。”

在现实世界中,道路、桥梁、房屋或其他建筑物等基础设施通常都需要有人来承担维护的工作。

你的房子经常需要一些维护,比如粉刷墙壁、换屋顶、修漏水等。当然你可以雇一家公司来做这些事。

道路需要时不时地铺筑水泥和沥青,木材需要新的油漆,或者由于环境而造成的其他问题。

令人非常震惊的是,许多公司甚至都没有考虑软件的维护工作。他们将其归咎于开发人员,认为他们应该获得没有任何Bug的软件,或者觉得他们必须在未来十年内重新构建这些软件,所以没必要维护。

老实说,我们不会对建造房屋、道路、桥梁和其他现实世界基础设施的人说这些话。那么,你又为什么会觉得软件不需要维护呢?

服务器获取安全补丁,框架的Bug得到修复。我们都希望我们每天使用的软件会越来越好,越来越安全,不是吗?

我希望这篇文章能引起人们的注意,希望我们作为软件开发人员更加深刻地意识到这个问题。

软件开发与现实世界基础设施的构建没有太大的不同。因此,我们应该更加认真地对待我们的软件开发,并更加深刻地意识到我们对其产生的影响。

我们应当以身作则,影响那些没有认真对待这个问题的公司。我们为自己的工作感到自豪,并更加认真地对待每一项工作!

链接:https://medium.com/better-programming/we-are-not-serious-enough-about-software-development-b9e3222f2906