文章强调在AI编码时代,调试能力成为区分真正工程师的关键,其他工作日趋自动化。
我有种感觉,在 AI 和编程 Agent 的时代,这个说法甚至更加真实了。当然,现在我们经常写 prompt 而不是代码。但说实话,那不过是一个极其快速的复制粘贴版本吗?
当人们想象程序员时,画面通常相当戏剧化。在最乐观的版本中,这是一个英俊的黑客坐在满是电脑的地下室里,和安吉丽娜·朱莉一起,闯入银行系统和秘密的五角大楼数据库。
一个稍微不那么浪漫但仍然令人印象深刻的画面是,开发者以疯狂的速度敲击键盘,代码行像《黑客帝国》中那样在屏幕上级联下来。
说句公道话,当你开始学习编程时,这个愿景并不完全错误(当然除了安吉丽娜·朱莉)。你确实写了很多代码。
有人甚至在我的文章《你的 GitHub 贡献图毫无意义(原因如下)》下评论说,最绿的贡献图通常来自那些通过实践学习的有志开发者——每天编码、尝试新东西、做实验。这完全是自然的。
我经常与初级和中级开发者交谈,他们中许多人就是这样理解这份工作的:你的角色是交付功能。发布代码。老实说,这完全没有问题。
个人小更新:我最近被接受进入 AWS Community Builders 项目 🎉 我希望他们能发出酷酷的帽子和 T 恤 😅 如果你想支持我,可以在我的 LinkedIn 帖子上点赞。
当你在职业生涯中走得更远时,会发生一些有趣的事情。
你变得越来越高级——对系统的责任越来越大——你实际花在写代码上的时间就越来越少。
相反,你越来越多的时间花在调试、调查奇怪的问题,以及通常解决其他人没有设法解决的问题上。
你现在可能想:但有些高级开发者仍然编写很多代码!
是的,如果你是在小创业公司工作的有经验的开发者,你可能仍然会花很多时间编写代码。尤其是现在,当 AI 工具可以大大加速开发时。
但随着项目的增长和成功,其复杂性也会增加。而复杂性带来了不同类型的工作。
更少地编写代码。更多地理解系统。因为当生产环境中出现问题时,必须有人来调查它。
突然支持团队需要答案。现在就要!然后你花一整天分析日志。哦,某个地方有竞态条件!你是高级开发者,你需要调查它。我们的配置有问题吗?你需要搞清楚!
当然,初级开发者总是会提出所有开发者中最著名的问题:
现在你可能会说:编程不仅仅是调试。开发者还需要选择架构、框架和技术栈。
这完全是真的。
但我在这个行业工作的时间越长,我就越意识到在许多领域几乎所有东西都已经被发明了。有设计模式、众所周知的架构方法和许多类问题的验证解决方案。
当你设计一个系统时,你很少从头开始发明一切。相反,你重用以前有效的模式、调整其他人已经测试过的架构,并建立在开发者社区的集体知识基础上。
从这个意义上说,架构本身通常是一种复制粘贴——只是在一个更高的层级上。
忽视所有这些积累的知识要么是天才,要么就是愚蠢。
当我是初级开发者时,我在一个接一个地交付功能。那时我一定写了数不清的代码。如果有什么不对,我会花一些时间研究、尝试新东西、谷歌搜索错误。如果我仍然无法修复它,我就去找一个高级开发者。
就这样了。无论问题有多烦人、有多耗时,高级开发者都必须解决它。那字面上就是他的工作。
我记得那个时期的一个情况,当时我本地机器上的项目突然停止构建。我花了几个小时试图搞清楚,直到一位高级开发者检查了一些东西,平静地说:"你的 Node 版本错了。"那就是整个谜团。
那时我也对高级开发者感到有点遗憾。他们总是在通话中,不断被打断,很少写实际的代码。同时我很高兴地一个接一个地实现功能。基础设施?流水线?AWS?我几乎没有想过这些东西。
我现在本身就是一个高级开发者,甚至还要协调跨多个团队的工作。我还写代码吗?当然。但我能像初级开发者时那样交付大量的新功能吗?
相反,我的很多工作看起来是这样的:升级框架并尝试理解为什么一切突然破裂。检查依赖更新是否引入了回归。调查只在某些环境中出现的奇怪错误。
还记得我们最近遇到的那些著名的前端 CVE 吗?那种突然出现在各处并引发小规模恐慌的漏洞。
它影响我们的项目吗?幸运的是没有。
现在唯一剩下的任务是花一周时间回复邮件,解释我们甚至不使用 React 😉
编写代码看起来像是复制粘贴。架构只是高层次的复制粘贴。但调试是纯粹的问题解决。
它强制你深入理解系统,跟踪数据流,分析日志,测试假设。有时没有 Stack Overflow 答案有帮助。有时 AI 工具也无济于事。
你只需要思考。
经过几个小时的调查,根本原因通常是一些惊人地小的东西:一个缺失的属性、一个不正确的配置,或者一行代码。
调试有时感觉很像侦探工作。
这让我想起一个故事。
还记得那个必须无论如何都要帮助我的高级开发者吗?现在我对我的队友就是那样的高级开发者。
不久前,一位初级开发者来找我,因为在实现一个复杂的表单时,他没有注意到验证在一个地方不起作用。他不知道如何修复它,并且已经被它卡住了相当长的时间。截止日期即将到来。
我试图引导他,指出代码中可能有帮助的几个地方,但没有起作用。最后,我不得不坐下来自己深入研究那段代码。
在截止日期的前一天(我在凌晨 1 点完成)。
这很有压力吗?也许吧。他应该更早地告诉我这个问题吗?绝对应该。但有时这就是现实。
我是否因为没有像初级开发者时那样交付那么多功能而感到不满?
毕竟——谁没有想过在小时候成为侦探呢?
高级开发者基本上就是软件侦探。🕵️♀️
某些评论可能仅对登录的访问者可见。登录以查看所有评论。
如需进一步行动,你可以考虑屏蔽此人和/或举报滥用行为。