选择编码语言需要进行各方面权衡。对于初学者来说,需要在学习代价和收益之间找到平衡点。此外,还需要清楚编程语言的长期前景。对于 21 世纪初的 Web 开发人员来说,PHP 和 Ruby on Rails 很显然是提升自己职业发展的最佳语言。而如今的市场条件已经发生了巨大的变化,PHP 和 Ruby 不再是我们首推的选项。
本文提供了一份我们在 2019 年最应该学习的编程语言指南。我们会一一介绍这几种语言,并且探讨其用途和长期前景。我们还会列举几个用于专业特定领域的编程语言。为了显示每种语言的市场份额及占有率,我们参考了 Stack Overflow 2018 年开发者调查报告中的编程语言排名。
学习一门新语言的关键原因之一是能够利用它增加开发者的就业机会。编程面试是雇主了解开发者对该编程语言了解程度的重要途径。为了更好地帮助开发者通过编程面试,本文会提供一系列在面试中可能涉及的问题。
我们参考了 Stack Overflow 调查,并根据推荐力度对这几种编程语言进行了排名。此外,我们将这份榜单的编程语言限制为命令式语言,而不包括声明性语言,比如 HTML、CSS 和 SQL,以及 shell 脚本语言,比如 Bash。
第 1 名:JavaScript
在 2015 年,有 54.4% 的开发人员将 JavaScript 列为最受欢迎的技术。而 2018 年的 Stack Overflow 开发者调查报告显示,JavaScript 位居榜首,有高达 71.5% 的专业开发人员将 JavaScript 评为最受欢迎的编程语言,增长幅度非常大。
这种大幅增长的重要原因在于 JavaScript 几乎无处不在。针对客户端领域,你可以使用诸如 Angular、React 和 Vue 等 JavaScript 前端框架来构建基于浏览器的 Web 应用程序。而 Node.js 能够让开发者使用与前端一样的编程语言来开发后端程序。使用 Node,开发者可以编写 Web 服务端程序,用来管理物联网(IoT)项目,或者进行机器学习实验。在众多编程语言中优先选择 JavaScript 的另一个重要原因在于,它得到了整个软件行业的广泛支持,Google、Facebook、微软以及亚马逊等科技巨头都在大力使用 JavaScript。开发者可以找到有关 JavaScript 的各种各样的学习资源,比如收费或者免费的课程、网站、书籍、视频以及博客,这些资源涵盖了该语言的方方面面。
在大部分时间里,JavaScript 一度被认为是编程语言领域的丑小鸭。尽管它至今未能变成美丽的天鹅,但在 JavaScript 社区齐心协力的努力下,它已经从基于浏览器的脚本语言变成了现代的多功能语言。随着时间的推移,JavaScript 的缺点越来越少。
值得注意的是,关于 JavaScript,许多雇主将在编程面试中通过候选人对JavaScript 特殊功能的了解程序来评估候选人能力。常见的编程面试问题会涉及到变量范围、闭包、回调以及条件运算符。任何从事 JavaScript 相关工作的开发者都应该熟知类似的面试问题。此外,我们还建议开发者去了解自己心仪的公司,研究其使用的技术栈,并熟悉相关的框架(例如 React、Angular 或者 Vue),从而能够在面试中展示自己的能力。
第 2 名:Python
Stack Overflow 调查显示,Python 受到了 37.9% 的专业开发者的亲睐。在过去五年中,Python 的发展速度比其它任何语言都快。如今 Python 的影响力非常巨大,就连很少涉及开发者相关主题报道的著名杂志经济学人也在最近的一篇文章中提到了 Python 语言(https://www.economist.com/graphic-detail/2018/07/26/python-is-becoming-the-worlds-most-popular-coding-language)。
Python 受到热捧的一部分原因在于它摆脱了很多其他语言的恼人惯例,比如它舍去了用来表示语句结束的分号。正是因为其简洁,Python 才得以取代 Java 作为计算机科学教学的主要语言,不仅大学,而且高中和小学的编程课程都优先选择 Python 来教学。在学术界,Python 已经成为机器学习和数据科学领域最流行的通用语言。事实上,Python 目前已经在这些领域占据了主导地位,在数据科学领域提出了 Python 与 R 语言结合使用的方案。
Python 与其他编码语言相比既有相似也有不同。Python 开发人员在面试时,首先会被考察对编程语言基本知识的理解,例如数据类型、模块化、函数和类。此外,候选人还可能会被问及如何编写 Python 脚本、如何使用 Python 进行面向对象编程或者如何使用 Python 进行函数式编程等问题。更进一步,开发者还需要了解 Python 特定的数据类型和功能,例如元组、列表推导、字典和装饰器。
第 3 名:Java
Java 在这份榜单中排名第三。根据 Stack Overflow 2018 年的调查,有45.5%的专业开发人员青睐 Java。
Java 能够持久地对开发者产生吸引力的一个重要原因是 Java 虚拟机(JVM)。JVM 使得用 Java 编写的程序能够在不同的硬件平台和设备上运行。Java 还能够帮助开发者处理数据类型和内存管理相关的让人头疼的任务。Java 简化了应用程序的开发,并且同一 Java 程序可以部署在不同的操作系统上,这使得 Java 成为大公司的首选语言。如此一来,只要你学好 Java,就很容易在大公司谋得一份不错的开发职位。Java 的另外一个重要用途是编写原生 Android 应用程序。随着 Android 操作系统在智能手机领域的遥遥领先,这促发了更多的开发人员学习 Java,从而投身 Android 应用开发大潮之中。
近年来,为了广泛利用 Java 的生态系统,有很多编程语言被创造,或者移植到 JVM。这些语言在特定领域中熠熠生辉,比如 Scala、Closure 和 Kotlin。Kotlin 有许多有趣的用途,比如编写 Android 应用程序和使用 Corda 框架开发区块链。
Java 开发人员在面试时,理解语言的范围非常重要。面试内容可能会涉及任何与Java 相关的主题。作为一名企业级软件 Java 开发者,你需要具备对 Java 基础结构的深刻理解,比如 JDK、JRE 和 JVM。Android 开发人员将被问及与 Android 相关的问题,包括 SDK 版本管理、intent、设备模拟以及应用程序部署过程。假如你面试的公司使用的是基于 JVM 的其他编程语言,那么你需要证明自己对该语言足够了解。
第4名:C#
在参加 Stack Overflow 2018 年调查的开发者中,有 35.5% 的专业人士是微软 C# 的粉丝。尽管很多开发者对微软的所作所为有些反感,但是在这份榜单中,仅有 JavaScript、Python 和 Java 的排名高于 C#。当然,Bash 脚本语言 40.4% 的支持率也比 C# 高,但是脚本语言不在本文的讨论范围内。
目前 Java 的支持率的确比 C# 高,但是从长远来看,种种迹象表明这种现状会发生改变。Java 提供新功能的步伐已开始放缓,而微软一直在积极为 C# 增加新的特性和功能。微软为了摆脱自身对 Windows 操作系统的依赖,一直法力与其他新的领域,包括购买 Xamarin 及其跨平台开发环境,发布多平台 .NET Core ,以及对 Azure 持续投资。C# 在未然的企业战略中扮演着重要角色,微软也在努力确保 C# 可以同时使用微软技术和开放的行业标准。
与 Java一样,C# 语言同样拥有强大的生态系统。这意味你在面试 C#职位时,需要对雇主的未来市场有一定程度的了解。与 Java 一样,大多数 C# 面试都包含了与C#基础架构相关的问题,包括 .Net 框架和公共语言运行时(CLR)。值得注意的是,CLR 还可以托管其他语言,例如 F# 和 VB.net。如果你面试的公司使用 C# 以外的 CLR 语言,那么你需要了解这门语言。
第5名:C / C ++
虽然 C 和 C ++ 是两门不同编程模型的独立语言,但它们之间的联系非常紧密,本文将把它们一起讨论。
对于通用和专用任务,例如应用程序开发、用户界面、移动应用程序和机器学习,C 语言都完全不擅长。但是,在嵌入式系统和操作系统领域,C 仍然占据绝对的主导地位。Linux 就是最好的例子。Linux 是有史以来最流行的操作系统,它既可运行在大型设备上,也可运行在小型的移动设备上。Linux 最核心的部分是 Linux 内核,而 Linux 内核就是用 C 语言编写的。C 语言的另一个常见用途是编写其他编程语言,比如榜单的第二名 Python 语言就是用 C 语言编写的。
C ++ 是更现代的并且面向对象的 C 语言版本。C ++ 通常用在对性能要求很高的领域。例如,许多涉及金融业务公司的后端系统中就会选择使用 C ++。C++ 以高性能著称,因此它是图形密集型应用程序的首选语言,比如游戏开发、图形引擎、虚拟现实和增强现实。
在参加 C 或者 C ++ 的面试时,面试官可能会提出一些适用于这两种语言的问题。这包括编码有关的数据类型、运算符、循环、条件语句、指针和内存管理等问题。开发者可能还会被要求定义和解释链表,以及编写实现和管理链表的简短程序。由于 C ++是面向对象的语言,因此与面向对象有关的对象、类、方法、属性等问题都有可能被问到。
其他语言
本文榜单中前五的语言都是通用型的。除此之外,在某些特定领域,同样有很多相对小众的编程语言,我将列举如下。
这其中,苹果的 Swift 应当是关注度最高的语言。Swift 是苹果公司推出的新型通用语言,旨在取代 Objective-C。Swift 可用于编写 iOS 和 Mac 桌面应用程序,苹果公司将其开源,希望它能够成为服务器语言。遗憾的是,希望暂时落空。
在 Web 开发领域,PHP 仍然十分盛行。尽管 PHP 语言存在很多局限性,并且市面上有很多针对它的替代品,但是 PHP 如今仍然被许多大型网站使用,例如 Facebook 和维基百科。Facebook 甚至创建了自己的 PHP 改良版,名为Hack。PHP 也是许多大型开源平台使用的语言,例如 WordPress 和 MediaWiki。这些平台得到了广泛的应用,PHP 用于为它们创建插件。Facebook 仍然热衷于使用 PHP,甚至还创建了自己的现代化版本的 PHP: Hack 语言。Ruby 就是一个PHP 的完美替代品,它更加现代并且设计得更好。Ruby on Rails Web 开发框架得到了广泛的部署,并拥有有庞大而活跃的社区。
在一些更加专业的领域,比如系统编程领域,谷歌的 Go 和 Mozilla 的 Rust 看起来都很不错。两种语言都旨在构建高并发的系统。在函数式编程领域,Elixir 是 Erlang 的替代品,Clojure 是一种在 JVM 上运行的新型的 Lisp,而 F#是一种在 .NET 上运行并具有许多主流功能的函数式语言。最后,如果你对快速增长的智能合约和基于以太坊的加密货币领域感兴趣,你可以了解一下 Solidity。
结论:选择正确的语言
在榜单的五种语言中,你应当如何选择适合自己的语言呢?根据当前趋势,具有最广泛应用的最通用语言是 JavaScript。你可以在大多数设备上运行它,并使用它来构建客户端、服务器和无服务器应用程序。在过去的十年中,JavaScript 已经被不断改造,它现在与 C# 和 Lisp 等现代语言有很多共同之处。是的,它仍然有一些不足之处,但这些缺点已经得到了很大改善。
我们的第二选择是 Python,从开发者职业生涯长期来看,Python 是非常好的选择。正如我们提到的那样,Python 已经广泛应用到科研和教育领域。它也是机器学习、人工智能和数据科学相关领域的主导语言。在构建用户界面时,JavaScript 比 Python 具有明显的优势。但随着时间的推移,这种优势可能会不再显著。对于初学者来说,Web Assembly 标准使得其他高级语言来编写基于浏览器的应用程序变成可能。此外,如果语音交互得到大众认可,那么图形用户界面将变得不再那么重要。亚马逊采用 Python 来开发 Echo 语音助手,因此 Python 已经在该领域占据了先机。
在企业级应用领域,你需要在 Java 和 C#之间进行选择。这两种语言在语法、功能和基础结构方面都非常相似,你可以根据个人偏好、工作可用性或者掷硬币的方法来做出选择。正如我们指出的那样,Java 比 C#历史更为久远、更受欢迎,并且提供的职位更多。而另一方面,微软的积极支持及其使 C#成为真正的跨平台解决方案的动力又为 C#的未来奠定了更好的前景。Java 仍然是 Android 的编程语言,但微软的 Xamarin 允许开发者使用 C#编写 Android、iOS 和 Mac 应用程序。需要知道的是,C#在创业社区声誉不好,在硅谷非常不受欢迎。在这些圈子中,C#开发人员通常被视为二等公民。
此外,开发者还需要注意的是,在申请 Java / C#企业级开发职位时,面试官将会考察你构建后端应用程序的能力,而不会局限某种语言。在解决实际问题时,你需要为解决方案编写具体的代码,这样你就可以在解决实际问题的同时展示自己对语言功能的了解程度。
最后,C 和 C ++都算作通用语言,但在实践中,它们主要用于特定领域。C 语言主要用于系统和嵌入式编程,C ++ 则擅长高性能以及资源密集型应用程序,比如实时图形应用程序。它们两者在各自的领域中很少有替代者,你应该在需要构建这些类型的应用程序时选择学习这些语言。
最重要的是,在参加编程面试时,请确保自己了解这门语言的方方面面。通过面试并非易事,你需要对编程语言的优势以及局限性足够了解,以便让自己的求职之路变得轻松。
原文:https://hackernoon.com/best-coding-languages-to-learn-in-2019-b49b49250a25本文为 CSDN 翻译,如需转载,请注明来源出处。