file

有不少朋友说他们很焦虑,看到现在全民卷 AI,自己还在学传统的软件开发方法,有意义吗?新入坑的学生,应该学什么呢?

当然啦,我肯定建议学 AI 了啊!谁都知道未来的10年是 AI 驱动开发的时代。就像2000年,人人都知道未来是面向对象的时代,还去学面向过程的技巧肯定没那么大前途了啊。

我也在开始 AI 启蒙,恶补基础知识。。感觉要被时代抛弃了。恶补一周,发现自己还是菜鸡,对大规模模型的理解九牛一毛。。新的AI软件工程和我掌握的经典软件工程,简直是两个世界的东西。。。

思考新的 AI 软件工程,谁还老老实实自己码代码来编程呀?2023年最流行的开发语言是英语。我直接用自然语言说需求,AI 给我吐代码,我再简单改改、集成一下,它跑得比人写的好多了。这个绝对会颠覆掉经典软件工程的很多思路。。。

file

很多东西自然很快会被取代。就比如:Jetbrains的Resharper语法检查器:曾经是个神器,把 C# 给它,它就可以扫描出不符合最佳实践的用法并建议我改正。

JetBrains的人应该对此是最慌的:ChatGPT几乎完全可以取代Resharper。你直接把C# 粘贴进去,问他怎么优化,或是:哪里不符合最佳实践,它直接给你改妥妥的。甚至帮你重构,帮你修bug。我感觉 Resharper 可能快要凉了。我已经很久没有用它了。凭借 Copilot+ChatGPT+VS2022 的开发体验,基本上不需要 Resharper 了。除非……Jetbrains痛定思痛,开始用 AI 去重构 JB 全家桶。

这就是新的软件工程,基于AI 对代码的分析的软件工程。直接对传统的那种,基于正则表达式、关键字分析、扫代码的思路是降维打击。Resharper是一群专家研究了十几年,总结出的最佳实践。而基于 AI 的工具,几乎可以理解任何新的语言,并且模仿其语法,构建出符合人类专家的意见,甚至修复bug。它自主性之强已经不需要人类预先设置规则,它就知道什么代码是好代码,什么是差代码。

学习的意义??

file

那……还有必要学编程吗?

我的答案是: 传统软件工程的意义显得没那么大了,但是绝对不会消失。

类比20年前,面向对象程序设计突然大规模普及,我们有了好用的 Java、C#,但是传统的编程语言并没有消失。在大学里,学习 C、汇编仍然非常重要。传统的面向过程程序设计仍然下必修课程。

今天的学生在大学课堂上学习面向对象程序设计,满脑子想:学这破玩意儿有啥用?AI 写得又快又好。

当然,AI 确实写得会远远比人类更快,但是学习手工编码绝对是有意义的。

类比我们在大学里学习汇编的过程,我也在学的时候满脑子想:学汇编有啥用?学几门高级语言不就行了?现在也没人用汇编写代码呀?但是,正是因为我学过汇编,我对数据段、代码段、堆、栈、主引导记录、虚拟机、操作系统……都有了更加深刻的理解,这成了知识大厦的一块必不可少的基石。

那么在20年后,学生疑惑:学习传统面向对象程序设计有什么用?几乎没用,但是这会成为那时软件工程的知识大厦的基石。或许在2040年,没人用 C#、JavaScript 来开发,大家都用英语指导 AI 开发。但是,如果你懂得传统的形式语言,懂得 C#、JavaScript,你一定理解的是比别人更加透彻的。

新的计算机学生应该学什么?

现在要做的,和20年前去适应面向对象类似。我们要适应新的 AI 辅助软件工程。

在20年前,C++、Java逐渐成熟,我们都知道未来的软件工程会是面向对象的。涌现出了大量经典著作,例如《敏捷软件开发》,《代码整洁之道》等。那么你在2000年就开始学习面向对象,一定会非常吃香。

现在是2023年了,大家都知道未来的软件工程一定会是面向 AI 的,也涌现出了大量 AI 辅助开发产品。那么今天开始学习 AI,也一定会在未来很吃香。

那么学习老的传统技术有用吗?当然有!

这个道理:你学面向对象程序设计,并不意味着你可以不学汇编、C语言。同样的这个道理:你学面向 AI 的程序设计,并不意味着你可以不学C++。

未来对工程师的要求是更高了还是更低了?

file

我可以很肯定的回答是更高了。

一位优秀的软件工程师,不但需要能够驾驭面向过程的代码,需要能够理解类和对象,需要理解前后端分离、接口、依赖、包,还需要理解 AI,才能彻底从根源调研一个复杂的系统。这一定是变高了。未来大家的生产力肯定会被提高,工作效率也一定会被提高。会出现高端的岗位,他们对人的要求极高,需要几十年的工程知识积淀,研究的东西也非常高精尖,需要从硬件、电路、操作系统、面向过程、类、依赖注入、组件、包、接口、AI全面了解。

而在未来,也会出现无数低端程序员,他们不懂类、不懂API、不懂函数、不懂变量、不懂对象。他们只会用最简单的语言跟 AI 唠嗑,然后傻乎乎的检查 AI 的输出。稍微涉及到本质的问题,他们就无法调研和解决了。这些低端的岗位,对人没什么要求,学两周就能上岗,开发最不值钱的东西。这和今天那些培训班毕业的,没学过汇编,就开始写面向对象的人,和未来不会面向对象就指挥 AI 写代码的人,有什么区别呢?他们注定会是社会的底层。

到底如何分配学习的重心?

只是不要把重心放在传统软件工程上了,就像我的学习重心也不是汇编。但是绝对不是不学,而是对整个宏观知识都要有更高的要求的同时,将侧重点放在 AI 的研究方向上。

例如,把70%的精力放在 AI 相关领域,20%的精力放在传统软件工程(面向对象程序设计,MVVM,依赖注入,数据结构,算法,前后端分离,组件化开发,依赖管理,包管理,操作系统,虚拟化,云计算,分布式系统,数据库等),10%的精力放在考古技术上(C、汇编、计算机组成原理,数字电路)。