扫码阅读
手机扫码阅读

软件开发是设计还是生产?

229 2023-07-20

    

    这个问题就像“谁是我们的朋友,谁是我们的敌人”一样,是这个行业的根本问题。这个问题不能解决,我们的很多决策就会基于错误的假设,自然也得出错误的结论。

    按“软件开发是生产过程”的世界观。我们的生产物是代码,设计就是我们的文档(包括需求、UML图、数据库结构等等诸如此类),对应的,软件的部署、发布属于对生产物的安装维护,归到运维。软件团队自然而然分为需求、设计、开发、运维、测试等等职能部门。因此,软件开发组织也就会按照这样的职能组织进行设计。基于这种认识,我们会在软件开发中推行瀑布模式,希望通过标准化流程,让每个环节最大化提高生产效率。

    按“软件开发是设计过程”的世界观。软件代码是设计文档,它被编译、部署后,指导计算机工作。这用户使用这些应用后,用户所需要的窗体、数据等信息被计算机自动生产了出来。这样软件开发就要按设计思想进行组织,而设计需要的是要不断尝试,把需求、设计、开发、运维、测试等工作放到一个团队里,组成跨职能团队才是更高效的做法。基于这种认识,提出了敏捷开发的理念,让不同职能在一起开发,面对共同的业务目标。

    那么究竟应该是设计还是生产呢?我们可以从几个方面来看。

可重复性

    生产过程一般是可重复的。工人生产一个零件,或者组装成一个产品,这个过程是预定义的。比如一台洗衣机被设计出来以后,就被拆分为若干零件以及组装工序。每台生产出来的洗衣机都是一模一样的。软件开发结果是可重复的吗?如果生产结果是代码,程序员每天要编写的代码,极少是可重复的,每天面临的问题都是不同的。

创造性

    生产过程是不需要多大创造性的。你操作机器,按照设计规格要求组装或者生产零件。而试图把程序员的工作变为非创造性的活动,也就是所谓程序员蓝领化,这个口号提了有20年了吧,很遗憾,到现在为止没有看到一个是成功的。不管什么样的组织,最后不得不把创造性还给程序员,才能一定程度上完成工作。

成本

    生产过程是成本比较重的,生产一个零件或者组装产品都是如此。而软件中生产窗体、数据都是计算机自动完成的。生产信息的的成本接近于0。如果一个程序运行中崩溃了,用户只要重新打开就可以得到新生产的。

可预测性

    我们生产机器、用品、建筑物,这些东西我们都可以在生产前进行预测,我们需要哪些功能,要达到哪些指标,价格要多少钱。这些可以被预测、限制。而我们在开发软件中,极少有人(我怀疑是没有)可以在一开始就把软件的范围进行精确地框定。我们往往知道一些大概,通过在开发中一些问题才逐渐浮现并变得清晰。

    如果量子力学没有让你深感震惊的话,说明你还没真正了解它。——波尔

    你觉得软件开发过程是生产过程还是设计过程?

原文链接: http://mp.weixin.qq.com/s?__biz=MzUzMzkxMjE3NQ==&mid=2247483782&idx=1&sn=2398dd3433f4b54db3a026c3cf2ff369&chksm=fa9d8e86cdea0790a22855bd28bb34534119fe949ae02cc8d2deb57769fe06c4ce3c68be1427#rd

一个工作多年的程序员的一些开发上的感悟,包括敏捷、系统架构、代码质量等多方面的内容。个人观点,不喜可喷。

26 篇文章
浏览 6683
加入社区微信群
与行业大咖零距离交流学习
软件研发质量管理体系建设 白皮书上线