我从事专业编程已经十多年了。大概在职业生涯的第三年,我逐渐意识到一个让我深感不安的事实:那些让我获得赞扬、得到晋升、让经理们争相留我在团队的原因——几乎全都与我在训练营、在线课程或那47个常开教程标签页里学到的内容无关。
别误会,编程技能是基础。但回想我的第一份工作,那个晋升比我快的人?她写的代码比我的凌乱。那个当我还是中级时就被聘为高级工程师的人?他的GitHub远不如我的亮眼。那个时薪300美元而我年薪才8.5万美元的顾问?我编起程来能把他绕晕。
就在那时,我开始明白了:我以为自己在玩的游戏,并非真正的游戏。
当你深夜刷LeetCode或完成第五个React教程时,没人告诉你的是:公司付钱给你不是因为你懂技术,而是因为你让他们的麻烦消失。而他们的大多数问题并非技术问题——只是以技术形式表现出来。
让我举个例子说明。
去年,我目睹一位初级开发人员在裁员中被解雇,而另一位技术上明显更弱的人却留了下来。那位初级同事很聪明,能实现我需要谷歌的算法,对设计模式的理解比许多年长一倍的人都好。但他有个习惯:会花三天时间埋头完善某个东西,然后拿出一个没人要求、也没解决实际问题的方案。而留下来的那个人呢?她有种近乎超自然的能力,能在写一行代码前就问出关键的厘清问题。她会花30分钟沟通,从而节省三天的工作量。她能发现表面问题背后真正的症结,在错误需求变成糟糕功能前就提出质疑。
这不是你能从文档里学到的技能,也不是"高级JavaScript模式"会覆盖的内容。
说实话,一个让人不太舒服的真相是:大多数教程只教你语法和模式——也就是"是什么"和"怎么做"。但它们不教你"为什么"、"为谁做"、"何时做"以及"等等,我们真的应该做这个吗?"真正的价值恰恰藏在这些问题里。
我在第二份工作的一个项目中艰难地领悟了这一点。我们正在构建一个让销售经理跟踪团队绩效的仪表板。我花了三周时间打造了一个精美的实时WebSocket实现,带有动画图表和流畅的UI。我为此自豪,技术上很出色,代码评审收到了热烈的表情符号。
然后在演示时,我看着销售总监的脸色沉了下来。"这很棒,"她说,但语气明显意味着"并不棒","但能导出到Excel吗?我们所有的分析都在Excel里完成。"
三周时间啊。我花了三周构建了一个技术上复杂却偏离核心需求的东西。没人想要实时仪表板,他们想要的是周四早上能导入用了二十年的工具里操作的报告。实际需求简单到让人觉得无聊,这可能也是我潜意识里想用技术让它变有趣的原因。
一位资深开发者会先了解他们的工作流程,会知道他们离不开Excel,会在三天内交付那个无聊但正确的方案,然后继续处理更重要的事。
但那时我还不算真正的资深,尽管头衔如此。我的思维仍停留在"靠写代码拿钱"的层面,而非"靠解决业务问题拿钱"。
我多希望当时有人告诉我:你的工作不是写代码,而是减轻组织的痛苦。代码只是实现这一目标的工具之一。有时正确的工具是一次对话,有时是一张电子表格,有时是提出质疑并说"我们根本不该构建这个"。
这一认识改变了我的一切。我突然明白为什么有些人被邀请参加重要会议而有些人没有,为什么有些人的意见有分量而有些人只被视为"执行者"。这无关技术能力,而关乎判断力。
判断力可能是我们行业最被低估的技能,也几乎是教育中完全缺失的一环。没人教你如何嗅出糟糕的需求,没人教你如何识别何时技术问题实则是人的问题,没人教你"技术上正确"与"在当前约束和人员情况下正确"的区别。
我曾与一位名叫Marcus的同事共事,他的判断力近乎预知。在规划会议上,当有人提出方案,Marcus会安静片刻,然后说:"有道理,但我们考虑过运维团队对此需要随时待命的感受吗?"会议室会瞬间安静,因为没人想到这点,然后我们才意识到自己差点创造一个让人痛苦、会在凌晨三点为可规避问题发告警的系统。
Marcus不是团队里最强的编码者,他扎实、可靠、胜任。但他对系统在充满情感、约束和优先级冲突的人类组织中的运行有全局视角。他考虑决策的下游影响,评估运维负担,在写代码前就问清监控和调试方案,还会想到两年后维护这摊东西的可怜人。
这不是天赋,是习得的。但你无法从课程中学到,只能通过摸火炉、交付看似好主意却变成维护噩梦的项目、成为凌晨三点被呼叫的人、目睹项目因忽视人性因素而非技术问题失败来领悟。
说实话,真正的工作大多存在于这人性层面。
我曾多年认为只要编码能力更强,其他一切自会跟上——更好的算法、系统设计、最新框架。当然,你需要基础的技术能力。但我见过满是聪明工程师的团队产出垃圾,因为没人懂得沟通,没人愿问"蠢"问题,每个人都在优化"看起来聪明"而非"真正有效"。
沟通不是你可因技术能力强而忽略的软技能,它就是核心技能,决定了你的技术能力是否真有意义。
想想看:你可以构建世界上最优雅的解决方案,但如果你无法解释为何这是正确方法,无法让利益相关者理解,无法写出不让人想辞职的文档——那你的优雅方案等同于不存在。更糟的是,它存在但无人理解,于是人们绕开它,或因不理解假设而破坏它,或在六个月后被不懂你初衷的人重写。
我在一次至今难忘的代码评审中领悟了这点。我写了一段巧妙的代码,用高级TypeScript特性让类型系统在编译时强制执行业务规则。我十分自豪,这种代码,要是写在介绍高级类型系统的博客里,肯定会大放异彩。
同事看了说:"这很厉害,但我看不懂,也没时间学这么深的TypeScript。能不能用团队都能理解的方式实现?"
我的第一反应是防御性的——问题不在我的代码,而是他们不懂高级类型。但后来我想通了:我们是小团队,需要快速推进,需要每个人能接触代码库任何部分。我的聪明代码刚制造了只有我能处理该功能的瓶颈。我优化了个人技术满足感而非团队效率。
于是我重写了它,更简单、更直观,当然稍显冗长,但团队任何人都能立即理解。它没那么亮眼了吗?当然。但它让代码库更健康了吗?是的。
像这样的权衡取舍,根本没人会教你。代码不是写给计算机的——它们不在乎你多聪明。代码是写给人类的。六个月后(可能就是你)在晚上11点修复bug的读代码者需要快速理解它,上周入职的新人需要能修改而不破坏一切,评审你PR的人不该需要博士学位才能批准。
编写简单、清晰、直观的代码比写聪明代码更难。它需要你放下自我,考虑读者而非作者,重视可维护性胜过炫技,团队效率胜过个人满足。
我花了丢脸的时间才明白:人们会注意到这些。经理会注意到谁写的代码能让整个团队协作,谁考虑了可维护性,谁把团队成功置于个人表现之上。
这一点也引出了另一个无人谈论的方面:技术工作的政治维度。我不是指肮脏的"办公室政治",而是理解组织由目标、压力、激励各不相同的个体组成,你应对此的周旋能力决定了你的效能。
我曾认为政治低于我。我是开发者,只想写代码,让别人操心那些事吧。
后来我花了六个月构建的功能在上线前一天被取消,因为我不懂政治格局。有位副总裁一直推动不同方案,我构建的东西让他的方案相形见绌。我不知情,以为只是在按产品经理要求开发。但因不了解更广背景,不知道利益相关者及其关切,我无意踏入了政治雷区。
工作本身是好的,代码是扎实的。但无关紧要,因为我没理解技术决策发生在政治语境中。懂组织的人会构建不同的东西,或提前争取那位VP的支持,或至少知道这是高风险项目。
我不是说你要成为操纵性的政客,而是该明白组织是复杂的人类系统,人类有超越技术最优的动机、恐惧和目标。你的工作不仅是技术上构建正确的东西,还要以组织能吸收使用的方式构建。
这意味着理解利益相关者是谁、他们的忧虑、考核指标、目标。当你理解这些,就能以助他们成功的方式定位工作,从而获得支持,真正做成事情。
我曾与一位名叫Sarah的开发者共事,她深谙组织内部的运作法则。她总用业务术语阐述技术提案。不是"代码太乱该重构",而是"重构能降低bug率,让团队更快交付功能,助力实现第三季度目标。"她讲业务价值而非技术纯粹性的语言。
这很有效。她的重构提案被批准,架构变更获预算。她以"能成事"著称,不是因技术更强,而是因懂得如何在组织中游刃有余。
这不是操纵,只是理解受众。这与成为优秀技术作者所需的技能相同——根据接收者调整信息。你不会以同样方式向另一位前端开发者和CFO解释React优化,他们在意不同的事,需要不同的决策信息。
说到决策——没人教你在信息不全、时间紧迫、后果真实的情况下如何决策。
教程里一切清晰,问题明确,解决方案已知,存在正确答案。真实工作非如此。真实工作是用你期望信息的60%做最佳猜测,明知等待完美信息会错过截止期,明知不作为本身就是有后果的决定。
我见过优秀工程师因不确定性而瘫痪,他们无法在理解一切前开始编码,需要完美架构,评估所有可能库,考虑每个边缘情况。与此同时,隔壁初创公司交付了不完美但可用的东西,从用户那学习、迭代、赢得了市场。
在"太快(产生日后致命的技术债)"与"太慢(变得无关紧要)"间存在平衡。找到平衡是门艺术,非科学,只能通过痛苦经历习得。
我记得一个项目,我们花了三周争论功能的完美架构,考虑微服务、事件溯源、不同数据库选项等方方面面。我们有白板会议,写文档,感觉很有成效。但一行代码未写。
同时,竞争对手发布了他们的版本。没我们计划的架构纯粹,但它存在。他们开始获取用户反馈并迭代。当我们六个月后推出"完美"方案时,他们已基于真实反馈迭代了五个版本,尽管初始架构更差,产品却好得多。
教训不是"永不考虑架构",而是"偏向行动"。从可能可行的最简单方案开始,交付它,从中学习,迭代。完美是已交付的敌人。
但棘手之处在于:有时你确实需慢下来。有时承担技术债是以掠夺性利率向未来的自己借钱。知道何时快、何时谨慎——这又是判断力,是区分资深者与他人的技能。
我总结的一个经验法则:如果某事后期难改,前期就投入做对;如果易改,先交付简单版再基于实际使用改进。数据库模式?仔细考虑。UI组件命名?随便定一个继续前进。
同样重要的是知道什么重要。并非一切同等重要,并非每个决策都值得同等思考,并非每段代码都需完美。
初级开发者常平等对待一切,花三小时命名变量却匆忙写逻辑,在代码风格上纠缠不休却忽略根本架构缺陷。他们尚未培养关注重点的直觉。
资深开发者知道什么重要,知道打哪些仗,知道何时"足够好"就是足够好,何时必须做对,懂得无情地区分优先级。
我从一位CTO那学到这点,他常说:"这是单向门还是双向门?"单向门是难或不可逆的决策,需仔细思考。双向门不喜欢可退回,对于这些,选一个继续前进即可。
大多数决策是双向门,但我们因害怕犯错而全当作单向门处理。克服恐惧——适应不确定性、适应犯错和调整——这很重要。
你知道与适应犯错相关的是什么吗?接受反馈而不防御的能力。
这很基础,但我见过它毁了多少职业生涯。有人收到关于代码、设计、方法的反馈后,不倾听学习反而争论,解释反馈为何错误,变得防御,个人化对待。
我理解。你努力做了某事并自豪,有人说不够好,这感觉糟。但你如何处理那一刻决定成长或停滞。
我最尊敬的开发者是那些能听到"这不完全对"后以好奇心而非防御心回应的人。"哦,有趣——你会怎么做?"而非"其实我这样做是因为……"他们真诚学习而非保护自尊。
这适用于代码评审,也适用于一切:沟通风格的反馈、时间估算、问题处理方式、会议行为。这些都是可用来改进的信息,但仅当你能不受自尊影响地听取时。
我早期有位经理告诉我我在会议上打断别人。我内心立即反应"我没有",并找出一堆证明我只是热情投入的例子。但我强迫自己闭嘴,在后续会议观察自己。果然,她是对的。我不断打断别人,因急于贡献而不让任何人说完。
这很难面对,但一旦看到,我就能改正。改正后我在会议上更有效,人们更愿与我互动,我的想法更易被接受因为别人不再觉得被压制。
但我差点因防御本能错过这整个成长机会。
关于反馈还有一点:你需要学会主动寻求,而非被动等待。因为主动给出的反馈通常是明显或相对安全的内容。真正有价值的反馈——可能改变你轨迹的那些——常因尴尬而未被说出。
"我能做哪件不同的事来提升效能?"这是个神奇问题。问你的经理,问信任的同事,问项目合作者。你会得到惊讶的答案,有些会是改变游戏规则的关键。
但你必须真心想听答案,真诚开放。人们能分辨你是该问而问还是真诚求进。若他们感到防御,会给你安全无用的回答;若感到真诚开放,可能告诉你宝贵信息。
这联系到我认为可能是职业最重要元技能的更广层面:自我认知。你需要诚实面对自己的优势、劣势、差距、盲点。
我多年自以为擅长估算工作。其实不是,我常乐观两到三倍。但没意识到,因总为每次错误估算找借口:需求变了、有意料外复杂度、别人阻碍了我。总是外部原因。
直到经理给我看六个月内估算与实际对比的表格,我才不得不面对规律。哦,我只是不擅长,不是运气差,是技能差距。
一旦承认,我就能改进。我开始自己追踪估算与实际,加入缓冲,将工作拆解更小以更好掌控。我估算能力提升了——不完美,没人完美,但可用了。
但只有停止找借口、对自己诚实后,我才能改进。
自我认知也意味了解你的工作风格。你上午还是下午状态好?需要大块不被打扰时间还是易切换上下文?通过说话还是安静思考处理?如何应对压力?哪种问题让你精力充沛哪种消耗你?
这些不在任何教程里,但极大影响你的效能。我是上午需要大块不打扰时间处理复杂工作的人。一旦理解这点,我开始坚决保护上午,会议安排下午,效率飙升。但我曾多年对抗自然节奏,以为应能随时有效工作。
了解自己也意味了解你的触发点。什么让你焦虑?什么让你关闭?什么让你拖延?同样非教程内容,但与实际完成工作高度相关。
当范围不清时,我很难开始工作。问题太模糊会永远拖延。一旦意识到这点,我建立了强制机制:在开始任何重要任务前,写一段描述完成状态的文字。这点结构足以让我脱困。但我必须先注意到这模式。
所有这些——沟通、判断、自我认知、政治理解——汇聚成公司极度想要却难以言说的东西:职业成熟度。
职业成熟度无关年龄。我共事过22岁具备的和45岁缺乏的人。它关乎担当,关乎超越眼前任务思考工作如何融入大局,关乎让周围人更轻松,关乎成为别人想共事的人。
实践中职业成熟度的体现:
你不只完成任务,还问任务是否合理。在错误需求变成糟糕代码前提出质疑。在问题便宜解决时早期识别,而非昂贵时晚期发现。
你主动沟通。若受阻,立即说明而非三天后被问及时。若将错过截止期,尽早示警而非前一天。若看到风险,即使不归你管也提及。
你在范围内决策,超出范围时适当上报。不用小事烦经理,也不在真空中做重大架构决策。根据情况和风险校准。
你文档化事物。写清晰提交信息,注释晦涩难懂的部分,更新Wiki。做让所有人更轻松的枯燥工作,即使感觉不像"真正"编码。
你助他人成功。做用心的代码评审,指导初级开发者,分享知识,让团队非仅自己更好。
你向上管理。让经理知情而无需微管理你。理解他们的工作也难,在可能时让其更轻松。
你建立关系。认识其他部门的人。明白周五下午4点需要帮助时,友好的运维同事比仅通过简洁工单互动的人更有助。
你考虑业务。理解公司需盈利,每个决策有权衡,考虑显性和隐性成本。不只为技术优雅优化,更为业务价值优化。
这些都不光鲜,不是人们想象中开发者的样子。但正是这些决定谁晋升谁停滞。
我多次目睹:两个技术相似的开发者,一个快速晋升、获有趣项目、加薪,另一个停滞、沮丧、可能最终离开。差异很少在技术,而在这些其他方面。
令人沮丧的是?停滞者常不懂为何,以为技术强却被忽视。他们没意识到技术能力是入场券,超过一定基线后不再是区分因素。
公司愿意买单——他们真正看重的是让生活更轻松的人。降低风险的人,在模糊中创造清晰的人,可托付重要工作的人,让周围人更有效的人。
这才是真正技能组合。职位描述几乎不提,因难表述。"必须能写整洁代码"易写进招聘帖,"必须有判断力知何时完美是好的敌人"难量化。
但面试流程试图评估的正是这些,即使不明说。行为问题、无单一正确答案的系统设计题、如何处理冲突或模糊的问题——他们想弄清你是否具备职业成熟度。
关于职业成熟度:你可培养它。这不是天赋,但必须有意识地关注工作发生的元层面,不仅工作本身。必须从自己和他人的错误中学习,必须愿在尝试新方法时不舒适。
当我开始积极提升这些——真正关注沟通、利益相关者管理、团队人力动态——我的职业轨迹改变了。非一夜之间,需要时间,但机会开始出现,人们开始寻求我的意见,经理拉我参与更早期讨论,项目挫折减少因我更善预防问题而非仅应对。
我继续编码,学习新技术,保持技术敏锐。但我不再视这些为主菜,它们必要但不充分,是基线非区分因素。
我多希望十年前有人告诉我这些。"是的,学编码,但也要学沟通、周旋组织、管理利益相关者、应对模糊、平衡竞争优先级、给予接受反馈、理解业务背景。"本可节省多年对为何技术卓越不够的困惑。
但可能我当时不会听,可能这必须通过经历学习,可能你需几年沮丧于聪明代码未达目标后,才准备好听职业成功还有这完整另一维度。
若你读此文且处职业早期,我望你认真对待。勿误以为再多教程、认证、框架是解锁下一关的关键。不是。下一关来自发展这些元技能。
关注资深者如何运作。不仅他们编什么码,还有如何沟通、主持会议、处理冲突、决策、时间管理、与非技术利益相关者互动。这才是真正学习所在。
提问。不仅如何实现的技术问题,还有流程、背景、原因的问题。"为何构建这个?""谁会用?""不构建会怎样?""替代方案?"这些问题看似简单,却揭示如何更高层次思考工作。
自愿承担舒适区外任务。主动演示、写文档、帮助新人入职。这些感觉像偏离"真正工作",实则是技能构建机会,迫使你沟通、思考用户体验、从不同视角看系统。
寻找导师。不仅为技术技能——你可从Stack Overflow获——还为职业导航。找你想成为的人,问他们如何到达。若你真好奇并尊重其时间,多数人惊人地愿帮忙。
对自己耐心。这些需时间,你会犯错、误读情况、过度或不足沟通、错判优先级。没关系,这是学习过程。关键是从中学习而非归咎运气或他人失败。
另一重要却少谈的事:照顾好自己。职业倦怠真实存在。持续学习、随时待命、更快交付、少投入多产出的压力真实而强烈。若过度劳累,其他技能都无关因你无法正常工作。
我艰难学到这点。两年多每周工作60+小时,随时可用,以能处理多少为荣。然后我撞墙了,很重。无法专注,解决通常易解的问题困难,易怒疲惫犯错。我花了三个月时间,刻意保持正常工作时间,并真正地休息,才慢慢恢复过来。
公司说想要工作生活平衡,但激励结构常反向推动。总是可用的人得紧急项目,立即回应的人被视为可靠。易陷入"更努力是成功之路"的陷阱。
但可持续成功需要边界,需要有时说不,需要保护时间和精力,需要认识到你不是产码机器——是资源有限需战略管理的人类。
我认识最有效的人非工时最长者,而是可持续工作、有工作外生活、以新鲜而非疲惫状态处理问题的人。他们单日产出或少,但日复一日年复一年一致,这一致性会复利。
说实话,工作外有兴趣和关系让你工作更好。给你视角,防你将全部身份系于工作,从而在出错时少防御,暴露你于不同思维方式,让你成为更有趣的同事。
所以,是的,发展这些职业技能。但也去攀岩、玩音乐、读小说、志愿活动或任何带给你快乐的事。别让重复性的工作吞噬一切。顶端的人非因牺牲其他而在那,而是因找到不牺牲一切仍有效的方法。
回顾我至今的职业,模式清晰。成长非来自教程,非来自学的框架或掌握的语言,而来杂乱的 human 经历。来自交付失败的东西并理解原因,与难相处的人共事并学会周旋,犯错并学习接受反馈,缓慢痛苦地培养关于什么重要什么不的判断力。
教程给我基础,让我入门。但之后发生的一切——所有真正学习、实际成长、公司真看重愿买单的技能——来自做工作并关注工作如何实际运作的元层面。
若要我留给你一件事,那就是:技术技能必要但不充分,是入场费非成功路。这行业真正成功来自技术能力与职业成熟度的结合。而职业成熟度无法从教程学,需通过经历、有意练习、关注游戏下的游戏来培养。
所以,继续学习、编码、保持技术敏锐。但也发展其余。学沟通、周旋组织、管理利益相关者、思考业务价值、应对模糊、给予接受反馈、在不全信息下决策、可持续照顾自己。
这才是真正课程,是公司真愿买单的,是当其他GitHub星数相同者困惑为何停滞时推动你职业前进的。
若你读此文想"但我只想编码"——我懂。我曾同感。但秘密是:发展这些技能不意味编码减少,而是让你在更有趣问题、更多自主、更好薪酬、更优团队上编码。意味你更少因组织功能障碍沮丧,更多时间实际构建重要的东西。
选择不在"技术性"与"职业化"间,而在"孤立技术性"与"以在真实世界创造真实价值的方式技术性"间。而真实世界杂乱、人性、政治、模糊。蓬勃发展的开发者是拥抱而非抵抗这点的人。
所以拥抱它。学教程不教的技能。成为不只写好代码,更让好事情发生的人。这才是公司真正寻找的,是他们愿买单的,是能构建你想要职业的。



随时随地看视频