关注「索引目录」公众号,获取更多干货。
我感觉这句话在人工智能和代码代理时代更加适用。当然,现在我们经常写提示信息而不是编写代码。但说实话,这不就是速度极快的复制粘贴吗?
人们想象中的程序员形象通常都相当戏剧化。最乐观的版本是一位英俊的黑客,和安吉丽娜·朱莉一起坐在堆满电脑的地下室里,入侵银行系统和五角大楼的秘密数据库。
一个略显不浪漫但仍然令人印象深刻的画面是:开发人员以惊人的速度敲击键盘,代码行像《黑客帝国》中那样从屏幕上倾泻而下。
公平地说,当你开始学习编程时,这种想法并非完全错误(当然,安吉丽娜·朱莉除外)。你实际上会编写大量的代码。
甚至有人在我的文章
《你的 GitHub 贡献图毫无意义(原因如下)》
下评论说 ,贡献图最绿的往往是那些正在实践中学习的、充满抱负的开发者——他们每天编写代码、尝试各种方法、进行实验。这完全正常。
我经常和初级和中级开发人员交流,他们中的许多人对这份工作的理解正是如此:你的职责就是交付功能,发布代码。说实话,这完全没问题。
个人小更新:我最近被AWS社区建设者计划 录取了🎉希望他们能发一些很酷的帽子和T恤😅如果你想支持我,可以在这里给我的LinkedIn帖子点个赞。
但之后会发生什么?
随着你职业生涯的深入,一些有趣的事情会发生。
你的级别越高,对系统的责任就越大,你实际花在编写代码上的时间就越少。
相反,你越来越多的时间都花在了调试、调查奇怪的问题以及解决其他人未能解决的问题上。
你现在可以想想:但是有些老年人仍然会写很多代码!
没错,如果你是一位经验丰富的开发人员,在一家小型创业公司工作,你可能仍然会花费大量时间编写代码。尤其是在如今人工智能工具能够极大地加速开发的情况下。
但随着项目规模的扩大和成功,其复杂性也随之增加。而复杂性也带来了不同类型的工作。
少写代码,多理解系统。因为一旦生产环境出现问题,就必须有人去调查。
突然,技术支持团队需要答案。马上!
然后你花了一整天分析日志。
哦,原来是某个地方出现了竞态条件!你是资深工程师,你得负责调查。
是不是我们的配置出了问题?你得找出原因!
当然,初级开发人员总会提出开发人员最常问的问题:
“这是为什么呢null?”
等等……编程不也和架构有关吗?
你可能会说:编程不仅仅是调试。开发者还需要选择架构、框架和技术栈。
完全正确。
但我在这个行业工作的时间越长,就越意识到在很多领域,几乎所有东西都已经被发明出来了。设计模式、成熟的架构方法以及针对各种问题的成熟解决方案都已存在。
在设计系统时,你很少会从零开始创造一切。相反,你会重用以前行之有效的模式,借鉴其他人已经测试过的架构,并利用开发者社区的集体智慧。
从这个意义上讲,建筑本身往往是一种复制粘贴——只不过是在更高的层次上。
忽视所有这些积累的知识,要么是天才之举……要么是愚蠢之举。
我大三那年
我刚入职做初级开发人员的时候,功能一个接一个地发布。那时候我写的代码量肯定有几公里长。如果遇到问题,我会花时间研究、尝试各种方法、搜索错误信息。如果还是解决不了,我就直接去找资深开发人员。
事情就是这样。无论问题多么棘手、多么耗时,这位上级都必须解决。这的确是他的职责所在。
我记得当时有一次,我本地机器上的项目突然无法编译了。我花了几个小时试图找出原因,直到一位资深同事检查了一些内容后,平静地说:“你的Node版本不对。” 谜团就此解开。
那时候,我也有点同情那些前辈。他们总是忙着打电话,经常被打断,很少真正写代码。而我却乐此不疲地实现着一个又一个功能。基础设施?流水线?AWS?我几乎都没考虑过这些。
今天
我现在是一名高级开发人员,甚至需要协调多个团队的工作。我还会写代码吗?当然会。但我还能像初级开发人员时那样交付大量新功能吗?
并不真地。
相反,我的很多工作都是这样的:升级框架,然后试图弄明白为什么所有功能突然崩溃;检查依赖项更新是否引入了回归问题;调查只在特定环境下出现的奇怪 bug。
还记得我们最近遇到的那些著名的前端 CVE 漏洞吗?就是那种突然出现并引发小规模恐慌的漏洞。
这会影响我们的项目吗?幸运的是,不会。
现在唯一剩下的任务就是花一周时间回复邮件,解释我们根本就没用 React 😉
真正的技能
编写代码可能看起来像复制粘贴。架构设计也只是高层次的复制粘贴。但调试则是纯粹的问题解决。
它迫使你深入了解系统,追踪数据流,分析日志,并验证假设。有时,Stack Overflow 上的答案也无济于事。有时,人工智能工具也帮不上忙。
你只需要思考。
经过数小时的调查,根本原因往往出乎意料地小:缺少一个属性、配置不正确,或者一行代码。
调试有时感觉很像侦探工作。
责任
这让我想起一个故事。
还记得那个无论如何都要帮助我的学长吗?现在我成了队友们的学长了。
前段时间,一位初级开发人员来找我,因为他在实现一个复杂的表单时,没有注意到某个地方的验证功能失效了。他不知道该如何修复,已经为此苦恼了很久。眼看截止日期临近,他却束手无策。
我试着指导他,指出代码中一些可能有帮助的地方,但没用。最后,我不得不自己坐下来深入研究那段代码。
截止日期前一天(我凌晨1点才完成)。
这件事让人感到压力吗?也许吧。他应该早点告诉我这件事吗?当然应该。但有时候,这就是现实。
所以……我对此感到不高兴吗?
我是否因为自己发布的功能不如初级工程师时那么多而感到不满?
一点也不。
毕竟,谁小时候不想当侦探呢?
资深开发人员基本上就是软件侦探。🕵️♀️
关注「索引目录」公众号,获取更多干货。

