24

编程语言的被淘汰:选错语言毁终身

 3 years ago
source link: http://www.phodal.com/blog/deprecated-language/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

在我当前所在项目里,其中的某一个子系统是用 Groovy 中的 Gradle 插件。Groovy 作为一个运行在 JVM 上的脚本语言,天生具有胶水的特性。加之,它支持 DSL 与其程式的简洁语法。嗯,如果不考虑性能问题,这真的是不一个不错的语言。

可真的是如此吗?

开始之前,我再次 FBI warning 一下:

  1. 关于编程语言的讨论,并非能真实,都存在或多或少的个人偏爱因素。因此,文中的某些观点或许会有些偏颇。若是不正确又或者是出入较大,也希望大家能指正。
  2. 这里的场景主要是基于 团队协作 的场景之下讨论的,而非个人项目,又或者是小项目。也就是说,只有团队协作时,才会出现的问题,才会出现各种讨论。
  3. 说起这一点我也是有个人偏好,如业余开发选各种语言,而真正做项目的时候,选的语言便是 Java;业余开发用 React、Stencil.js,在公司做项目的时候,还是 Angular 大法好。

引子 1 :编程语言的读与写

我们都知道, 编程语言是写给人看的代码,写机器运行的机器码 。所以呢,对于编程语言而言,我们会有一个简单的判别标准,即它的 读与写 。从使用体验上呢,我们可以分为:易读易写,易读难写,易写难读,难写难读,这么四类的语言。

为了贴合文章的主题,我大概对我在项目上用过的 JVM 语言做了一个分类。(PS:真实情况下,差异没有这么大。)与此同时,由于每个语言的使用场景不一样,我们并不考虑诸如于性能等问题。

难度 易写 难写 易读 Java Groovy 难读 Kotlin Scala

简单说明一下 (笑,我们并不讨论他们的优点。例子中的 Kotlin 不太适合,只是我暂时没有在项目上用过其它 JVM 语言,也许 JRuby 就不好读了):

Java 语言嘛,大家都懂,又好读又好写,所以 Java 程序员便宜。

Groovy (Gradle 所采用的 DSL 语言)难写的地方在于,文档少、语法糖导致IDE 支持差(相对而言)。事实上,它也不是那么好懂,在 IDE 支持的情况下,要用碳基脑做个类型推断。

Kotlin,如果已经熟悉 Java 或者其它语言的话,写 Kotlin 并不是一件难事。这件事情难就难在阅读别人的 Kotlin 代码,可能会有点费劲,除非你有良好的 IDE 支持——它的亲爸爸可能是 Jetbrains。离开了 IDEA,找个扩展(extension)都得找半天。所以难度总体上还是不难的,只是相对难读一点——因为语法糖。

Scala,早期的某个项目,我几个月后看不懂几个月前写的代码。

而如上所说,对于语言每个人是有偏好的。所以,这里依旧是我的一些个人观点。 我也并非这方面的专家,只是从个人阅读开源代码和编写相关代码的感受来说的。

引子 2: 适用领域与流行应用

谈及编程语言,我们要讨论的是另外的另一特质:适用领域。如我们熟悉的:

  • Golang 背靠云原生和 Google
  • Python 是科学家们的偏好,毕竟不是以代码为生。
  • JavaScript 是交互方式发生了变化
  • Ruby 是 Rails 框架,所以流行开了。
  • Java 用于企业编程,因为程序员便宜

而诸如 Rust 这样的小类语言,还没有正式有一个能发扬光大的场景。

引子 3 :编程的快乐,先写得爽

有一些语言能让你拾起编程的快乐,比如 Ruby,但是也能让你不想去维护代码——让人又爱又恨的 Method Missing,可以让你搞起元编程。也能分分钟让你看不懂别人写的代码。如果没有文档的话,那么我觉得你不会再看了。

又比如说,操作符重载也是一个让人写的代码更加直观。嗯,再重载一下 赋值操作符 ,是不是非常爽。

对于快乐来说,维护性那是以后要考虑的问题。

编程语言的被淘汰

在项目上经历了惨痛的 Groovy 开发大型项目的经验后,我和我的同事们一致觉得这是一门可能被淘汰的语言。主要原因有这么几个:

  1. 可维护性丢失
  2. 缺失更好的 IDE 支持(相比于 Java 之类的)。说白了就是开发人员写起来不爽。
  3. 在最广泛的场景之下,可迁移语言出现(如 Kotlin Script)

如果你还想把编程语言的一些缺点考虑一下,那也是可以的。

可维护性丢失

这也并非是语言本身的问题,而是语言应对大型项目时,将会遇到的一个挑战。对于大型项目而言,自由灵活的语法糖会带来大量的问题。而随着项目的进一步扩大,保持同一套代码风格容易,而要使用同一套语法越来越困难。如同样是声明类型,有的用具体的类型,有的则是用 def 或者是 var

缺失更好的 IDE 支持

嗯,如果你习惯了用 IDEA 对 Java 代码进行快速的重构之后。而与此同时,你并不能使用相似的方式来对你的 Groovy 代码进行重构。你们就会慢慢陷入了一个循环,既然有一个更好的语言,为什么我们不去使用它们呢。

退而求其次的,为了使用 IDEA 的高级功能,如重构。我们开始将代码中的 def 转换为具体的类型。

可迁移的语言出现

而其实上面两个问题,并不是这个语言的主要问题。毕竟,对于小的项目来说,IDE 和可维护性支持都不是问题。

过去,我们根据 Gradle 官方文档,使用 Groovy 来编写 Gradle 插件。而有一天,Gradle 官方文档同时提供了 Kotlin Script 的支持。

这就相当于是,上帝真的抛了个橄榄枝给你。你可以同时拥有更好的 IDE 支持,更好的可维护性。同时,还可以快速地迁移过去。为什么不呢?

其它

与之相似的一个例子便是 JavaScript 和 TypeScript,但是浏览器运行的是 JavaScript。所以,JavaScript 并不能这么容易被取代。

结论

有没有可能出现一个兼容所有语言的语言?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK