76 | 软件工程的未来

你好,我是七牛云许式伟。现在正值中国年,我在这里祝大家新年快乐。开开心心过大年的同时,注意安全第一,出门记得戴上口罩,少去人员聚集的地方。

好,那我们开始今天的学习,今天我们想聊聊软件工程的未来。

软件工程是一门非常年轻的学科,相比其他动辄跨世纪的自然科学而言,软件工程只有 50 年的历史。只有如此短暂实践的科学,今天我们来探讨它的未来,条件其实还并不算太充分。

但是我们的宗旨就是要每个领域都应该谈清楚过去(历史)与未来(趋势判断),所以今天不妨也理性来探讨一下。

在 “软件工程的宏观视角” 一讲中,我们引入了下图来表达软件工程的瀑布模型:

在这样一个模型里面,涉及的角色分工已经非常多:

  • 产品经理;
  • 架构师;
  • 开发工程师;
  • 质量保障(QA)工程师;
  • 网站可靠性工程师(SRE);
  • ……

但这还只是常规描述的工种。实际的分工要细致很多。更不要说对特殊的领域,比如企业服务,也就是大家常说的 2B 行业,它的基本过程是这样的:

比之纯粹的产品研发上线过程,它多了单个客户的跟进与落地实施过程,也由此引入更多的角色分工,比如:售前工程师、交付(实施)工程师、售后工程师、项目经理等。

未来软件工程会走向何方?

首先 “快速变化” 是软件工程的自然属性,其 “不确定性” 也只能抑制而无法消除。

但显而易见的是,软件工程的问题最终还是由软件解决。事实上今天很多问题已经解决得很好,比如源代码的管理。我们经历了 cvs、svn,最终到今天的 git。基本上开发人员的协同问题已经形成非常约定俗成的方法论,并以软件或云服务的方式被固化下来。

今天,线上服务管理正如火如荼的发展。假以时日,不需要多久之后,一个全新的时代开启,我们中大部分人不必再为线上服务的稳定性操心。关于这块更详细的讨论,可以参考第四章 “服务治理篇”。

需求管理与测试这块也已经得到很好的解决。唯一比较遗憾就是是界面(UI)相关的测试虽然也有相关的工具链,但当前的普及率仍然极低。

这可能与大部分公司都较难保证界面的稳定性有关。如果我们经常变动界面,这就如同我们经常调整一个模块对外的接口规格一样,必然导致相关的测试案例编译通不过,或者测试通不过。这会让人沮丧,进而丧失对实现界面(UI)测试自动化的信心。自动化测试极其依赖被测模块接口的稳定性,这是我们今天常规自动化测试方法的限制。

当然另一方面,这也与界面测试相对高维,大部分公司的质量保障水平都还没有到达这个级别有关。从现实来看,虽然单元测试方法论已经极其成熟,但是仍然有不少企业在推行中遇到不少障碍。

可以预期,随着企业的平均工程水平逐步提升,最终会形成越来越多的有效的界面测试最佳实践的方法论,并得以大范围的推广。

从全局来看,今天软件工程已经形成较为成熟的分工。但各类分工的最佳实践与软件系统,仍然是相对孤立的。

这一定程度上也与软件工程还很年轻有关。从软件工程的软件系统发展来说,可以预期的是,未来一定会形成更加一体化的系统,上一道 “工序” 的输出就是下一道 “工序” 的输入。

但是今天一些 “工序” 的输出仍然是人肉进行传递,甚至没有标准化的仓库管理它。例如,产品经理输出的产品界面设计原型、架构师输出的架构设计文档,其传递过程仍然有极大的随意性。

但是,软件工程的最大不确定性就来源于 “设计” 类工作,包括产品设计与软件的架构设计。今天虽然产品设计和架构设计也都有一些独立的工具,但普及度与刚才说的开发与测试类工程实践相比完全是小巫见大巫。

这是可以理解的,产品经理与架构师在软件工程中属于小众群体,其培养难度极高,很多经验也很难形成传统意义上的 “知识点” 来传递。所以真正意义上合格的产品经理与架构师是比较少的,和程序员(软件开发工程师)的规模完全无法相比。

就拿架构师这个岗位举例。架构师的职责是什么,架构师工作的方法论是什么、培养架构师的方法论又是怎样的,这些今天并没有一个被广泛接受的实践。

为什么我会写这个架构课专栏,以及为什么成立七牛大学开启线下的架构师实战训练营,也是希望能够在一定程度上找到这些问题的最佳答案。

而事实上,产品经理的培养有更高的难度。严格意义上来说,成为产品经理前,首先应该成为架构师。我这个观念可能与大部分人的常识相悖,但是我个人对此深信不疑。

软件工程的未来发展会怎样,细节上很难给出确定性的判断。但是,我们相信,软件工程极大成熟的标志,是一体化的软件工程支撑系统,和高效的人才培养体系。包括今天仍然极为稚嫩的架构师培养体系,和产品经理培养体系,都应该得到了极大的完善。

到那个时候,软件工程就成为了一门真正成熟的科学。

结语

软件工程项目迭代快速、充满变化、充满不确定性。这使得软件工程成为一门极其独特魅力的科学。今天这门科学仍然还非常年轻,其发展只能以日新月异来形容。

软件工程的未来,它的成熟不单单是工程方法论和业务系统软件的成熟,也需要包括人才培养体系的成熟。因为,软件工程的不确定性与它充满设计与创造有关,人的主观能动性是它的优势,但也意味着不确定性无法得到彻底的消除。

我们要做的,只能说在大量的不确定性中,找到尽可能多的确定性。

如果你对今天的内容有什么思考与解读,欢迎给我留言,我们一起讨论。至此,本章 “软件工程篇” 已经到尾声阶段,下一讲我们将对本章的内容进行回顾与总结。

如果你觉得有所收获,也欢迎把文章分享给你的朋友。感谢你的收听,我们下期再见。

精选留言

  • 蹲街丶惜流年

    2020-02-27 23:03:54

    老师我有一个问题,我出身传统web开发,目前水平大概是(一线)资深或则专家,由于毕业比较迟,没有赶上web2.0的潮流,导致现在对职业规划很迷茫。想多挣个钱但是做web大部分人也就那样了,我一直在想三年后我该干啥。有没有啥比较好的方向?
    作者回复

    方向永远会有新的。与其追逐方向,不如想一下什么是不变的东西,以不变应万变。架构之道亦如此。

    2020-02-28 14:52:37

  • 亢(知行合一的路上)

    2020-04-20 12:51:18

    变与不变,是相对的,也都在不断变化。架构设计,就是要在不断的迭代中,将变和不变的分离,让不变的占比越来越大,这样系统的复杂度就能控制住吧。
    拥抱变化,找到不变的部分。
  • Aaron Cheung

    2020-01-28 11:29:55

    先成架构师 再做产品经理 这个的确难以想象
    作者回复

    倒不是一定要先做架构师,而是说产品经理需要有架构师的核心能力。

    2020-01-28 14:41:30

  • Jay

    2022-05-01 20:31:45

    许老师,相比研发工程师主要做实现层面的东西,设计层面要考量的因素实在太多,因此需要掌握很多维度的信息,这也是很难标准化的原因之一。产品经理和架构师这两个角色的知识面要求也是很广的,而且有些是隐形知识,是在一系列复杂挑战下锤炼和锻造出来的,确实不太容易传授。

    这种智慧,需要的知识密度很高,庞杂程度也不低,很难想象一个读书很少,思考很少,经历挑战很少,紧紧依靠程序化、标准化的训练就能很厉害的。设计角色需要很高的抽象思维能力,作为顶层设计者这样的角色,千锤百炼似乎是不可避免的了。

    为了个人职业生涯考虑,想掌握高阶的能力,总是在业务复杂度较低的公司是不太利于职业生涯发展的。
    作者回复

    难度肯定高很多 否则早搞定了 现在连设计工具标准化都远不如软件工程

    2022-05-03 13:54:01

  • 2020-01-26 12:30:42

    许老师的认真态度值得学习
  • Vackine

    2020-01-24 01:41:04

    许老师,新年快乐!来年继续反复看架构课😊
    作者回复

    新年快乐

    2020-01-24 15:16:37

  • gtp

    2020-03-21 10:39:34

    个人感觉产品经理需要掌握的知识面要比软件工程师要多,而且要有一定的逻辑思维
    作者回复

    是这样

    2020-03-22 01:12:07

  • leslie

    2020-02-01 05:32:49

    产品经理的道路个人觉得还有一条-全栈工程师:个人这几年一直在各个部门之间做沟通,参与了不少的数据库架构和运维体系的设计与搭建,这两年和一些各式朋友沟通中,虽然经常做的是各式跨行的交流,可是发现还是能够比较从容的去把业务部门的想法变成一件件的产品。理解整个软件的流程以及核心的KeyPoint才能更好的合理去设计产品,不至于一步走的过大从而适当遵循MVP原则。
  • 程序员Artist

    2022-07-15 10:12:45

    【软件工程的不确定性与它充满设计与创造有关】

    当越来越多的老板和高管能充分认识到这点,
    而不是认为程序员相当于流水线上的重复一套动作的熟练工。

    那以后就不会有35岁危机问题了。因为搞艺术的大师有几个年轻人。
  • 言十年

    2021-05-19 13:07:41

    建议产品经理应具有技术能力跟视野
    作者回复

    是的

    2021-05-19 14:55:42

  • 岳明灯

    2023-10-31 12:23:31

    在某个大公司,经历5,6个产品经历,几乎没一个合格的,离谱到我都不好意思说!
  • ifelse

    2023-10-18 16:56:16

    在大量的不确定性中,找到尽可能多的确定性。
    --记下来
  • 音为

    2023-04-26 10:29:54

    将变化像小兔子一样隔离在笼子里
  • 木木

    2021-11-13 11:26:43

    是不是正是因为软件工程很大的不确性所以软件行业一直都长盛不衰。
    作者回复

    可以这么说 不确定性变成确定性就是机会

    2021-11-13 18:59:20

  • 沈子砚

    2021-04-07 08:33:08

    请问如何抑制软件中的变化呢?度是什么?这里的知识点是变更管理吗?
  • Sunny

    2021-01-20 21:16:16

    许老师新年快乐,虽然晚了一年😂
  • Geek_88604f

    2020-01-29 21:08:24

    老师,目前七牛云界面测试相关的工具链有哪些?
  • Geek007

    2020-01-28 09:45:39

    今天刚看到,先给老师拜个年!祝一切顺意。
    作者回复

    新年快乐

    2020-01-28 14:42:20

  • hasWhere

    2020-01-25 18:04:22

    新年快乐
    作者回复

    新年快乐

    2020-01-26 13:35:31

  • 梦醒十分

    2020-01-25 15:55:30

    许老师新年快乐!专栏快结束了,希望老师能写其他的专栏,继续跟您学习!
    作者回复

    新年快乐

    2020-01-25 18:05:03