
来自翻译:这篇文章是经验丰富的前端开发人员Gal Schlesinger对
原始文章的略微翻译。 他非常喜欢编程,并且他的业余爱好是研究各种(有时是非常出乎意料的)编程语言,既用于工作目的,又用于自己的宠物项目。 Gal还谈到了本材料中其中几个的优缺点。
尽管实际上我经常使用Java,JS和Ruby,但我还是喜欢学习新的语言和框架。 在我看来,持续培训有助于形成有趣的新思想,如有必要,可以将其用于解决特定问题。 另外,函数式编程有助于更好地了解面向对象的编程,并且与Rails的持续合作使您能够了解测试的许多细微差别(当然,如果您进行练习)。 问题是,在学习其他语言的过程中,迟早您会开始怀疑:它们之间是否有理想的地方,可以收集您在其他语言中发现的所有有用功能?
Skillbox建议:实用课程“ Mobile Developer PRO” 。
我们提醒您: 对于所有“ Habr”读者来说,使用“ Habr”促销代码注册任何Skillbox课程时均可享受10,000卢布的折扣。
我想补充一点:我对编程语言的偏好可能与您不匹配。 在本文中,我描述了我在过去几个月中在从事大型项目以及我在业余时间创建的项目中获得的经验。
红宝石
我开始学习Ruby只是因为他的社区不断重复这种想法,即这里的一切都与我以前工作过的Java不同。 我真的很喜欢露比 这是一种很棒的语言,具有大量现成的库(我们称为gems,gem),可让您快速开发并使用新的应用程序。 Rails-可以称为“坐下来走了”。
Ruby是一种面向对象的语言,因此无论您决定选择哪个库,所有代码都将具有大致相同的样式。 这里的社区非常强大:程序员更喜欢修改现有的库,而不是每次都创建一个新的库(以ActiveRecord和Sequel为例)。 此功能使您的生活更轻松。
没错,Ruby在性能方面还不够快。 组件通常很“重”,需要很长时间才能加载。 与Rails一起练习很有趣,但是运行应用程序意味着花费时间和金钱。 Heroku和AWS ECS就是这样的示例:您必须支付RAM,文件空间,流量和正常运行时间。 另外,应该记住,平均大小的应用程序的估计开始时间为5-10秒。
Java脚本
我喜欢JavaScript。 我的大多数前端项目都是用于Web的,因为现在任何人都可以访问浏览器。 这是一种相对易学的语言,非常常见,入门门槛低。 开发人员工具非常好,使用JavaScript实现原型只是一个梦想。 社区中也有许多成员,他们非常重视改进组件。
JS有很多缺陷。 主要之一是根据社区的喜好将社区划分为各个语言发展领域。 因此,主要的区别在于类型系统(流与TS),使用库的方法和其他所有方法都不同。 结果,在许多发展中,这些模块只是“原始”的。
斯威夫特
在使用了前两种语言之后,我开始学习Swift。 我需要在“开发者游戏”中提高语言能力。 最初,我处于零级,因为我只知道如何使用Native React创建应用程序。 原则上,这足够了,但是我想了解更多。
Swift是一种静态类型的语言。 最初,它是为在Apple生态系统中开发应用程序而创建的,但后来它成为开源的,因此他们现在与之一起为Linux创建应用程序。 该语言的优势在于,用它编写的应用程序可以快速加载,并且编译过程清晰明了,因此运行时错误的数量逐渐减少。
该语言的语法很有趣,并且不太难学,某些功能有助于避免错误和问题。 例如,如果代码的一部分“期望”一个字符串,则不允许错误地传输整数。 这使您可以在开发过程的最早阶段捕获并纠正错误。
为什么Swift不是我的英雄? 事实是,在Xcode之外的其他编辑器中用Swift编写并不是那么容易。 我通常使用Vim,其他编辑器则较慢。 我以某种方式尝试了VSCode和Atom,但我并不真正喜欢它们。 也许最后,我将重点介绍Swift CLI,它将允许您为编辑器创建插件,但现在不行。 Swift也没有静态编译,因此要使用CLI,您将需要使用Swift配置环境。 这对于Mac应用程序是正常的,但是服务器是Linux。
ReasonML
我对Facebook为Ocaml开发的新语法和工具包感到非常满意。 tulkit非常成熟,它提供了许多功能。 好的就是OPAM,程序包管理器,以及Merlin和OCaml / Reason。 所有这些都可以在Vim上很好地工作。 即使您不提及自动完成引擎和其他功能。 这里的开发人员工具非常好。
可以使用BuckleScript在JS中编译Reason,然后通过Reason / OCaml代码生成可执行的JS。 这是惊人的,因为在这种情况下,我们获得了具有出色JS交互性的全类型系统,并且我们还可以使用必要的库。
我唯一不喜欢的是我必须创建许多类型定义以供依赖使用。 但这没什么,因为我们不需要组装整个模块,而只需组装我们使用的特定功能/类/方法的输入/输出。 所有这些工作都非常迅速,没有任何问题。
事实证明,创建本机Reason应用程序的困难在于使用了某些库。 这主要是OCaml,但是由于OCaml和Reason可互换,因此我使用了Chrome扩展程序来处理Reason代码。 原来的问题是,可能是由于Chrome扩展程序中缺少PPX而导致无法将OCaml代码转换为Reason的原因。 据我了解,PPX语法扩展是一个转换代码的宏。 这有点像Babel插件。
顺便说一句,Reason / Ocaml不支持多核,为此有Lwt。 但是对于这个库,仍然没有可理解的手册!
OCaml / Reason的进入阈值很高,这有点令人沮丧。 社区还不太发达,很少有人能很好地解释奇怪的事情。 也许这会随着时间而改变。
高朗
只是一种奇妙的语言。 这很容易学习,代码可以编译和运行而不会出现问题。 支持多核系统和许多其他有用的功能。 该社区相当发达,拥有大量专家。
事实上,有很多用Go编写的强大模块和应用程序,例如Docker,Kubernetes,CockroachDB,这意味着您可以在应用程序内部为Raspberry pi创建基础结构二进制文件。
缺少泛型(可以在下一版本中添加)很奇怪,因为使用图,树和算法时存在“结构”困难。 我希望编译器为我做所有事情。
另外,对我来说问题不是非常清楚的模块化VGO系统。 随着时间的推移,随着社区的逐渐发展,我们将了解更多有关它的信息,但是到目前为止,信息很少。 语言本身很复杂。 这不是不使用它的原因,但是现在我避免使用Golang进行全职工作。 可以这么说,他很无聊。 也许随着时间的流逝,我会重新考虑我的观点。
水晶
我们从Ruby开始,所以我建议完成Crystal。
这是一种新语言,至今仍未升级到1.0版本,该版本看上去几乎与Ruby相似,但是它是静态类型的,而且速度很快! 它为开发人员提供了大量功能,包括可选类型,CSP等。 有一些新的Crystal Web框架,例如Lucky和Amber。 有凯末尔(Kemal),就像Sinatra,但是对于Crystal(Crystal),还有ORM。
但是,由于该语言还很年轻,因此尚未为主动使用做好充分准备。 例如,我希望Crystal使用所有内核,例如Go。 在悬停期间具有自动完成功能和类型提示的编辑器也不是多余的。 我有点担心Crystal可能无法升级到1.0版的想法。 我衷心希望他能成功。
您最喜欢的编程语言是什么?为什么?
Skillbox建议: