尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从学生到工程师:五年成长路线与避坑指南

从学生到工程师:五年成长路线与避坑指南 经常有同学在后台问我说自己在校期间成绩不错刷题也没少刷可一进公司就发懵不知道工程师这条路到底该怎么走。说实话我也是从那个阶段过来的甚至走得比大多数人更弯。我的工程师之路没什么亮眼的天赋加成靠的是一年年踩坑、复盘、再调整。这篇文章我不讲虚的就讲自己一路走来真正用过、验证过的方法包括学生思维怎么切到工程思维、技能树该怎么点、offer怎么选、复盘怎么做、瓶颈期怎么熬以及我后来回头才想明白的几条底线。适合刚入行、准备入行或者工作两三年但处在迷茫期的同学希望能帮你少走一段弯路。1. 从学生思维到工程师思维我最早吃过的亏1.1 等一个明确的需求差点把项目干黄我第一份实习是在一家做企业内部系统的公司刚进去的时候leader 丢给我一个模块说“你先看下需求文档下周出方案”。我打开那个文档发现只有半页写了几个模糊的功能描述连字段定义都没有。我当时的第一反应是这需求不完整我得等产品经理把细节补齐才能动手。结果我等了两天没动静跑去问产品对方说“你先按这个方向做有问题再一起碰”。我当时心里非常难受因为在学校的逻辑是题目必须给全所有条件我才能开始求解。可现实是真实工程里根本不存在“条件完整”这回事。你自己得去问用户、去看旧代码、去翻数据库表结构把模糊的描述变成可执行的任务。那次最后是leader 看不下去了拉我一起开了个会我才意识到一件事工程师的工作不是解别人出好的题而是把一团乱麻理成题再自己解。从那之后我接到任何模糊需求第一件事就是列出“我不确定什么、我打算怎么确认、我先按什么假设往下做”三行话发给相关人。这个习惯一直保留到今天帮我规避了大量返工。1.2 把代码写完不等于把事做完第二个坑是我第一次负责上线一个小功能。代码写完了自测了两个用例觉得没问题就提交了。结果上线第二天线上日志开始出现异常报错虽然不是特别严重但数据确实错了。我翻了一下午发现是边界条件没处理而之所以没发现是因为我只测了“正常路径”完全没考虑异常分支。这件事给我的教训不是“以后要多测几个用例”而是要让“完成”有一个明确的定义。在我的团队里后来我们逐渐约定一段代码算“做完”必须满足几个条件功能跑通、异常处理有兜底、关键路径有日志、改动影响面说清楚。哪怕是在规模很小的项目里我也会默认按这套标准来要求自己。很多刚参加工作的同学容易把“提交代码”当成截止线。其实提交只是一个中间点后面的构建、测试、评审、上线、监控都属于“做一件事”的范围。如果你把眼光拉长到整个交付链路你就不会觉得测试和文档是别人的事。1.3 从“求表扬”到“求反馈”学生时代交作业最关心的是分数是老师会不会夸我。我刚工作那几个月也有这个毛病。做了点东西就希望有人认可一旦没人反馈就觉得做了无用功。后来我发现工程师的成长得快靠的不是被夸而是拿到高质量反馈。高质量反馈从哪来一是线上数据有没有报错、响应时间变化、功能使用率。二是代码评审里的意见别人问了什么问题、指出了什么盲区。三是用户的实际反应这个功能到底有没有人用用起来费不费劲。这些反馈都比一句“做得不错”有用得多。所以我后来有个习惯每次上线一个功能一周后自己主动去看数据变化把结果记在笔记里。数据好就总结做对了什么数据不好就复盘哪里判断错了。这是从“我觉得”到“事实说”的转变也是我认为工程师和学生最本质的区别。2. 前五年最关键的技能排序我踩坑总结出来的2.1 排第一的不是算法是定位问题的能力你如果问我工作前五年最应该练什么我的答案不是更高深的算法也不是背更多的框架API而是定位问题的能力。算法你可以慢慢补框架可以不断换但一个团队里最被需要的人往往是那个在线上出问题时能快速缩小范围的人。我举个例子。有一次服务端接口突然变慢从平均200毫秒涨到2秒。我当时的排查思路是先看监控确认是全部接口变慢还是单个接口变慢再看是CPU、内存、磁盘还是网络的问题然后根据变化曲线定位到一段新上线的逻辑。整个过程大概花了一个多小时。如果我当时慌慌张张地翻代码可能一天也定位不了。定位问题是有套路的我的习惯是“由现象到范围由范围到根因”。先确认现象是什么影响多大什么时候开始的最近变化了什么。然后从数据入手日志、监控、链路追踪、数据库慢查询这些信息能帮你把范围从整个系统缩小到一个模块、一个函数。很多同学一上来就从头读代码效率极低。2.2 第二是工程化交付能力工作两三年后你会发现写代码只是很小的一部分真正决定你走得稳不稳的是你能不能可靠地、持续地交付。什么叫可靠就是我这次做的事情不会破坏上次的东西出问题能快速回滚改完能证明自己没改错。工程化能力包含的东西很具体代码风格统一、单元测试覆盖关键逻辑、构建流程自动化、部署和回滚脚本可用、日志规范、配置管理清晰。每一项单独看都不难难的是把它们变成默认习惯。我自己就吃过没写测试的亏。有一回我改了一个公共方法加了一个参数调用方我也都改过来了但有一个不常走的业务分支漏了。上线后那个分支直接报错还好当时用户量不大影响被控制住了。从那以后我给自己定了一条死规矩任何公共方法、工具类改动必须配测试哪怕只是三个用例。因为这类代码的调用方你不一定全记得只有测试能替你记住。2.3 第三才是技术深度有了定位问题的能力和工程化习惯之后我建议你再去做技术纵深。这里的技术深度不是指你背了多少API文档而是指你对一个核心领域的机制是通透的比如你负责的存储系统为什么这样设计、这个框架的启动流程到底做了什么、线上问题的底层原理是什么。我自己的选择是先把一门后端语言用熟然后把团队里最常见的中间件源码拉出来读一部分。读源码不是从头到尾啃而是带着问题看比如“它这个重试机制什么时候生效”“这个池子的参数配错了会产生什么现象”。当你把这个领域的关键机制打通以后很多线上问题在你眼里就不再是黑盒而是一眼能猜到大概发生了什么。技术深度带来的另一个好处是你在做设计的时候能判断方案的边界。比如知道缓存的一致性难题在哪就不会拍脑袋把缓存组件接上就完事知道消息队列的重复消费问题是怎么产生的就会主动考虑幂等设计。这种能力不是靠看书能立刻学会的需要你亲手踩过坑、再回去看原理。2.4 被高估的框架收集癖我见过不少同学包括当年的我自己一度特别热衷于收集新技术名词。今天看到一个新框架赶紧去点赞收藏明天看到一个中间件很火就下载下来跑个demo。学了一堆但工作上完全用不上时间也浪费了。后来我想明白一个道理新技术是用来解决问题的不是用来给自己壮胆的。如果当前项目没有对应的问题你学了也只能停留在“知道有这个玩意”的层面过两周就忘。我也不是说不让你学新东西而是说学习顺序应该是从业务问题出发倒推需要什么知识而不是从技术出发先学了再等场景。所以我现在给自己定的原则是新技术可以先花一小时了解定位但要不要深入学取决于三个条件——它是否解决我当前的实际问题、我有没有足够的实践场景、我是否能在一个月内用它产出点什么。三样都不满足我就不碰把时间留给真正重要的深度积累。3. 选offer时我真正用的筛选标准3.1 平台、团队、业务怎么排很多同学选offer的时候第一反应是看薪资第二是看公司名气。但我回头看我自己的经历以及身边发展得不错的朋友发现决定你成长速度的最关键变量其实是直属leader和你日常做的事情。平台和业务的优先级我个人的排序是这样靠谱的leader 核心业务 能让你接触完整链路的技术栈 薪资单上的数字。为什么要这么排因为你第一份工作甚至前三年核心目标是建立工程直觉。靠谱的leader会告诉你什么是合理的交付标准会逼你写文档、做复盘会在你犯低级错误的时候帮你兜底而不是甩锅。这些软性的东西是薪资表上看不到的但对你的长期影响比几万块钱大得多。我不是说高薪不好而是想提醒你薪资之外的成长收益也要算进总包里。如果一个 offer 比另一个少两万但是团队能让你从头到尾参与一个真实系统的建设我建议你认真考虑后者。因为这种经历压缩了你成长的时间一年可能顶别人三年。3.2 面试反问环节的清单选offer不能光听HR讲也不能只看招聘JD。我一般在面试最后会问几个实际的问题用来判断这个团队是不是真的适合我给你一份我现在还在用的清单“这个岗位前三个月最重要的目标是什么”——如果对方能具体说清楚说明岗位职责是真的清楚如果只说“学习成长”就要小心。“团队目前最大的技术痛点是什么”——看对方是愿意坦诚聊问题还是只会讲成绩。“代码评审和上线流程是怎么做的”——能说清细节的团队通常工程化底子不差。“你希望这个岗位的人一年后成长成什么样”——了解对方对你有没有培养预期。“上一任在这个岗位的人为什么离开”——这个问题能问出很多真实情况答得含糊的要多想一下。这些问题不一定能保证你选到完美团队但至少能帮你过滤掉一批明显不合适的坑。我自己后来换工作的时候靠着这套问答避开了两个看起来很光鲜、实际管理混乱的机会。3.3 薪资之外的隐性成本选offer还要算隐性成本。我整理过一个简单的对照表帮你把日常开销和单人时间成本考虑进去维度高薪但隐性成本高的情况低薪但隐性成本低的情况通勤单程超过1小时每天被耗掉2小时离家近或通勤方便稳定加班常态化加班到深夜周末也常被打断工作时间边界清楚偶尔冲刺技术栈写大量重复脚本接触不到核心系统能接触完整业务链路和核心模块团队氛围甩锅文化出了问题先找责任人就事论事愿意一起解决成长资源完全自学没人指导全靠自己摸索有靠谱的review和定期复盘隐性成本的本质是“你每天实际可支配的时间和精力”。同样月入两万一个是住得近、节奏好、能学到东西的工作另一个是通勤三小时、天天救火、技术长进缓慢的工作三年后的差距会非常大。这件事越早想明白越好因为它不在月度工资单上但会在你的履历和状态里体现出来。4. 入职后最让人脱胎换骨的复盘方式4.1 复盘不是写日记很多人一听复盘就觉得是要写工作总结把每天做了什么列一遍。我见过不少同事的周报就是“修了三个bug、上线一个功能、开会若干”这种流水账对成长几乎没有帮助。真正的复盘不是记录“发生了什么”而是回答“为什么发生”和“下次怎么办”。一次线上事故复盘的产出应该是根因分析、触发条件、预防措施、待补充的监控项。一次需求交付复盘的产出应该是判断偏差在哪、流程哪里断了、下一次从哪里卡住更有效。没有结论的复不叫复盘叫记录。我之前的习惯是一周写一次工作总结后来发现方案报表全是“完成”和“进行中”没有一句话是指导性的。后来我把模板改了强制性给自己留一个“我学到的事”和一个“我判断错的事”逼着自己从混乱的日程里提炼点东西。4.2 我的四段式复盘模板我目前使用的复盘模板很简单四个部分不追求写得漂亮追求写完之后能指导行动段落要回答的问题我通常怎么写现象客观发生了什么不评价只写时间、数据、结果原因为什么会产生这个结果区分直接原因和深层原因不甩锅动作我做了哪些有效/无效的尝试列举具体操作标注哪一步是转折点迭代下次遇到类似问题怎么做写成一个可执行的规则或检查清单这个模板我用了很多年。每次遇到线上事故、重要需求延期、或者和同事发生分歧我都会按这个结构写一段。写的时候不需要很长几百字就够但四段都必须写。很多时候你写着写着就会发现自己当时的不爽其实是信息不足或者自己遗漏了一个关键验证步骤。4.3 高频复盘的时间点复盘不用天天做频率太高容易变成交作业频率太低又会把教训忘掉。我个人的节奏是小事情当天立刻写两行结论中型问题一周一次集中复盘重大线上事故处理完的24小时内必须完成完整复盘。之所以要求24小时内是因为当时细节记得最清楚而且情绪还没完全消退你能写出那种真实的操作过程。等过了一周很多当时的判断和犹豫都会被大脑美化写出来的复盘就不真实了。我自己有体会事故当天的复盘能挖出三个根因过两天再写就只能写出一个。还有一件事很重要复盘一定要归档并且能搜到。我自己的笔记工具里有一个专门的“复盘”标签每月的复盘还会把关键结论抄送一份到私人邮箱。这样当我遇到类似问题的时候第一件事不是重新踩坑而是先搜自己的笔记。这个习惯帮我省了很多重复思考的时间。5. 前三年主动去做的几件事越早越好5.1 主动暴露问题这个听起来反直觉大多数人刚入职的时候恨不得把自己表现得很完美有不懂的也藏着掖着怕被看轻。但我观察到一个规律那些成长快的人恰恰是敢把问题摊在桌面上的人。不是让你什么问题都往外抛而是学会“带着方案暴露问题”。比如你说“这个模块我不太熟悉我读了一部分代码我理解是这么处理的但有两处不确定能不能帮我看看”这比单纯说“我不会”要好得多。团队Leader不会因为你说哪里不懂就觉得你能力差反而会看到你的学习思路和判断边界。我自己带人的时候最怕的是那种接到任务闷头做了十天第十天才说“做不了”的同事。白白浪费了时间还没法补救。反过来如果你在第二天就说“目前看下来这个方案有个风险我打算这样处理”大家一起想办法事情基本都能推进下去。主动暴露问题不是示弱是变相降低协作成本。5.2 写文档不是给别人看是给三个月后的自己看很多同学不爱写文档理由是“代码就是文档”“注释写清楚了就行”。我以前也这么想直到有一次我自己接手了自己半年前写的代码愣是忘了当时为什么那样设计翻提交记录才勉强拼出思路。从那一刻起我再也不信“写代码的人从来不需要文档”这种话了。我建议你至少给自己建立两类文档一类是系统设计说明包括模块关系、关键流程、数据流的方向、重要的设计取舍另一类是操作手册比如怎么启动本地环境、怎么部署测试环境、线上日志去哪看。这些内容写的时候不用追求辞藻重点是准确、可检索、能帮你快速恢复记忆。也不要觉得写文档是额外工作。每当你解决了一个很复杂的问题或者在代码里发现了一个坑顺手记在一个文档里以后你遇到类似问题就能直接翻出来。这个动作看似占用十几分钟实际上是在帮你把经验固化成资产而不是每次都从零开始。5.3 在代码评审里学会“讲理由”代码评审是新人最容易浪费掉的学习机会。很多同学在评审会上只是被动回答问题别人说什么就改什么从来不主动表达自己的设计理由。这样做你会错过一个特别重要的能力为自己的决策辩护。有一次我提交了一个改动把某段逻辑从同步改成异步有同事质疑说这样会让调用方感知不到失败。如果放在以前我可能就直接改回去了。但那次我认真说了自己的理由这个操作本身失败率极低、调用方不依赖结果的强一致、异步化之后可以削峰。讨论完对方也觉得可以但提出了一个补偿方案的补充。那次之后我发现代码评审真正值钱的不是“代码哪里错了”而是“设计为什么合理、边界在哪”。所以我的建议是每次评审前把自己改动中容易有争议的点提前梳理一下想清楚你为什么会这样写。如果连自己都说服不了那大概率是设计还没想明白。评审里被质疑不是丢脸的事恰恰是你把思路理清楚的机会。6. 瓶颈期和倦怠期我是怎么走出来的6.1 轻度瓶颈扩大输入工作到第二年左右我明显感觉成长速度变慢了。每天写差不多的业务代码修差不多的bug技术上的新鲜感越来越少。那时候我一度怀疑是这家公司不适合我想跳槽。后来我试着做了一件事每周抽出两三个小时去读自己领域内那些我“一直想读但没时间读”的内容比如源码分析、设计文档、架构复盘文章甚至把某一本书从头啃下来。同时要求自己每个月用学到的思路做一个小实验比如模拟一个限流组件、实现一个简单的消息重试机制。这个做法对我来说相当有效。瓶颈很多时候不是能力到头了而是你输入的密度太低每天只有输出没有吸收。你把输入补上很多卡住的问题会重新变得有意思。我后来带人也会建议他们在瓶颈期先别急着换环境先试六周的高强度输入再判断是环境的问题还是自己的问题。6.2 重度瓶颈换问题域如果扩大输入还是走不出去就要考虑另一个可能性你一直在解决同一类问题技能结构已经固定了。比如你只做运维脚本那你的成长上限可能取决于脚本的复杂程度你只做界面那你的上限会卡在业务逻辑的理解上。这时候换问题域比硬熬有效得多。我自己的转折点是主动申请换到一个新的业务方向做的东西从内部工具变成了面向用户的高并发系统。那半年我几乎每天都在接触新概念压力很大但成长速度也是最快的。回头看重度瓶颈的根本原因往往是“你手里的问题撑不起你的野心”而不是你不够努力。换问题域不一定非要跳槽可以是在团队内部换个模块也可以是把某个旧系统翻新一遍。重点是你做的事需要用到你没有的新能力。这个过程一开始会很难受因为你会重新变笨但熬过前面六个星期你会发现自己的边界拓宽了一圈。6.3 倦怠时不建议硬扛也不建议冲动裸辞还有一种倦怠是纯粹的心累不是能力瓶颈也不是输入不足就是不想写代码了。这时候最容易出现两个极端一是硬扛继续高强度输出结果状态越来越差二是冲动裸辞说走就走结果在家待了一段时间更焦虑。我走过一次硬扛的路结果是一次比较大的线上事故因为我自己状态不好漏掉了一个关键检查。事后我意识到状态管理也是工程师能力的一部分你得能识别自己“今天不适合动代码”。后来我给自己立了规矩状态特别差的时候不做高风险变更只做低风险任务比如写文档、整理代码、回消息。如果是长期倦怠我建议你先调作息和运动再考虑换环境。这个顺序很重要。很多时候我们以为是对工作厌倦了其实就是睡眠不够、长期不运动、社交消耗太大把身体状态搞得一团糟。把身体调回来以后你对工作的感受会真实得多。这时候如果还是觉得这行不适合自己再做决定也不迟。6.4 要不要跳槽三个信号我给自己定的跳槽信号有三条至少同时满足两条我才会认真考虑动当前环境已经连续半年以上给不了你新挑战你做的事情重复度非常高。团队的技术方向整体在走下坡路或者核心业务正在被边缘化你的积累很难迁移。你的经济状况和家庭情况允许你从容切换不需要为了短期薪水去赌一个风险更大的机会。这三条缺了哪一条跳槽都容易变成逃避。尤其是第三条看起来不太“技术”但非常重要。工程师生涯很长没必要在最被动的时候做决定。如果想跳也是先在本职上保持正常交付利用业余时间准备案例和面试等条件成熟再走出去心态会稳很多。7. 一些底线原则越早想清楚越少走弯路7.1 不要用学习逃避工作交付我见过一些同学工作上迟迟不出活但很爱报班、看书、刷课美其名曰“我在提升自己”。这个状态非常隐蔽因为它看起来特别上进。但长期来看如果你只是把学习当成逃避交付的手段你的基础产出会越来越差后续的成长也没有立足点。我的经验是工作内的交付永远是第一位的。你可以对某个新技术很感兴趣但如果当前项目的核心任务还没完成先把手头的事做扎实。真正的高手不是只靠业余时间学习的而是能从工作本身挖出大量值得研究的问题。如果你的工作内容让你一点兴趣都提不起来那第一件事是调整任务或换项目而不是用学习去麻痹自己。7.2 不要陷入横向比较大部分焦虑都来源自比较尤其是和同龄人比较。某某同学去了某家大厂某某同事三个月升了一级某某论坛的人一年几十篇技术博客看到这些很难不慌。我也有过这个阶段越比对越觉得自己落后然后就开始自我否定甚至做出一堆不理智的选择。后来我想明白一件事每个人的起点、环境、节奏都不一样比较只会让你关注短期差距而忽略长期积累。我的做法是只和自己上一阶段的记录比这个季度有没有掌握一项新技能有没有解决一个难啃的问题有没有留下可持续使用的成果。这些踏实的指标比别人的进度条有意义得多。7.3 保持一个属于自己的小项目或笔记本最后分享一个我坚持了很多年的习惯永远有一个自己的笔记本。不一定是写博客也可以是私人文档、代码片段库或实验小项目。它不一定和工作直接相关但能帮你在日常交付之外留一块属于自己的思考和练习空间。我自己的笔记本里有很多东西踩坑记录、代码片段、设计思考、一段他人的经验摘抄甚至还有某次争论后我写下的自我复盘。每当我觉得工程师之路走得迷茫的时候就会翻一翻这些记录看看自己是怎么一步步走到现在的。看着那些曾经难住我的问题后来都被解决了那种踏实感比任何鸡血都有效。这条路从来没有捷径有的只是一次次遇到问题、拆解问题、沉淀方法的过程。如果你现在正处在一个很彷徨的阶段不需要急着给自己下定论先把每天的手头事做好把回头的笔记记好这条路自然会在你脚下慢慢清晰起来。
返回列表