咱们平时跟程序员聊起常用的编程语言,Java、Python 肯定是绕不开的,不少做后端的还会提 Go,做前端的离不开 JavaScript,但一说到 Scala,好多人都是 “听过名字,没实际用过” 的状态。身边不少同行哪怕做开发五六年了,接触 Scala 的次数也屈指可数,这就不由得让人好奇,scala 为什么用的很少?毕竟早几年还总有人说它结合了面向对象和函数式编程的优势,性能也不差,可到了实际工作里,真正落地用它的项目却少得可怜。
先说说学习这事儿吧,咱们学一门新语言,最看重的就是 “能不能快点上手干活”。像 Java,哪怕是刚毕业的应届生,跟着教程写个简单的接口、连个数据库,一两周差不多就能摸个大概;Python 更不用说,语法简单到像写英语句子,入门门槛低得很。可 Scala 就不一样了,它又要兼顾面向对象,又要支持函数式编程,语法里藏了好多 “弯弯绕”。比如隐式转换,有时候代码里明明没写转换逻辑,程序却能自己转类型,新手看的时候根本摸不着头脑;还有高阶函数、模式匹配这些概念,光理解清楚定义就得花不少时间,更别说灵活运用到项目里了。好多人本来想着学 Scala 提升下技术栈,结果对着教程看了半个月,连个完整的小功能都写不出来,最后还是乖乖回头用 Java,这也是 scala 为什么用的很少的一个重要原因 —— 入门太难,把不少人都挡在了门外。
再看生态适配的问题,编程语言能不能用得开,跟它周边的工具、库给不给力关系太大了。Scala 虽然是基于 JVM 的,理论上能跟 Java 的库兼容,但实际用起来可不是那么回事。比如 Java 里常用的 Spring Boot 框架,做后端开发的时候,不管是配置服务、连接缓存还是处理分布式事务,都有成熟的解决方案,文档多、社区里的问题答案也全。可 Scala 对应的 Play Framework,虽然功能上也能满足需求,但用户基数小,遇到个冷门的 bug,在网上搜半天都找不到解决方案,只能自己一点点啃源码。还有像数据处理领域,虽然 Scala 有 Spark 这个大杀器,但除了大数据场景,其他领域的优质库就少得可怜了。比如做移动端开发,没人会选 Scala;做前端,更是想都不用想。反观 Java,从后端到安卓开发,从大数据到企业级应用,方方面面都有成熟的生态支撑,对比之下,Scala 的生态短板太明显,自然没人愿意冒风险用它做项目。
团队成本也是个绕不开的坎儿,尤其是对中小公司来说,每一分钱都要花在刀刃上。如果一个团队决定用 Scala 开发项目,首先得保证团队里至少有一两个资深的 Scala 开发者能镇场子,不然遇到技术难题没人能解决,项目很容易卡壳。可市面上会 Scala 的程序员本来就少,想招到有经验的,薪资要求比 Java 程序员高不少,小公司根本扛不住这个成本。就算公司愿意花钱培训现有员工,也得投入大量的时间和精力 —— 员工得放下手里的工作去学,学会了还得有个适应期才能熟练干活,这期间项目进度很容易受影响。之前有个朋友的公司就试过,想把一个 Java 项目改成 Scala,结果团队里三个程序员学了一个月,写出来的代码还是满屏的 “Java 味儿”,最后没办法,只能又改回 Java。这种投入和产出不成正比的情况,让很多公司对 Scala 望而却步,这也加剧了 scala 为什么用的很少的现状。
企业选择编程语言的时候,还得考虑 “未来的可维护性”。一个项目不是写完上线就完事了,后续可能要迭代功能、修复 bug,还得应对人员流动。如果用了 Scala,万一负责这个项目的核心开发者离职了,想招个新人接手就特别难 —— 新人要么没学过 Scala,要么只会点皮毛,得花好长时间才能理清项目逻辑。反观 Java,就算核心开发者走了,随便招个应届生,只要有基础,跟着文档慢慢看,一两个月也能上手维护。而且从行业趋势来看,这些年 Go 语言因为轻量、并发性能好,在后端领域越来越火,很多互联网公司做微服务都优先选 Go;Python 在人工智能、数据分析领域更是独占鳌头。企业在选择的时候,肯定会优先选这些 “主流选手”,毕竟它们的人才储备足、社区活跃,就算遇到问题也能快速找到解决方案。Scala 夹在中间,既没有 Java 的 “万能适配”,也没有 Go 的 “轻量高效”,自然很难被企业当成首选。
人才储备的恶性循环也让 Scala 的处境越来越难。现在高校的计算机专业,教的主流语言都是 Java、C++、Python,很少有学校会把 Scala 纳入必修课;市面上的培训机构也一样,为了迎合企业需求,大多开设 Java、Python、Go 的课程,Scala 的课程少得可怜。这就导致刚毕业的学生几乎没接触过 Scala,进入职场后,公司也不会主动让新人去学一门 “不常用” 的语言,结果就是会 Scala 的开发者越来越少,企业想招人也招不到,只能放弃用 Scala;而企业不用,新人又没机会接触,最后形成了 “没人用→没人学→更没人用” 的死循环。哪怕有些程序员想自学 Scala,也会因为找不到实际项目练手、遇到问题没人交流,最后不了了之。
其实客观来说,Scala 并不是一门 “差” 语言,它的函数式编程特性在处理复杂业务逻辑的时候有优势,性能也比很多脚本语言强。但在实际的开发场景里,编程语言的选择从来不是只看 “技术先进与否”,更多的是看 “能不能解决问题、成本高不高、后续好不好维护”。Scala 在这些实际需求面前,暴露出来的问题太多 —— 学习门槛高、生态不完善、团队成本高、人才储备少,每一个问题都让它很难在激烈的语言竞争中占到优势。也正是这些原因叠加在一起,才导致 scala 为什么用的很少,成为了编程语言领域里一个 “叫好不叫座” 的典型。