在我计算机职业生涯早期,我遇到过一种有用的软件分类方法,将软件分为三类:系统软件、应用软件和脚本。虽然这种抽象并不完美,但它为工程师和管理者提供了有益的概念框架。每个类别揭示了软件开发、使用及编写者类型的独特见解。\n\n基础是系统软件,包括操作系统、编译器和数据库。这些作为通用的基础组件,是构建所有其他软件类型的必要条件。系统软件虽广泛存在,但本质上无差异,且自身不执行有意义的任务。生产级系统软件选项相对较少——只有少数操作系统、约十种流行编程语言和几十个主要数据库引擎。选择稀缺源于经济和技术挑战,创建可靠的系统软件需要大型高技能开发团队,且通常跨越多代。著名例子包括Unix和gcc编译器,体现了其复杂性和规模。尽管重要,只有少数软件工程师专注于系统软件开发。\n\n在此之上是应用软件,涵盖所有为特定任务设计的命名程序。例子包括消费者产品如Photoshop、Excel和TikTok,以及无数内部工具如帮助台工单系统或机床控制器。应用建立在系统软件及有时其他应用之上,旨在完成特定工作,定制或脚本能力有限。与系统软件相比,应用寿命较短,尽管微软Office、谷歌搜索和Midnight Commander等应用已存在数十年。应用软件构成专业软件开发的主体,相应地,大多数专业开发者专注于创建这些应用。\n\n第三类是脚本,涵盖自动化或连接各种组件的软件,通常针对非常具体和狭窄的用例。脚本可以简单如使用Zapier将电子表格链接到电子邮件服务,也可以复杂如利用Numpy库的数据分析脚本。世界上大多数软件属于脚本类别。与专业开发者不同,脚本作者通常包括非专业程序员,如创建Excel公式的办公人员或编写数据分析代码的科学家。虽然脚本通常不如完整应用复杂,但仍涉及编程,且具有明确的实用目的,而非独立产品。\n\n该框架优雅地将从无代码解决方案到微代码的广泛编程活动置于同一连续体,突出开发者应掌握的多样工具。它还鼓励开发者考虑简单脚本或自动化是否比构建完整应用更合适,因为脚本开发成本更低,迭代更快。有趣的是,脚本常演变为应用,应用又可成长为系统软件,反映出层级间的分形特性。\n\n在组织内部,这些类别以不同方式体现。平台团队常定制系统软件以适应公司特定需求,降低应用开发工具的复杂性。历史上,内部应用脚本支持有限,但机器人流程自动化(RPA)、无代码平台和商业智能(BI)工具的进步提升了非专业开发者的自动化和定制能力。展望未来,预计非专业人员将在软件定制中承担更多角色,受益于改进的工具和日益增长的软件需求。与此同时,专业开发者将专注于核心系统和面向用户的软件,提供API和数据流供更高级的脚本和自动化工具利用。\n\n总体而言,这一分类不仅阐明了软件的构建和维护方式,还提供了宝贵的职业洞见。理解这些层次有助于专业人士选择专长方向,并有效与软件生态系统中的其他人协作。