为什么是Scala

虽然在大数据领域Java的使用更普及,Python也有后来居上的势头,但Scala一直有着不可动摇的地位。我们熟悉的Spark,Kafka,Flink都是由Scala完成了其核心代码的开发。
所以掌握Scala不仅可以学习大数据组件的源码,而且会极大的提升大数据开发的效率。
这也是Scala的薪资水平一直遥遥领先的原因。
根据2019年全球编程语言薪资统计,排名前几名的Scala无疑是岗位需求与收入同样优秀的语言。当然收入与地域之间也是有区别的,比如在美国,Scala 的收入最高,可以达到 143k 美元,其次是 Clojure(139k 美元)、Go(136k 美元)、Erlang(135k 美元)、Objective-C(132k 美元)
该数据根据 Stack Oveflow2019 年关于编程语言薪酬排行开发者调查报告得出
为什么会有这么高的薪资?
这恐怕是源于Scala的特点:
  • 优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
  • 速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多。
  • 能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
这也是为什么很多大数据组件的源码都是Scala开发的原因。
掌握Scala以后,我们可以飞速的开发Flink,Spark等大数据工程,开发效率得到极大的提高,而且使用函数式编程,代码也会更简洁,炫酷。

什么是Scala

Scala产生于瑞士的洛桑联邦理工学院(EPEL),是“可扩展语言”(Scalable Language)的缩写,Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。你可以使用Scala编写出更加精简的程序,也能用于构建大型复杂系统,还可以访问任何Java类库并且与Java框架进行交互。
通过官网我们看到对于Scala的描述:
Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.

Scala主要特性如下:1、运行于JVM和JavaScript之上

Scala利用了JVM的高性能,而且也把Java丰富的工具和类库为其所用。不过Scala并不是仅仅支持JVM,Scala-Js已经支持Scala运行于Js之上!
scala-js是将scala编译成js的编译器,目的在于使用scala的众多类库和强类型特征构建出稳定可扩展的js应用。

2、静态类型

在Scala语言中,静态类型(static typing)是构建健壮应用系统的一个工具。Scala修正了Java类型系统中的一些缺陷,此外通过类型推演(typeinference)也免除了大量冗余代码。
动态语言和静态语言
  • 动态类型语言:是指在运行期才去做数据类型检查的语言。在用动态言语编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言。
  • 静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在编译阶段,也就是说在写程序时要声明变量的数据类型。C、C++、C#、Java都是静态类型语言的典型代表。
强类型语言与弱类型语言
  • 强类型语言:使之强制数据类型定义的语言。没有强制类型转化前,不允许两种不同类型的变量相互操作。强类型定义语言是类型安全的语言,如Java,C#和Python,比如Java中的“int i = 0.0”是无法通过编译的。
  • 弱类型语言:数据类型可以被忽略的语言。与强类型语言相反,一个变量可以赋不同数据类型的值,允许将一块内存看做多种类型,比如直接将整型变量与字符变量相加。JavaScript,PHP都是弱类型语言。
注意、强类型语言在速度上逊色于弱类型语言,使用弱类型语言可节省很多代码量,有更高的开发效率。而对于构建大型项目,使用强类型语言可能会比使用弱类型更加规范可靠。

3、混合式编程范式——面向对象编程,函数式编程

Scala完全支持面向对象编程(OOP)。引入了特征(trait)改进了Java的对象模型。trait能通过使用混合结构(maxin composition)简洁的实现新的类型。在Scala中,一切都是对象,即使是数值类型。
Scala也完全的支持函数式编程(FP),函数式编程已经被视为解决并发、大数据以及代码正确性问题的最佳工具。使用不可变值、函数、高阶函数以及函数集合,有助于编写出简洁、强大而又正确的代码。
函数式编程更关心数据的映射,运用函数式编程,比如用Spark进行WordCount,只需要一行代码

sc.textFile("/home/centos/test.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ + _).collect4、复杂的类型系统

Scala对Java类型进行了扩展,提供了更灵活的泛型以及一些有助于提高代码正确性的改进。通过使用类型推演。Scala编写的代码能够和动态的类型语言编写的代码一样精简。

5、简洁、优雅、灵活的语法

使用Scala之后,Java中冗长的表达式不见了,取而代之的是简洁的Scala方言。Scala提供了一些工具,这些工具可用于构建领域特定语言(DSL),以及对用户友好的API接口。

6、可扩展的架构

使用Scala,能编写出简短的解释性脚本,并将其粘合成大型的分布式应用。以下四种语言机制有助于提升系统的扩展性:
  • 使用trait实现的混合结构
  • 抽象类型成员和泛型
  • 嵌套类
  • 显式自类型(self type)
Scala与Java有着紧密的关系,可以把Scala看做是Java的升级版,而这些优势也让Scala拥有了巨大竞争优势
Scala与Java关系

Scala为什么是大数据第一高薪语言相关推荐

  1. 大数据场景中语言虚拟机的应用和挑战

    点击上方蓝字关注我们 大数据场景中语言虚拟机的应用和挑战 吴明瑜1,2, 陈海波1,2, 臧斌宇1,2 1 领域操作系统教育部工程研究中心,上海 200240 2 上海交通大学软件学院并行与分布式系统 ...

  2. 大数据 - 第一课 : 安装CenOS7

    说在前面,pf老师真的好有耐心呀,点赞.这才是猛男该有的样子. 课前公告 大数据,R语言,python--数据量过大(以T为单位),Hadoop平台 Hadoop平台:分布式存储即HDFS MapRe ...

  3. 大数据之R语言速成与实战

    什么是R语言? R语言由新西兰奥克兰大学的Ross Ihaka和Robert Gentleman两人共同发明.其词法和语法分别源自Scheme和S语言. R定义:一个能够自有有效的用于统计计算和绘图的 ...

  4. 大数据第一季--Hadoop(day5)-徐培成-专题视频课程

    大数据第一季--Hadoop(day5)-1777人已学习 课程介绍         大数据第一季--Hadoop(day5) 课程收益     大数据第一季--Hadoop(day5) 讲师介绍   ...

  5. 大数据第一课(满分作业)——泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster)

    大数据第一课(满分作业)--泰坦尼克号生存者预测(Titanic - Machine Learning from Disaster) 1 项目背景 1.1 The Challenge 1.2 What ...

  6. 谷歌亚马逊或遭英国监管;昔日“大数据第一股”面临退市;特斯拉辅助驾驶系统索赔案胜诉丨每日大事件...

    ‍ ‍数据智能产业创新服务媒体 --聚焦数智 · 改变商业 企业动态 台积电与诚新绿能签署协议,将购买20000GWh可再生能源 4月21日,台积电宣布已签署一项长期协议,将在20年内每年从台湾诚新绿 ...

  7. 大数据必学语言Scala(三十一):scala面向对象 特质(trait)

    文章目录 特质(trait) 作为接口使用 定义具体的方法 定义具体方法和抽象方法 定义具体的字段和抽象的字段 实例对象混入trait trait调用链 trait的构造机制 trait继承class ...

  8. 学习大数据需要什么语言基础

    Python易学,人人都可以掌握,如果零基础入门数据开发行业的小伙伴,可以从Python语言入手. Python语言简单易懂,适合零基础入门,在编程语言排名上升最快,能完成数据挖掘.机器学习.实时计算 ...

  9. 大数据第一阶段学习笔记

    开始:2022年11月6日 以下内容仅为个人笔记整理.(第一阶段的内容并不完全.硬件上有点问题,暂时无法解决,空着的部分后续补上.) 第0章 大数据介绍 大数据可以从事的职位有: 大数据工程师 数据分 ...

最新文章

  1. 阿里团队最新实践:如何解决大规模分类问题?
  2. SQLSERVER 分页
  3. 【功能升级】达摩盘3.0全新标签介绍前言
  4. java发送串口命令_如何發送命令到串口(JAVA + RXTX)
  5. 3D空间的指定起点和终点的抛体运动
  6. http和https和ssl和tcp/ip之间的关系和区别
  7. javascript数组扁平化处理
  8. python打开浏览器并最大化_我需要Selenium以更大的分辨率打开它的Web浏览器(最好是最大化)...
  9. LeetCode:922. 按奇偶排序数组 II
  10. cvi中c语言只保留两位小数,保留两位小数,但要求只显示一位小数,怎么实现?...
  11. 边缘设备上的实时AI人员检测:在Raspberry Pi上测试SSD模型
  12. ubuntu下从软件中心安装软件时的软件缓存目录
  13. android qq 登陆 简书,第三方登录 — QQ登录
  14. kafka安装包下载慢,国内镜像下载地址
  15. 计算机系统 I 第二章 逻辑门与逻辑函数化简 学习笔记
  16. JESD204B协议基础知识
  17. 外部方式启动AndroidStudio模拟器
  18. STM32f4应用层学习之路(零基础学习STM单片机要注意的是什么? 如何从一个小白入门,你需要掌握哪些知识? 有哪些适合新手的单片机项目?)
  19. 统计假设测验------(四)方差分析(F测验、多重比较原理与方法)
  20. 电脑开机卡顿解决方法

热门文章

  1. Flink on yarn集群HA配置
  2. 集合,ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurremtHashMap分别的总结,volatile 关键字的使用
  3. 老毛桃装ubuntu
  4. 关于Md5加密算法的原理及应用
  5. supermap leaflet (二) 运动点及轨迹
  6. 北京WIFI密码,很强大
  7. 在uni-App(Vue)中使用 SVG + JS 自定义动画:模拟关键帧
  8. python判断是工作日还是休息日
  9. For Your Dream
  10. 计算机专业新年对联,大学各学院新春对联