老程序员的护城河:思想与方法,比技巧更耐用
Posted on 六 27 6月 2026 in Journal
| Abstract | 老程序员的护城河:思想与方法,比技巧更耐用 |
|---|---|
| Authors | Walter Fan |
| Category | Journal |
| Status | v0.1 |
| Updated | 2026-06-27 |
| License | CC-BY-NC-ND 4.0 |
老程序员的护城河:思想与方法,比技巧更耐用
短大纲
- 老程序员的护城河,不在“会多少招”,而在“招从哪里来”
- 年龄不是原罪,单一年龄结构才是团队风险
- 道与术不是高低关系,而是方向盘和发动机的关系
- 学习、思考、做事,都要从零散技巧升级为可复用方法
- 随着年岁增长,要学会克制:克制一口吃成胖子的冲动,也克制“多快好省”的幻觉
- 知识体系不是收藏夹,而是一张能定位、能迁移、能校验的地图
- 团队合作里,少问别人能为我做什么,多问我能为别人补上什么
- 最后给一套自查清单:我到底靠什么吃饭,又该从哪里发力
一、会几道题,不等于有护城河
前些年面试多,LeetCode 刷题很热。两个人见面,不问“最近身体怎么样”,先问“你刷到多少题了”。气氛很像武林大会,大家背着剑匣,互相打听对方会几路剑法。
刷题当然有用。算法和数据结构也当然重要。一个程序员如果连基本复杂度都没概念,写出来的代码很容易像没装刹车的自行车,下坡时才知道害怕。
但我越来越觉得,一个老程序员真正的护城河,不是“我会几道题”“我熟几个框架”“我背过几种设计模式”。这些是武器,是招式,是术。真正让你二十年后还站得住的,是另一层东西:
- 你胸中的丘壑:看问题有没有全局感,知道山在哪里,水往哪里流。
- 你心中的准则:什么事能做,什么事不能做,什么便宜不能占。
- 你脑子里的技术体系:一个新问题来了,能不能把它放到合适的位置上。
- 你对自己的校准:知道自己几斤几两,知道短板在哪里,不靠自嗨活着。
- 你对目标的清醒:知道自己想要什么,也知道有些东西不值得拿命换。
年轻时拼招式,没问题。人在江湖,总得先学会出拳。但到了某个阶段,如果还只靠招式,很容易遇到两个尴尬:一是新招太多,学不过来;二是老招过期,靠不住。
老话说得很有意思。一边说“拳怕少壮”,又说“老不讲筋骨为能”;另一边又说“家有一老,如有一宝”,还说“老将出马,一个顶俩”。这几句话放在一起看,并不矛盾。年轻人有年轻人的冲劲、体力、反应速度,老家伙也有老家伙的经验、判断、定力和坑位图。真正的问题不是谁替代谁,而是一个团队能不能把这两种力量放在合适的位置上。
一个公司如果只有 35 岁以下的员工,我觉得是不健康的。短期看,队伍年轻、节奏快、成本低,好像很有战斗力;长期看,容易缺少历史记忆、风险敬畏和复杂局面的压舱石。招人只盯 35 岁以下的公司,很难做成真正厚重的组织。它可能跑得很快,但未必跑得远。
国内有一套很流行的说法:四十多岁还没“升上去”,还在一线编码,肯定是水平不行。我不敢苟同。这背后还是那套“学而优则仕”的陈腐逻辑:好像技术做得好,就必须去管人;好像不管人,就说明你不够优秀。可工程世界不是封建科举。一个四十多岁还愿意在一线写代码、看设计、排故障、带新人、守质量的人,如果他真的有体系、有判断、有责任感,那不是组织的负担,反而是组织的财富。
当然,年龄本身也不自动带来价值。老不是勋章,老而不学、老而固执、老而只会讲当年勇,也没什么可骄傲的。真正值钱的“老”,不是皱纹和工龄,而是见过周期、吃过亏、还愿意更新自己;不是靠资历压人,而是能在关键时刻帮团队少走弯路。
这时候就得问一句更底层的话:我到底靠什么持续变强?
二、郭靖为什么能超过七个师傅
金庸写郭靖,很妙。
江南七怪教了他很多招式,刀枪剑戟、拳脚暗器,都有。但郭靖学得慢,慢到师傅们经常怀疑人生。换成今天的绩效语言,大概就是“学习曲线不够陡峭,需要 improvement plan”。
可后来他遇到马钰,学了全真派的内功心法,情况开始变了。再往后遇到洪七公,学降龙十八掌,遇到周伯通,学左右互搏和九阴真经相关功夫,整个人就像系统底层换了内核。原来那些看起来笨拙的招式,开始有了根。
文学作品不能当技术论文用,但这个比喻很适合程序员。
江南七怪教的是“术”:具体动作,具体招法,遇到什么情况怎么打。
全真内功教的是“道”的一部分:呼吸、根基、气息、持久力,以及身体内部如何运转。
郭靖后来进步快,不是因为他突然变聪明了,也不是因为他一夜之间开了会员。他有几个东西叠在一起了:
- 底层心法补上了:有了内力,招式才不再是空架子。
- 性格能承载方法:他笨,但肯练;慢,但不滑头;听得进,也做得久。
- 价值观够稳定:他不是为了炫技学武功,而是有守护、担当和取舍。
- 知识开始成体系:招式、内力、实战、心性,慢慢连成一张网。
程序员也一样。
你会一个框架,是招式;你理解它解决什么问题、牺牲什么、边界在哪里,这是心法。你会写一个排序算法,是招式;你知道什么时候该排序、什么时候该建索引、什么时候该改数据模型,这是心法。你会用 AI 生成代码,是招式;你能判断生成的代码能不能进 production,这是心法。
很多人输,不是输在不努力,而是一直在练招式,没有补心法。每天都很忙,像 for 循环里忘了退出条件,CPU 烧得很热,结果状态没变。
三、道与术:不是谁高谁低,而是谁管什么
一说“道与术”,很容易说玄。好像“道”就高级,“术”就低级;好像懂道的人都在云端喝茶,学术的人都在地上搬砖。
我不这么看。
术很重要。没有术,道就是嘴上的云。一个架构师如果只会讲“高内聚低耦合”,但写不出一段干净的代码,排不了线上故障,做不了容量估算,那就像武馆门口挂着“天下第一”,里面连沙袋都没有。
道也很重要。没有道,术就容易变成乱拳。你会很多工具,但不知道该解决什么问题;你会很多模型,但不知道适用边界;你会很多沟通技巧,但心里没有诚意,最后说得越漂亮,越像包装精美的空盒子。
我更愿意这样分:
| 层次 | 解决的问题 | 程序员例子 | 风险 |
|---|---|---|---|
| 道 | 方向、边界、价值、长期目标 | 为什么做、该不该做、做到什么程度 | 说空话,脱离现实 |
| 法 | 方法论、流程、模型 | 需求拆解、设计评审、复盘机制、学习路径 | 变成形式主义 |
| 术 | 具体技能、工具、动作 | 语言、框架、算法、命令、调试技巧 | 追新上瘾,碎片化 |
| 器 | 外部工具和平台 | IDE、AI Agent、云服务、CI/CD | 工具依赖,失去判断 |
道不是替代术,术也不是反对道。道像方向盘,术像发动机。只有方向盘没有发动机,车不动;只有发动机没有方向盘,车会冲进沟里。
老程序员的优势,应该是这四层能打通:知道为什么,懂得怎么拆,会亲手做,也善用工具。
四、学习的方法:不要只收集,要进入身体
我以前也喜欢收藏。文章收藏,视频收藏,书单收藏,工具收藏。收藏夹越来越厚,人却没变厚。后来发现,收藏这件事最危险的地方在于:它会给大脑一种“我已经拥有了”的错觉。
其实你没有拥有。你只是把别人的东西放进了仓库,还没拆箱。
真正的学习,至少要过四关。
第一关:定位。
这个知识解决什么问题?属于哪个层次?是事实、模型、方法,还是价值判断?
比如学 Kubernetes,不要一上来就背 YAML。先问:它到底在解决什么问题?调度、隔离、声明式配置、服务发现、弹性伸缩、故障恢复,这些分别对应什么场景?如果这个问题不用 Kubernetes,过去怎么解决?
定位错了,后面越努力越偏。
第二关:连接。
它和我已经知道的东西有什么关系?是同类问题,还是相反思路?能不能跟操作系统、网络、数据库、分布式系统里的老概念连起来?
新知识如果不能接到旧知识上,就像一个孤儿对象,没人引用,很快被 GC 掉。
第三关:验证。
我能不能用它解决一个小问题?能不能讲给别人听?能不能找出它不适用的场景?
“我看懂了”不算数。“我能用、能讲、能指出边界”,才算开始入门。
第四关:内化。
内化的标志是:下次遇到相似问题,你会自然想起它,而且能改造它。
这一步很慢。慢到不适合发朋友圈。但老程序员的很多优势,恰恰就长在这些慢地方。
五、思考的方法:先把问题摆正
很多技术争论,吵到最后,不是答案不同,而是问题根本没对齐。
一个人问“要不要上微服务”,另一个人回答“微服务能提升团队自治”,第三个人说“微服务会增加运维复杂度”。三个人都没错,但可能没人先问:我们现在的问题到底是什么?是部署慢?边界不清?团队协作卡?还是老板觉得“微服务”听起来比较现代?
思考的第一步,不是找答案,是摆正问题。
我现在遇到复杂问题,会强迫自己写下五个问题:
- 目标是什么? 如果这件事成功了,外部能看到什么变化?
- 约束是什么? 时间、人力、历史包袱、安全、合规、兼容性,哪个最硬?
- 假设是什么? 我现在相信的东西,有哪些其实没有证据?
- 代价是什么? 这个方案引入的新复杂度,谁来长期买单?
- 边界是什么? 哪些场景不解决?哪些需求先不碰?
这五问看起来朴素,但很救命。它能把很多“技术洁癖”拉回现实,也能把很多“拍脑袋决策”按在桌上。
思考还有一个要点:把自己放进问题里。
很多人讨论方案时,好像自己只是旁观者。这个系统未来谁维护?这个报警半夜谁接?这个接口出问题谁解释?如果答案里有你的名字,判断就会诚实很多。
工程不是做题。做题错了扣分,工程错了有人半夜被电话叫醒。老程序员的判断力,往往就来自这些被叫醒过的夜晚。
六、做事的方法:从“完成任务”到“留下能力”
年轻时做事,最容易追求一个字:快。
快当然好。慢吞吞不是美德,尤其在工程团队里,拖延会像技术债一样滚利息。但如果一个人只追求快,很容易每次都把任务做完,却没有留下任何能力。下次遇到类似问题,还是从头乱打一遍。
我现在更看重四个动作:
1. 先定义完成。
不是“代码写完”叫完成,也不是“PR merge”叫完成。真正的完成,至少包括:功能可用、边界清楚、测试覆盖关键路径、监控和日志能支持排障、相关人知道变化。
没有完成定义,做事就容易做成“我以为好了”。
2. 小步推进,快速反馈。
复杂任务不要憋大招。先做一条主路径,先让风险暴露,先让别人看见。很多项目失败,不是因为大家不努力,而是坏消息出现得太晚。
3. 留下痕迹。
重要决策写下来,关键假设写下来,踩过的坑写下来。不是为了写文档而写文档,而是为了让未来的自己少骂今天的自己。
4. 做完复盘。
复盘不要只问“哪里做得不好”,还要问“什么判断是对的,为什么对”。很多人只复盘失败,不复盘成功,结果成功变成运气,失败变成阴影。
做事的方法,其实是在训练一个闭环:目标、行动、反馈、修正、沉淀。闭环跑起来,人就会长。闭环跑不起来,只是在消耗时间。
还有一个词,年轻时我不太喜欢,年纪越大越觉得重要:克制。
克制自己想要毕其功于一役的冲动。写代码也好,写文档也好,做系统也好,人总想找一条捷径:最好今天想明白,明天写完,后天上线,顺便把技术债也还了,把文档也补了,把团队认知也拉齐了。想法很美,现实通常不配合。
饭要一口一口吃,吃太快会噎着。代码要一段一段写,文档要一节一节补,系统要一层一层搭。万丈高楼平地起,心急吃不了饺子。老话听起来土,但线上系统不嫌它土。你越想“一把梭”,越容易把风险、边界、沟通、测试都压缩到最后,最后不是多快好省,而是又慢又贵还返工。
AI 时代也是这样。
AI 能让你十分钟生成一份设计文档,一小时铺出一堆代码。但生成得快,不等于想清楚;铺得多,不等于能维护。越是工具快,越要有人慢下来做校验:目标对不对,接口稳不稳,异常路径有没有想过,别人接手时能不能看懂。AI 可以帮你多跑几步,但不能替你消化。吃太快会噎着,知识和代码也是。
所以我现在更愿意把“快”拆开看:起步可以快,反馈可以快,试错可以快;但承诺要慢一点,合并要稳一点,核心判断要多想一晚。克制不是磨蹭,而是知道哪些地方不能省。
七、做人的准则:技术越强,越要有边界
老程序员还有一条护城河,听起来不像技术,但非常要命:做人。
不是说要圆滑,不是要八面玲珑,也不是要把办公室活成宫斗剧。我的理解很简单:技术越强,越要知道什么事不能做。
比如:
- 不拿自己看不懂的代码糊弄上线。
- 不为了显示自己厉害,把简单问题复杂化。
- 不在评审里靠资历压人,尤其不要压年轻人。
- 不把安全、隐私、稳定性当成“以后再说”。
- 不为了短期绩效,给团队留下长期烂摊子。
- 不在自己不确定时装确定。
这些东西听起来像做人,其实也直接影响做事。一个没有边界的人,技术越强,破坏力越大。一个愿意承认不知道、愿意补证据、愿意为长期负责的人,哪怕暂时慢一点,团队也更敢把重要事情交给他。
团队合作里还有一层克制:不要老想着别人该为你做些什么,要多想自己能为别人补上什么。
很多协作问题,表面上是接口没定义清楚、需求没讲明白、排期没对齐,底下其实是每个人都站在自己的坑里等别人来填土。后端希望产品把需求写细一点,产品希望研发主动追问边界,测试希望开发把日志和开关留好,运维希望大家别把不确定性全丢到上线窗口。每个人都有道理,但如果只问“你为什么没给我”,事情就会卡在原地。
更好的问法是:“我能不能先把我这边的不确定性写出来?”“我能不能给下游一个更清楚的契约?”“我能不能在 PR 里多解释两句,让 reviewer 少猜一点?”“我能不能把踩过的坑补进 runbook,让下一个人少摔一次?”
这不是道德表演,而是工程效率。合作共赢听起来像会议室墙上的标语,但真做事时,它就是最朴素的成本优化:你帮别人少踩一个坑,别人也更愿意在你卡住时拉一把。团队里这种互相补位的信用,积累久了,比任何流程都管用。
老程序员最怕什么?不是不会新框架。新框架可以学。最怕的是年纪上去了,脾气也上去了,认知却停在原地;嘴上说“我以前就是这么做的”,心里想“你们这些年轻人懂什么”。
这时护城河就变成了护城墙,把别人挡在外面,也把自己关在里面。
八、知识体系:不要做收藏夹,要做地图
知识体系这个词也容易说大。很多人一说构建体系,就开始画巨大的脑图,语言、框架、算法、架构、数据库、AI、管理、沟通,密密麻麻像地铁线路图。画完很满足,第二天照样不知道该学什么。
我觉得知识体系至少要有三样东西。
第一,主干。
你靠什么吃饭?后端、前端、客户端、数据、AI、基础设施、安全、音视频、协作平台,总得有一条主线。主线不是说别的都不学,而是你知道自己的根在哪里。
一个老程序员如果没有主干,很容易被每一阵风吹走。今天 AIGC,明天 Web3,后天量子计算,听起来都热,最后自己像浏览器开了三百个 tab,风扇狂转,什么都没真正加载完。
第二,结构。
主干上要有层次。以服务端为例,我会把它拆成:编程语言、数据结构与算法、操作系统、网络、数据库、分布式系统、工程质量、安全、可观测性、业务建模、团队协作。
有了结构,新知识来了才知道放哪儿。否则学到的东西都是散落文件,搜索时全靠运气。
第三,病例库。
只收藏概念不够,要收藏案例。线上事故、性能问题、架构取舍、沟通失败、项目延期、一次漂亮的重构、一次糟糕的抽象,都应该进入病例库。
医生靠病例长经验,工程师也一样。真正让你判断变准的,往往不是抽象原则本身,而是你见过足够多“原则在现实里怎么变形”。
所以,知识体系不是为了显得博学,而是为了三个动作:
- 定位:这个问题属于哪一类?
- 迁移:过去哪个经验能借过来?
- 校验:我现在的判断,有没有证据和反例?
能完成这三个动作,体系才算真的在工作。
九、知道自己几斤几两,是很高级的能力
年轻时,人很容易高估自己。解决过几个 bug,就觉得系统不过如此;写过一个模块,就觉得架构师也没什么;看过几篇管理文章,就觉得带团队就是开会和画图。
后来被现实教育多了,才知道“知道自己几斤几两”不是自卑,而是高级能力。
它包括三件事。
第一,知道自己的能力边界。
哪些问题我能独立判断?哪些问题必须请教别人?哪些地方我只是听说过?能把这三类分清楚,就已经超过很多人。
第二,知道自己的情绪触发器。
有的人一被质疑就防御,有的人一遇到 deadline 就粗糙,有的人一碰到权威就不敢说真话。技术判断常常被情绪劫持,只是我们不愿承认。
第三,知道自己的欲望。
你到底想要什么?更高职位,更多钱,更大影响力,更自由的时间,更稳定的生活,还是更有挑战的问题?这些没有标准答案,但不能假装不存在。
不知道自己想要什么的人,很容易被别人拿着 KPI、title、热点牵着走。走着走着,路是别人的,累是自己的。
老程序员的清醒,不是看破红尘,而是看清代价。
十、给自己的护城河自查清单
写到最后,还是落到一张清单。清单不高级,但管用。每隔一两个月拿出来照一照,比临睡前刷十篇“高手思维”有用。
1. 道:我守住了什么
- [ ] 最近一次我为了长期质量,拒绝了什么短期诱惑?
- [ ] 我有没有在不确定时装作确定?
- [ ] 我有没有为了显得厉害,把事情讲复杂?
- [ ] 我的技术判断里,有没有安全、隐私、稳定性的底线?
2. 法:我有没有稳定的方法
- [ ] 遇到复杂问题,我有没有先写目标、约束、假设、代价、边界?
- [ ] 做项目时,我有没有定义“完成”的标准?
- [ ] 做完事情,我有没有复盘并留下可复用经验?
- [ ] 我有没有一套固定的学习流程,而不是只靠兴趣乱撞?
3. 术:我手上的招式还锋利吗
- [ ] 我最近半年有没有真正提升一项硬技能?
- [ ] 我对主语言、数据库、网络、系统基础有没有持续补课?
- [ ] 我会用的新工具,是否已经转化成真实生产力?
- [ ] 我能不能不用 AI,也把核心问题讲清楚、做出来?
4. 体系:我的地图还在更新吗
- [ ] 我知道自己的技术主干是什么吗?
- [ ] 新知识来了,我知道该放到体系里的哪个位置吗?
- [ ] 我有没有维护自己的案例库、错误库、决策原则?
- [ ] 我能不能说清楚:哪些能力五年后还值钱?
5. 自知:我有没有诚实面对自己
- [ ] 哪些事我只是“听说过”,却一直以为自己懂?
- [ ] 最近一次别人指出我问题时,我第一反应是防御还是好奇?
- [ ] 我现在追求的目标,是我真想要的,还是别人说它好?
- [ ] 如果明天 title、工具、平台都变了,我还剩下什么?
总结:护城河不是挖给别人看的
老程序员的护城河,不是简历上多几个关键词,也不是面试时能背出几个漂亮答案。
它更像内功。平时看不见,遇到复杂问题时才显出来:你能不能稳住,能不能分清主次,能不能守住底线,能不能把零散知识组织成判断,能不能在失败后不自欺,在成功后不飘。
LeetCode 要不要刷?要。算法要不要学?要。新工具要不要试?也要。
但别忘了,招式是招式,心法是心法。只练招式,老了会累;只谈心法,不练招式,会虚。真正耐用的成长,是把道、法、术、器一层一层打通,让每一次学习、思考和做事,都能回流到自己的体系里。
郭靖可贵的地方,不是他突然聪明,而是他笨得诚实,慢得扎实,心里有准则,身上肯下功夫。这样的“笨”,其实很高级。
最后留一个问题给自己,也给同路人:
如果把你会的工具和背过的答案都拿走,你还剩下哪些真正属于自己的判断、方法和准则?
那一部分,才是护城河的水源。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。