重新定义软件工程。数字时代的软件将基于数字时代的认知体系被重新定义,数字时代的软件工程也是如此。为了区分,我们把传统软件工程命名为工业时代的软件工程,基于数字时代认知的新软件工程称之为数字时代的软件工程。
一、重新定义软件工程
1. 重新定义软件:软件是数字服务
数字服务是用数字方式向其用户提供的服务,软件符合这个特征,软件是数字服务。
(1)认知
软件是数字服务,是数字服务组成的数字服务。
按照通常的定义,软件是一系列按照特定顺序组织的计算机数据和指令的集合,软件是代码的集合,软件是类/方法的集合,软件是微服务/服务的集合,软件是系统/产品。
在各个层面上,软件都是数字服务,因此,软件是由数字服务构成的数字服务。指令是数字服务,计算机指令就是指挥机器工作的指示和命令,指令以数字形式发出,得到机器对应的响应,指令是典型的数字服务;代码/程序是数字服务,代码/程序就是按顺序组织的一系列指令的集合,是以数字形式发出的指令集合,是数字服务;类/方法是数字服务,类/方法是代码,是符合某种逻辑意义的代码,也是数字服务;微服务/服务是数字服务;软件系统/产品是数字服务。 数字化转型网www.szhzxw.cn
(2)价值
软件是数字服务,通过服务客户创造价值,这种价值包含客户价值和商业价值,客户价值=服务次数*次均价值,商业价值=服务次数*(次均收入-次均成本)。从这个角度看,软件最大化价值的方式是通过更高的次均价值,创造更多的服务次数,提升次均收益以获得更高商业价值。
这种价值定义依然适用于软件的各个层面。这是我们不希望我们的软件有多余指令的原因,多余的指令是不创造价值的额外成本,是浪费;多余的指令会导致更长的运行时间,降低客户体验,拉低次均价值。没有引用的代码要删除也是同样道理,没有客户的数字服务是不创造价值的浪费。今年银行大量下线前期数字化转型浪潮中匆忙上马的各种软件,的确,作为数字服务,无人使用的软件不创造价值,不下线空耗成本。开源社区的知名开源软件闭源甚至删库跑路,因为虽然该软件的客户价值很大,但商业价值太小,养不活自己。某些游戏团队动不动10几个月年终奖,羡煞旁人,不是因为他们更会写代码或写了更多代码,而是创造的价值很大,也不要只对成功的游戏团队羡慕嫉妒恨,去问问那些无人使用关闭服务器的游戏团队就知道,别说年终奖,工资发放都是问题。 数字化转型网www.szhzxw.cn
(3)度量
软件是数字服务,好的软件价值大、体验好、进化快,按序排布。
度量在回答一个根本的问题,什么是好的软件,这是一直以来软件业都没讲清楚的问题。软件的好坏是软件功能的多少,代码行的多少,代码质量的优劣,还是其他什么?
作为数字服务,软件好坏有清晰的度量标准可以遵循,价值大、体验好、进化快,按序排布。价值创造是第一度量,例如Oracle的代码是业界著名的屎山代码,但并不妨碍Oracle的成功。当然,屎山代码会导致性能降低,延长时长让客户感觉慢降低客户体验,屎山代码大大影响了进化速度,读都读不懂,更难改,这也许也是那么多新数据库冒出来挑战Oracle的部分原因。这也是为什么TDD之父Kent Beck在FaceBook干的很不开心的原因,FaceBook太糙了,快速上线功能,并不管最开始的代码质量,没人用就下线,对于那些自始至终都追求高质量代码的人很难理解,但从数字服务的角度看,这就是应该做的,先有价值再有其他,没有价值的软件不值得去优化。
2. 重新定义软件生命周期:软件生命周期是数字服务生命周期
数字服务生命周期本质上是数字服务的价值创造周期,数字服务会一直服务其客户,直到客户不再需要(没人用、换成其他服务),或者服务主动关闭(入不敷出)为止。软件生命周期是典型的数字服务生命周期,这也是软件是数字服务的另一佐证。

如上图,这是一个典型的软件生命周期,其中蓝线代表投入,红线代表价值。虽然有一段初创时间,但软件的价值创造是从真正上线给客户使用开始的,在客户使用过程中不断创造,直到没有客户使用后或者软件入不敷出关停后,价值创造停止,软件生命周期结束。在软件使用过程中,随着时间推移,软件给客户创造的价值会下降,这有可能是因为客户的价值诉求发生了变化,也有可能是因为竞争对手拉走了一些用户,还有可能是软件体验随时间下降导致的。 数字化转型网www.szhzxw.cn

这是软件生命周期失败版,失败的软件或多或少满足上述特征。漫长的初创期,导致过高的前期投入和客户的高体验期望;不能满足客户体验、适应客户体验变化、适应调整能力弱,导致上线创造的客户价值低于预期,上线艰难,成本失控;即便勉强上线,依然不能吸引来更多的客户使用次数,导致客户价值创造不及预期;很少对客户体验进行改进,导致服务竞争力弱,不能推动客户价值增长,也难以带来商业价值增长;不合理的商业模式导致客户价值增长后,缺乏足够的商业价值收益;软件设计问题,导致运行/运维成本后期快速飙升,直至成本失控;最终整个软件入不敷出,成为商业上的失败。

这也是软件开始迈向精益创业、从项目转向产品、不断迭代改进、转向SAAS模式的源动力,一切都是为了取得软件生命周期的成功。
3. 重新定义软件工程
“软件工程是应用系统化的、规范化的、可量化的方法来开发、运行和维护软件。也就是说,是工程在软件上的应用。”——IEEE
“软件工程是建立和使用健全的工程原则,以获得兼具经济性和可靠性,并能在实际机器上有效工作的软件。”——弗里茨鲍尔《软件工程:实践者的研究方法》

如上图,这是《软件工程:实践者的研究方法》一书中定义的软件工程基本框架,它把软件工程分为四层,认知是整个软件工程的基石,它代表了软件工程的基本假设和指导思想;过程是基础、是骨架,它把所有工作串联到一起;方法实践是血肉,它们为实际工作提供技术指导;工具是承载,它让过程、方法实践变得更加高效。(本图源自《软件工程:实践者的研究方法》第七版)
当我们重新定义了软件,重新定义了软件生命周期,软件工程也将被重新定义,因为它们重塑了软件工程的基石:认知,改变了软件工程的基本假设和指导思想,由此,建立在认知基础上的过程、方法实践、工具也将被重新定义。 数字化转型网www.szhzxw.cn
二、从工业时代的软件工程走向数字时代的软件工程
妈妈常说,要往前走得先忘记过去。——《阿甘正传》
工业时代的代码制造无法支撑数字时代的数字服务研发,不仅如此,它还成为了问题制造者。
1. 以代码制造为中心的传统软件工程已经过时了
传统软件工程把软件看作代码、把软件生命周期看做代码制造的生命周期,这一认知成为了软件工程的基石,因此软件工程的目标是“应用系统化的、规范化的、可量化的方法来开发、运行和维护软件”,也就自然而然变成了应用系统化的、规范化的、可量化的方法来开发、运行和维护代码,沿着这条路进行了多年的演变,最终变成了我们现在看到的软件工程。但传统的软件工程面临挑战:
- 无法达成解决软件危机的初心
软件工程为解决软件危机而生。20世纪60年代,软件项目失败率高居不下,初生的软件业面临严重的软件危机。为了用工程化的方式来开发软件以解决软件危机,人们从硬件工程和其他人类工程吸取成功经验,建立了软件工程。(参考百度词条《软件危机》) 数字化转型网www.szhzxw.cn
但进入数字时代以来,软件危机再度出现,愈演愈烈,大量数字化项目面临失败,大量数字化投入打了水漂。虽然可以说我们一直在努力,但事实说明,经过接近60年的努力,软件工程没能解决软件危机,无法达成初心。
- 无法指导数字时代的新方法实践
2000后,数字时代涌现出了诸多优秀的软件开发新方法实践,例如互联网、精益创业、敏捷、设计思维、DevOps、微服务等,但这些都是现有的软件工程无法对其进行有效指导的,看不懂也学不会,最多只能套个壳。这导致了大量优秀的方法实践在落地时只剩下一个外形,难以结合实际落地生根,难以在初步模仿后进一步在工作中优化改进,教练在的时候勉强能用,走了不久就只剩空壳。
- 难以应对数字时代的复杂性
数字时代让软件有了新的内涵,软件定义一切,软硬一体化、软件定义汽车、软件定义手机、软件定义网络等开始流行,怎么有效将硬件、网络等纳入软件工程的范畴,例如如何在硬件开发中应用敏捷,成为了广受关注的话题。大数据、AI当然是数字时代的主角之一,涌现出了诸如数据开发、AI开发等新岗位,怎么处理代码、数据、AI之间的关系,怎么有效整合、发挥它们的力量以提升竞争力,成为了难题。但传统软件工程更加关注代码的现实,导致难以将硬件、数据、AI有效纳入其中。
- 软件工程已经过时了,沦为过时实践大全
既不能解决问题,又不能为解决问题提供指导,软件工程沦为了业界成熟实践收集者,或者说的更加直白一点,过时实践大全,软件工程过时了,并且在漫长的发展过程中留下了一堆不能解决的迷思,制造了一大堆遗留问题。软件工程的发展逐渐走向停滞,实际工作中的人们已经逐渐不再从软件工程中寻找答案甚至寻找指导,软件工程也从科研探索走向技能教育,走向码农技能培训班,部分以科研探索为主的大学开始放弃软件工程专业。
2. 从工业时代的软件工程走向数字时代的软件工程
(1)时代呼唤新的软件工程
沿着旧地图,找不到新大陆。 数字化转型网www.szhzxw.cn
软件工程诞生于工业时代,通过引入硬件工程及其他人类工程的经验,软件工程在后续的数十年中给与了软件研发指导,不断积累软件工程的优秀过程、方法实践、工具等,大大推动了软件业的发展,可谓功不可没。但旧时代的财富可能会导致新时代的痼疾,2000年左右是软件工程的最后高光时刻,RUP、CMM、EJB等代表着主流软件工程最后的辉煌,自从2000年后进入数字时代以来,敏捷、开源、互联网等让主流软件工程开始了尴尬的适应过程,方法实践的快速演变让软件工程从技术前沿沦为了过时实践收集。
错误的问题,不会有正确的答案。
时代的问题,应该交给时代来解决。时代变革是社会的巨大变革,就像工业时代,它会带来一系列农业时代难以理解、解释的问题,在工业时代的200年中,逐渐形成了经济学、管理学、系统工程等新认知来解决时代遭遇的问题,衍生出新的管理、技术等方法实践,让“科技是第一生产力”成为共识。从这个角度看,数字时代带来的各种新问题新矛盾一点也不奇怪,我们依然需要用更多的时间来建立数字时代的认知体系、方法实践来解决这些问题矛盾。
(2)准确说,是数字时代的数字服务工程
《数字时代的软件工程》就是对新时代软件工程的探索,基于新时代的认知,重新理解/掌握/探索/改进新时代的软件工程方法实践,形成新的软件工程体系。为了跟之前的传统软件工程区分,把之前的软件工程称为工业时代的软件工程,把新的软件工程称为数字时代的软件工程。
准确说,数字时代的软件工程其实是数字时代的数字服务工程。在软件定义网络、软件定义硬件、软数一体化的现在,硬件、数据都需要转变成与软件有效结合的数字服务才能更好创造价值,数字时代的软件工程不仅要解决纯软件的问题,也需要通用于硬件、数据等数字服务研发。数字服务正在吞噬世界,数字时代的软件工程(数字服务工程)致力于“应用系统化的、规范化的、可量化的方法来开发、运行和维护数字服务”。 数字化转型网www.szhzxw.cn
在继续阅读后续章节之前,我也要提醒读者,改变有风险,入局需谨慎。毕竟现有的大多数环境还停留在工业时代,数字时代的软件工程会让你有跟现有环境不再匹配的风险,从好的方向说,这让你有机会在现有环境中推动变革,但从坏的方向讲,它可能会让你与现在的环境格格不入。

翻译:
Redefining Software Engineering: Start by redefining software
Redefining software engineering. Software in the digital age will be redefined based on the cognitive system of the digital age, and so will software engineering in the digital age. In order to distinguish, we name the traditional software engineering as software engineering in the industrial age, and the new software engineering based on the cognition of the digital age is called software engineering in the digital age.
Redefining software engineering
1. Redefining software: Software is a digital service
A digital service is a service provided to its users in a digital manner, and software fits this characterization, and software is a digital service. 数字化转型网www.szhzxw.cn
(1) Cognition
Software is a digital service, a digital service made up of digital services.
By common definition, software is a collection of computer data and instructions organized in a specific order, software is a collection of code, software is a collection of classes/methods, software is a collection of microservices/services, and software is a system/product.
At every level, software is a digital service, and therefore, software is a digital service made up of digital services. Instructions are digital services, computer instructions are instructions and commands to direct the work of the machine, instructions are issued in digital form, get the corresponding response of the machine, instructions are typical digital services; Code/program is a digital service, code/program is a set of instructions organized in order, a set of instructions issued in digital form, is a digital service; A class/method is a digital service, and a class/method is a code that conforms to some logical meaning and is also a digital service. Microservices/services are digital services; Software systems/products are digital services. 数字化转型网www.szhzxw.cn
(2) Value
Software is a digital service that creates value by serving customers. This value includes customer value and business value, customer value = service times * average value, business value = service times * (average revenue – average cost). From this perspective, the way to maximize the value of software is to create more service times through higher secondary average value, and increase secondary average revenue to obtain higher business value.
This definition of value still applies to all aspects of software. That’s why we don’t want our software to have extra instructions. Extra instructions are extra costs that don’t create value. They’re waste. Extra instructions lead to longer uptime, lower customer experience, and lower average value. In the same way that code without references should be removed, digital services without customers are wasteful without creating value. This year, a large number of banks in the early phase of the digital transformation of the wave of rushed on the various software, indeed, as a digital service, no use of software does not create value, not offline empty cost. The well-known open source software in the open source community is closed and even deleted, because although the customer value of the software is very large, the commercial value is too small to support themselves. Some game teams at every turn 10 months of year-end bonuses, envy others, not because they will write code or write more code, but create a lot of value, do not only envy of successful game teams, to ask those who do not use closed server game teams know, let alone year-end bonuses, wages are a problem.
(3) Measurement
Software is a digital service, and good software has great value, good experience, fast evolution, and is arranged in order. 数字化转型网www.szhzxw.cn
Metrics are answering the fundamental question of what makes good software, a question that the software industry has long failed to address. Is it the amount of functionality, the number of lines of code, the quality of the code, or something else?
As a digital service, software quality has a clear metric to follow, high value, good experience, fast evolution, in order. Value creation is the first metric, for example, Oracle’s code is the industry’s famous shitmountain code, but does not prevent Oracle’s success. Of course, the shit mountain code will lead to reduced performance, extend the time to make customers feel slow to reduce the customer experience, the shit mountain code greatly affects the speed of evolution, can not read, more difficult to change, which may be part of the reason why so many new databases have emerged to challenge Oracle. This is also why Kent Beck, the father of TDD, is very unhappy at FaceBook, FaceBook is too rough, quickly launch features, and regardless of the quality of the initial code, no one uses it, it is difficult to understand for those who pursue high quality code all the time, but from a digital service perspective, this is the way to do it. Software that has value before anything else is not worth optimizing.
2. Redefine the software lifecycle: The software lifecycle is the digital service lifecycle
The digital service life cycle is essentially the value creation cycle of the digital service, which will continue to serve its customers until the customer no longer needs it (no one uses it, changes to another service), or the service voluntarily closes (cannot make money). The software life cycle is a typical digital service life cycle, which is another proof that software is a digital service.
As shown above, this is a typical software lifecycle, where the blue line represents input and the red line represents value. Although there is a period of start-up time, the value creation of software starts from the real launch for customers to use, and it is continuously created during the process of customer use until no customers use it or the software fails to make ends meet, the value creation stops and the software life cycle ends. In the process of software use, the value created by the software to the customer will decrease over time, this may be because the value demands of the customer have changed, it may be because the competitor has pulled away some users, and it may be because the software experience has decreased over time. 数字化转型网www.szhzxw.cn
This is the software lifecycle failure version, and failed software more or less meets the above characteristics. Long start-up period, resulting in excessive upfront investment and high customer experience expectations; Unable to meet customer experience, adapt to changes in customer experience, and weak ability to adapt and adjust, resulting in lower customer value created by the launch than expected, difficult launch, and out-of-control cost; Even if it is barely online, it still cannot attract more customer usage times, resulting in customer value creation less than expected; Rarely improve customer experience, resulting in weak service competitiveness, unable to promote customer value growth, and difficult to bring business value growth; The unreasonable business model leads to the increase of customer value, and the lack of sufficient business value benefits; Software design problems, resulting in a late surge in operation/maintenance costs until costs get out of control; Eventually the entire software ran out of money and became a commercial failure. 数字化转型网www.szhzxw.cn
This is the driving force behind software’s move to lean startups, from projects to products, from iterative improvements to SAAS models, all for software lifecycle success.
3. Redefine software engineering
“Software engineering is the application of systematic, standardized, and quantifiable methods to develop, operate, and maintain software. In other words, engineering applied to software.” ——IEEE
“Software engineering is the establishment and use of sound engineering principles to obtain software that is both economical and reliable and works effectively on real machines.” Fritz Bauer, Software Engineering: A Practitioner’s Approach to Research
As shown above, this is the basic framework of software engineering defined in the book Software Engineering: A Practitioner’s Approach to Research. It divides software engineering into four layers. Cognition is the cornerstone of the entire software engineering, and it represents the basic assumptions and guiding ideology of software engineering. The process is the foundation, the skeleton, which ties all the work together. Methods Practice is flesh and blood, they provide technical guidance for practical work; The tool is the bearer, which makes the process and method practice more efficient. (This image is from the seventh edition of Software Engineering: A Practitioner’s Approach to Research)
As we redefine software and redefine the software life cycle, software engineering will also be redefined, because they reshape the cornerstone of software engineering: cognition, changing the basic assumptions and guiding ideas of software engineering, and thus the processes, methods, practices, and tools built on the basis of cognition will also be redefined.
From software engineering in the industrial age to software engineering in the digital age
Mama always said you can’t move on without forgetting the past. — Forrest Gump
Code manufacturing in the industrial age cannot support the development of digital services in the digital age, and it has become a problem maker. 数字化转型网www.szhzxw.cn
1. Traditional software engineering centered on code manufacturing is outdated
Traditional software engineering regards software as code and software life cycle as the life cycle of code manufacturing, which has become the cornerstone of software engineering. Therefore, the goal of software engineering is to “develop, operate and maintain software in a systematic, standardized and quantifiable way”. This naturally led to the application of systematic, standardized, and quantifiable methods for developing, running, and maintaining code, which evolved over the years into what we now see as software engineering. But traditional software engineering faces challenges:
Can not achieve the original intention of solving the software crisis
Software engineering is born to solve software crisis. In the 1960s, the failure rate of software projects remained high, and the nascent software industry faced a serious software crisis. In order to develop software in an engineering way to solve the software crisis, people draw successful experience from hardware engineering and other human engineering and establish software engineering. (Refer to Baidu entry “software crisis”) 数字化转型网www.szhzxw.cn
However, since entering the digital age, the software crisis has re-emerged and intensified, a large number of digital projects are facing failure, and a large number of digital investments have been wasted. Although we can say that we have been trying, but the fact shows that after nearly 60 years of efforts, software engineering has failed to solve the software crisis, can not achieve the original goal.
Cannot guide the practice of new methods in the digital age
After 2000, many excellent new methods of software development have emerged in the digital era, such as the Internet, lean entrepreneurship, agile, design thinking, DevOps, microservices, etc., but these are not effective guidance for the existing software engineering, can not understand and learn, at most can only set a shell. This leads to a large number of excellent method practice in the landing only a shape, it is difficult to combine the actual landing root, difficult to further optimize and improve after the initial imitation in the work, the coach is barely able to use, go soon only empty shell.
It is difficult to cope with the complexity of the digital age
The digital age has given software a new connotation, software defines everything, software and hardware integration, software defined automobile, software defined mobile phone, software defined network and so on have become popular, how to effectively incorporate hardware and network into the scope of software engineering, such as how to apply agility in hardware development, has become a widely concerned topic. Big data and AI are of course one of the protagonists of the digital age, and new positions such as data development and AI development have emerged. How to deal with the relationship between code, data and AI, and how to effectively integrate and exert their power to enhance competitiveness has become a problem. But traditional software engineering is more focused on the reality of code, making it difficult to effectively incorporate hardware, data, and AI.
Software engineering has become obsolete, reduced to a collection of outdated practices
Unable to solve problems or provide guidance for solving them, software engineering has become a collector of mature practices in the industry, or to put it more bluntly, a collection of outdated practices, software engineering is obsolete, and in the long process of development, it has left a bunch of myths that cannot be solved, creating a lot of legacy problems. The development of software engineering has gradually come to a standstill, and people in actual work have gradually stopped looking for answers or even guidance from software engineering, and software engineering has also moved from scientific research and exploration to skill education and coding agricultural skills training courses. Some universities focusing on scientific research and exploration have begun to give up software engineering.
2. From software engineering in the industrial age to software engineering in the digital age
(1) The era calls for new software engineering
You can’t find the new world on the old map. 数字化转型网www.szhzxw.cn
Software engineering was born in the industrial age. By introducing the experience of hardware engineering and other human engineering, software engineering has given guidance to software research and development in the following decades, and has continuously accumulated excellent processes, methods, practices and tools of software engineering, which has greatly promoted the development of software industry. But the wealth of the old era may lead to the chronic disease of the new era, around 2000 is the last highlight moment of software engineering, RUP, CMM, EJB, etc. represent the last glory of mainstream software engineering, since 2000 into the digital age, agile, open source, Internet, etc., so that mainstream software engineering began an awkward adaptation process. The rapid evolution of methodological practices has reduced software engineering from a technology frontier to a collection of outdated practices.
The wrong question has no right answer.
The problems of The Times should be left to The Times to solve. The change of The Times is a huge change of society, just like the industrial age, it will bring a series of problems difficult to understand and explain in the agricultural age. In the 200 years of the industrial age, new cognition such as economics, management and systems engineering has gradually formed to solve the problems encountered in The Times, and new management, technology and other methods and practices have been derived, so that “science and technology is the first productive force” has become a consensus. From this point of view, it is not surprising that the digital age brings various new problems and contradictions, and we still need more time to establish the cognitive system and method practice in the digital age to solve these problems and contradictions. 数字化转型网www.szhzxw.cn
(2) To be precise, it is digital service engineering in the digital age
“Software Engineering in the Digital Age” is the exploration of software engineering in the new era, based on the cognition of the new era, to re-understand/master/explore/improve the software engineering method practice in the new era, and form a new software engineering system. In order to distinguish from the previous traditional software engineering, the previous software engineering is called the software engineering of the industrial age, and the new software engineering is called the software engineering of the digital age.
To be precise, software engineering in the digital age is actually digital service engineering in the digital age. In the current era of software-defined network, software-defined hardware, and the integration of software and data, hardware and data need to be transformed into digital services effectively combined with software to better create value. Software engineering in the digital era not only needs to solve the problem of pure software, but also needs to be used in the development of digital services such as hardware and data. Digital services are eating the world, and software engineering in the digital age (digital Services Engineering) is dedicated to “applying systematic, standardized, and quantifiable methods to develop, operate, and maintain digital services.”
Before moving on to the next chapter, I would also like to warn readers that change is risky and that caution is needed. After all, most of the existing environment is still stuck in the industrial age, and software engineering in the digital age puts you at risk of no longer matching the existing environment, which at best gives you the opportunity to drive change in the existing environment, but at worst, it may make you out of step with the current environment. 数字化转型网www.szhzxw.cn
本文由数字化转型网(www.szhzxw.cn)转载而成,来源于大卫谈;编辑/翻译:数字化转型网宁檬树。

免责声明: 本网站(https://www.szhzxw.cn/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等) 版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。
