作为软件开发者,如何找到无需使用LLM的工作?
我从事软件开发工作多年,成果斐然。我选择这份职业的原因有很多:
- 我富有创造力,需要进行创作
- 我有着强烈的思考欲望
- 这份工作能带来可观的经济报酬
- 我可以专注工作,无需频繁进行流于表面的社交闲聊
- 我渴望解决现实问题,成为推动进步的力量
- 可以居家办公
这份工作让我收获颇丰,取得了不少成就。然而行业却逐渐走下坡路。我明白有时确实需要用到库和API,但我多次见到团队为解决本可轻松自行搞定的问题而盲目选用库,在我看来这种决策是“跟风”而非理性选择。当然,有些优质库易于集成,能节省数周甚至数月的工作量,我并不反对使用这类库,毕竟软件开发的现实情况常常迫使我们选择更高效的路径以节约成本和精力。
随后,管理者、Scrum主管、每日站会(standups)等一系列外向型人士推崇的事物被强行推行,他们认为这些举措有益。我承认定期汇报进展和遇到的障碍有其价值,但说实话,我们已有:
- 需要维护的问题追踪工具(issue trackers),可展示工作进展
- 遇到困难时可在工单中留言并@相关人员求助
- 遇到障碍时可直接私信相关人员
因此,合理的折中方案是每日提交简短的书面进展与问题总结,而每日站会会打断工作节奏,会后还需重新梳理工作计划。我很少遇到障碍,但若真遇到,我会花一定时间尝试解决,若仍无法解决则继续调研,最后才会联系可能知晓答案的人。所以在极少数情况下,我不会等到站会再提及问题,而是直接联系相关人员解决。因此在站会上,我的“障碍”部分通常为空,要么是没有障碍,要么是早已解决。我汇报的工作内容对未参与相关项目的人来说往往毫无意义,反之亦然,其他人的汇报内容也常因我缺乏上下文而与我无关。
当下的新趋势是使用大语言模型(LLMs)。
由于LLM是基于互联网公开数据训练的,能快速生成摘要甚至代码,有些人认为它很有用。只需点击按钮就能获取摘要,而此前这需要花费不少时间搜索。它还能快速生成代码,因此有人认为它能提升生产力。
作为软件开发者,我对使用LLM存在诸多顾虑。我将分点阐述这些问题,不指望所有人都认同,毕竟我们本应独立思考,不同观点是正常的。
A. 它替我思考
我知道这非常主观,但必须坦诚。正如引言所述,我选择这份职业是因为我想要思考和创作。如果LLM在某些领域替我思考,我只需输入提示词等待结果,那我就不再是程序员,而是质检员。我在审核代码合并请求(PRs)时确实会做类似工作,但不允许我自己写代码就越过了底线。
B. 认知债务
在开发过程中,为实现或修复功能所做的调研能让我获取上下文信息,这些宝贵的知识有助于我深入理解代码,并在后续遇到类似问题时复用。为了所谓的“提升生产力”(这一点存疑)而放弃获取这些上下文,会阻碍我作为开发者的成长。
C. 能力退化
能力退化是真实存在的问题。如果我们不运用思考能力,它会逐渐衰退,导致我们越来越依赖LLM,而自身的专业技能则日益生疏。如果让多个智能体(agents)代劳,我们只需审核结果,这会大幅减少甚至完全剥夺我们接触软件开发关键环节的机会,相关技能会逐渐流失。我们不仅无法成长,还会积累认知债务,能力不断退化。
D. 流于表面
任何深度思考者都清楚,亲自解决问题与交给他人或工具解决,思考深度截然不同。如果让智能体代劳,我们会自动失去思考深度,沦为大量非自研代码的审核者,却要为这些代码负责。我是深度思考者,被迫流于表面会严重打击我的积极性。我见过不少聪明的同事写出的代码存在各种问题:重复的HTML ID、不同React组件中的重复函数、泄露关键API信息、极低性能的解决方案(比如为集合中每个元素单独查询而非一次性查询所有)。审核这些冗长的PRs并逐一指出问题令人沮丧;还有些PRs在我有限的工单上下文下看似正确,但测试时却发现完全错误。而现在,我也被要求(委婉地说)这样做。
E. 信息泄露风险
向LLM提供的上下文信息,就像在拥挤街道的屋顶上大声喊话一样不安全。如果使用LLM,我必须时刻警惕提供的内容,为LLM创建独立的操作系统用户,还要时刻留意可能泄露的信息,无法专注于工作。尤其是在紧急情况下,判断力受影响时,这种风险更令人担忧。
F. 潜在的安全问题
我自己写代码时,会密切关注潜在的安全问题。而审核他人代码本身就较为表面,我无法像对待自己写的代码那样深入思考。如果是同事写的代码,我相信他们已尽力确保安全,我的审核能帮他们发现遗漏的问题。但LLM生成的代码没有原始作者。因此,当有人用LLM开发支付模块时,我尤为担忧,原因如下:
- LLM会在远程服务器上处理这些代码
- 敏感信息如API密钥、密码必须排除在上下文之外,而此前只有我们自己能访问开发环境时无需担心这点
- 如果LLM处理复杂的关联内容时遗漏了某个影响重大的安全细节,审核者可能完全没发现;或者审核者需要花费大量时间重新阅读多年前的代码(因缺乏上下文更新,见B点),这就违背了使用LLM的初衷
- LLM可能从互联网“借鉴”(此处用“抄袭”更为准确,且未注明来源)某些解决方案,这些方案在原场景下安全,但在我们的场景下可能存在问题,而这种问题只有深度思考才能发现(见A、C、D点)
- 依赖未接触过的代码,而这些代码可能在我不知情的情况下被完全重写,导致我正在编写的代码因依赖原有的稳健方案失效而变得不安全
G. 不可预测性
相同的提示词可能生成不同的解决方案。以前我找到某个问题的最优解法后,能将其抽象为可复用的模式,稍作修改就能用于解决后续类似问题。现在,如果我输入提示词得到数千行代码,即便乐观地认为解决方案不错,要复用模式也得仔细研究这些代码,耗时比自己编写还要久;否则只能在未充分学习和研究的情况下认定其正确。这还是最好的情况,有时我可能一整天都在输入提示词,只为解决一个原本轻松就能搞定的任务。
H. 责任归属
让我为自己未编写也未充分研究的代码负责,我感到非常不适。
具体来说,编写代码对我而言并非难事,真正耗时的是思考过程。如果为了“提升生产力”而减少思考、增加提示词输入,会生成比我自己编写更多的代码,且风格陌生。研究这些冗长代码的时间远超过我编写更简洁、更健壮且已完全理解的代码的时间。
因此,如果使用LLM确实“提升了生产力”,那我必然会因任务繁重而只是表面扫描代码(甚至可能完全不审核),从而要为自己不完全理解也不信任的代码负责。
I. 代码臃肿
我们始终应致力于用更少的代码解决相同问题,而非接受生成的臃肿代码。过去我常会重构低水平开发者写出的混乱代码(spaghetti code),尽可能精简,区分数据库代码、结构、样式、后端代码与前端代码,但现在我却被要求自己生成这类混乱代码。
J. 潜在的精神损耗
当然,“提升生产力”其实是“在相同时间、相同薪资下解决更多问题”的委婉说法。如果我的生产力提升10%(这已是非常乐观的估计,实际可能因使用LLM而下降),但工作预期却增加60%,还得频繁在多个智能体间切换上下文,这对心理健康极为不利。
K. 依赖不稳定的外部工具
LLM的使用成本可能上涨,服务器可能宕机。如果我过度依赖LLM,一旦它因任何原因无法使用,我将陷入困境:能力退化、缺乏积累的上下文、还有大量无法理解的臃肿代码。
L. 对环境的危害
数据中心消耗大量能源和水资源,对周边生态环境危害极大,我不想通过使用LLM并为其付费而成为问题的一部分。
M. 认知崩塌
我非常关心社会大众的整体智力水平。随着越来越多的人用LLM完成原本自己能做的工作,人们开始忘记如何写邮件、如何表达自己的想法、如何专注深度思考、如何阅读书籍、如何正确推理(原本水平就不高),我看到大众认知能力正在快速退化,社会逐渐“僵尸化”。
N. LLM可能自我退化
随着越来越多LLM生成的内容充斥互联网,有用的、真正有价值的信息占比逐渐下降,LLM将越来越多地从自身生成的内容或人类借助LLM生成的内容中学习,最终可能导致模型退化。
O. 工作自主权
作为软件开发者,我靠写代码赚钱,因此需要完成分配的任务。我的立场是,只要:
- 我的表现与同事相当或更优
- 工作质量达标
- 我可靠可信
- 我乐于助人
- 我能按时完成任务
- 公司机密由我妥善保管
我就有权决定自己的工作方式。如果有人强制我按照某种方式工作,且这种方式我认为不道德,那就是违背了重要原则,开了不良先例。如果我的工作自主权现在被侵犯,谁能保证未来不会单方面推行更多不合理的规定?
P. 我是内向者
我不想过多社交,独处比与人相处更自在。当然,需要时我会帮助他人,也会寻求帮助,但通常我希望能专注工作。频繁与人交流让我厌烦,而如果交流对象甚至不是人类,那就更糟糕了。
Q. 助长问题而非解决问题
如果使用LLM,我就是在支持资源的巨大浪费、环境破坏以及LLM所有者的模糊甚至恶意计划。Palantir的宣言令人担忧,我绝不希望为此推波助澜。
我有着优异的工作记录,掌握大量上下文知识,多次帮助同事,工作速度并不比使用LLM的人慢。然而,公司却要求我必须使用LLM,还统计每个人的token使用量并排名,这让我在个人、职业、哲学和伦理层面都深感困扰。我热爱软件开发,但前提是由我亲自开发。我无法理解,公司为何要让我花钱用LLM解决自己能搞定的问题,这种工作让我感到不适。
我认为这种LLM热潮会在6个月到1年内消退,届时部分公司会需要开发者修复因跟风使用LLM而产生的问题。如果我的判断正确,那些始终独立思考、未屈服于压力的开发者届时将大有用武之地。如果能确定这一点,我会休假6个月,只做业余项目,让行业自己吸取教训,而我无需直面这些问题。
但如果我判断错误,那就是浪费时间和资源,再找工作时6个月的空档期也很难解释。我认真考虑过离职,尽管目前的合作对双方都很有利。公司的这一要求让我难以接受,但我有责任靠诚实劳动赚钱,而使用LLM并非我想要的工作方式,我想知道这种职场恶化的情况是否会结束,何时结束。
与此同时,我看到全球经济危机的迹象,即便我有良好的工作记录,找工作也可能变得困难,尤其是不使用LLM的工作。因为如果离职后加入的新公司也要求使用LLM,那离职就毫无意义。
因此,是否有高效的方法找到无需使用LLM的工作?
感谢您读完这篇长文,若您觉得它不如我以往的文章技术化,敬请谅解。但我认为这是一个关乎所有开发者的合理问题,即便您对LLM持开放态度。因为强制使用LLM的背后可能隐藏着替代开发者的目的,即便您现在热衷于使用LLM,未来也可能需要寻找无需使用LLM的工作。
内容的提问来源于stack exchange,提问作者Lajos Arpad

