edit控件自动换行 mfc_软件产业升级(四):软件开发已部分自动化,未来程序员会失业...

在前面的文章当中,我提出了软件产业分5级的概念,并详细分析了中国在软件产业一、二、三、四级的表现,同时给出了大量的实例进行形象化描述以加深大家的印象。感兴趣的同学可以翻看我之前的头条号发文。

74e8ad0b90a622585f2ff011c2beed9d.png

软件产业分5级

通过分析得出的基本结论是中国在软件产业1~3级技术上已经没有重大障碍,并且商业上均取得了很大的成功。但是中国在软件四级上的表现相对弱势,商业份额只有不到5%,并且由于起步较晚的原因,错过了软件产业规范和标准制定的机遇,导致在软件核心产业上拓展困难重重。

然而这是一个技术日新月异的时代,当前正处于一大批新技术爆发的前夜(引用任正非谈话),相对应的软件技术和产业必将在未来10~20年内发生翻天覆地的变化,随着这些新技术对旧技术的更新换代,新软件产业的技术标准和规范必将重新定义。中国必须要抓住这个难得的机遇,真正进入未来软件产业的核心领域,掌握产业话语权。

209c174ab2c53267075e525af310b9f6.png

一定要站上主席台

本文并不是一篇严肃的学术论文,不妨对未来技术增加一些超越当前技术能力的想象,毕竟未来一切皆有可能,也欢迎大家留言讨论。

自动化编程可万倍提升软件开发效率

设计人员只需要将自己需要实现的功能设计好,并且告知自动化编程机器人,机器人将在几分钟之后将几万行代码写完并且提交给设计人员进行验收。

54a38b9453acce022c1739aa2412350f.png

机器人编码可能吗?

这几万行代码如果让程序员小哥哥编写,可能需要30个人辛苦加班一个月才能完成,而机器人只需要几分钟,并且几乎没有软件bug(缺陷),不需要单元测试、集成测试、系统测试一堆的测试过程,直接进入验收就行,编码效率能够提升万倍以上。

0f5bc24cfd76c3c02369cbc830cb6096.png

我一向认为现在的编码是很低效的

机器人自动化编程可能吗?真的不可能吗?

爱立信和华为曾经对自动化编程进行过探索

编程自动化并不是一个新话题,早在十几年前就有人提出这个概念,并做过一些有益的尝试,只是当年自动化编程造成的负面效果比较大而且很难彻底解决。

这个试点自动化编程的公司正是当年的移动通讯设备巨头爱立信,因为是直接竞争对手的关系,华为也试着赶了一把时髦尝试过。为什么这两个公司对自动化编程感兴趣?因为通讯设备的代码实在太过庞大了,动辄几亿行,两个公司又分别都拥有一只几万人的软件开发团队,人力资源负担相当沉重,大幅度提升软件开发效率是非常合理的追求。

f57a56a68a126404619ca36e01370194.png

这对老对手都具有相当的探索精神

当年爱立信内部文件披露,试点项目中机器人自动化编程的代码行数占比最高达到了93%,这是个非常惊人的数字,这充分说明了一个问题,起码从技术上来说,让机器人写代码不是完全不可能的。

但是在之后的项目交付过程中遇到了问题,就是当发现代码有问题需要定位故障和修改代码的时候,发现机器人没办法做自我纠错,而且机器人写的这些代码,人类程序员很难读懂,更加难以维护。同时,通讯设备的安全性和稳定性要求又都极高,可能因为一行代码出问题就导致整个城市甚至一个国家的通许故障,完全交给机器人似乎有点不靠谱。

最终,爱立信考虑再三,也没有把这部分机器人写的代码正式应用,只是作为一个技术研究项目,做完了就束之高阁。而华为有了爱立信的前车之鉴,很快也放弃了自己的相关计划。

现在软件开发过程已部分自动化

但是软件研发的自动化就停止了吗?当然没有,爱立信之所以当年选择了放弃,只是因为那个项目爱立信步子迈的过大所以扯到了蛋,任何技术都需要一步一步前进,一下跨度太大多半会失败。

软件整个开发过程其实包括设计、开发、测试这三个大过程,当年爱立信在设计和开发两个过程同时用力,才创造了93%代码自动化生成的成果,但是最终技术不成熟失控了。

c2d0ef374e9b256e5c63a03b1fd16c83.png

软件开发三个主要流程

  • 测试首先被自动化了

大家意识到一步到位过于挑战之后,纷纷转移方向,华为从2008年左右开始暂时放弃做软件编码的自动化,转去实现软件测试的自动化。

6a59dd3374823865d469d8235155efea.png

自动化测试过程

测试的自动化技术上相对容易实现,只要规定好输入输出条件,机器进行执行结果正确与否的判断就可以。华为之所以选择测试环节进行自动化,一方面当年具备实现的工程条件,另一方面也是因为庞大的测试工作量华为实在难以承受。

大家知道通讯设备的代码质量要求极高,但是规模超级庞大,要保证这么复杂系统的高度可靠,要执行的测试用例是按千万来计算的,这要是人来一条条执行,得要多少人多少时间。更关键的是,代码每天都有上万人在编写,谁能保证合入新功能的时候老功能没被影响到还是好用的?所以每次产品发布周期,新的老的上千万的测试用例都要被反复执行很多遍,测试执行人员真的是生不如死。

经过了前后七八年的建设,华为今天基本实现了新老代码的测试用例自动化执行。规模庞大的测试用例改造成自动化不是一件容易的事,但是一旦改造完成,效率就实现了万倍的提升,每时每刻不分昼夜,机器都在忠实地执行着软件质量守护工作。

d8b0ac29fa5d7b16ece9411971b3f04c.png

自动化测试用例守护代码质量,忠于职守

刚刚有一个程序员小哥哥提交了代码,机器马上针对这段代码和相关功能进行了上万测试用例的验证,当场告诉小哥哥说你这代码有问题,今晚上请加班改。小哥哥立即就尴尬了,如果自己不改好,别的小哥哥的代码也就没法好好运行了,好吧,只能加班改。但是如果没有机器人忠于职守,这个软件缺陷就可能遗漏到网上去,下一步就可能导致你打不了电话。

更进一步,华为又基于自动化建设了模拟现实环境的性能冲击自动测试。我们使用的基站软件版本上网前,上万部手机在华为实验室里,由机器人控制着不断地进行着各种场景的同时呼叫冲击测试,夜以继日,这种测试要持续几个月的时间,这种性能测试靠人工是没办法实现的。

420ba8cfebbf212a96567799fda05090.png

进球了一起发个微信如何?需要机器人模拟测试

只有经过了这样严酷考验的软件才允许交到移动运营商手里给设备升级,进而给我们提供服务。相对十年前,华为设备的质量提升的不是一点半点,自动化测试起到了非常关键的作用。

那原来的测试执行人员怎么办?有些转去做测试设计人员了,就是考虑怎么再增加些测试方法保证设备更稳定可靠。少数技术不足的人员只能离开,没有办法,这是大势所趋。

  • 简单功能和标准化功能的软件编程也被自动化了

既然全系统的软件自动化非常困难,那么不如先自动化其中一部分,既然自动化编程比例达不到93%,那么先达到30%行不行?这个当然行。当你不去考虑整系统的全部编码都实现自动化,而是只考虑替代一部分功能,事情就变得简单了。

很典型的例子是MFC的框架程序,MFC是C++语言编程使用的一种集成开发环境。在C语言编程时代,如果程序员想写一个带界面的程序是非常痛苦的,每个像素和线条都需要自己绘制,那些按钮的立体效果?那些菜单拦的绘制?菜单点击以后要不要变形?写这些代码真的很折磨人,更关键的是写这些代码没有太大的意义,这些跟你想写的真正算法没多大关系。于是MFC框架就把这些全自动化了,同时还完成了程序类之间的联系关系构架,这么说吧,你还没开始做正事,框架先帮你写了几万行代码了,为的就是让你聚焦真正的算法实现。这可以算作是最初的编码自动化。

ba217029484495fc165f802c954ae5ad.png

MFC编程框架

还有一类典型的例子是VB编程和Excel配套的VBA宏编程,他们都定义了很多标准功能的“控件”和公共“函数”,当你要实现的算法没有太多奇特要求的时候,你只需要引用这些定制好的功能,拖拖拽拽设置下入参就完成了。这些标准的功能“控件”和函数,背后都有成千上万的代码是机器帮你自动生成的。

41c46feefb5f3917ee870f9e6e633978.png

Excel内置了很多标准函数和控件

后来的脚本类编程语言也是如此,比如Python。现在程序员写的一行行的执行脚本,其实后台有大量的代码是机器人自动生成自动运行的。

但是为什么像华为这种大型企业,还有大量的使用C语言编程的程序员呢?答案是他们做的软件算法是这个星球上全新的算法,没有现成的控件和函数可以用,他们本身就是在创造那些新函数和控件。这种创造性的劳动暂时是没有办法去自动化的,因为机器人完全不知道你想要的做什么。

测试环节被自动化了,一部分标准功能的函数控件也被机器人代劳了,但是人类还是不能被满足,最理想的状态是我只把我的意图告诉机器人,我最好一行代码也不写,这么贪心?有办法吗?

未来软件自动化可能的途径

人类真的想实现一行代码也不写就完成自己软件产品大作的理想,着急是不行的,还是得一步一步来。

我们知道,整个软件开发的过程,比较通用的模型可以简化为下图:

740accac6fbe8c07033293662db52d75.png

软件开发V模型

最顶部的产品规划和需求分析,那是真正的智人活动,是我们作为人类才具备的灵魂目的性和驱动力活动,关系到我们要做什么和为什么要做的问题。这一部分暂时先不考虑让机器人介入,因为我不敢啊。

而这个图里面的右边,根据上一节的分析,整个测试过程和一部分的编码过程已经被自动化了,剩下没有自动化的主要是左面的部分。如果一次性考虑将左面的四个步骤全部自动化掉,恐怕会陷入爱立信那种步子迈的过大扯到蛋的情况,所以,最好一步一步的来走。

我们首先应该考虑的是将伪代码自动转换成代码。其实在我们在观察程序员写的一个典型的函数的时候,我们发现,里面有大段的跟算法没有直接关系的东西,比如变量的定义和赋值,还有内存的申请归还一类。反正我在写这部分的时候是很崩溃的:

db72a83a6b28537d9be48d6abc8b2ce0.png

还有一堆的循环和判断条件,真正有用的算法其实就那两句,比如这个:

06e9155fbc7ee84ab37450d47cf7f2cc.png

所以能不能先从这里入手,把这些给自动化掉,或许这里需要发明一种更高级一点的编程语言,让我们聚焦于算法本身,而不是聚焦于那些繁琐的准备工作。谁先发明这种编程语言,自然可以在未来的软件产业中呼风唤雨。

伪代码直接翻译成编程语言如果实现了,纯粹的程序员码农们注意了,如果不能提升自己,失业就不远了。

如果我们成功把伪代码变成了能够自动化生成的,然后就可以考虑下能不能把我们的概要设计也变得轻松一点。恐怕这需要发明一种更高明的概要设计的工具才行,现在的概要设计做出来其实是给人看的,并不是给机器看的,机器拿过去根本看不懂。

a98f571e76d9300902fe71539ab26693.png

概要设计有不少类型的工具

当然,这种概要设计的工具想让机器人明白你要做什么,是比较的困难。等概要设计也被自动化以后,再考虑把系统设计也自动化了如何?技术难度当然是一步比一步更大,但是结果也非常可怕。

马化腾只需要对机器人说:我需要个微信抢红包的功能,一人发多人抢,抢到的金额随机分配给每个人。

机器人:好嘞,稍等。

几分钟后,微信红包软件发布了,马化腾第二天就会把他的软件团队90%的人都解雇,剩下几个人纯粹是怕自己寂寞而已。

软件自动化对产业的影响

软件底层自动化,首先就可能会导致整个软件一层产业的极大萎缩甚至于完全消失。最没用技术含量的工作首先被替代,这也符合工业发展的普遍规律。

这种情况下的印度软件外包产业岌岌可危,未来没有核心技术的国家,想给别人代工赚点辛苦钱也做不到了。

随着软件编程层级的逐步提升,软件二三四级也将发生巨变。软件二级由于应用为主,并不涉及复杂的算法,所以软件二级的编程人员也将大量消失,剩下的也许只有那些能够提出微信钱包这种新功能构想的人,因为软件二级最值钱的只是这些创意想法。

软件三级由于嵌入了大量的行业复杂算法,比如5G协议,未来也许只剩下了那些设计协议和算法的人,不懂专业知识的纯软件实现人员将大部分消失。

软件四级将出现全新的编程语言和编程工具,谁发明这些语言和工具,谁就是未来的软件之王。希望中国在新的软件领域中可以引领技术发展。

预告:对未来的软件产业来说,编程自动化也只是冰山一角,未来会产生全新的编程理念比如量子计算机编程,或者全新的编程方式比如脑意识编程,这些更有可能是未来软件产业的重中之重,感兴趣的同学请关注我的后续发文。

#科技V计划##我要上头条#@枫叶科技2020

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值