Workflow
技术选型
icon
搜索文档
亲历两场编程语言迁移“惨案”,谷歌大佬揭露技术选型真相:90%决策与技术无关
36氪· 2025-11-05 18:58
文章核心观点 - 技术决策,特别是编程语言的选择,往往并非基于纯粹的技术理性,而是深受决策者个人身份认同、情感归属和职业标签等非技术因素驱动[4][8][9] - 在每一次“看得见”的技术辩论之下,都潜藏着一场更为强大且“看不见”的关于“我是谁”、“我想成为谁”的自我对话,后者常常主导最终决策[9][10][18] - 这种由身份认同驱动的决策会导致公司发展速度减缓、成本飙升,甚至错失市场机遇,造成重大经济损失[5][6][11][17] 技术决策的非理性本质 - 早期创业公司Takkle因新任CTO执意将运行良好的PHP系统更换为Perl,导致产品上线推迟9个月,团队规模扩大一倍多,月度烧钱速度从20万美元飙升至50万美元,资金存续周期缩短一半[4][5] - 在谷歌,一个价值5000万美元的技术决策(选择Rust)仅凭跟风炒作就即将获批,尽管按照其汇报的评判标准,Go语言在“易于构建和部署”等具体指标上更具优势[7][8][11] - 决策者常常并未进行真正的技术分析,其技术论证只是为一个基于情感和身份认同的既定选择寻找合理化借口[8][10][11] 身份认同的神经科学基础 - 脑部扫描研究显示,当个人核心信念(身份认同)受到挑战时,大脑会激活与应对物理威胁相同的防御机制(如杏仁核、脑岛皮层),而非进行理性推理[12][13][14] - 大脑无法客观评估对核心信念的挑战,因为这需要暂时解构定义“你是谁”的神经架构,偏见本身已侵蚀了察觉偏见的能力[14][15] - 工程师在评估非擅长领域的编程语言时,其大脑实质上在自我对抗,将技术证据视为对自我身份的威胁[15] 非理性技术决策的经济代价 - 技术栈的选择在产品生命周期内会占据总开发成本的40%到60%[17] - Stripe研究发现开发者有42%的时间都在处理技术债务[17] - 由身份认同主导的决策本质上是拿公司的发展速度、预算和资金存续周期做抵押,只为满足个人的自我认知[10][17] 解决方案:从技术争论转向经济考量 - 需要彻底转变对话核心,不再问“哪种语言最好”,而要问“用这种语言会让我们付出多少成本”[19] - 成本应包括发展速度的损耗、技术债务的积累、招聘难度、运维复杂度等所有关乎公司存活的维度[19] - 经济成本可以量化、对比和理性决策,不会威胁到任何人的自我价值,需要一个能让“隐性成本显形”的框架来引导讨论[19] 社区的不同观点 - 有观点认为编程语言的选择并非决定产品成败的主要因素,项目成功的关键几乎总是取决于项目团队成员的构成以及项目架构师的能力[20] - 企业问题可分为“毁掉整个项目”的致命问题(如糟糕的管理体系)和“给优秀工程师带来麻烦”的棘手问题(如编程语言选择),后者通常不致命[21] - 项目命运真正由市场需求、架构设计和团队执行力决定,而非具体的编程语言选择,技术栈迁移应顺应技术环境但核心价值需延续[22]
没有防御性编程,Rust服务稳定到不需要维护,然后老板说不需要我们了...
菜鸟教程· 2025-06-05 20:05
技术选型与性能表现 - 公司原有技术栈以Ruby和Node.js为主,面临支持10万并发用户的实时服务需求时,Ruby被确认不适合该场景 [2][3] - 团队进行四种语言概念验证(Elixir、Rust、Ruby、Node.js),Rust版本由新手开发者编写但仍以显著性能优势胜出:速度最快、内存占用最少 [5][8] - Elixir在并发处理中表现优异,Node.js受限于单线程需分布式部署,Ruby性能垫底 [9][10] Rust的采纳与开发过程 - 团队最终选择Rust因其通用性潜力,包括网络编程、Web服务及多语言SDK开发等战略价值 [10] - 项目时间紧张,由单一开发者采用极简架构实现:基于WebSocket的API,内存哈希表存储,事件推送至Kafka [13][14] - 开发效率极高:2周完成第一版,1-2周部署,一个月内扩展功能,稳定运行零故障 [15][18] 性能优化与管理层冲突 - 服务在50万并发用户活动前招聘3名Rust开发者优化,最终单台64核机器支持100万并发(P99延迟10ms)、200万并发(P99延迟25ms) [19][21] - 管理层因服务过于稳定质疑团队价值,强制要求转用Ruby/Node.js,导致3名Rust开发者离职 [20][22] - 禁用Rust后尝试Node.js重写失败,因单线程无法处理高负载,最终依赖第三方服务仍性能不足 [24][25][26] 结果与行业启示 - 原Rust服务持续在生产环境稳定运行但无人维护,成为"被遗忘的英雄" [28][29] - 技术决策受管理层变动显著影响,人力资源倾向主流技术栈(如Node.js/Ruby)与性能需求存在矛盾 [22][23] - 极端稳定性反成团队风险,揭示技术成功与管理预期错位的悖论 [1][29]