AI时代,那些曾经被我们嫌弃的专业课,正在焕发第二春。

“学校的专业课已经过时了,工作的时候基本用不到。”

上大学时,我和周围很多计算机专业的学生都有过类似的想法。

学 C、C++、Java,要记语法、写练习题,学了半年也未必能做出什么实际的东西;学操作系统和计算机网络,面对一堆概念和原理,总觉得离开发很远;至于软件工程、软件项目管理,更容易被当成考前背一背就能应付过去的课。

相比之下,前端框架、后端开发、数据库以及各种新技术更有吸引力。学会一个框架,当天就能搭出页面;掌握一套开发流程,很快就能做出一个可以运行的项目。对刚开始学编程的人来说,这种看得见的成果比课本上的理论更有成就感。

这种想法并不难理解。过去很多开发任务确实需要亲手写大量代码,熟练的编程语言和工具掌握程度直接决定效率。但随着 Coding Agent 逐渐普及,原本要花数小时甚至更久的工作,现在用自然语言描述清楚,就能得到一个初步实现。

代码可以让 AI 来写,但程序是否合理、系统能否稳定运行、最终产品能否解决实际问题,仍然需要有人判断。过去不太受重视的专业课,价值正是在这些地方重新显现出来。

复杂项目的麻烦常常不在编码

以前做项目,最直接的困难是如何实现功能。现在 AI 能完成相当一部分编码工作,项目真正做起来之后,问题往往出在别处。

以一个普通的 Web 应用为例,AI 可以生成登录页面、编写后端接口、设计数据库表结构。最初的效果通常不错,几轮提示之后,页面和接口就都有了。

功能逐渐增加,问题随之出现:不同模块的数据结构不一致,前后端接口对不上,一处修改影响其他模块,本地运行正常而部署到服务器后出现异常。等项目复杂到一定程度,开发者可能发现自己生成了大量代码,却越来越难弄清整个系统的运行逻辑。

这时候继续让 AI 改代码,未必能触及根本。开发者需要知道项目结构是什么样、模块之间有什么依赖、问题可能出在哪一环、一次修改会影响哪些功能、怎样验证修改确实有效。这些能力不是多学几个框架就能获得的,它们与编程基础、软件设计、系统原理以及长期积累的工程经验有关。

编程语言

编程语言课程在今天依然值得认真对待。

过去学 C++,大量时间花在语法、指针、引用、类和对象上。对初学者来说,这些内容既琐碎又容易出错。有了 AI 之后,有人会觉得既然代码可以直接生成,只要知道怎么提问就够了。

接触复杂项目之后就会发现并非如此。AI 生成一段涉及指针、对象生命周期和内存管理的代码时,不了解这些概念的开发者很难判断其中是否存在资源泄漏、悬空引用或未定义行为。使用 Java 时若不清楚异常处理、并发机制和对象之间的关系,即使业务代码由 AI 写好,遇到复杂问题也无从下手。Python 的语法确实容易掌握,但任务涉及异步执行、复杂数据处理或性能优化时,理解程序的运行方式依然重要。

编程基础的意义不在于记住多少语法规则,也不要求每个人都从头手写所有代码。重要的是 AI 给出一段实现时,开发者能看懂它在做什么、为什么这样做、是否适合当前需求。

AI 生成的代码还有其他问题:引用项目中不存在的依赖,调用不适用的接口,或者采用一种能运行却与现有代码结构不符的实现方式。缺乏基本编程能力的人,很容易陷入不断复制代码、不断修复报错的循环。

编程语言在 AI 时代的作用,从编写代码转向了理解、修改和验证代码。具备这种能力,AI 才是提高工作效率的工具;否则它只是一个可以反复试错、却无法独立判断结果的黑盒。

软件工程

如果编程语言解决的是如何实现功能,软件工程关注的就是如何把这些功能组织成可靠的系统。

课堂上,需求分析、模块划分、软件架构、版本管理、测试计划这类内容往往不如编程实践直观。与其花时间画图、写文档,不如直接开始开发,似乎更有效率。

但项目从演示程序发展成可用的软件时,困难通常不在于某个功能怎么写,而在于如何让所有功能共同工作。

以包含用户系统、内容管理、文件上传和数据统计功能的应用为例,最初可以直接让 AI 生成几个页面、编写几个接口,快速做出基本功能。随着需求增加,如果没有提前规划模块边界和数据结构,项目就会逐渐混乱:不同模块各自维护一套相似的逻辑,接口定义频繁变化,权限判断散落在多个位置,改动一处又波及他处。新增功能的成本越来越高,维护现有代码也变得困难。

软件架构课程讨论的模块划分、系统边界、组件依赖和技术选型,对应的正是这些困难。用户量不大的应用未必需要一开始就采用微服务,把所有功能拆成独立服务看起来很先进,却会增加部署、通信和维护成本,结构清晰的单体应用反而更合适。AI 可以提供不同的架构方案,哪一种更适合当前项目,需要结合需求、开发周期、团队能力和维护成本来判断。

功能在正常输入下运行成功,并不意味着它没有问题:异常输入、边界条件和不同运行环境都可能带来缺陷;代码修改之后,还要确认原有功能没有受到影响。AI 能生成测试代码,也能协助分析报错信息,但测试范围是否充分、关键场景是否覆盖、结果是否符合业务要求,仍然需要开发者检查。

真实的开发受时间、人员和资源限制,需求可能临时变化,进度可能落后,技术方案也可能在实施中暴露问题。AI 可以拆分需求、整理任务、生成文档,但计划是否合理、任务之间有没有遗漏、时间安排是否符合实际,依然要结合项目进展判断。

系统基础

除编程语言和软件工程之外,计算机网络、操作系统、计算机组成原理等课程也经常在实际开发中发挥作用。

这些课程的重要性并没有因为 AI 时代的到来而增加或减少。它们与数据结构一起构成计算机专业的知识基础,也是考研统考科目 408 的内容。

并不是每个程序员都需要深入研究硬件、网络协议或复杂算法,不同岗位有不同的技术要求,掌握的深度也应有所区别。但对计算机专业的学生来说,至少应该建立基本的系统认识:遇到问题时,不只想到向 AI 提问,还能判断问题可能发生在哪个环节、应该收集哪些信息、如何验证解决方案。这些知识不要求人人成为某个领域的专家,它们提供的是继续学习和解决问题的基础。

技术工具会不断变化,今天流行的框架几年后可能被新的技术取代,常用的 Coding Agent 也可能很快出现新的形态。理解程序运行机制、分析系统问题、判断技术方案的能力,不会因为工具更新而失去意义。这也是计算机专业教育中值得保留的部分。

怎样使用 AI

学好课程并不意味着就能适应 AI 时代的开发任务,理论学习与实际开发应当结合。

开发过程中,AI 不仅能参与编码,也可以解释概念、分析方案、整理文档。需要注意的只有一点:不要因为 AI 给出了答案,就认为自己已经掌握了知识。

一个方案为什么可行,依赖哪些前提,什么情况下会失效,有没有更简单的实现,怎样通过实验验证,这些问题需要自己回答。能够独立回答时,知识才真正成为能力。

AI 并没有让传统专业课突然变得重要,它让这些课程与实际开发之间的联系变得更清楚。过去开发者把大量精力放在如何实现功能上,现在其中相当一部分由 AI 承担,精力可以转向需求分析、方案设计和结果验证。

这种变化不会自动让每个人获得更强的开发能力。只把 AI 当成代码生成器,开发方式仍会停留在接收需求、生成代码、修复报错的循环里;简单任务下这种方式有效,复杂项目上,缺乏系统性知识的问题会逐渐暴露。理解项目结构、能识别风险、能根据测试结果修正实现的开发者,可以让 AI 参与更多环节。

区别不在谁用了更先进的模型,而在谁更善于判断任务、组织工作和验证结果。对计算机专业的学生来说,学习重点因此需要调整:没有必要为了证明编程能力而拒绝 AI,也没有必要把所有语法和 API 都背下来;同样不能因为 AI 能生成代码,就忽视编程基础、系统原理和工程实践。

以前我们觉得大学专业课离实际开发很远,如今 AI 承担了越来越多的编码工作,反而提供了重新认识这些课程的机会。工具会更新,理解程序、分析问题、设计系统和验证结果的能力不会随之过时,这些课程提供的正是这套能力的基础。

对在校学生来说,把这些课程学扎实,仍然是一项值得的投入。