关于软件工程,我想说的那些事(实习篇·Java后端×Agent开发版)

  1. 自我介绍与建博客:从"Java CRUD Boy"到"Agent Builder"

大家好,我是爱弹琴的风。在实习的三个月里,我确实在往"既懂工程落地、又懂模型原理的AI应用工程师"这个方向狂奔。

为什么要写这篇博客?因为实习三个月了,踩过的坑、调过的Prompt、被Agent跑偏后半夜排查日志的次数,如果不记录下来,过两年大概全还给搜索引擎了。正如前辈们反复强调的——输出倒逼输入,写下来才说明你真正想通了。

关于我的闪光点,实习之后有了新认识:我自认为是一个"能把AI能力封装成稳定服务的人"。相比起在论文里跑通一个demo,我更擅长把一个模糊的Agent需求("帮我做个能自动回复客户的机器人")拆解成:意图识别→工具调用→RAG检索→回复生成→人工兜底,然后一步步落地上线。这份能力不是天赋,是实习前三个月每天被测试同学追着问"你这个Agent怎么又幻觉了"逼出来的。当然,代价是早期Prompt写得像一坨屎,被mentor review时满屏红色建议,算是有得有失。

  1. 现状、经验和计划
    (1)专业选择与技能评估

为什么选这个方向?上次说是"看着分数选了最热门的",现在实习三个月后,我可以认真地说:选对了,而且比想象中更适合我。每天写Java代码搭基础设施,同时调模型、设计Agent工作流,看到自己写的AI功能被真实用户用到,这种"工程+算法"的双重即时反馈,是纯后端或纯算法都给不了的。

a) 为何要认真实习?

如果说大学课堂是"师傅领进门",那实习就是"修行在个人"的真实战场。课堂给你的是标准化的知识,而实习给你的是非标准化的真实问题——需求模糊、文档缺失、线上Agent半夜幻觉炸锅,这些才是让你真正成长的养料。

b) 与mentor的关系

我体验过"放养式"的冷漠(大一那会儿),也体验过"手把手教"的温暖(现在的mentor)。理想的mentor关系应该是:他给你方向,你给他结果,中间的过程你自己趟。遇到卡壳时,先自己查文档、写Demo、画流程图,带着方案去问,而不是带着问题去等答案。

c) 引用与抄袭(职场版)

在学校,抄袭是抄同学的作业;在公司,抄袭是直接复制Stack Overflow的代码不改就用,或者直接把别人的Prompt拿过来不验证就上线。区别在于:职场中"引用"意味着你理解这段代码/这个Prompt在做什么、为什么这么做、以及它对系统的副作用是什么。不懂就用的后果不是挂科,是线上事故——尤其是Agent幻觉导致的事故,用户投诉可比挂科严重多了。

(3)未来规划与选择

实习结束后,我更倾向于继续深耕 Java后端 × AI应用​ 方向,进入一线互联网企业或AI独角兽。

本学期规划:

实习期间:深入理解公司AI技术栈,争取独立负责一个Agent模块从设计到上线
实习结束后:补强分布式系统和LLM推理优化基础,为秋招做准备
长期目标:3-5年内成长为能独立负责AI平台子系统的中级工程师
(4)实习计划与WOOP方法

Wish (愿望):​ 实习结束时,我负责的Agent模块能稳定上线运行,并且我能在团队技术分享会上做一次有质量的分享——主题暂定"从零搭建生产级RAG系统踩坑记"。

Outcome (结果):​ 我能自豪地在简历上写"独立负责XX Agent模块的设计与开发,日均调用量XX,幻觉率低于X%,可用性99.9%+",在面试时能和面试官深入讨论技术选型和踩坑经验。

Obstacles (障碍):​ 拖延症 + 畏难情绪。具体表现为:遇到复杂的Agent编排逻辑时,先刷半小时Hacker News,告诉自己"先看看别人怎么做的",结果一刷就是两小时。

Plan (计划):​ If 我在写代码时感到烦躁想刷网页,Then 我就立刻站起来,去接杯水,回来后先写下当前任务的最小可交付步骤(哪怕只是"先定义Agent的输入输出接口,再写空实现"),然后只做这一步。

关于实习投入:

目前的代码量:实习三个月约写了10000行(Java后端8000行 + Python/Agent相关2000行,含测试代码)
计划实习结束时新增6000行高质量代码(不含复制粘贴的样板代码)
每周投入:全职实习,约50-60小时(含学习新技术的时间)

我选择 D. 比以前课要多很多,直到达到目标为止。因为实习不是上课,没有人会因为你"出勤了"就给你及格——你的代码就是你的成绩单。

  1. 提有质量的问题:读《构建之法》(实习视角重读)

重新翻开《构建之法》,带着实习三个月的经验再读,很多以前觉得"正确的废话"突然有了切肤之感。

问题一(关于第2章:个人技术和流程)

原文说单元测试要"快"且覆盖所有代码路径。实习中我发现:为覆盖一个Agent的复杂边缘case写Mock代码,确实会让测试变慢。我们项目里有一个RAG模块,单元测试跑了5分钟,CI流水线直接超时。请问在"测试覆盖率"和"执行速度"之间,工业界通常的平衡点在哪里?Agent类应用是否应该采用不同的测试策略(比如更多依赖集成测试而非单元测试)?

问题二(关于第5章:团队和流程)

书中推崇敏捷。但实习中我看到的是:AI需求确实在变(今天要支持多模态,明天要降低幻觉率),但"响应变化"的代价是技术债越堆越高。每次PM说"这个Agent要加个新能力",开发说"可以,但要重构Prompt管理模块",PM说"没时间"。如何在"快速响应AI需求"和"技术可持续性"之间找到平衡?是不是应该有一个"技术债偿还日"的制度?

问题三(关于第8章:需求分析)

"深挖需求"——实习中我最大的困惑是:用户(产品经理)自己也不知道Agent要什么。一个需求从提出到评审到开发,中间改了五次,每次都说"这才是用户真正想要的"。作为开发,我们是应该无条件执行,还是应该在需求评审阶段就敢于说"不"?说"不"的底线在哪里?尤其是当PM要求"Agent要100%准确"时,这个需求本身是不是就不合理?

问题四(关于第16章:创新)

AI工具(Copilot、Cursor)已经极大降低了写代码的门槛。实习中我发现自己30%的Java代码是AI生成的。同时,Agent技术本身也在降低AI应用的开发门槛。这是否意味着未来"AI应用创新"会比"技术实现"更重要?我们作为软件工程专业的学生,核心竞争力会不会从"写代码"转向"定义问题+设计Agent工作流+Review AI生成的代码"?

问题五(关于第4章:结对编程)

实习中我体验了"异步Code Review"而非"结对编程"。说实话,我觉得Code Review比结对编程更适合我们团队——因为大家专注时间不同,结对时一个人写一个人看,看的人容易走神,写的人有压力。而异步Review给了双方思考的空间。结对编程是不是只适合某些特定场景(如新人入职培训),而不适合日常开发?

  1. 前车之鉴:读前辈文章有感(实习版·Java后端×Agent视角)

重读了前辈们的文章,这次带着实习的视角,感受完全不同。

关于《辜新星:时刻调整方向 找到人生的蓝海》[A]

原文链接:https://book.douban.com/subject/4006425/discussion/22803733/

辜前辈的故事我大二时就读过,当时印象最深的是"骑单车"的比喻——车头直是因为在时刻调整方向。实习三个月后,我对这个比喻有了新理解:不是方向定了就不改,而是在前进中不断校准。我的实习经历也是这样——入职时以为自己只做Java后端,结果第一个月被拉去写Agent的Prompt工程,第二个月又调回后端做向量数据库接入,第三个月开始接触模型部署和推理优化。每次调整都不是"走弯路",而是在找到自己真正擅长的位置——后端工程能力+AI应用理解的交叉点。

他提到的"四象限时间管理法"我现在每天都在用。实习中最大的陷阱是:花大量时间在C类事情上(回复非紧急消息、参加可有可无的会议),而把B类事情(深度编码、Agent架构设计)无限期推迟。这学期我给自己定规矩:上午10点前不查消息,先吃掉那只最丑的青蛙。

关于《偏科生自学摸索的道路》[D]

原文链接:https://www.cnblogs.com/xiaozhi_5638/p/4485805.html

这位前辈的经历让我特别有共鸣。同样是偏科,同样是靠自学。他说的"实践的重要性"在实习中被验证得淋漓尽致——公司不关心你课本考了多少分,只关心你能不能把feature做出来。

他提到大二时读《深入浅出MFC》硬啃第六章之后的内容,我当时也有类似经历。实习第一个月看公司核心项目的Agent编排框架源码,前两周基本看不懂,硬着头皮看,第三周突然"通了"——这种感觉和当年啃技术书是一样的,只不过现在面对的是真实的生产代码,压力更大,但收获也更大。

关于《速成的培训班和打基础的大学教育有区别么》[E]

原文链接:https://www.cnblogs.com/geniusalex/p/4928713.html

这篇文章解答了我实习中的另一个困惑。组里有一个同事是培训班出身,写业务代码很快,但遇到Agent性能问题就抓瞎。而我因为学过操作系统和计算机网络,能从系统层面分析原因。这让我确信:大学教的是"道",培训班教的是"术"。​ 短期看"术"有用,长期看"道"决定你能走多远。尤其是做AI应用,不懂系统原理的人,永远只能停留在"调API"的层面。

  1. 实习三个月的几点感悟
    代码是写给人看的,其次才是给机器执行的。​ 实习前觉得这是鸡汤,被review了三次之后信了。Agent的Prompt也是——写得清晰比写得"聪明"重要。
    Debug能力比写代码能力更重要。​ 能写出能跑的代码不难,能快速定位为什么"不跑"才是本事。Agent的Debug更难——是Prompt的问题?是检索的问题?还是模型本身的问题?这需要系统性的排查能力。
    沟通成本远超你的想象。​ 一个模糊的需求理解偏差,可能导致三天白干。所以现在我的原则是:不确定就问,问完再动手。尤其是AI需求,"用户要什么"和"技术能做什么"之间的gap,需要反复对齐。
    技术债是真的会"利滚利"的。​ 实习第一个月为了赶进度写的"临时Prompt",第三个月成了所有人的噩梦——幻觉率飙升,用户投诉。现在我的原则是:没有真正的"临时方案",只有"你愿不愿意以后花三倍时间还债"。
    保持学习,但不要为了学习而学习。​ 实习中遇到什么不会的就学什么,这种"问题导向"的学习效率远高于"系统学习"。当然,系统学习也不能丢,它是你解决新问题的底层弹药库。尤其是AI领域,新技术层出不穷,没有扎实的基础,很容易被新框架牵着鼻子走。
    (新增)AI不是魔法,是工程。​ 实习前觉得Agent很神秘,实习后发现:Agent = Prompt + 工具调用 + 状态管理 + 错误处理。本质上和写一个分布式系统没区别——都是把复杂问题拆成简单模块,然后让它们协同工作。
    后记

写这篇随笔花了近四个小时,从实习第一天写到今天,中间几次停下来想:我真的有资格写这些吗?我才实习三个月,懂的还很少。

但转念一想,记录本身就是意义。等三年后再回看这篇,也许会觉得"当时好幼稚",但那恰恰说明我成长了。

希望能和各位共勉,在软件工程的路上,骑着单车,时刻调整方向,快乐向前。

爱弹琴的风

2026年9月7日

于宿舍,窗外下着雨

posted @ 2026-09-07 14:37  爱弹琴的风  阅读(18)  评论(0)    收藏  举报