有不少朋友说他们很焦虑,看到现在全民卷 AI,自己还在学传统的软件开发方法,有意义吗?新入坑的学生,应该学什么呢?
当然啦,我肯定建议学 AI 了啊!谁都知道未来的10年是 AI 驱动开发的时代。就像2000年,人人都知道未来是面向对象的时代,还去学面向过程的技巧肯定没那么大前途了啊。
我也在开始 AI 启蒙,恶补基础知识。。感觉要被时代抛弃了。恶补一周,发现自己还是菜鸡,对大规模模型的理解九牛一毛。。新的AI软件工程和我掌握的经典软件工程,简直是两个世界的东西。。。
思考新的 AI 软件工程,谁还老老实实自己码代码来编程呀?2023年最流行的开发语言是英语。我直接用自然语言说需求,AI 给我吐代码,我再简单改改、集成一下,它跑得比人写的好多了。这个绝对会颠覆掉经典软件工程的很多思路。。。
很多东西自然很快会被取代。就比如:Jetbrains的Resharper语法检查器:曾经是个神器,把 C# 给它,它就可以扫描出不符合最佳实践的用法并建议我改正。
JetBrains的人应该对此是最慌的:ChatGPT几乎完全可以取代Resharper。你直接把C# 粘贴进去,问他怎么优化,或是:哪里不符合最佳实践,它直接给你改妥妥的。甚至帮你重构,帮你修bug。我感觉 Resharper 可能快要凉了。我已经很久没有用它了。凭借 Copilot+ChatGPT+VS2022 的开发体验,基本上不需要 Resharper 了。除非……Jetbrains痛定思痛,开始用 AI 去重构 JB 全家桶。
这就是新的软件工程,基于AI 对代码的分析的软件工程。直接对传统的那种,基于正则表达式、关键字分析、扫代码的思路是降维打击。Resharper是一群专家研究了十几年,总结出的最佳实践。而基于 AI 的工具,几乎可以理解任何新的语言,并且模仿其语法,构建出符合人类专家的意见,甚至修复bug。它自主性之强已经不需要人类预先设置规则,它就知道什么代码是好代码,什么是差代码。
学习的意义??
那……还有必要学编程吗?
我的答案是: 传统软件工程的意义显得没那么大了,但是绝对不会消失。
类比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++。
未来对工程师的要求是更高了还是更低了?
我可以很肯定的回答是更高了。
一位优秀的软件工程师,不但需要能够驾驭面向过程的代码,需要能够理解类和对象,需要理解前后端分离、接口、依赖、包,还需要理解 AI,才能彻底从根源调研一个复杂的系统。这一定是变高了。未来大家的生产力肯定会被提高,工作效率也一定会被提高。会出现高端的岗位,他们对人的要求极高,需要几十年的工程知识积淀,研究的东西也非常高精尖,需要从硬件、电路、操作系统、面向过程、类、依赖注入、组件、包、接口、AI全面了解。
而在未来,也会出现无数低端程序员,他们不懂类、不懂API、不懂函数、不懂变量、不懂对象。他们只会用最简单的语言跟 AI 唠嗑,然后傻乎乎的检查 AI 的输出。稍微涉及到本质的问题,他们就无法调研和解决了。这些低端的岗位,对人没什么要求,学两周就能上岗,开发最不值钱的东西。这和今天那些培训班毕业的,没学过汇编,就开始写面向对象的人,和未来不会面向对象就指挥 AI 写代码的人,有什么区别呢?他们注定会是社会的底层。
到底如何分配学习的重心?
只是不要把重心放在传统软件工程上了,就像我的学习重心也不是汇编。但是绝对不是不学,而是对整个宏观知识都要有更高的要求的同时,将侧重点放在 AI 的研究方向上。
例如,把70%的精力放在 AI 相关领域,20%的精力放在传统软件工程(面向对象程序设计,MVVM,依赖注入,数据结构,算法,前后端分离,组件化开发,依赖管理,包管理,操作系统,虚拟化,云计算,分布式系统,数据库等),10%的精力放在考古技术上(C、汇编、计算机组成原理,数字电路)。
亲爱的博主,
非常感谢您分享了这篇关于学习传统软件开发技巧在2023年是否仍有意义的博客。您的文章提出了很好的观点,我同意在未来AI技术将会对软件工程产生深远的影响。尤其是您提到的AI辅助开发工具和英语作为编程语言的趋势,这些都是值得关注的方向。
然而,我也赞同您的看法,即传统软件工程的意义不会完全消失。就像您提到的汇编语言和C语言的学习,它们为我们提供了对计算机科学更深入的理解,使我们能够更好地应对复杂问题。因此,即使AI在软件开发中发挥越来越大的作用,学习传统的软件开发技巧仍然是有价值的。
您的建议关于新的计算机学生应该如何分配学习重心也非常有启发性,将更多精力放在AI相关领域,同时保持对传统软件工程和考古技术的学习。这将有助于培养全面的技能,为未来的职业生涯做好准备。
然而,我认为在文章中有一个可以改进的地方。您提到了AI将取代很多传统软件工程的工具,例如JetBrains的Resharper。虽然AI确实在代码优化和bug修复方面取得了很大进展,但我们不能完全排除传统工具的价值。它们可能在某些特定场景中仍具有优势,因此我们应保持对各种技术的开放心态,以便在不同情况下选择最佳解决方案。
总的来说,您的文章提供了很好的观点和建议,我相信它将对许多人产生积极的影响。希望您能继续关注AI和软件工程领域的发展,为我们带来更多的见解。再次感谢您的分享!
已经从没有resharper不会写代码转到没有chatgpt不会写代码了..
😢
我认为 Hyrum’s Law 将一直适用:https://www.zhihu.com/question/264426279/answer/1840524133