软件工程,还有未来吗?

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

文章回顾软件工程从手工业、结构化编程、互联网、云原生到AI时代的演进,指出抽象层级不断提高、软件复杂度持续爆炸。作者认为,软件工程因应对复杂性而存在,需求无止境,行业不会消亡,但工程师技能树将大变。AI短期内更适合当辅助者,人类负责抽象、统筹与规划,软件工程师价值反而更受重视。

🔎

延伸解读

抽象层级提升的代价与收益

文章指出软件工程演进的一条规律是抽象层级不断提高:从机器语言、汇编到C/Unix,再到JVM跨平台、Kubernetes+Docker打包运行环境,直至AI将自然语言直接转为代码。每一次抽象都屏蔽了底层复杂性,让开发者更接近人类思维模式,但同时也意味着对底层细节的掌控力减弱,调试和优化可能更依赖工具链。读者需注意,抽象并非免费,它把复杂性转移到了新的层面。

AI辅助者的边界与风险

作者认为AI短期内更适合当辅助者,人类负责抽象、统筹与规划。原因在于AI自我迭代缺乏真实应用场景,容易陷入封闭系统更新,放大微小误差形成谬误。这提示读者:在采用AI生成代码时,应保留人类审核与分派环节,避免完全依赖AI闭环训练。AI的辅助价值在于完善内容、提供建议,而非替代人类对真实问题的判断与创新。

软件工程不消亡的逻辑

文章从本质出发,认为软件工程因应对复杂性而存在,人类需求无止境,未来软件要解决的问题只会更复杂,因此软件工程和工程师不会被淘汰,但技能树将大变。对读者而言,这意味着不必过度焦虑行业消失,而应关注自身简化、抽象、规划能力的提升。技术手段会变,但对高质量交付和社会化实践的需求不变,专业门槛反而可能更高。

❓

Q&A

软件工程的发展经历了哪几个主要阶段?

文章将软件工程演进分为五个阶段:五六十年代的手工业时代,硬件性能提升使软件成为瓶颈,北约会议提出“软件工程”概念;七八十年代的结构化编程时代,标志是C语言和Unix OS诞生,Dijkstra提出goto语句的害处,软件应自顶向下、模块化编写;九十年代到2010年代中期的互联网时代,Java语言诞生,敏捷概念兴起,核心是面向对象和Web;2010年代中期到2020年代初的云计算和云原生时代,标志是Docker和Kubernetes开源;2022年ChatGPT爆发开始的AI驱动时代,自然语言成为编程语言,开发效率爆发。

软件工程演进中抽象层级是如何变化的?

抽象层级越来越高:从硬件机器语言、汇编语言,到结构化编程阶段的C和Unix屏蔽硬件指令复杂性,再到互联网阶段的JVM实现跨平台,云原生阶段的Kubernetes+Docker让运行环境和资源一并打包,最后AI阶段让人类语言直接翻译成传统编程语言,达到最高抽象层级,最接近人类思维模式。

为什么说软件工程行业不会消亡?

软件工程诞生的动机是应对复杂性。人类需求无止境,软件会越来越复杂,需要可重复实践的方法保证交付时间和质量。未来需要软件解决的问题更复杂,软件本身也更复杂,因此软件工程需要持续存在并更复杂,专业门槛更高。技能会被替代,但行业会持续进步。

AI在软件工程中短期内会扮演什么角色?

未来几年到十几年,AI更适合作为辅助者。软件工程师负责抽象、统筹和高屋建瓴的规划性工作,AI作为辅助者、好帮手,帮助完善内容,作为智囊团提供建议,并作为实施者搞定经过人类审核分派的具体任务。

AI自我迭代和强化存在什么困难?

AI自己生成代码并用于训练,会缺乏人类真实的应用场景,本质上无法产生针对真实的改进和创新。这种模式可视为封闭系统的自我更新,极易放大微小误差,最终结果天差地别,形成不可思议的谬误。

AI时代软件工程师的价值体现在哪些方面?

软件工程师对于问题的简化能力、抽象能力、规划能力将得到前所未有的重视。社会依然需要软件工程师,甚至需要更多,但技能树可能大幅变化。人类负责抽象、统筹与规划,软件工程师价值反而更受重视。

🏷️

标签

➡️

继续阅读