jiyulishang头像

程序人生:从入行到迷茫,老程序员的成长与反思

快三十岁那年,我还在一家不大不小的公司里写业务代码。每天的工作就是打开 IDE,找到对应的接口,改几行逻辑,然后重复几乎一样的自测流程。那阵子我经常失眠,躺在床上脑子里全是那种知名段子——程序员三十岁以后去哪了,三十五岁是不是要转行送外卖。后来有一天加班到凌晨两点半,我盯着屏幕上的堆栈信息发呆,突然意识到一个很基本的问题:我好像从来没认真想过,自己到底在走一条什么样的路。

这种困惑应该不止我有。很多人入行的时候是被高薪、被“改变世界”的口号、被互联网浪潮卷进来的,但真正写了几年代码之后,会发现程序人生这事儿,跟想象中完全不是一回事。它不是一个“学完就能躺赢”的赛道,而是一场长期的、需要反复迭代的生存状态。这篇长文我打算敞开聊一聊,从怎么入行、怎么成长、怎么在技术和业务之间找平衡,到怎么处理焦虑、怎么安排精力、怎么看待年龄和职业天花板。不保证全是标准答案,但保证是真实摸爬滚打总结出来的经验。适合刚入行的新人,也适合写了三五年开始迷茫的老人,甚至适合想转行进来的朋友们提前打个预防针。

1. 我为什么写代码:入行这件事远比想象中复杂

1.1 最初的选择:被高薪还是被热爱驱动

先说个扎心的真相:大多数程序员入行,是因为这行给的钱多,或者看起来给的钱多。我自己就是这类人。大学读的是机械,毕业第一年进了一家企业做设备调试,天天在车间里跟油污打交道,工资条上的数字让人看了想哭。后来一个大学室友转行学了编程,半年后跟我饭桌上聊天,说他现在月薪是我三倍。我心里那杆秤马上就歪了,直接报了培训班。

这种动机说不上体面,但非常普遍。它最大的问题在于:如果仅仅是冲着钱来的,一旦入行发现编程并没有想象中那么“容易搞钱”,或者发现钱没有想象中那么多,就很容易动摇。我在后来带新人的时候见过不少这类情况——很多人第一份工作干了半年就跑了,理由不是钱不到位,而是“天天改 bug 太无聊了”“需求说变就变受不了”“跟想象中完全不一样”。

所以如果你现在正考虑要不要转码,我建议先问自己三个问题:第一,你愿不愿意每天花至少四小时坐在电脑前,跟一堆抽象符号较劲;第二,你有没有耐心在一个问题上卡上几个小时甚至一整天,只为了找出一个分号或者一个空指针;第三,当别人跟你说“这个需求很简单”但实际做起来复杂到想骂人的时候,你能不能扛住情绪。这三关过不了,多高的薪都留不住人。

1.2 培训也好自学也罢,关键是建立正向反馈

市面上有很多“三个月速成班”,包括我当年读的那种。客观来说,培训班能给你的是信息密度很大的填鸭式灌输,帮你在最短时间内把一门语言、一套框架的基本用法过一遍。但培训班给不了你的是真正的项目经验,以及面对未知问题时的排查能力。这也是为什么很多从培训班出来的人会有一个共同感觉:学的时候觉得自己什么都懂了,真到公司里接需求,又发现自己什么都不会。

我自己比较推荐的入门方式是一种混合策略——先花两到三周快速过一遍基础语法,不用抠太细,知道有这些东西就行;然后立刻找一个真实需求去实现,哪怕只是一个极小的工具脚本,哪怕是照着网上的教程抄,只要运行出了结果,你的大脑就会获得一次正向反馈。这种反馈非常重要,它是支撑你在前三个月最难熬的阶段坚持下来的燃料。

举个例子。我转行早期写过一个小程序,功能是批量给文件夹里的图片重命名。需求极其无聊,但我在实现过程中接触到了文件遍历、字符串处理、异常捕获、命令行参数解析这几个概念。每搞通一个,我都觉得自己强了一点。这种“用代码解决一个具体小问题”的循环,比任何课程都更能帮你建立信心。真正决定你能不能在这个行业走下去的,不是第一份工资,而是你面对陌生问题时的态度——是习惯性想“算了”还是习惯性想“让我试试”。

2. 从写代码到做工程:中间隔着一整个系统

2.1 别拿“能跑”当标准,要拿“能维护”当标准

很多新手程序员都会进入一个阶段:觉得代码能跑通、功能能交付,这事儿就算完了。这个阶段一般会持续一到两年,直到他们第一次接手别人的烂摊子,或者自己的代码在半年后被自己改到想吐,然后才会意识到一个残酷的事实——代码这东西,写出来只是开始,未来可能要被人读十遍、改二十遍。

有一次我们系统出了一个线上故障,排查到最后发现是个很隐蔽的并发问题。相关的代码是一位已经离职的同事写的,注释是零,变量名全部是 a、b、c 这种,函数有一百多行,嵌套了六层 if。那次我连续加班了三个晚上才把逻辑彻底理清。从那以后,我给自己定了几条土规矩:变量名必须表达真实含义;超过三十行的函数必须想办法拆;只要有条件分支,就必须写注释解释为什么;能返回提前返回,不要攒一堆 else。

这些规矩单独拎出来都很简单,但难的是每次都做到。因为写“能跑的代码”只需要对计算机负责,而写“能维护的代码”需要对六个月后自己、对组里其他同事、对未来接手的人负责。后者需要的是工程素养,不是单纯的语言能力。

2.2 技术选型的本质是取舍,没有银弹

新人特别喜欢争论哪个语言好、哪个框架牛,这种事我干过很多,但说实话,工作几年之后你就会发现,技术选型本质上是取舍——用爽感换稳定,用性能换开发速度,用生态换灵活性。没有绝对正确的选择,只有适不适合当前场景的选择。

举个真实的例子。我们组接过一个老系统,用的是十几年前的技术栈,连构建工具都很古老。新来的同事第一反应是“重写吧,用最新的技术”,这种冲动我太理解了,因为用新东西真的很快乐。但冷静下来算一笔账就明白了:这个系统已经稳定跑了七八年,业务逻辑极其复杂,涉及大量的边界条件和历史包袱,重写意味着所有隐藏规则都要重新摸一遍,至少要投入大半年的时间,期间还要保证新旧系统并行和维护,风险极高。

最后我们的决策是:不动整体架构,只在局部做改造。新功能尽量用中间层去隔离,老代码里确实不合理的部分,每次动到就顺手小范围重构。这个策略不能说华丽,但非常务实。程序人生里最重要的一课就是学会接受不完美,学会跟糟糕的代码共存,然后在能力范围内一点一点地改善它。

2.3 了解业务到底重不重要,我用一次事故来说

我有一个阶段特别崇尚“纯技术”,觉得搞业务的都是外行,觉得天天分析需求是浪费时间。直到我做了一个给运营部门用的数据报表系统,印象极其深刻。当时我对着需求文档吭哧吭哧写了两周,功能做完,界面也好看,结果上线第一天就被人喷成了筛子。

问题出在哪儿?需求文档上写“统计各渠道的转化率”,我按自己的理解把“转化率”定义为“点击某按钮的人数除以点击广告的人数”。但运营那边真正想要的其实是“完成最终注册的人数除以广告曝光人数”。差一个字段,数值差的可能是十几倍。出了这事之后我明白了一个道理:你写的每一行代码,最终都要落到一个具体的业务场景里面。代码是实现,业务才是目的。不搞懂业务,写出来的东西就是空中楼阁。

所以在后来的项目里,我养成了一个习惯——拿到需求先别急着设计表结构,先去找提出需求的人聊天。聊什么呢?不是问他要什么功能,而是问他为什么要这个功能,他拿到数据之后要做什么决策,这个数据不准会导致什么后果。通常这么聊几轮,需求会发生非常大的变化,因为很多人在说“要什么”的时候,表达的并不是真实需求,而是一个他以为能满足需求的表象。你能帮他挖到真需求,你的代码才有价值。

3. 程序员的职业路线:是走深还是走宽

3.1 技术专家路线:深入骨头的快乐与代价

职业发展这件事,很多人在工作两三年后开始焦虑,因为前两年大家都在学东西,进步肉眼可见,但过了那个阶段之后,成长速度会明显放缓。这时候你就需要想清楚一个问题:自己到底适合走哪条路线。

技术专家路线,简单来说就是在一个领域里不断往深了钻。比如操作系统内核、数据库底层、分布式系统、算法引擎等等。走这条路的人通常有非常强的好奇心,他们能从源码里读出快感,能为了一个性能指标扣掉最后那百分之几的损耗乐在其中。如果你发现自己天天看技术文档不觉得累,解决问题的时候能进入心流状态,那可以考虑往这个方向走。

但这条路也有很大的代价。第一,深度领域往往竞争激烈且圈子小,一旦行业发生结构性变化,你的经验可能会快速贬值。第二,纯技术岗位在很多公司里的晋升路径是有限制的,到了某个级别之后,如果你不愿意走管理,天花板就很明显。第三,深度钻研往往意味着要牺牲一部分跟人打交道的时间,这对性格内向的人来说是舒适区,但也会让你在组织里失去很多可见度。

我认识一个做数据库内核的哥们儿,技术是真的强,但他自己也承认,如果有一天行业不景气要裁员,他是第一批可能会被“优化”的人——不是因为他能力不行,而是因为他的成本高、替换难度大,同时他对业务没有直接可见的贡献。这话听起来挺残酷,但程序人生就是这样,纯技术不是护身符,你还需要一些别的东西。

3.2 架构师路线:从“写代码”到“画图纸”

比纯专家路线稍微宽一点的是架构师路线。这个角色不是比谁代码写得花,而是负责在一堆杂乱的需求、约束、资源和风险之间,找到一个相对合理的平衡点,并把最终方案用图纸和文档表达出来,让团队里的每一个人都知道要往哪个方向使劲。

刚工作的时候,我觉得架构师就是技术最强的那个人,什么都懂,什么都会。后来自己逐渐开始承担一些系统设计工作才发现,架构师最核心的能力不是“懂技术”,而是“做决策的能力”。你要能在信息不完整的情况下拍板,在各方利益冲突中做取舍。比如产品说这个功能必须下周上线,技术说这个设计需要两个月重构,谁对谁错?其实没有对错,你需要做的是给出一个折中方案,让这次先上线但预留好重构空间,同时想清楚迁移的路径,把风险控制住。

架构师路线适合什么样的人呢?首先是看问题有全局视角的人,不会只盯着自己的一亩三分地;其次是沟通能力强的人,因为你需要经常跟产品、运维、测试、业务方来回拉扯;最后是抗压能力好的人,因为系统出问题的时候,第一个被找的人往往就是你。

3.3 技术管理路线:带人比写代码难多了

很多人觉得“写代码写不动了就转管理”,这是天大的误解。技术管理不仅不是逃避写代码的退路,反而是要求更高的岗位。你不仅要懂技术,还要懂人,要懂怎么分配任务,怎么激发团队士气,怎么处理各种办公室政治,怎么向上管理。这事儿比写代码复杂得多。

我第一次带人的时候,犯了一个特别典型的错误——觉得布置任务就是把需求说清楚就行。结果有个新人连续两周都没产出,我去问他怎么回事,他支支吾吾说有个点卡住了但不好意思问。我当时很崩溃:你怎么不早说?他说:我看你每天都在忙,怕耽误你。

这件小事让我意识到一个道理:做管理不是做监工,不是把任务丢出去就完事了。你要主动去观察团队里每个人的状态,去发现潜在的卡点和风险,去创造一个让大家敢于开口的氛围。技术上的问题有标准答案,人的问题每个都不一样,这才是最消耗精力的地方。所以如果你真的动了转管理的念头,先别急着追求职位,先试着在组里带一个实习生,感受一下自己有没有耐心和同理心,感不享受帮助别人成长的过程。

3.4 年龄焦虑的本质:不是怕老,是怕停滞

程序员圈子里的年龄焦虑一直很重,特别是过了三十岁以后,经常能听到“三十五岁危机”这种话。老实说,这种焦虑不是空穴来风。但我觉得很多人搞错了焦虑的根本原因——你不是因为老了而危险,是因为你的成长速度跟不上行业的变化,同时你的成本又在逐年上升,这从商业角度看,确实不划算。

破局的办法很朴素:让你的成长速度永远快于年龄的增长。换句话说,你三十岁要比二十五岁值钱,三十五岁要比三十岁更值钱。这不是靠年限堆出来的,而是靠经验、判断力、视野、人脉、口碑这些东西积累出来的。一个三十五岁的高级工程师,可能写代码的速度确实不如二十五岁的小伙子,但他见过的坑更多,他能在一开始就避开很多弯路,他在系统设计上考虑得更周全,这些价值没法直接量化,但在关键时刻能救命。

我自己过了三十岁之后,反而没有那么焦虑了。因为我想明白了一件事:年龄只是一个数字,真正决定你竞争力的,是你有没有保持学习的状态。不是说非要每天学新技术,而是你要保持一种开放的心态,愿意接受新东西,愿意承认自己的知识有盲区。只要这个状态在,你就不怕行业怎么变。怕就怕人过三十,觉得自己啥都会了,躺在一份工作中再也不动了,那才是真的危险。

4. 踩坑实录:这些年我花真金白银买来的教训

4.1 不要过度追求“最佳实践”

工作前几年,我有比较严重的“框架洁癖”——看到一段代码不优雅就浑身难受,非要按照某种设计模式重写一遍才舒服。实际上这种心态给团队带来了不少麻烦。有一次我把一个简单模块强行套上了策略模式+工厂模式+观察者模式,代码量翻了三倍,架构图画得花里胡哨,结果后来需求一变,改起来比原来复杂十倍。

最佳实践这东西当然有价值,但你得想清楚它的适用场景。一个只有几十行代码的小逻辑,用最简单的 if-else 写清楚就完事了,非要用状态机,那不是优雅,是卖弄。判断一个设计好不好,不是看它用了多少模式,而是看它能不能用最低的复杂度解决当前的问题,同时给未来留出合理的演进空间。代码首先是写给人看的,计算机执行只是副产品。

4.2 技术债真的会“利滚利”

技术债是一个特别容易被低估的概念。你为了赶一个紧急版本,草草实现了某个模块,注释没写,测试没补,结构也乱。当时你觉得没事,下周补上。但到了下周,新的需求又来了,你根本没时间去还旧债。半年之后,当初那个“小破模块”已经被各级代码层层包裹,想改一处牵动全身,当时省下的一天时间,现在可能要花十天来还。

我现在的原则是:可以不完美,但不可以“留烂摊子”。哪怕是紧急方案,也要在代码里写清楚 TODO,在需求文档里留下标记,并同步给组里的其他人。更重要的是,定期要给自己和团队留出“还债时间”,每个迭代周期抽个半天一天,专门用来清理那些有价值的旧账。这看起来是慢了一点点,但长期看绝对划算。

4.3 沟通也是核心能力,别把不会说话当个性

程序员这个群体里,挺多人是比较内向、不太爱说话的,这本身没什么。但有些人把“不会沟通”当成是一种坦诚、一种个性,觉得“我就这性格,爱咋咋地”——这个心态在团队协作中会带来很大麻烦。

我见过最离谱的例子:一个同事发现一个线上配置有隐患,但他没有跟任何人说,自己默默在代码里加了一个 workaround,结果后来又有人改了配置,跟他的 workaround 冲突,直接搞挂了线上服务。事后追责的时候他说:“我早就发现了,不是已经处理过了吗?”——你看,他不会表达自己做了什么,也不会同步风险,这种“沉默式负责”反而是对团队的不负责。

沟通这件事不需要你变成社交达人。最基本的几条做到就够用了:有风险提前说,有进展及时同步,听不懂的需求当场问,做完的东西主动演示给相关人看。这些动作花不了几分钟,但能让你在团队里的信任度指数级上升。

4.4 别把所有时间都用在代码上

程序人生如果只有代码,那它离“人生”这个词就太远了。我见过特别多程序员朋友,包括我自己,都有这种倾向——把所有空余时间都用来学新框架、刷技术文章、搞开源项目,以为这样才能保持竞争力。这个想法本身没错,但过头了就有点危险。因为你的人生不能永远活在补偿焦虑里。

我后来刻意给自己划了一条线:晚上十点以后尽量不碰代码,周末至少留一天完全脱离技术话题,隔一段时间就去健健身、跑跑步或者随便走走。刚开始做的时候特别不习惯,总觉得浪费时间,好像自己落后了。但坚持了几个月之后,最大的变化是睡眠变好了,情绪稳定了,反过来白天的效率也高了。这其实是一个很简单的道理:人有张有弛,机器都需要散热,你凭什么要求自己永远满负荷运转?

5. 关于未来的思考:程序人生的几种规划方案

5.1 深耕一个行业,成为“技术+业务”复合体

我对技术人未来的第一个建议是:不要只做一个纯写代码的人,试着去深耕某个具体行业,成为“既懂技术又懂业务”的复合型人才。为什么要这样?因为纯技术能力在市场上是高度同质化的,你用 Java 写电商系统,别人也用 Java 写电商系统,你很难在技术上建立压倒性优势。但如果你不仅懂 Java,还懂跨境电商的支付链路、风控规则、物流对接、海关结算,那你在这个领域里就是稀缺的。

我认识一个做医疗系统的朋友,他本身技术不是最强的,但他把医疗行业的业务逻辑摸得特别透——什么医保报销规则、医生排班逻辑、药品库存管理,他都懂。后来很多公司挖他,不是冲着他的代码能力,而是冲着他“能把需求翻译成技术方案”的能力。在行业解决方案领域,这种复合能力非常抢手。

5.2 自由职业与远程工作:不一定适合所有人

很多程序员内心都有一个自由职业的梦:不上班、不打卡、接接外包、写写开源,时间完全自己掌控。这个梦听起来很美,但现实往往很骨感。我自己也尝试过一段时间的自由职业,最大的感受是——自由职业的本质不是“自由”,而是“没有保障的忙碌”。

你不需要打卡,但你需要面对客户随时可能提出的需求变更;你不需要通勤,但你需要自己搞定社保、税务、设备、软件授权这些琐碎的事情;你不需要写周报,但你每个月要考虑收入够不够花。自由职业并不是逃避职场的方式,它只是一种不同的职场形态,适合自律能力极强、有稳定获客渠道、并且能忍受孤独的人。

如果你想尝试远程工作,我的建议是先在业余时间接一些小项目试试水,摸清自己的时间管理能力和交付能力,再考虑要不要全职出来。别一时冲动裸辞,然后坐在家里对着空空的收件箱发呆。

5.3 不做程序员了,能做什么

这个问题可能是三十岁之后出现频率最高的问题:“如果有一天不做程序员了,我能干什么?”我的答案是:你干过的所有事情,都会成为你的资本,你不会因为“不做程序员了”就一无所有。

这些年写代码培养出来的逻辑思维、拆解问题能力、快速学习能力、在信息爆炸中筛选关键信息的能力,放在任何行业都是稀缺的。我见过转行做产品经理的,做技术写作的,做知识付费的,做独立开发的,甚至做自媒体和电商的。不能说每个人都成功,但至少说明程序员的底子是有迁移能力的。

关键是想清楚一件事:你转行不是因为代码这条路走不下去了,而是因为你发现自己更热爱、更适合另一条路。抱着“逃离”的心态转行,大概率会从一个坑跳进另一个坑。

6. 最后,留给新人的几句话

6.1 保持学习的节奏,但不要被新技术绑架

技术圈有一个怪现象:每隔几个月就会冒出一个新框架、新工具,然后是铺天盖地的讨论、转发、跟风。很多程序员因此患上了“技术焦虑症”,生怕自己没跟上就落伍了。说实话,大部分新东西都是旧东西的包装,真正值得你花大精力去学的,永远是最底层的那几样:数据结构、算法、操作系统、网络原理、数据库设计。这些东西十年二十年都不会过时,你吃透了它们,学什么新框架都只是看一遍文档的事。

6.2 身体是程序人生的底线

我在二十多岁的时候不觉得熬夜有什么问题,咖啡加红牛能顶一个通宵,第二天照样精神抖擞地去上班。但到了三十岁以后,身体开始不断发出警告:颈椎、腰椎、眼睛、胃、睡眠,全都有小毛病。去医院看病时医生跟我说的那句话我记到现在:“你这不是什么大问题,就是过度消耗,再不注意,年纪再大一点就会很麻烦。”

程序员这个行业真的很拼智力、拼精力、拼耐力,但它最终拼的是谁身体更好、状态更稳。我真心建议每一个年轻程序员,从入行第一天就培养运动习惯,别等腰突了、近视加深了、脂肪肝了才想起来锻炼。身体这个东西,透支起来很容易,补回来就太难了。

6.3 程序人生不是百米冲刺,是一场马拉松

我见过太多人一入行就铆足了劲往前冲,天天加班到深夜,技术文章一篇接一篇地读,项目一个接一个地接,朋友圈全是凌晨三点的写字楼。这种状态可能在短期内让你进步飞速,但跑过马拉松的人都知道,你前面冲得越猛,后面崩得就越快。

程序人生要有储备、要留余力。每天保持学习,但不要学到透支;认真对待工作,但不要把工作的情绪带回家里;追求技术深度,但不要忘记看看身边的生活。这条路上没有终点线,你不必非要在三十五岁之前成为技术总监,也不必非要跟任何人比较谁年薪更高。你只需要跟自己比,比去年更成熟一点,比上个月更通透一点,这就已经很好了。

写这篇长文的时候,我想起了很多年前那个坐在培训班教室里、连变量作用域都搞不太清楚的自己。那时候我不会想到,代码这件事会在后面这么多年里,成为我谋生的手段,也潜移默化地改变了我思考问题的方式。程序人生这四个字,对每个人来说都会有不同的答案。我没有办法替你回答,只希望这些文字能在你迷茫的时候,给你一点参照——原来这个人也这么困惑过,原来这些问题并不是只有我一个人在经历。那就够了。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/weixin_26757949/article/details/166474823

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--