刚入门的初级开发者其实并不真的会写代码 [译]
最近我一直被一些关于新手开发者的事困扰,需要和大家讨论一下。
我们正处在软件开发的一个奇怪转折点。每个我接触到的初级开发者都有 Copilot、Claude 或 GPT 这类工具在 24 小时全天候运转。他们交付代码的速度比以往任何时候都要快。但是,当我更深入地了解他们提交的代码背后的原理时?问题就出现了。
是的,代码能跑起来,但如果问他们:为什么要这样写,而不是那样写?——鸦雀无声。再问问边缘情况(edge cases)怎么办?——一脸茫然。
曾经通过不断摸索才能获得的那些基础知识,如今似乎不复存在了。
我们正在用“快速得到解决方案”来交换“对问题的深入理解”,虽然眼下感觉很爽,但以后很可能会为此付出代价。
回到我们不得不真正思考的那段时期
我最近意识到,现在有一整代新的程序员,甚至都不知道 StackOverflow 是什么。
在“Claude”还只是信息熵领域的奠基人,而不是一个聊天机器人时,排查编程问题的方式可完全不一样。
当时,你要先用 Google 搜索,然后祈祷某个同样陷入绝望的人在网上提出了和你类似的问题。如果找到了,你就会看到一个详细而深思熟虑(有时还带着一点点居高临下的口吻)的回答,来自某位在_“Stack Overflow”_社区里德高望重的前辈。
这是我12 年前发布的一个问题,你可以看到 Nathan Wall 写的置顶答案(他居然拿到了 10000+ 积分,而且据说自 2015 年起就是一家公司的 CTO 了):

如果你想涨见识,去看看吧,或许能学到新东西。
你能想象到吗?有个人就这样无偿地写了如此详细的回答,而且全靠自己思考,没有任何 AI 帮助?
当时我的问题当然是被彻底解答了,但他不止回答了这个问题。我学到了很多我之前根本没听说过的新知识。有些甚至是我当时一点都不想知道,但现在却深深刻在脑子里了。
如果那时候你遇到了特别难的问题,而网上又没人问过同样的问题,那就真的是自求多福了。

现在的初级开发者就轻松多了。他们只需要打开chat.com,把报错信息粘贴进去就行。更懒一点的,连切换浏览器的 30 秒都不想花,直接用能把一切整合到同一个地方的工具。
确实又方便又快。
但是,StackOverflow 有一个无可替代的优势:
阅读经验丰富的开发者针对你所讨论的话题展开的讨论,是学习最好的方式。
看这张图,你就明白我的意思了:

AI 可以给你答案,但你获得的知识往往是浮于表面的。而在 StackOverflow 上,你不得不阅读多位专家之间的讨论,才能获得完整的思路。虽然过程更慢,但你不仅知道什么能行,还会明白为什么这样做可行。
想想你认识的那些优秀开发者。他们是靠复制粘贴现成的解决方案变得那么厉害的吗?不是的——他们之所以变得优秀,是因为他们对系统有深层次的理解,也善于学习其他开发者的思路。而正是这种能力,如今正在慢慢消失。
我并不是想变成那个整天吐槽“现在的年轻人啊……”的人。我自己每天都在用 AI 工具,而且我自己也在做一个。但我们必须承认,为了图方便,我们正牺牲掉什么东西。
我们能做些什么?
我一直在尝试一些能让我们在 AI 时代依然保持深度学习的方式(因为说实话,AI 不会消失)。以下是我觉得可行的方法:
首先,用 AI 的时候要带着学习的心态。 当它给你答案时,问问它为什么?对答案进行追问。这确实更花时间,但这正是重点。
其次,找到一个真正能启发你的社群。 Reddit、Discord、Mastodon……哪里有聪明人,哪里就有深入的讨论。那些让你恍然大悟、惊叹“原来还可以这样想”的瞬间,都是宝贵的学习过程。
重新审视代码评审(Code Review)方式。 不要只看代码能不能跑,而要和团队深入讨论:他们还考虑过哪些方案?为什么最终选择了这个?让对过程的理解和对结果的关注同等重要。
偶尔从头开始做点小项目。 是的,AI 可以直接生成一个完整的认证系统。但你也可以先自己动手实现一遍。也许写出来的代码不如 AI 生成的好,但你能真正理解每一行在做什么。这种理解会不断累积,形成你的核心技能。
放眼未来
现实就是:这种加速已经开始了,我们无法阻止。开源的模型层出不穷,在不久的将来,我们的口袋里可能就能运行一个 AGI。但这并不意味着我们要因此成为更糟糕的开发者。
未来真正值得关注的,不是我们用不用 AI,而是我们_怎么_用 AI。也许,我们可以既享受 AI 带来的速度,又兼顾对技术的深度理解。
如果你有其他平衡这两者的方法,欢迎告诉我。或者你想说我只是个老家伙在那儿对着云彩咆哮也行。无论如何,让我们一起来想出一个好办法吧。