技术选型的真相:为什么最后总是选那几个
每次做技术选型,团队都会认真调研:列出五六个候选方案,做技术对比表,分析优缺点,开会讨论半天。最后呢?React、TypeScript、MySQL、Redis,还是那几个。
新人会问:"为什么不试试XX框架?它的性能更好啊。"老人会说:"稳妥起见,还是用主流的吧。"
技术选型最大的谎言是:我们在做技术决策。实际上,大部分时候我们在做风险决策。
技术选型的三个阶段
做了很多年技术,观察到一个有意思的现象:工程师对技术选型的态度,会随着工作年限发生变化。
刚入行时,看到新技术就想用。看到有人在用Vue 3,立刻想在项目里试试;看到Rust很火,马上想重写服务;看到某个数据库号称性能是MySQL的10倍,恨不得立刻迁移。
这个阶段的特点是:只看优点,不看成本。
工作几年后,开始变得谨慎。新技术出来不会马上跟,会等社区成熟、生态完善、踩坑的人多了再考虑。这时候的决策标准是:技术是否成熟、团队是否掌握、是否有成功案例。
这个阶段的特点是:看优点也看缺点,但忽略了隐性成本。
再往后,会发现技术选型的核心不是技术本身,而是组织能力、团队基因、业务特性。同样的技术栈,在不同公司效果完全不同。
这个阶段的特点是:技术选型是业务决策。
为什么总是选那几个
在金融业务中,这个现象更明显。
你很少看到金融公司用最新的框架、最炫的技术。不是不想用,是不敢用。理由很简单:线上出问题要赔钱。
一次资损事故可能是几十万甚至上百万,这个成本远远超过"使用新技术带来的效率提升"。所以决策逻辑就变了:不是选最好的,而是选最安全的。
什么是最安全的?用的人多的、踩坑的人多的、社区成熟的、招人容易的、出了问题能快速找到解决方案的。
这就是为什么React始终是主流。不是因为它最好,而是因为它最安全:
- 社区最大,遇到问题能找到答案
- 招人最容易,简历一抓一大把
- 生态最完善,要什么组件都有
- 大厂在用,出了问题不用背锅
技术选型的第一原则不是追求卓越,而是降低风险。
但这个逻辑有个前提:你的业务允许你追求安全。
如果是创业公司,情况就不一样了。创业公司最大的风险不是技术风险,是活不下去。这时候技术选型的逻辑是:快速试错,降低成本。
我见过创业团队用Next.js + Vercel + Supabase,三个人两周上线MVP。用的都是新技术,但确实快。如果等半年慢慢调研、慢慢搭建、慢慢优化,业务早黄了。
技术选型没有绝对的对错,只有是否匹配当前阶段。
被低估的隐性成本
技术选型最容易忽略的是隐性成本。
新技术的显性成本大家都知道:学习成本、迁移成本、不稳定的风险。但隐性成本往往被低估。
第一个隐性成本是"招聘成本"。
你用了一个小众框架,技术上可能确实更优雅。但问题是,团队里能用这个框架的就两个人,他们一离职,这块业务就成了黑盒。
我见过有公司用Elm写前端,代码质量确实高,但两年后核心开发离职了,新招的人没人会Elm,最后不得不推倒重写,用React重新实现。
这个重写的成本是多少?三个人,半年时间,外加业务暂停迭代的机会成本。
技术债不只是烂代码,还包括选了一个团队hold不住的技术。
第二个隐性成本是"决策成本"。
技术栈越多,团队的决策成本越高。做一个需求,前端要讨论用Vue还是React,后端要讨论用Java还是Go,数据库要讨论用MySQL还是PostgreSQL。
每个决策点都是时间成本,每个分叉都是认知负担。
技术栈的统一不是为了"控制",而是为了降低决策成本。
第三个隐性成本是"维护成本"。
新技术刚上线时大家热情高涨,代码写得很认真。半年后呢?新需求来了,大家都想做有挑战的事,谁来维护老代码?
技术选型时,没人会想"三年后谁来维护这个"。但三年后,维护的人会骂当年选型的人。
技术选型的决策框架
既然技术选型这么复杂,有没有一个相对靠谱的决策框架?
我的经验是:分层决策。
把技术栈分成三层:基础设施层、核心业务层、实验创新层。
基础设施层:求稳。
数据库、消息队列、缓存、监控,这些选最主流、最稳定的。MySQL、Redis、Kafka、Prometheus,没什么创新空间,也不需要创新。
出问题了能快速找到解决方案,招人容易,社区成熟。
这一层的技术选型不是技术决策,是工程决策。目标是"别出问题"。
核心业务层:求平衡。
前端框架、后端框架、ORM、状态管理,这些选主流但不一定最新的。React而不是Solid.js,Spring Boot而不是Vert.x,TypeORM而不是Prisma。
这一层需要在"技术先进性"和"团队能力"之间找平衡。
实验创新层:求突破。
内部工具、辅助系统、非核心功能,可以尝试新技术。开发者工具用Rust重写提升性能,监控大盘用最新的可视化库,内部管理后台用低代码平台快速搭建。
这一层的目标是:给团队试错空间,同时控制影响面。
分层的好处是:既保证了稳定性,又给了创新空间,还避免了"一刀切"带来的僵化。
全栈视角的优势
做技术选型时,全栈视角有个独特优势:能看到完整的成本。
纯前端做选型,会倾向于选最新、最优雅的前端框架。但可能没意识到,这个框架和后端API的对接成本很高,或者和现有的构建系统不兼容。
纯后端做选型,会倾向于选性能最好的方案。但可能没想到,这个方案前端调用很别扭,或者运维部署很复杂。
全栈的价值不是什么都会,而是能看到技术决策在不同层面的连锁反应。
在金融业务中,这一点尤其重要。
前端选型时,你得考虑:这个框架对首屏性能有多大影响?用户在弱网环境下体验如何?打包体积会不会导致用户流失?
后端选型时,你得考虑:这个数据库能支撑多大的并发?出了问题能不能快速回滚?监管审计时能不能提供完整的日志?
运维选型时,你得考虑:这个部署方案前后端团队会不会用?出了问题能不能快速定位?成本是否在预算内?
技术选型不是孤立的技术决策,而是完整的系统思考。
选型的陷阱
见过太多技术选型的坑,总结几个常见陷阱。
陷阱一:性能陷阱。
看到benchmark显示某个技术性能是现有方案的10倍,立刻想换。
问题是:benchmark的场景是你的业务场景吗?性能瓶颈真的在这里吗?
很多时候,性能问题不是技术栈的问题,是架构设计的问题。换了新技术,架构还是老样子,性能依然上不去。
陷阱二:生态陷阱。
看到某个技术生态很丰富,各种库、各种工具,觉得很强大。
问题是:这些库的质量如何?维护状况如何?遇到问题有人解决吗?
生态的"量"不等于生态的"质"。有些技术虽然库多,但都是小作坊项目,没人维护,用了就是坑。
陷阱三:招聘陷阱。
觉得用最新的技术能吸引优秀人才。
问题是:来了之后发现业务无聊、加班严重、内卷严峻,再酷的技术栈也留不住人。
技术栈不是吸引人才的决定性因素,文化、成长空间、薪资才是。
写在最后
技术选型说到底是个妥协的艺术。
妥协不是贬义词。承认约束、接受现实、在有限条件下做出最优解,这是成熟工程师的标志。
那些坚持"一定要用最好的技术"的人,往往是没经历过技术选型失败的代价。当你亲手处理过一次因为技术栈不成熟导致的线上故障,当你花了三个月重写一个本可以稳定运行的系统,当你因为招不到人导致项目延期,你就会明白:
技术选型的目标不是选最好的,而是选最合适的。
什么是合适?团队hold得住、业务跑得稳、成本控得住、风险看得见。
这不酷,但有用。
技术人最容易犯的错误,是把技术当目的。技术只是手段,目的是解决问题、创造价值、让业务跑起来。
想明白这一点,很多技术选型的纠结就会消失。不再纠结"为什么不用最新的",而是思考"用什么能最快解决问题"。
从技术崇拜到工程务实,这是每个技术人都要经历的心态转变。
很难,但必须。
添加新评论