做技术越久,越发现技术本身没那么重要
干了十几年开发,从最初的C++、Java一路折腾到云计算和AI应用,这几年最深的体会不是哪个框架又多牛了,也不是又优化了多少毫秒的响应时间,反而是一个听起来有点“丧”的结论:技术本身,真的没那么重要。
别急着反驳,我说这话不是劝大家别学技术,恰恰相反。我是说,当我们把技术当成解决问题的手段,而不是目的本身时,很多纠结就突然解开了。刚入行那会儿,我跟大多数人一样,觉得技术就是一切。为了一个技术方案能跟同事争得面红耳赤,为了用上最新版本的语言特性不惜把老项目重构一遍,看到别人用了冷门框架就觉得对方“高级”。那几年确实成长得快,但也累得慌,主要是在一些不值得的地方死磕。
后来参与的项目多了,角色也从执行者慢慢变成了设计者,我才发现一个残酷的事实:在真实的业务场景里,决定一个项目成败的,往往不是技术选型,而是那些技术之外的东西。比如对需求的理解是否到位,比如团队协作是否顺畅,比如在关键时刻敢不敢砍功能、敢不敢推迟上线。技术只是工具箱里的扳手和螺丝刀,真正能把活儿干漂亮的,是那个拿工具的人——他的判断、他的沟通、他对业务的理解。
这篇文章,就想把这些年的想法好好捋一捋。如果你刚工作没几年,可能觉得我在扯淡;如果你也熬过了几个大项目,说不定能会心一笑。不管你现在处在哪个阶段,我希望你看完能有一个感觉:技术要学,但更重要的是想清楚“为什么学、学了干什么用”。
1. 技术能力的真实边界
我们得先承认一个事实:技术能力是有边界的。它能解决的问题,远没有我们想象的那么多。
1.1 技术解决不了的“业务之痛”
我刚带团队那会儿,接手了一个数据可视化的项目。业务方提需求时说得天花乱坠,什么大屏、实时监控、三维展示。我们团队技术底子不错,选型也新潮,用了一堆开源组件,加了各种炫酷动效。结果项目交付时,业务方看了一眼,说“这不是我想要的”。当时我就懵了,需求文档上写得清清楚楚,怎么就不是你想要的了?
后来私下聊了好几次,才搞清楚真实原因。业务方要的不是酷炫的大屏,而是想通过可视化发现数据里的异常,但是原始数据本身质量太差,各种脏数据、重复数据,图做得再好看也是白搭。他们真正缺的,是数据治理的规矩——谁录入、谁校验、谁负责修订。这些是业务规范和管理制度,技术团队能帮忙实现校验脚本,但不可能替他们制定考核标准。
这个case让我印象特别深。技术能帮你看清数据,但数据是什么、业务怎么运转、指标怎么定义,全是业务层面的问题。代码写得再好,也没法帮业务方“想清楚自己要什么”。
1.2 技术选型的“沉没成本陷阱”
做技术的人很容易陷进一个坑里:对一个方案投入了大量时间和感情之后,即使发现它不适合项目,也不愿意换。这个在心理学上叫沉没成本谬误,落到技术上就是灾难。
曾经有个后台管理系统,最开始定的方案是用微服务架构,前前后后忙活了两个月,服务拆了十几个,中间件堆了一箩筐。结果做出来之后发现,这系统每天的访问量也就几百,用单体架构一个实例都绰绰有余。微服务带来的分布式事务、服务治理、部署复杂度,全是在给自己加戏。但那时候已经拆了,再改回去,总觉得前两个月的功夫白费了,团队里也吵了很久。最后我拍板,新版本直接重写成单体,两周搞定,运行得稳稳当当。
这段经历让我明白一个道理:技术选型的第一标准从来不是“新”或“炫”,而是匹配。杀鸡用牛刀不算本事,知道什么时候用牛刀、什么时候用水果刀,才算。做技术久了你就会发现,再牛的架构也顶不住需求的一通乱改,而合适的简单方案,往往能撑很久。
1.3 决定技术上限的“非技术因素”
而且,你仔细观察那些技术大牛,会发现他们厉害的不仅仅是代码写得好。他们能准确预判技术架构未来的走向,能在项目启动时就把风险梳理得清清楚楚,能三两句话就让业务方点头认可方案。这些本事,属于技术,但远超技术。
有一回我跟一个特别资深的架构师合作,他连代码都不怎么写,每天就是在白板上画图。但他画的每一张图,都把业务流、数据流、异常处理梳理得明明白白。他花了两周时间做技术方案,我们团队照着方案写代码,一遍过,几乎没返工。那次给我的触动很大:所谓的技术能力强,不是靠堆代码体现的,而是靠“不写代码”的思考深度。
所以,技术本身的边界在哪里?我的理解是:它能解决“怎么做”的问题,但解决不了“做什么”和“为什么做”的问题。后者,恰恰是项目能不能成的关键。越是往高处走,越需要花精力在技术之外。
2. 从“技术视角”切换到“业务视角”
说句扎心的话:大多数技术人(包括以前的我)都挺高傲的,总觉得自己懂代码就高人一等,看业务的同事就像看傻子。但实际上,业务才是整个项目的起点和终点,技术只是实现业务的手段。
2.1 需求分析里的“潜台词”
做技术的人最怕听到的一句话是:“需求很简单,就是做个某某功能。”通常说出这句话的人,脑子里根本没有细节。而技术人的职责,不仅仅是实现功能,更要帮对方把模糊的愿望变成清晰的方案。
我举个特别简单的例子。业务方说:“帮我做一个导出Excel的功能。”你要是直接答应,那就等着加班改需求吧。你得问清楚:导出多少行数据?数据量大不大?是一次性导出还是按条件筛选?导出的格式有没有模板?是导出当前页还是全部数据?导出之后需不需要自动发送到邮箱?
这些追问看起来很烦,但恰恰是避免后期返工的关键。很多技术人觉得业务方不懂技术,懒得沟通,闷头就开写,结果做完发现完全不是对方想要的,返工两三次,然后开始抱怨业务方需求变来变去。其实,根本原因是你一开始就没挖掘出完整需求。
我自己踩过这个坑之后,养成一个习惯:接需求时先写一份“我理解的业务场景”,用一两百字讲清楚这个功能是给谁用的、解决什么问题、什么情况下触发。发给业务方确认,对方一看,哦对,就是这样。或者,不是这样,是那样。确认之后再动手,效率翻倍。
2.2 技术与业务的双向翻译
技术在业务方眼里,有时候像黑魔法。你觉得很简单的事情,他们觉得难上天;你觉得很复杂的事情,他们反而觉得理所当然。这时候,技术人就要当一个“翻译官”。
比如说,业务方提了个“实时数据大屏”的需求,他根本不知道实时背后意味着什么。你需要用他能听懂的话告诉他:实时可以分三种程度——秒级、分钟级、小时级。每一种的技术成本不一样,价格也不同。秒级意味着需要搭建流处理管道,数据要走消息队列,要有完整的监控体系,成本至少翻三倍。如果只是小时级,只要定时跑批任务就行了,成本低得多。
这么一翻译,业务方立刻明白,然后会做出自己的选择。这个过程里,技术不是难题,沟通和理解才是。很多时候,业务方不是非要最贵最炫的方案,他只是不知道技术上的取舍关系而已。
类似的,反过来的翻译更重要。业务方跟你说了一堆业务术语,你得把他们翻译成技术语言:这个“审核通过后自动同步”听起来简单,实际上要加一张任务表、两个状态机、三个回调接口。翻译清楚了,开发量就有数了,排期也就不虚了。
2.3 “业务思维”倒逼技术方案优化
有时候,技术方案的优化不是从性能入手的,而是从业务规则入手的。我见过一个很有意思的案例:某系统的计算逻辑非常复杂,每条数据要跟历史数据做比对,响应时间要几秒钟。技术人员天天优化SQL、加索引,效果一直不理想。
后来资深的业务专家看了一眼规则,说:这个比对不需要用历史全量数据,只看上个月的数据就行了,因为业务上只关心月度变化。就这么一句话,SQL查询量直接少了90%,系统瞬间就流畅了。
这种优化,写代码再厉害也想不到,但懂业务就能想到。所以我一直觉得,纯粹的技术优化是有天花板的,但业务理解能让技术方案的优化空间无限变大。技术人如果只盯着代码看,永远只是把方案实现出来;但如果你能理解业务背后的逻辑,你就能反过来优化方案本身。
3. 协作比代码更考验功力
我刚工作的时候,以为写代码是一个人的事。后来才发现,真正的工作里,写代码的时间可能只占三成,剩下的七成都在沟通——和产品经理沟通需求,和测试同学沟通逻辑,和设计师沟通交互,和运维沟通部署,还有和项目经理对齐进度。
3.1 跨团队协作的“信任账户”
跨团队协作这件事,特别像银行账户。你每一次靠谱的交付,都是在存款;每一次延期、返工、出线上事故,都是在取款。账户里没钱的时候,你说什么别人都不信,做什么都被质疑。账户里余额充足的时候,偶尔出点小问题,大家也都愿意给你机会。
我曾经接手过一个跟算法团队合作的项目,对方给的接口文档写得稀烂,联调时各种报错。换作以前,我可能就当场开喷了。但那次我没急,而是耐心地和对方一起排查问题,发现是他们某个环境变量配置错了。我不仅没抱怨,还顺手帮他们补全了接口文档。从那以后,这个团队每次对接都特别配合,有什么问题第一时间告诉我。
这个事让我体会到,技术能力强可以帮你解决业务问题,但把协作关系处好,能帮你解决“人的问题”。而“人的问题”,往往是项目里最棘手的问题。技术人如果只盯着代码,忽略了协作,很容易陷入“明明我技术没问题,为什么项目还是搞砸了”的困惑。
3.2 技术评审中的说服力
技术评审是技术人展现专业度的重要场面,但同时也非常考验沟通能力。我发现不少技术人,包括曾经的我,评审的时候喜欢用专业术语碾压别人:什么最终一致性、CAP定理、分布式事务。听着很有道理,但别人根本没法接话,也听不懂你要干嘛。
后来我换了一种策略:讲方案之前,先用一分钟讲清楚业务背景,然后说清楚我打算怎么做,再讲为什么这么做,最后需要大家配合什么。用大白话讲,讲完再补一句“技术细节我们会后单独聊”。这样一来,评审会的效率高了很多,大家也会更重视你的方案。
说到底,技术评审的核心不是证明“我比你强”,而是让所有人理解并认同这个项目为什么要这么走。说服力不是靠术语堆出来的,是靠清晰的逻辑和坦诚的态度换来的。
3.3 “对事不对人”的反馈艺术
做技术的人普遍直来直去,看到代码写得烂就直接说“这写的什么玩意儿”,看到方案有问题就当面指出。这种性格在工作里,好的一面是沟通效率高,坏的一面是容易得罪人,对推进项目反而没帮助。
我自己也经历了一个转变期。以前做代码Review,我习惯直接给结论:“这个接口设计有问题,重写吧。”结果对方就不高兴了,明明是技术讨论,变成了情绪对抗。后来我改成描述事实加建议:“这里如果并发量上来,可能会有性能瓶颈,我们要不要换个思路,比如做个异步处理?”不说“你错了”,只说“这个场景下可能会有问题”,效果天差地别。
项目是大家一起做成的,把团队关系搞僵了,再牛的技术也施展不开。除非你是一个人写一个项目,不然“会做人”确实比“会写代码”更重要。
4. 懂业务的程序员,更有竞争力
技术人都有一个困惑:我技术不错的,为什么晋升那么慢?为什么那些技术看起来不如我的人,反而混得风生水起?其实答案往往就是:人家懂业务。
4.1 业务理解力,决定了技术天花板
同样是写代码,懂业务和不懂业务,写出来的东西完全不是一个量级。不懂业务的人,按需求文档一行一行地写;懂业务的人,一眼就能看出需求的逻辑漏洞,知道哪些是核心路径、哪些是异常分支,甚至能在产品设计阶段就提出改进建议。
拿电商系统来说,不懂业务的人只知道“创建订单、支付、发货”这三步。懂业务的人会知道,下单之前有库存锁定,支付之后有对账核销,发货之前有风控拦截,售出之后还有售后退款、财务结算、发票开具。每一个环节都有不同的边界情况,缺少业务理解,就开发不出真正好用的系统。
很多技术人以为自己只要把接口写好、性能调优就算厉害,但在他写接口之前,连业务规则都没搞清楚,写出来的东西大概率是要返工的。反过来说,一个懂业务的程序员,技术选型会更贴近实际,架构设计会更稳定,代码也能更好地支撑业务变化。
4.2 从“执行者”到“设计方案的人”的转变
刚开始做技术的时候,我们的工作模式是“给我需求,我来实现”。这个阶段,技术能力确实最重要。但如果你想往上走,想成为那个定方案的人,就必须完成一次思维转变:从“怎么做”到“做什么”。
定方案的人,要面对的是模糊的、不完整的、经常变化的需求。在信息不完整的情况下做出合理的判断,这种能力,跟编程能力关系不大,更依赖业务敏感度和逻辑推理能力。举个例子,某业务方想做一个会员积分系统,他给你的需求只有一句话“让用户能攒积分、花积分”。你是直接开写,还是先问清楚“积分获取规则是什么”“积分能抵扣多少钱”“积分过期怎么办”?如果你不问,那你做出来的东西大概率离业务方心里的预期差了十万八千里。
4.3 用技术思维反哺业务决策
懂业务的价值不只是能更好地实现需求。反过来,技术思维也能帮业务方发现机会、规避风险。
我看到过一个很精彩的真实案例。某团队负责用户增长,业务方一直靠“下载APP送优惠券”做推广。技术团队分析数据后发现,真正提升留存的是“绑定邮箱后送的积分”,而不是“下载APP送的优惠券”。于是,技术团队建议把预算倾斜到邮箱场景,结果转化率提高了好几倍。这就是用技术思维反哺业务决策。
技术人天天和数据、逻辑打交道,对系统的运转规律最清楚。如果能在代码之外多留心业务的数字和规则,很容易发现一些业务方看不到的盲区,你的价值也会成倍增长。
5. 长期主义心态与技术“保鲜”
文章开头我说技术没那么重要,不是让大家不学技术,而是让大家别把技术当成一个“铁饭碗”想去拿在手里不放。技术这个东西迭代太快,你今天用的框架,可能明年就被淘汰了。如果把职业安全感建立在“我会某门技术”上,你会永远焦虑。
5.1 技术不是收藏品,是工具
我见过不少技术人,花大量时间“收藏”技术:看到新的框架、新的库,先收藏,然后学习、研究,但工作中根本用不上。问起来,他会说:“万一以后用到呢。”这种心态能理解,但效率真的太低了。
更好的做法是:以解决实际问题为目标,“顺便”学习技术。比如你工作中遇到了并发问题,那就去学并发处理的方案;你遇到了大数据量存储瓶颈,那就去学分库分表。技术是学来用的,不是学来屯的。用到的技术,才能真正内化成你自己的。
我之前带过一个刚毕业的A同学,基础扎实,学习能力很强,花了几个月自学了很冷门的技术栈。但到了实际项目里,碰到业务场景复杂的需求还是抓瞎,不知道该用什么方案,不知道怎么权衡取舍。后来我让他别学那些花架子了,而是专心做项目里的实际功能,遇到不懂的再去查、去学。半年之后,他的实战能力明显进步,比泛泛地学一堆用不上的技术强多了。
5.2 保持空杯心态,但要警惕“技术追新癖”
技术圈普遍有一股“追新”的风气:新框架出来就说老框架是垃圾,新语言出来就说老语言要完蛋。做技术久了你会发现,很多东西都是换汤不换药。业务层面的问题就是那些,技术方案翻来覆去也就是那几种套路。
所以,对于新东西,我现在的态度是:保持了解,但不盲目追逐。看到一个新技术,先问三个问题:它解决什么问题?它比老技术好在哪里?它适合什么场景?这三个问题想清楚了,再去学也不迟。
举个例子,容器化刚火的那两年,很多人不分场景地全上容器,结果把简单的项目搞得更复杂了。后来热度退下来了,大家才回归理性:小项目用传统部署反而更省事。技术迭代不可怕,可怕的是今天学这个、明天追那个,却从没想过自己到底需要什么。
5.3 真正的护城河:学习能力与解决问题能力
如果你问我,做技术到最后,到底什么是你的核心竞争力?我的答案是:学习能力,以及用技术解决实际问题的能力。
技术每天在变,但底层的学习方法、问题拆解方法、系统设计思路是相通的。你只要掌握了这些“元能力”,不管未来出现什么新技术,你都能很快抓住它的关键,并且用到实处。
其实说白了,技术本身确实不复杂,复杂的是理解需求背后的逻辑、权衡方案的利弊、推动团队的协作、保障系统的稳定。这些能力,离开技术岗位之后同样管用。它们才是你真的可以带走的东西。
所以我的心态也慢慢变了:不只是学技术,而是学“怎么用技术创造价值”。只要这个底层逻辑是通的,技术上的一时领先或者落后,都没那么重要了。
6. 常见困惑与心态调整
聊了这么多,最后把大家经常遇到的几个困惑拿出来说说。这些都是我自己经历过、也看周围人反复踩过的坑。
6.1 “我技术很好了,为什么还是做不了核心项目?”
常见误区:以为技术好就能拿到核心项目。实际上,核心项目之所以核心,往往是因为业务价值高、逻辑复杂、需要多方协同。你技术再好,如果只埋头写代码,不了解业务全貌,也很难胜任核心项目里的关键角色。
我的建议:主动找项目负责人聊业务,提出自己的见解。你聊得多了,别人自然会把你当成懂业务的人,遇到核心需求时,第一个想到的就是你。
6.2 “团队里有人技术比我差,凭什么他当leader?”
这个问题挺现实。但要明白,leader需要的核心能力是统筹、协调、决策。这些能力跟写代码水平没有必然关系。那个人技术不如你,但他能让项目顺利推进,让领导和客户满意,这本身就是一种能力。
你如果也想走管理路线,就别再纠结“技术高低”了。试着去承担更多协调类的工作:安排迭代、对接需求、组织评审。慢慢你会发现,这些工作并不比写代码轻松。
6.3 “遇到业务方改需求就想发火,怎么破?”
改需求是常态,不改成艺术。发火没用,还会让你的人际关系变差。我一般用两个方法调节:一是告诉自己,改需求说明业务还在进展,比需求冻结、业务要没了强;二是把“改需求”当成免费的容灾演练,锻炼自己的设计能力,看你的系统能不能快速适应变化。
长此以往,你的系统设计会越来越柔性,改起来也越来越快。到那时候,改需求不但不让你烦躁,反而成了你展示实力的机会。
6.4 “我怎么才能更快地提升自己?”
最快的方式,不是看更多的书、学更多的课,而是去做难而正确的事。主动接手别人不愿意做的项目,主动去解决线上疑难故障,主动承担跨团队协调工作。做的事情难度上去了,能力自然就上去了。
技术这东西,练多了就熟,熟了就精,精了就通。但通的那一下,往往不是靠代码堆出来的,而是靠一次一次把事情做成、把问题解决掉积累出来的。
做技术这么多年,我最大的体会是:技术永远在变,但你解决问题的能力、对业务的理解、与人协作的方式,这些才是真正值钱的东西。刚入行时,我花了很多时间钻研技术的犄角旮旯,觉得这才叫专业。回过头看,那些啃过的细节大多没什么用,真正帮我把项目做成、把团队带顺的,反而是那些“技术之外”的东西。
我不是说技术不重要——没有技术,我们连入场的资格都没有。而是说,技术就像一个基本功,到这个程度就够了,但真正拉开差距的,是基本功之上的判断力、沟通力、业务理解力,还有在复杂环境里把事做成的那种韧劲儿。想明白这件事之后,我反而能更轻松地学技术了:不焦虑、不攀比,遇到问题就研究,研究透了就放下。这样的心态,让我走得更稳,也走得更远。