scala为什么用的很少?从学习到应用的现实困境

scala为什么用的很少?从学习到应用的现实困境

平时和程序员聊起常用编程语言,Java、Python、Go这些名字总被频繁提起,可Scala大多时候只是“听过没用过”,哪怕是有几年开发经验的同行,接触它的次数也很少,实际落地的项目更是少见。虽说Scala早几年就被提及结合了面向对象与函数式编程的优势,性能也不差,但现实中使用度低的背后,藏着多方面的现实困境。

从学习角度看,大家学新语言最在意能不能快速上手干活。Java应届生跟着教程一两周就能写简单接口,Python语法像英语句子一样好懂,可Scala既要兼顾两种编程范式,语法里还藏着不少弯弯绕——隐式转换让新手摸不着头脑,高阶函数、模式匹配光理解定义就要花不少时间,很多人学了半个月连完整小功能都写不出来,最后只能退回熟悉的Java,入门难直接把不少人挡在门外。生态适配也是大问题,编程语言的普及离不开周边工具和库的支撑,Scala虽基于JVM理论上能兼容Java库,可实际用起来差距明显:Java的SpringBoot有成熟解决方案和丰富文档,Scala的PlayFramework用户基数小,遇冷门bug难查答案;除了大数据领域靠Spark撑场面,移动端、前端等领域的优质库少得可怜,对比Java全方位的生态支撑,Scala的短板太突出,没人愿意冒风险用它做项目。

团队成本和项目可维护性也让企业望而却步。中小公司每一分钱都要精打细算,用Scala得有资深开发者镇场子,可市面上会Scala的程序员本就少,薪资还比Java高不少,小公司扛不住;就算培训现有员工,也要投入大量时间,有人试过把Java项目改Scala,三个程序员学一个月写的还是“Java味儿”代码,最后只能放弃。企业选语言还得考虑后续维护,项目上线后要迭代、修bug,万一核心开发者离职,招新人接手Scala项目特别难,新人要么没学过要么只会皮毛,而Java哪怕换应届生,一两个月也能上手维护。再加上这些年Go在后端、Python在人工智能领域越来越火,企业更愿意选这些人才储备足、社区活跃的主流语言,Scala夹在中间没优势。更关键的是人才储备形成了恶性循环,高校计算机专业和市面上的培训机构,大多教Java、Python、Go,很少涉及Scala,应届生几乎没接触过,职场里也没机会学,最后变成“没人用→没人学→更没人用”的死循环。

客观说Scala不是差语言,函数式编程处理复杂业务有优势,性能也比很多脚本语言强,但编程语言的选择从来不是只看技术先进,更要看能不能解决问题、成本高不高、后续好不好维护。学习门槛高、生态不完善、团队成本高、人才储备少,这些问题叠加在一起,让Scala成了编程语言领域“叫好不叫座”的典型,也直接导致它用得很少。

咱们平时跟程序员聊起常用的编程语言,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 为什么用的很少,成为了编程语言领域里一个 “叫好不叫座” 的典型。