多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

工程师成长之路:从入门到独立负责的实战复盘

工程师成长之路:从入门到独立负责的实战复盘 先说结论这篇文章是写给那些正在犹豫要不要走工程师这条路、或者刚上路没多久还比较迷茫的同学的。我自己就是一路踩坑走过来的人从刚开始连 Git 都不会用的纯小白到后来能独立负责模块、带新人、做技术方案中间确实有不少值得复盘的东西。“我的工程师之路”听起来像是一个很个人化的总结但它真正想讲的是一个没有任何背景优势的普通人怎么通过一套可复制的思路和方法从入门走到能独立干活再到被团队信任的过程。文章不会塞一堆理论也不会只讲成功经验因为我知道大家真正缺的是那些没人愿意细说的细节——比如项目做不出来的时候该怎么办、遇到比自己强太多的同事会不会慌、试用期被批评要怎么消化等等。这篇文章适合四类人看在校生想提前了解真实工程师生活的转行的人想知道自己差距在哪的刚工作一两年感觉卡在瓶颈期的以及带新人的老工程师想找点参考的。我会尽量把我自己真实走过的弯路、试过的办法、最后沉淀下来的习惯讲清楚不敢说每条都适合你但至少能帮你少踩几个坑。1. 工程师之路的整体设计与思路拆解1.1 选方向之前先把“为什么当工程师”这个问题答清楚很多人开始考虑走工程师这条路理由其实挺模糊的——可能是听说工资高可能是觉得写代码很酷也可能只是不知道自己还能干什么。我见过不少同学方向选了、课也报了结果学了一个月就开始怀疑人生最后要么放弃要么硬撑着内耗。问题的根源往往不在能力而在最初那个“为什么”没有想透。我自己的经历特别典型。大学本科学的不是计算机最开始接触代码纯粹是因为想做一个自己的网站觉得这件事很酷。那段自学经历最大的帮助不是我学会了某个语言而是让我无意中确认了三件事第一我可以长时间面对屏幕反复试错而不烦躁第二我享受“把一个想法变成能运行的东西”的过程第三遇到报错的时候我不会习惯性地想逃避而是会想尽办法去搜索和排查。这三点其实就是当工程师最底层的内在驱动力。建议准备入行的同学先别急着买课选技术栈用一到两周时间做一个最简单的测试找个免费教程逼自己照着做一个极小的项目比如一个能做增删改查的记账本。过程中重点观察自己的情绪反应连续报错三小时会不会崩溃查文档没找到答案会不会放弃做完之后有没有再改一改、加个功能的冲动这三个问题的答案比任何人的建议都更能说明你到底适不适合走这条路。1.2 成长路径规划别迷信“三个月拿高薪”的速成故事确定了想走这条路之后第二个关键问题是成长路径该怎么设计我经常在网上看到“零基础转行三个月拿到大厂 offer”的帖子不能说都是假的但绝大多数不具备可复制性。那些案例背后往往隐藏着之前没交代的背景——可能人家本来就是相关专业只是重新择业可能背后有人指导也可能运气好碰上了一个匹配度极高的岗位。真实世界的工程师成长路线我用一张图就能说清楚文字版描述一下最开始是“有样学样”——找别人的项目代码模仿着改这个阶段大概持续三到六个月然后是“独立拼装”——能自己从零搭一个小项目会用搜索引擎解决大部分报错这个阶段大概一到两年接着是“方案设计”——能面对一个模糊的需求自己拍板技术选型、拆分任务、评估风险这个阶段通常是第三年之后的事情。这里最容易出的问题是大家习惯用“时间长度”来衡量成长觉得干满一年就应该自动涨一级。其实成长的核心变量不是年限而是你手上的项目复杂度。同样是做了一年开发的两个人一个天天修小 bug、改页面样式另一个跟着做了完整的核心功能模块、参与过线上事故排查两人的能力差距可能是一到两倍。所以规划路径的时候真正要想的不是“我什么时候该升职”而是“我下一个要挑战的项目复杂度是什么”。另外有个很实用的建议每隔半年给自己设定一个具体的挑战目标比如“下个月要独立接一个从前没做过的模块”“这季度要优化掉一个困扰团队很久的性能问题”。这种目标不是为了写在简历上的而是逼自己持续走出舒适区。没有目标地瞎忙碌很容易在第二年就陷入什么都会一点、什么都不精的状态。1.3 跳出学生思维从“要标准答案”到“自己定义问题”这应该是整个工程师之路里最隐蔽、但最影响发展速度的一个思维转换了。学生时代考试是有标准答案的写对了就给分写错了扣分但工作中的大多数问题根本没有人知道标准答案甚至有时候你连问题本身长什么样都判断不出来。我印象特别深的一次是刚工作那会儿拿到一个需求产品经理只说了一句“这个页面加载有点慢你想想办法”。我当时第一反应是茫然心想你也没告诉我多慢算慢也没告诉我瓶颈在哪这活儿怎么接后来我的导师跟我说了一句话我记到现在“工程师的核心能力不是接需求而是把一句含糊的话转变成可执行的技术问题然后自己定目标、定方案、汇报清楚再去实现。”那次之后我才明白原来“加载慢”需要我自己先量化比如当前是 3 秒目标是 700 毫秒以内需要我通过浏览器开发者工具去看耗时被谁吃掉了需要我根据分析结果决定是减少资源体积、加缓存还是改接口逻辑。没有人给我标准答案我需要自己去生产标准和答案。这类思维转换还包括遇到问题先拆解而不是急着动手调。经常有人想都不想就加缓存、加索引结果问题没解决还引入了新 bug。同时做技术方案的时候要考虑投入产出比——不是技术越复杂越好而是“够用且好维护”最好。还有一点要主动暴露风险和不确定信息不要写完了再让人家验收时发现“这跟我想要的不一样”。这种“自己定义问题”的能力很多人以为是大厂架构师才需要的其实第一年的初级工程师就该开始练。练得越早后面的成长加速度越大。2. 核心技能拆解与实操要点2.1 编程基本功不只是“能跑就行”既然要当工程师编程能力当然是绕不开的底座。但我要说一个可能跟直觉相反的观点入门阶段最关键的往往不是把某门语言研究得多深而是把编程里那些“通用内功”打扎实——变量、数据类型、循环、条件、函数、递归、对象和基本的数据结构。这些概念不分语言只要在一门语言里吃透切换到其他语言会非常顺滑。我也面试过一些简历上写了“熟练掌握多种语言”的候选人结果一深问每种语言的底子都虚写一段稍微复杂的逻辑就会出现基本的边界错误。反倒是一些认认真真只用好一门语言的候选人能把代码写得干净利落聊起设计思路来也有板有眼。这里给想入行的同学一个建议选定一门主流语言现在的话后端选 Java 或 Go前端选 TypeScript数据方向选 Python踏踏实实把这一门吃透做到能独立完成一个完整项目再图扩展。那什么算“吃透”我认为有三个基本标志第一不用查文档就能写出日常增删改查的完整代码第二遇到报错能根据错误类型和堆栈信息快速定位问题而不是只会复制报错去搜索第三能从代码的“性能”和“可读性”两个维度去审视自己写的每一段逻辑。哪怕达不到第三个也没关系至少要有这个意识。代码写出来是给人看的也包括未来的自己所以缩进、命名、注释习惯从第一天开始就要正经对待——别不信我真见过因为不格式化代码导致找半天才发现在哪里缺了半个括号的兄弟。推荐一个小而实的练法找一个小工具项目比如文件批量重命名工具、爬个公开的静态网页存到数据库、写一个命令行版本的待办管理从零开始写完整然后重构一遍。第一遍写完的时候肯定会觉得代码很乱第二遍重构的时候你就是在从“能跑”往“工程化”的方向走。2.2 调试与排查能力日常工作中实际占一半时间如果一个工程师把所有工作内容摆到桌面上看“写新功能”可能只占一半不到剩下不少时间都在干同一件事跟 bug 打交道。这意味着调试能力直接决定一个人下班早不早、被认可快不快。可惜的是大部分教程只教你怎么“写”代码几乎不教你怎么“找”问题。先说结论排查问题的核心方法论其实是三步——缩小范围、控制变量、验证假设。听起来很朴素但 90% 的新人问题都出在不按流程走一上来就靠猜。比如页面报了个 500 错误有人第一反应是去代码库里全局搜关键词“500”或者改一点配置刷新试一下碰运气成分很高。正确的做法是先把错误分成层次是前端请求发不出去还是后端接口直接抛异常还是数据库连接有问题然后从前到后逐层打日志或者打断点缩小到具体一层之后再去查具体原因。我比较常用的一个策略是“二分法”在可疑链路的中间位置打一条输出看执行到没执行到。比如接口里从参数接收到数据返回一共五步先在第三步打个日志。如果执行到了就说明问题在后半段反之在前半段。一次就能砍掉一半的排查面积两个来回就缩小到一个很小的范围了。还有一个几乎所有老工程师都用、但没人头几次会主动用的工具Git 的二分定位git bisect。如果在一次发版之后某个功能坏了但你不知道是哪次提交引入的与其自己肉眼扫代码不如让 Git 自动帮你二分回退逐步锁定出问题的那个提交。我第一次学会这个技巧之后心里第一反应是之前那些靠硬啃代码排查到深夜的时光到底浪费了多少啊。2.3 网络与系统基础不了解原理也能干活但了解原理能救命很多时候新人会觉得计算机基础没啥用反正业务代码都用不太到“网络”“操作系统”这些知识。这个想法短时间没问题但一旦遇到线上问题——接口超时、服务重启、数据库连接池被打满——如果脑子里没有那套基础知识的框架连从哪入手都不知道。举一个我实际遇到过的例子。有一次某个接口突然变慢耗时从 100 毫秒涨到 20 秒。不懂基础的同学可能直接进代码库看业务逻辑查了半天发现逻辑没变动。如果你有网络基础会首先想到排查链路是客户端到服务器的网络有问题是域名解析变慢是负载均衡转发延迟是服务端线程池排队还是下游数据库本身慢一层层排查其实每次不需要太长。这里没有一项是“写代码”的直接能力但能决定你到底能不能独立解决问题。操作系统的知识也一样。进程、线程、内存模型这些概念在你做并发编程、排查死锁的时候就是救命稻草。我自己就经历过一次把共享资源加锁加多了导致死锁的问题当时如果没有锁的顺序和等待关系概念看了日志也只会一头雾水根本不会往“死锁检测”那个方向去想。给刚入行的同学一个建议不妨准备一个持续更新的知识清单遇到线上问题或者难排查的问题多想一想背后涉及的基础原理是什么顺手记录下来。一年之后再翻开会发现原来那些“纸上学到的知识”都被真实场景激活了。这比单纯背八股有用得多。3. 实操复盘从校园到职场的真实环节3.1 简历和作品集用“项目复杂度”而不是“技术名词”证明你自己无论你是校招还是社招简历永远是第一关。很多同学写简历喜欢堆技术名词——Java、Spring、Redis、消息队列、微服务、Docker……乍一看很唬人但面试官一眼就能看出来哪些是真实项目里用过的、哪些只是为了凑关键词。我当面试官后最常问的一个问题就是“这个 Redis 是你自己设计用的还是只是项目里挂了这么个配置”这问题一出水分基本当场见分晓。所以我想分享一个很反直觉的建议写简历时不要追求堆得多要追求“一个项目讲得极透”。挑出一个你最有话说、工程量最大、问题也最多的项目在简历里把它的背景、你的职责、遇到的最大难点、你是通过什么思路解决的简明扼要地写出来。面试官看到这样的描述远比面面俱到但每条都是一句话的简历更有聊下去的兴致。那作品集怎么体现“项目复杂度”呢我给你一个链路的思路往项目里加一点点“不安分”的东西。举个例子大家都会做“记账本”但是如果你在记账本里加了数据导入导出、加了简单的多角色权限控制、加了运行日志和错误收集复杂度立刻和“教程练手项目”拉开了差距。这些功能不需要多高级但能证明你有工程意识不只会跟着教程走。3.2 面试准备从背题到解题思路的转变面试准备这件事我是吃过亏的。第一年准备跳槽的时候拿着网上的“大厂面经”吭哧吭哧背了两周结果面试官一个问题把我问住了“你觉得你在这几个方案里为什么选这个其他方案差在哪”我答不上来因为面经里只有答案没有思考过程。那次失败给我的教训非常大也让我把准备面试的重心从“背结论”改成“练推导”。现在有人问我怎么准备面试我会给出一个特别老土但真的很管用的方法写答案不如写解题过程。针对每一个常见的面试知识点问自己三个问题它解决的是什么问题它跟同类方案比优缺点在哪如果让我从零设计我会怎么思考出这个东西来这三个问题如果都能流利地讲清楚那这个点基本就是真的懂了。遇到没准备过的开放题也不怕因为面试官已经能看出来你的思考路径是健康的了。一个我建议至少模拟一次的场景是让朋友扮演面试官针对你的项目问十分钟连续追问——每个问题都接着上一个回答往下挖。这一招可以帮助发现自己很多“其实并没有想过”的地方。反正我第一次模拟完满脑子都是“原来我对自己项目那么多细节都是模棱两可”。3.3 试用期生存指南第一周看什么、第一月做什么、前三个月交付什么试用期这件事很多教程都会讲“要表现积极”“要有礼貌”“要去认识同事”。这些当然没错但都太轻飘飘了。我自己带过的几个新人表现最好和最差的之间区分度往往在一个点上有没有把“环境探索”做成一个主动且有章法的过程。第一周我建议做三件事第一把代码库目录结构过一遍弄清楚业务大概分几个模块每个模块的入口在哪第二把部署和开发环境走一遍知道自己开发完代码之后发布的完整链路是怎么样的第三把团队最近一两个迭代的需求文档和代码提交记录翻出来对照着看一遍理解需求是怎么变成代码的。这一周不要急着改代码把环境摸熟比写几行代码重要得多。第一个月的核心目标是“交付一个足够小的完整功能”。小到可以是一个按钮、一个展示字段的修改但一定要完整走完需求评审、开发、自测、发布的全流程。这一个功能走下来你会把整个团队协作的流程、工具链和沟通节奏都摸清相当于用最小成本完成了整个流水线的热身。前三个月呢最好能找到一个“别人没时间做的脏活累活”主动接下来。比如修一个长年没人动的陈年 bug、完善一下项目文档、把测试覆盖率低的核心模块补几个测试用例。这些活往往不太受重视但正因为没人愿意碰你接手的价值会格外显眼。我见过一个新人就是因为把团队里的自动化部署脚本修好了提前转正不说还获得了参与核心项目的机会。做事靠谱往前站很多机会就是这样一个一个串起来的。3.4 谈薪和选团队别只盯着数字也要看好平台谈薪资的问题值得单独拿出来讲是因为太多人把注意力全放在数字上了。我的建议是在合理范围内尽量争取但不要因为薪资数字而忽略两个更重要的问题——团队的技术氛围和业务成长空间。怎么判断一个团队值不值得去面试最后反问他几个问题团队最近在解决的最大技术挑战是什么入职前三个月的期望产出是什么平时代码评审是怎么做的有没有制度化的技术分享这些问题看着简单但能从回答里听出团队的真实状态。有的团队会支支吾吾有的团队能一口气跟你聊很多——后者大概率氛围不错。薪资的历史作用和未来作用完全不一样。第一份工作薪资只要是市场正常水平就可以接受更应该在意的是前三年能积累什么项目经历、能获得什么指导、手里做的技术在市场上的稀缺性怎么样。我自己很幸运第一份工作的薪资并不高但是团队里有人愿意带我评审代码、讲解思路那三年的成长速度保守说是自己摸索的至少三倍。这笔账要往长了算。4. 常见问题与实战避坑手册4.1 典型问题速查表这节我把自己见过、踩过的若干典型问题列成一个速查表每个问题附带一句最核心的解决思路希望能给正在进阶路上的同学一些快速参考。问题场景典型症状核心排解思路学习時迷之方向大量收集资源全都看了一点但没学完单点突破强制自己一个月只弄一个主题产出一个小项目就算及格写完代码不知道好坏功能能跑但总感觉代码不干净找人做代码评审或者隔两周回看自己的代码重构一遍线上问题无从下手不知道看日志还是看监控怀疑每个位置先判断故障方向网络、程序、数据、资源再层层缩小范围需求太模糊产品一句话甩过来不知道怎么拆主动追问 自己提出量化目标形成文档确认后再开发任务冲突做不完同时好几个任务找到你手忙脚乱分清优先级并主动跟负责人同步明确“现在在做的”和“预计完成时间”技术焦虑严重每天觉得要学的东西太多非常心慌设定“够用范围”围绕当前项目和岗位要求去学学完就实践被批评后崩溃觉得被开会在众面前批评很丢人分离“事”和“人”批评的是代码和结果不是你这个人的价值这张表的特点是很多问题是心态问题被技术问题包装了。当你意识到“卡住”也许不完全是能力原因而是方法或者情绪问题很多压力就能自然减轻一大半。4.2 三个对我影响最大的实际操作习惯讲了那么多我最后想分享三个我亲身验证过、对我自己工程之路影响极大的习惯。第一个是写“开发日志”。从第二年开始我坚持每个工作日结束时花五分钟记一下今天做了什么、遇到了什么问题、明天计划做什么。这个习惯让我在复盘自己的成长和做年中述职的时候特别轻松因为每一件做过的事情都有据可查。更关键的是它像一面镜子——三个月翻一次你能立刻发现自己是真在成长还是只是在被动响应需求。第二个习惯是“方案先写出来再说”。以前我接到稍微复杂一点的任务就急着开会、动手写代码后来养成习惯不管多人任务还是纯个人任务动手之前先写一份简单的方案文档内容包括目标、非目标、技术路径、风险点、验收手段。这份文档不用很长有时候一页纸就够了。它最直接的好处是逼你在动手之前把问题想清楚而且当别人质疑你的时候你有据可依。第三个习惯是“定期找人聊聊天”。听起来不像什么技术习惯但我会坚持每个季度跟一两位不同团队的同事或者行业里的朋友聊一次不用聊具体项目就聊聊各自在做什么、有什么新想法。这不仅是拓宽视野更重要的是能帮你发现自己思维里的盲区——有些时候你卡了很久的问题对方可能早就有过一套成熟的解法只是“你不知道你不知道”而已。4.3 聊几个新人很容易踩的隐形坑除了刚才表格里列的常规问题还有几个“隐形坑”属于平时没人会提醒你、踩了才知道疼的类型。第一个坑是不敢说“我不会”。新人普遍怕暴露短板被安排一个没接触过的任务时倾向于一边硬撑一边偷偷磕。结果交付质量不好还耽误了团队进度。其实靠谱的做法是第一时间说清楚这个领域我之前接触不多我需要先评估一下要花多久然后给出一个务实的时间预期。在绝大多数情况下这个反应给团队的印象不是能力不行而是靠谱、坦诚。第二个坑是“过度关注技术忽视上下文”。有些人有个认知——技术好就是一切。我在成长早期也是这样什么新技术都要去追一下后来发现自己会的东西跟团队真正需要的并不匹配。后来我才意识到工程师的价值不在“会什么”而在“能用技术解决什么业务问题”。你想让代码产生价值首先要懂业务场景。同样一个推荐算法用在海量资讯分发和用在小众工具社区的产品里完全不是一回事。第三个坑是对“休息”有罪恶感。见过太多同学包括曾经的我自己总觉得工程师应该时刻在努力学习一旦某天晚上没看文档、周末没写代码就开始焦虑。但工程是一项长久战拼的是持续输出能力不是短期冲刺。我现在会有意识地保证每个星期有完整的休息块——运动、户外、甚至什么也不干地发呆。休息之后效率提升远比那一刻硬撑多学一小时有用得多。4.4 如果重新来一次我会提前做什么最后来个灵魂拷问——如果现在我能给刚开始走工程师之路的自己捎句话我会提前做哪三件事第一我会更早开始写“开发日志”不要等到第二年。刚开始工作那一年我做过不少项目也踩过不少坑但因为没有记录很多细节后来都模糊了想复盘的时候只能靠回忆效率极低。要知道成长的快慢很大程度上取决于复盘的质量而复盘的质量取决于素材的完整程度。第二我会更早养成“主动求助”的习惯。回顾起来刚入行时有太多时间耗在无效自我挣扎上总觉得问人会显得自己菜。实际上团队里的同事对你的水平早就有预判你问出一个聪明的问题只会增加别人对你的好感最怕是闷着头憋不出来又不说话最后在验收环节暴露。第三我会给自己设置更明确的“学习边界”。以前看到什么技术火就去学导致很多知识只学了皮毛反而没有把核心专业打透。现在我会告诉当年的自己把一门语言、一套核心框架、一个完整的项目链路搞到极致胜过浮光掠影地抄十样技能。广度是后面有沉淀之后自然而然长出来的过早追求广度只会让能力结构变成一个浅盘子。这一路走到现在我最深的一个体会就是工程师这条路其实很公平关键是“持续”和“方法”两个词。你不需要天赋异禀也不需要很早入行只要方向对、方法对、并且能一直保持向前走的势头大概率不会太差。希望这篇分享能给正在路上的你一点参考或者说至少让你知道——在这条路上觉得难、觉得卡顿的人绝对不止你一个。慢慢来认真走路会越来越宽的。
返回列表