ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

从“术”到“道”:技术哲学观如何塑造架构决策与成长路径

从“术”到“道”:技术哲学观如何塑造架构决策与成长路径 1. 为什么写了这个项目我在技术行业摸爬滚打了十几年从写第一行代码开始到带团队、做架构、review方案最常被问到的问题不是“这个功能怎么做”而是“你是怎么一眼看出问题所在的”。老实说这种问题很难三言两语讲清楚因为答案藏在一个不太容易量化、却又真实存在的东西里——技术哲学观。这套哲学观不是鸡汤也不是故弄玄虚的概念它直接决定了你看一个系统的层次。同样的一个线上故障有人看到的是“日志报错”有人看到的是“数据不一致”还有人看到的是“整个团队对状态管理的认知出现了偏差”。三个层次对应的就是“术”“法”“道”的区别。这个项目我琢磨了很久核心就一句话把技术能力从“会用工具”提升到“理解本质”再进一步到“形成自己的判断框架”。这篇东西适合所有写代码的人看不管你是刚入行一年还是已经十年经验。如果你正在经历“什么都会但总觉得自己在搬砖”的阶段或者带团队时觉得“明明大家都很努力但设计出来的东西总差一口气”那你需要认真地琢磨一下从“术”到“道”这件事了。我不会讲什么大道理只把这些年踩过的坑、想明白的事、以及那些真正改变我工作方式的思考路径一五一十地写出来。2. 技术成长的三个阶段“术”“法”“道”2.1 “术”的阶段别小看基本功“术”是什么很简单就是你会什么工具、写过什么代码、调过什么接口、部署过什么环境。这个阶段是所有人必经的起点特征是“能跑就行”。我刚工作那会儿最重要的是把需求变成能运行的代码然后保证它不出bug。那时候我觉得“技术好”等于“会得多”会在Stack Overflow上找到答案比什么都强。“术”的阶段最典型的学习方式就是“抄”。看到一个好的写法搬到自己的项目里遇到一个报错搜索解决方案直接粘贴。这也确实是学习的第一种有效方式但如果你一直停留在这个阶段就会陷入“知识很多思路很少”的困境。我见过不少同事把框架的配置背得很熟但换个场景就完全不会了因为他们的理解停留在“这么做能行”不知道为什么能行。基本功的意义恰恰是在“术”阶段奠定的。数据结构、算法、操作系统、网络协议、编码规范、调试技巧——这些看起来枯燥的东西是你后续所有抽象思考的原材料。没有“术”的积累谈“道”就是空中楼阁。但这里有个关键认知要提前摆正“术”是必经之路但绝不是终点。如果你干了三五年还在为每行代码的格式纠结或者还在靠搜答案才能完成日常开发那大概率是卡在了“术”的层面上。2.2 “法”的阶段开始建立方法论“法”是什么是做事的方法、套路、模式。到了这个阶段你不再满足于“能跑”而是会去想“怎么跑得更稳”“怎么设计才能让下一个功能更容易加进来”。这时的关键词是“抽象”和“复用”你会开始总结哪些代码是重复的哪些逻辑是共通的哪些问题本质上是一类问题。我印象很深的一个转变是我第一次大规模重构一个旧系统。在那之前我看代码都是一行一行看的重构时发现根本看不过来。后来我逼着自己先画模块关系图先理清数据流和依赖方向再去动具体的代码——结果发现90%的改动其实都集中在少数几个模块上其他都是连锁反应。“法”的核心就是这种先结构后细节的思维习惯。这个阶段很多人容易走进一个误区迷信设计模式觉得“套上模式就是好代码”于是凡是写类都要搞工厂、搞单例、搞代理、搞观察者最后代码复杂度翻了几倍。真正的“法”是知道什么时候不用模式而不是滥用模式。我后来带项目时最经常跟新人说的一句话就是“你写这个抽象之前先问自己一个问题——如果这个模块后续三年都不会变你还会这样写吗”2.3 “道”的阶段形成自己的判断框架“道”不是一个可以被直接“学会”的东西更像是一种惯性。当你积累了足够的“术”提炼出有效的“法”然后反复实践大量场景之后你会在头脑中形成一个隐形的判断系统。看到任何技术方案你会自动地评估它的取舍、风险、演进路径而不是仅仅看它“好不好”。“道”层面的几个典型表现我总结了一下面对一个新框架你第一反应不再着急学API而是先猜它的设计假设和约束场景。面对一个线上故障你不满足于解决眼前问题而是追问“这个问题暴露了系统/团队/过程中的哪个裂痕”。面对技术选型你不会因为“这个技术很火”而选它也不会因为“这个技术很老”就否定它你关心的是它在你的特定上下文里是否成立。面对代码评审你关注的不再是“风格怎么样”而是“这个改动将引导系统走向哪里”。从“术”到“法”到“道”跨度不是靠时间堆积自动完成的。我见过十年经验但依然在“术”层面打转的人也见过四年经验就已经很有“道”味的年轻人区别不在于智商而在于你是否刻意地做了那几次关键跳跃。接下来我就把每次跳跃的具体方法拆开来讲。3. 从“术”到“道”的四次关键跳跃3.1 第一次跳跃从“解决问题”到“定义问题”大多数人的技术生涯是从“解决已知问题”开始的需求下来了照着做bug出来了修掉。这很好但如果你一直只做这件事你的思考模式会被绑定在“给定的问题框架”里永远只是框架内的高效执行者。我第一次意识到这个问题是处理一个性能瓶颈。当时的业务方反馈说“接口太慢需要优化”。我花了两天时间加了缓存、调了索引、缩减响应体确实快了不少。但业务方的负责人后来跟我说了一句“其实我们想要的根本不是接口更快而是想知道用户到底有没有完成支付我们得在半分钟内确认这件事。”那一瞬间我愣住了。原来我一直在优化一个被错误定义的问题——接口速度根本不是关键数据实时性和确认链路才是。从此以后我养成一个习惯接到任何任务先花十分钟问“要解决的本质问题是什么”。不要急着写代码不要急着给方案先把问题定义清楚。“道”的第一步就是能够跳出现有的“问题陈述”去看它背后真正的诉求。能做到这一点你已经和80%的开发人员不一样了。3.2 第二次跳跃从“记住结论”到“推导结论”“术”阶段最大的特点是被动接受结论框架文档说这样配置性能好你就这样配同事说这段代码要加try-catch你照做。你积累了大量的“结论”但不知道为什么。这就像一个人会背很多菜谱却不懂火候和食材之间的物理化学关系离开菜谱就做不了菜。要完成这次跳跃你需要培养一个习惯当一个结论出现在你面前的时候先自己推理一遍“这个结论背后的因果链是什么”。举个例子别人告诉你“用连接池能提高性能”你就要推一下连接池减少了TCP握手的开销复用了已有连接但它也带来了连接耗尽的风险、以及事务隔离的复杂度。这样推完一遍你不仅记住了连接池你还理解了它的边界下次碰到“到底要不要用连接池”这个问题时你就有了判断力。我自己常做的刻意练习是“复盘反转”——在看到一个技术方案或架构图之后尝试画一张“如果不用这个方案会怎样”的推导图列出所有可能恶化的点。这个练习强迫我理解方案的“病因”而不是“症状”长期做下来会发现自己对新方案的理解速度明显加快。因为你在接触每个方案时都在和它的基本原理对话而不是和它的宣传文案对话。3.3 第三次跳跃从“专注技术”到“理解业务”很多技术人觉得自己只负责“实现”业务是产品经理的事。但如果你真想从“法”跃升到“道”业务理解是你绕不过去的坎。技术方案之所以成立不在于它本身多精巧而在于它适合当下的业务阶段、团队阶段和数据阶段。一个3人团队用微服务是大炮打蚊子一个300人团队用单体是自缚手脚。同样的技术在不同业务上下文里完全是两种结果。我见过太多因为不懂业务而做出来的“正确但无用”的系统。有些架构师设计了非常完善的消息队列、事件驱动、分布式事务方案结果业务核心是“快速上线验证一个新点子”这些设计全变成了沉重的包袱。“道”层面的技术判断首先要问的不是“技术选型对不对”而是“这个业务现在最需要的非线性突破点在哪里”。要培养业务理解力我的建议是把自己代入几个不同的角色如果是运营这个系统怎么用最顺畅如果是CEO这个系统投入产出比怎么算如果是客户这个系统的哪个环节最影响体验当你习惯了这些视角你做的技术方案会自然带上“目标感”而不是只带着“功能感”。3.4 第四次跳跃从“自我验证”到“自我否定”这个跳跃是最疼的也是很多人一辈子跨不过去的。因为技术的积累会让你越来越自信自信是好事但过度自信就是封闭。“道”有一个非常重要的特质永远保留“我可能错了”的悬念。我刚做架构时特别喜欢给自己的方案辩护别人提反对意见我第一反应是找理由反驳。后来几次线上事故和推倒重来的经历让我意识到越是经验丰富的人越容易在“惯性判断”里翻车。慢慢地我养成了一个习惯每次提出一个技术方案之后让团队里最不愿意给面子的人来做“反对者”专门找方案的漏洞。用这种方式很多潜在的风险在方案评审阶段就暴露了省去了后面大量返工的痛苦。自我否定的另一层含义是愿意推翻自己已有的成果。我自己就亲手推掉过一个运行良好的老架构因为虽然它稳定但它的设计边界已经无法支撑新的业务方向。承认“我之前的判断不适应新场景”并不丢人反而是“道”成熟的一种标志。真正固步自封的往往不是新手而是那些已经取得过一些成绩的人。4. 技术哲学观在实际工作里的四个实战场景4.1 代码评审中最该看的东西很多人做code review把精力放在变量命名、格式统一、注释是否完整上这些不是不重要但它们属于“术”的层面。一个站在“道”层面上的评审者注意力应该放在这几个地方这行代码将把系统带到哪里去如果每次评审都只关注局部正确代码库会变成每一块都正确、但整体方向混乱的“拼凑物”。这个实现是在移除复杂度还是在搬运复杂度好的设计会让整个系统的认知负担逐日降低坏的设计只是把复杂堆到一个新的角落。如果需求变化20%这个代码需要改动多少一个好的抽象应当能以“线性修改”应对需求变化如果改一处需求需要连带改七八个文件那说明抽象边界选错了。我后来在带全栈团队时会专门在评审会议上问一个问题“不考虑这个PR本身的正确性如果我们合并了它三个月后我们的系统会因此变得更好了还是更差了”这个问题看起来有点虚但它逼着所有人从“短期正确”跳到“长期演化”的视角。技术哲学观不是空中楼阁它就体现在这种每日常规决策的偏好里。4.2 技术选型时问自己的几组问题技术选型是最能暴露一个人技术哲学观的场景。同样面对一个“缓存选型”问题只知道“术”的人会查“Redis和Memcached的区别”有“法”的人会列对比表格而心中有“道”的人会先问你希望这个缓存解决哪个具体痛点是读多写少还是突发流量如果这个组件完全不可用你的系统会怎样可不可以优雅降级团队里有多少人熟悉这个技术栈如果核心维护者离职后续怎么办这个组件在未来的12个月内会随着业务数据增长出现什么瓶颈付出这个学习成本换来的收益是不是目前最值得的投资说一个我经历过的反面案例。之前有个项目追求“技术新潮”引入了微服务、容器编排、服务网格等一系列复杂组件上线之后光是排障就耗掉了团队大半精力。后来复盘时我们发现整个业务同时在线人数峰值也不过几百人原本用一个相对简单的单体加上合理的数据库设计就能解决问题。那次教训让我彻底明白“道”的核心是匹配不是堆砌。技术的价值不在于复杂度高不高而在于它是不是与当前的问题和资源形成最合理的关系。4.3 系统设计中的“取舍”智慧系统设计没有完美方案只有取舍方案。但怎么取舍背后是价值观的问题。举个例子两个方案A方案代码复杂度低、上线快但后续扩展需要重构B方案代码结构优雅、扩展方便但开发周期长当前业务能不能等到那天不同团队会选不同答案这没有绝对对错但选择背后体现的是你对“时间”“成本”“风险”“团队成熟度”这四个变量的判断权重。“道”层面的取舍还有一个特点会主动配置“冗余”。工程上冗余看似“浪费”但它增加了系统的容错性和可演进性。不管是代码里的重试机制、数据上的备份还是组织里的AB角制度、方案上的Plan B都是在为“不确定性”买单。没有这种买单意识的系统一旦遇到异常情况就会显得特别脆。我自己做系统设计时有一个习惯把“未来一年内极有可能发生的变化”明确写下来每做一个设计决策都问一句“如果这个变化发生了当前决策还能不能站得住”。这个习惯让很多东西从“看起来优雅”变成“确实经得起变化”。技术哲学不是抽象的它就藏在每次“要不要加一层抽象”“要不要预留接口”这类小决定里。4.4 团队协作中“道”的传递方式个人有技术哲学观团队也可以有。但“道”是一件很难灌输的东西你不能发文档让员工背诵“我们的技术理念”因为那会变成没人遵守的口号和废话。“道”的传递只能靠示范和对话。我在团队里最常用的方式就是“复盘对话法”项目结束后我们不只复盘流程和结果还会挑出关键的技术决策点大家一起聊聊“当时为什么这么选”“有没有其他可能”“如果重来一次会怎么改”。这个过程不是要争对错而是让每个人在具体场景里感知“道”的判断逻辑。经过几十次这样的对话团队里确实有人开始主动用同样的方式思考了效果比喊口号好得多。另外作为技术负责人你有义务在关键节点说“不”。不是说不能通融而是有些方案虽然能解决眼前的问题但它传递出去的价值导向是“走捷径是可以接受的”。你一旦默许了一次技术债的绑架后面就再也刹不住。哪怕有时候要顶住业务压力也要守住这个底线。时间久了团队会形成一种自然的默契我们不会为了快牺牲长期健康。这种默契正是团队层面“道”的表现。5. 怎样主动修炼技术哲学观5.1 保持足够的深度阅读与思考输入“道”不是凭空掉下来的它需要大量的高质量输入作为思维的燃料。但这里的阅读不单指技术书籍也包括数学、哲学、经济学、设计学、心理学等。之所以提这些看起来“无关”的东西是因为技术问题最终都是系统问题而系统的规律往往在别的学科里以更纯粹的方式出现过。比如经济学里的“边际效应”对应到缓存优化就是“提升每单位缓存的增量收益递减”生物学里的“稳态”对应到系统设计就是“自动调节与抗扰动”哲学里的“奥卡姆剃刀”对应到架构决策就是“如无必要勿增实体”。这些跨领域的类比不是装饰它们真的会在关键时刻帮你找到一条没人走过的路。我自己的阅读习惯是“一本技术书配一本非技术书”。技术书教“术”非技术书练“道”。常见的技术书看目录和关键章节就够了而那些非技术经典要逐字慢读。这个习惯坚持了几之后最明显的变化是表达能力变好了能把复杂技术问题用生活化的类比讲给非技术人员听这对跨部门协作的帮助特别大。5.2 用写作倒逼思考的深度写作这个事几乎每个人都知道重要但极少有人真正坚持下来。但我想说如果想提升技术哲学观没有比写作更好的路径因为写在纸上的过程就是在“逼”你把自己模糊的念头变成有结构的判断。拍脑袋觉得“这个方案好”下笔时你就得回答“好在哪、代价是什么、什么情况下不成立”。我坚持写了大概四年的技术博客和个人复盘笔记风格以“某个技术决策的推导过程”为主。刚开始写得很烂全是“今天做了什么、遇到什么问题、怎么解决的”流水账。但写到一百篇之后我开始能在动笔前就在脑海里构建文章的骨架也慢慢发现自己对很多问题的“直觉”可以用清晰的逻辑表达出来了。那是一种非常美妙的变化直觉不再是不可言说的玄学而是可以被分析、被传递、被检验的判断体系。不需要高产一个月两篇就够。重点不是给别人看而是为了整理自己的思维。哪怕写完之后不发出来光是“要把这件事捋清楚”的意图就能迫使你跳出日常的浅层思考去追问更本质的为什么。5.3 在“教别人”这件事上花时间另一个常被低估的修炼方法是“教别人”。教不是单向输出而是教学相长。你给新人讲一个技术概念如果他听不懂大概率不是他的问题而是你的理解还不够透彻。真正的“懂”是能用三种不同的方式解释同一件事并且每一种都经得起追问。我给团队做过很多次内部分享每次准备分享材料的时候都会发现自己原来有很多“自以为懂但其实经不起问”的细节。为了不在台上出丑我会提前做大量准备工作重新翻源码、查文档、推导参数。这个过程下来我对那个主题的理解深度会远超那些只是听听课的人。“教”还有一种形式是“做Code Mentor”。不是你直接帮别人改代码而是通过提问来引导对方自己发现问题。“你觉得这段代码如果上线最可能在什么场景下出问题”“如果把数据量放大100倍你还会这样设计吗”这种提问式辅导其实就是把你的“道”一点点拆解给他看。你教得越多自己的“道”就越清晰。5.4 刻意设计“跨域场景”来打破单一视角人很容易在“熟练区”里产生舒服感但“道”的进步恰恰来自打破舒服感。你可以主动寻找一些跨领域的场景来“折腾”自己比如参与开源项目、去接一个完全不同技术栈的小需求、参加技术答辩或黑客松。这些活动给你制造了“陌生感”——陌生感是迫使人重新审视原有判断框架的催化剂。我自己有一年断断续续参与了一个开源项目的开发那个项目的生态和我日常用的技术栈完全不一样初期极不适应甚至怀疑自己“白干十年”。但熬过那个不适期之后我再回头看自己的主技术栈忽然看到了很多以前视而不见的“隐含假设”——比如很多框架默认了“强一致性”但我的业务场景明明更适合最终一致性。这不就是“道”的进步吗你能看穿工具的默认设置而不是被它牵着走。所以我的建议是每半年至少逼自己做一件“舒适圈之外”的事。不需要很大可以是写一个简单的编译器demo给某个开源项目提一个非平凡的PR或者在一个你完全不懂的新领域里做一些学习笔记。只要你坚持让自己的大脑定期接触新的复杂性“道”就会在你脑子里悄悄深化。6. 这些年在“术”与“道”之间踩过的坑6.1 坑一以为“术”到一定程度就会自动升维这个坑最隐蔽也是最多人踩的。因为确实有很多“术”的积累会带来“法”的顿悟但如果你一直处于被安排任务、被动执行的状态十年经验也可能只是把一年的经验重复了十次。工作后我发现决定你成长速度的不是项目数量而是每完成一个项目后你有没有主动做“归纳”。不做归纳做了十个项目也只是攒了十次“熟练度”而不是“维度”。要主动升维建议给每个重要项目做三件事写下这个项目中你最大的认知增量是什么写下如果用一句话给下个做类似项目的人一句忠告会是什么写下如果重来一遍你会砍掉哪个环节、增加哪个环节。这三件事坚持做一年你的思维方式会发生肉眼可见的变化。我面试过很多候选人有人做了五年项目但回答问题时视野很窄有人只做了三年却能讲出清晰的架构思路差别就在这。6.2 坑二削足适履地追求“道”而忽略基本功另一侧的问题是把“道”当成一种可以绕开“术”的捷径。这种心态经常出现在工作两三年的人身上他们觉得自己已经“懂了很多道理”于是不屑于写基础代码、不屑于处理琐碎运维、不屑于打磨细节。结果他们的“道”就成了没有地基的空中楼阁一旦遇到需要实实在在解决问题的时候就露馅。“道”不是用来逃避“术”的借口而是让“术”发挥最大效力的放大器。你只有在真的会写代码、会排查问题、能亲手架构一个系统的基础上才有资格谈“术”之上的取舍。如果你还年轻最好的策略是用90%的时间搞扎实“术”用10%的时间刻意思考“道”等基本功足够厚了这个比例再慢慢反转。6.3 坑三拿“技术哲学”当作攻击别人的武器有一种很讨厌的习惯就是有的人学了一点“道”的概念就开始拿它去贬低别人。“你这代码太low”“你没有技术格局”这种话特别容易引起团队反感对解决问题毫无帮助。“道”的本质是包容和权衡不是裁判和否定。我在带团队时碰到过这种情况一位同学很爱在评审会上长篇大论讲理论把一个非常简单的改动上升到“架构哲学”高度搞得大家都很累。后来我找他私下聊他其实是缺乏安全感想靠“名词”来证明自己厉害。我给他一个建议如果你想证明自己对“道”有深刻理解请试着把一次复杂的重构用三句话讲明白且让扫地的阿姨能听懂大致意思。从那以后他真的开始收敛术语、研究本质了。真正的“道”让人变得谦逊因为你越深入越发现技术的可能性远大于你个体经验的边界越知道自己不知道的东西还有很多。6.4 坑四急于给自己贴“大师”标签最后这个坑我自己也差点踩过。当你的经验积累到一定程度、开始被身边人叫“大佬”的时候你会不自觉地进入“专家姿态”发言像在做总纲评论带着审判感对各种新技术都看不顺眼。这是一种非常危险的状态因为“道”的活力恰恰来自于“未完成感”。那个时期有个细节让我警醒有一次我在评审会批评一个年轻同事的设计说完之后我发现他沉默了很久。事后他私信我说“你说的那些漏洞我其实都考虑过只是没有你表达得那么清楚。但你直接否定了我的方案让我觉得自己的想法完全不被尊重。”那次对话让我非常惭愧——我当时只顾着展示自己的“道”却忘了“道”的重要表现之一就是知道“如何帮助对方成长”而不是“证明自己更高明”。所以后来我给自己的一个铁律是永远保持“学生”的心态不管在什么位置、面对什么对象。技术变化太快今天笃定的东西明天可能就被颠覆。真正的“道”是一种带着“可证伪性”的信念它帮你高效行动但随时准备被新的证据修正。这种开放的状态才是从“术”到“道”这条路上最值得追求的东西。7. 我的个人体会与一个小建议写了这么多最想跟大家说的一句话是从“术”到“道”不是一条单行道它更像一条螺旋上升的阶梯。你以为自己在第五层看问题但下一个项目、下一个业务阶段会把你打回第一层重新打磨基本功。这不是退步这是又一次进化的开始。保持敬畏保持好奇别怕被新的现实打脸。如果只提一个可落地的小建议那就是从今天开始找一个你已经很熟悉的技术点试着写一篇“推导型”的文章或复盘不要写“怎么做”只写“为什么这样设计是合理的什么条件下不成立”。写完后拿去给你的同事或同行看看听听他们的质疑。这个过程会让你真实地体验到什么叫“从术到道的维度升级”。希望这篇东西对你有用也希望在未来某个项目里你能感受到那种“看穿一切”的从容时刻。
返回列表