软件研发是高科技吗?

软件研发是高科技吗?


摘要
本文阐述了两个观点,一是对软件的需求已经远远超过软件的供给能力,二是目前的软件研发模式远远够不上高科技的名声,换言之,目前的软件研发流程不是高科技,企业IT主管需要采取策略改进软件研发流程,从而提升开发效率。

目标读者
企业和机构的CIO/CTO,主管科技的政府领导

任何一位政府高官或者企业高管都会告诉你,我们正在经历一个激动人心的信息文明时代。信息技术和通信技术的飞速发展,使得整个人类社会处于一个信息化、网络化、智能化的变革之中。各种新兴的技术日新月异,令人目不暇接。一方面,它们促进了生产效率的提高和社会关系的改善,另一方面,它们也带来了新的问题和新的矛盾。

对于企业和机构的CIO/CTO来说,信息技术的发展使得CIO/CTO在企业和机构里的角色越来越重要,企业和机构越来越依赖科技部门的力量来提升组织的工作效率,为客户提供体验更好、功能更丰富的产品和服务,并由此保持市场竞争的优势。

今年6月,微软以75亿美元收购代码托管平台GitHub。 GitHub上面有8500万个代码库(也可称为软件项目),2800万名开发人员在GitHub上进行协作开发。当微软首席执行官 Satya Nadella 谈到为什么要收购GitHub时,他说,“现在每一家公司都是软件公司,开发人员是这个‘新时代’的创建者,他们在为整个世界编写代码,而 GitHub 是他们的‘家’”。

有趣的是,2017年有将近70万来自中国的新用户在GitHub上注册。

2017年GitHub新注册用户的地理分布

微软看到了世界对软件开发人员的巨大需求,因为世界对软件的需求已经远远超过软件的供给能力

全球权威的IT研究与顾问咨询公司Gartner预测,到2021年,全球市场对应用开发需求的增长比相应的研发能力的增长快5倍以上

有人说,人工智能的发展将导致对开发人员的需求大大减少,因为一些原来需要开发人员手工编程的任务可以由人工智能代替。这种说法不无道理,但是它没有看到有大量新的应用场景需要更多的开发人员。

软件的需求增长有几方面的原因。第一,新兴技术层出不穷,移动互联网,大数据,云计算,人工智能,增强现实/虚拟现实, 3D打印,区块链,物联网等技术在较短的时期内集中涌现,另外,芯片、存储等硬件的性能不断提升,使得企业急于采用这些最新的信息技术成果以期在市场上获得竞争优势。第二,新兴的商业模式不断涌现,比如O2O,众筹,众包,P2P,共享经济,等等,使得市场上出现了大量采用新型商业模式的初创企业,它们不断蚕食传统企业的市场并创造新的市场,而这些新型的商业模式都需要全新研发的业务系统来支撑。第三,也是最根本的原因,是整个社会正在经历一场深刻的数字化变革,传统企业、机构和政府都在向数字化转型,大量线下的业务组件和业务流程都在往线上转移,这些自然都离不开软件

精确计算和预测全社会对软件的需求是非常困难的,这类统计数据很少,下面举的例子是美国军方的。虽然军用软件和民用软件有很大的不同,而且美国的情况与中国的情况也有所不同,但是毕竟这是一份难得的、公开的研究报告,可供参考。

2017年美国国防部资助的一项研究分析了美国国防部对软件的需求与供给的关系。研究报告显示,美国国防部软件需求的增长在15%~25%之间,也就是说每3-5年新增软件体量增加一倍

美国国防部软件需求预测

这张表上显示的是每年新增的代码量(美国军方的编程语言主要是Ada),并不包括需要维护的老代码。新增的代码分为两类,一类是针对老系统编写的维护性代码,一类是为全新系统编写的代码。

这是软件的需求,那么软件供给的情况又如何呢?供给侧主要包含两个因素,开发人员人数的增长和开发人员平均生产力的增长。根据历史统计数据,假设加入美国国防部项目的软件开发人员每年增长5%,平均生产力每年增长4%(两者都是最乐观的假设), 逐年的软件生产能力预测如下图所示(图中的绿色曲线):

美国国防部软件需求与供给预测

可见在2017年美国国防部已经无力同时维护老代码又开发所有想开发的新代码了。到2020年,根据软件需求预测,美国国防部需要29万名软件开发人员,但实际上开发人员总数只能达到13.5万人,还不到总需求人数的一半。

那么,软件需求的旺盛与供给的不足之间的矛盾如何解决呢

明显的解决方法有三种,第一是控制需求,这显然是行不通的,在充分竞争的市场上先进技术就是竞争优势,在条件允许的情况下,没有哪个企业不愿意以最快速度采用先进技术来超越对手。

第二是扩大软件就业人才基数,这跟整个社会的大学教育和职业教育有关,不是哪个单独的企业或者机构能够在短时间内改变的。另外,增加开发人员意味着人力成本的增加,而企业IT项目的预算又是越来越紧张的,花更少的钱在更短的时间里开发出更多的软件已经是软件项目的常态了。

剩下的第三个选择就是提升软件研发的效率。模块化开发,敏捷开发,集成开发工具,团队协同工具,自动测试工具,等等,这些在提升软件研发效率上都起到了很好的作用。但是我们做的还远远不够,就像上面Gartner所预测的和美国国防部研究报告所指出的那样,软件开发效率的提升远远赶不上对软件的巨大需求。

那么,问题出在哪里呢

让我们来重新审视软件开发的整个过程。事实上,软件开发流程并不像我们大多数想象的那样是很高科技的,相反地,软件编程大部分还是非常传统的手工作坊式的工作,耗时,琐碎,大部分时间里个人独立工作,需要高度集中精力,经常会有缺陷。

如果你把软件编程跟真正高科技的行业,比如汽车制造业,相比的话,两者之间的差别就非常明显了。在汽车制造业,首先设计出一个概念车的数字化蓝图,这个蓝图可以以各种方式来呈现这辆概念车,甚至可以让这辆车去碰撞一棵虚拟的树来测试车的安全性能,这些都是在真正的样车生产出来之前就可以完成的。当各种测试都完成,并且所有相关方都满意的时候,这个设计蓝图会连接到一条长长的机器人生产线,进入车的量产阶段,在这个生产线上,自动化程度高的惊人,需要人工参与的地方很少。

汽车生产线

如果拿软件开发过程与汽车生产过程相比,软件开发过程落后汽车生产过程70年。软件开发过程首先是需求分析和产品设计,其结果是一叠厚厚的文档(一般称作产品需求文档),上面描述了产品应该长什么样以及它应该有的所有功能。然后,这叠厚厚的文档交给了用户,由用户进行确认。用户确认以后,一批程序员根据这些文档编写代码,完成文档上面所要求的功能。最后,再由用户运行软件,验证文档上面的所有功能都完全按照要求实现。

首先,产品的需求文档离真正意义上的蓝图还差得很远,第二,没有一种机制让这个需求文档在接下来的开发流程中被严格的遵守,这就导致在产品完成以后,仍然需要用户再一次通过运行软件来验证所有的需求。由于产品需求文档并不是真正意义上的蓝图,其间有很多模糊的、容易造成歧义的地方,再由于整个开发流程无法保证严格遵守产品需求文档,生产出的产品与用户的真正需求之间不免产生各种差异,结果造成软件的多次修改。第三,由于有人工的大量参与,由于整个流程的自动化程度较低,软件产品的质量无法达到理想的状况。

那么,有什么更好的软件开发流程呢?敬请关注本系列的后续文章。

猜你喜欢

转载自blog.csdn.net/yanmingcao2017/article/details/85457257