所谓软件(Software),是指在计算机系统的支持下,能够完成特定功能与性能的程序(Program)、数据(Data)和相关文档(Document) ;所谓工程,往往指的是系统化、规范化、可量化的方法,是人类用于改造世界最为有效的手段之一;所谓软件工程,则是指将系统化、规范化、可量化的方法应用于软件的开发、运行和维护的过程,以及上述方法的研究。如今,“世界正运行在软件之上”,而唯有借助工程化的手段,才能建立起现代软件这一具有极高复杂度的“系统之系统”。
软件工程由方法、过程与工具组成。软件工程的方法问题是指从技术的视角,回答软件开发、运行和维护如何做的问题,包括结构化开发、面向对象等;软件工程的过程问题是指从管理的视角,回答软件开发、运行和维护需要开展哪些工作、按照什么样的步骤和次序来开展工作;软件工程的工具问题是指从工具辅助的视角,主要回答如何借助工具来辅助软件开发、运行和维护的问题。
随着以人工智能为代表的现代技术的进步,软件工程的方法、过程与工具正发生着飞速的迭代。当代的软件开发,已经不再循着旧式“手工作坊”“各自为政”的策略,而是通过结构化开发、面向对象的规范方法,借助github、copilot等先进的工具,以魔法般的效率更新着软件世界。然而,抽象与建模、模块化思想、关注点分离、信息隐藏的基本原则,却依然没有发生太大的变化。这是因为软件工程的目的没有变,始终是要处理好人与软件、软件与软件的关系;除了需要适应技术的发展,还必须满足管理学、经济学、数学乃至心理学的基本原理。
感谢散布在世界的软件与软件工程师们!你们是人类解决问题能力的结晶,为现代社会带来了前所未有的便利。正如土木工程搭建起了现代社会钢筋水泥的骨架,正是软件工程,搭建起了多姿多彩的现代数字空间,使得现代人在硬件世界之外,还能拥有一个软件的世界。