你应该知道的6种编程语言
1. Javascript
感觉就像现在到处都是Javascript,事实就是如此。不再局限于客户端开发,Javascript已经成熟为可以用于服务器端的语言。一个人只需要阅读工作委员会和各种博客,以了解Javascript是非常值得留在的地方。它总是让我想到阿特伍德法则,它指出:
“任何可以用Javascript编写的应用程序,最终都会用Javascript编写”
问题的实质是,那里没有任何工作可以从没有Javascript知识的人那里获益。这是一种非常简单的学习语言,但是,学习得越多,它越复杂。Javascript语言充满了微妙的细微差别,甚至可以欺骗最有经验的Javascript开发人员。
对于我来说,了解Javascript并不难,因为我们知道一种可以轻易转换成Javascript的语言。你想学习这种语言的原因是,如果你正在构建一个大型的JavaScript代码库并且想要提高可维护性。我的首选是Typescript,它是Javascript的超集。还有其他的Javascript替代品,如:
Coffeescript - CoffeeScript是一种可以编译为JavaScript的编程语言。它增加了受Ruby,Python和Haskell启发的语法糖,以增强JavaScript的简洁性和可读性。
Elm - Elm是一种特定于领域的编程语言,用于声明性地创建基于Web浏览器的图形用户界面。Elm纯粹是功能性的,并且重点关注可用性,性能和稳健性。
还有一个称为Flow的“类型检查器” ,可以与Javascript一起使用。尽管目前我没有看到采用任何接近Typescript的方式。
2.面向对象编程(OOP)语言
在大学时,我主要使用Java作为我的主要编程语言进行分布式计算。尽管如此,我还使用C ++和更少见的编程语言Eiffel进行了大量的编程。但是,Java一直是我的最爱。学习Java确实使我能够轻松适应其他编程语言。我唯一可以说我讨厌Java编程语言的是“检查异常”。不,没有任何事情能够说服我,否则,尽管他们可能有技术上的优点。
这是C#编程语言,我最终花费了大部分时间。现在我已经用C#开发了超过10年的主要语言。对我来说最大的缺点是C#从来没有开源或跨平台。不过谢天谢地,最近几年这一切都发生了变化,我很高兴地在Linux操作系统上开发C#应用程序。这很奇怪,但最近,JavaScript语言发生了很大的变化,当我编写Javascript时,它通常感觉就像我正在编写C#代码。最近,例如,当异步/等待功能被添加到Javascript中时,我感觉就像在家里一样,因为我一直使用非常类似的模式在C#中编写多线程异步程序多年。不过,我必须承认,我并不喜欢在JavaScript语言中引入“面向类的”概念。
那么我认为你应该学习C#,Java还是C ++等?我个人的感觉是,这并不重要,但挑一个。就像Bjarne Stroustrup在上面的视频中提到的一样。这些是一组语言,并且知道可以帮助你了解所有的语言。从我个人的经验中可以看到,它从Java和C ++开始,但最终主要是使用Javascript和C#编程。
3. Python
Python已经存在很长时间了。有时候被称为脚本语言,我会更进一步并将其称为通用编程语言。最近,大约2017/2018年,它一直在大量采用。如果没有在讨论中提到Python,就不能谈论数据科学。另一个当然是R,但现在我的第一选择是Python。我大多是Python爱好者程序员,并没有在任何生产环境中使用它。这并不意味着我认为它是一种无聊的语言。反之。再一次,只需要访问一个工作委员会或一些趋势统计数据就可以认识到Python是许多人的明显喜爱。随着机器学习和人工智能的兴起,Python似乎也成为这些领域的热门选择。
4. SQL(结构查询语言)
是的,SQL是一种语言。更具体地说,SQL是更接近人类语言的第四代语言(4GL)。我有时会想,SQL是不是世界上最普遍的编程语言。SQL无处不在,在我所有的工作经验中,我都没有必须使用SQL。无论是MSSQL,Postgres,MySQL还是Oracle,SQL都以某种形式存在。当然,SQL并不像那些新的NoSQL技术那样性感和有光泽,但是SQL在这里仍然存在很长时间。有趣的是,Couchbase是一个NoSql数据库,使用N1QL(发音为“镍”)查询语言。关于N1QL的有趣之处在于它采用了几乎完整的SQL ANSI-92合规性。甚至有些工具如NoSqlBooster 允许人们通过MongoDB数据库编写SQL查询。
5. BASH
BASH是一种脚本语言,它是图灵完成的。就像我之前在编程语言中的选择一样,BASH将它列入我的列表的原因是因为它的大量采用和社区。对我来说,作为国王或Linux之神的差异就是BASH编程的能力。并且能够与VIM合作;)
而且,Linux是服务器计算中使用最多的操作系统。因此,我认为尽可能多地掌握有关Linux的知识是一个好主意,因为您很可能迟早都会与之合作。学习BASH脚本是掌握Linux的一部分。了解BASH还可以帮助您编写可重复使用和自动化的任务,这些任务可以共享和使用我的许多任务。因此,除了成为一个有价值的系统管理员工具之外,我认为它也是一个有价值的工具。
6.功能编程语言
我没有使用纯粹的(或接近纯粹的)函数式编程语言开发软件的经验。因此,我不能根据经验做出任何推荐。然而,在没有经验的情况下,我转向数据来帮助推动我的决定。在过去的一年中,我一直密切关注函数式编程语言。总是似乎吸引了最多关注的3种函数式编程语言(以我的经验)如下:
Haskell - Haskell是一种标准化,通用的纯函数式编程语言,具有非严格的语义和强大的静态类型。
Scala - Scala是一种通用编程语言,为函数式编程和强静态类型系统提供支持。旨在简明扼要,许多Scala的设计决策旨在解决对Java的批评。
F# - F#是一种强类型的多范式编程语言,它包含功能性,命令性和面向对象的编程方法。
我怀疑函数式编程将成为不久的将来编程技巧。我之所以这样说是因为编写并发和并行程序的需求增加。这种需求是由不断变化的微处理器物理架构驱动的。简而言之,作为程序员,我们只需要担心编写与单核处理器一起工作的程序。直到几年前,那是。如果我们需要更多的速度,我们会提高处理器的速度。近年来,处理器行业达到了提供更高处理速度的极限。因此,处理器体系结构发生了变化,每个处理器可提供2,4和更多内核,以帮助更快地运行程序。但节目没有' 运行速度更快,因为没有人能够使用编程语言来有效利用额外的内核来编写真正并发的程序,而没有副作用(稍后会有更多内容)。除那些使用函数式编程语言的人外没有人。事实证明,函数式编程语言对于多核,多线程和分布式系统域非常有用。人们常常听到被宣传为使用函数式编程的一个最大优点就是消除“副作用”。当你有一些代码正在访问或改变某些数据的状态(如变量)时,这种“副作用”就是该代码的范围之外。在有多个线程的情况下,与副作用相关的问题会加剧。应用于并行计算的另一个重要概念是Amdahl定律。解释阿姆达尔定律需要完整的文章,我不会在这里提供。然而,我想引导你对阿姆达尔定律有一个有趣的解释这里。我应该提到像GO,Rust,Java和C#这样的编程语言现在也具有并发性(编写并发程序的能力),并且确信这只会随着时间的推移而改进。
我鼓励任何新编程经验丰富的人花时间学习函数式编程语言。如果有的话,它会帮助人们更好地思考如何正确编写没有副作用的程序。而且,功能范例也正在进入许多流行语言,如Java和C#。
就功能编程语言而言,Scala是我最感兴趣的。对我而言,它是功能性编程领域的后起之秀。
这就结束了我认为你应该学习的编程语言方面的思考。在下一节中,我将结束这篇文章,并提供一些我认为也很重要的编程语言,其中任何人都可以很容易地替代我已经提到的那个。
结论
根据我的经验,没有编程语言来统治所有这些。我主要是为了以最简单的方式完成特定工作而选择语言。我讨论的编程语言决不是最流行的语言。但他们是拥有大量社区的语言,大量的文档和学习资料以及大量的工作。
最后,我想提一些我喜欢尝试的编程语言。他们中的任何人都可以很容易地取代我在前面章节中讨论过的编程语言。他们列出如下:
Rust - Rust是由Mozilla Research赞助的一种系统编程语言,它将其描述为一种“安全,并行,实用的语言”,支持功能和命令程序范式
GO -Go是2009年在Google创建的一种编程语言。它是Algol和C传统中的一种静态类型编译语言,它增加了垃圾回收,有限的结构类型,内存安全特性和CSP风格的并发编程功能。
Kotlin - Kotlin是一种静态类型的编程语言,可以在Java虚拟机上运行,也可以编译为JavaScript源代码或使用LLVM编译器基础结构。