发布于 2026-01-06 11 阅读
0

Kotlin:一门编程语言为何既年轻又成熟?

Kotlin:一门编程语言为何既年轻又成熟?

本文将探讨为何一些具有现代特性的新兴编程语言难以被快速普及。此外,我们还将分析一个特殊的案例,该案例中的语言恰好满足了特定条件,既年轻、现代又成熟,完全具备了小规模和大规模应用的潜力。

免责声明:部分细节有意省略。阅读时请保持开放的心态。如果某些内容显得天真或不够真实,请记住,作者已经考虑到了事情的方方面面,甚至包括那些不为人知的方面。欢迎在评论区进行更深入的讨论——绝对值得您花时间!

我们都知道,大多数软件开发人员都喜欢追逐新鲜事物,就像我们喜欢创造它们一样。编程语言也不例外。

如今,新的编程语言层出不穷,就像雨后春笋般涌现:

为什么新的现代语言无法迅速被广泛接受?

年轻语言的一个显著特点是,创造者和社区有机会尝试不同的特性和设计,从而有可能解决现有成熟语言的一些问题。但请注意,任何问题的解决至少都会带来两个新的、不易察觉的问题。因此,这种持续改进的循环永无止境。

虽然新兴语言可以探索更高级的特性和设计,但它们通常缺乏完善的库、框架和工具生态系统。此外,即使社区开发了这些工具,人们仍然需要学习它们,这意味着它们的生产力(尽管只是暂时的)会大大降低。我甚至还没提到潜在的漏洞、bug等等问题呢。

如果这种新兴的现代语言能够依托现有的成熟生态系统,那该有多好?如果使用现有的库、框架和工具完全自然而然,毫不费力,那该有多棒?

如果你问我这些问题,我会告诉你,你描述的或许就是 Kotlin。Kotlin 是一种编程语言,它能让你自然而然地使用 JVM 生态系统中的任何库、框架或工具,而不会感到任何不便。

以前也有一些语言可以做到这一点,比如 Scala、Groovy、Clojure 等等。但它们都犯了一个错误:无法自然地使用。

为什么这些语言不愿依赖现有的成熟生态系统?

要么使用相同的框架或库并不自然,要么根本无法使用相同的工具。即使在可以自然地使用相同的工具、框架和库的情况下,大多数社区成员却另辟蹊径,构建了新的工具、框架和库(说的就是你,Scala 和 sbt)。

我的直觉是,这种情况的发生是因为这些新语言(“有望取代 Java 的语言”)的大多数早期采用者与 Java 语言和 JVM 生态系统之间存在某种对抗关系。

他们讨厌这样。

作为早期采用者,他们决定了游戏规则,因为在新兴语言诞生的最初几年里,他们占据了社区的绝大多数。这样一来,他们就能编写所有崭新的工具、框架和库。而且,他们也是在实际公司和创业公司中用这些语言启动新项目的人。

这样一来,社区风格便逐渐形成:人们使用独特的工具、框架和库。有时,这些工具、框架和库的设计甚至刻意与 JVM 社区早期的替代方案截然不同。

这使得学习曲线非常陡峭,因此这种语言只被志同道合的人采用,以及那些别无选择只能维护已经在使用这套工具的代码库的穷苦开发人员。

如何吸引乐于利用现有生态系统的不同早期用户?

Kotlin 与这种方法截然不同。其第一条规则是:“与 Java 和 JVM 生态系统 100% 双向互操作性。”

因此,该社区吸引了那些并不想完全采用不同方法的人;相反,他们想要一种更现代的语言,并且他们希望将他们在使用像 JVM 这样的成熟生态系统时所获得的技能、知识和经验转移过来。

这些早期采用者不想完全重写他们现有的代码库,因为它们很大,所以能够只用 Kotlin 编写新代码,而保留 Java 中的旧代码,这对他们帮助很大!

一位软件工程师同事的小故事

我给你举个具体的例子:

克拉拉是一名软件工程师,就职于一家大型公司,主要使用 Java、JVM 和 Spring Boot。克拉拉的专业水平是高级,甚至可能更高:

  • 她运用了最佳软件实践,
  • 懂得如何迭代地设计简单的软件,
  • 她能解决你抛给她的任何复杂问题。
  • 编写代码时要了解她的受众(团队成员的当前水平和预期未来水平),
  • 沟通能力强,团队合作精神好
  • 指导和培训其他开发人员,
  • 今天就能担任团队领导的角色,
  • 他过着终身学习的生活。

她目前的开发工作流程包括使用 Gradle 构建应用程序并自动化开发任务,她则在 IntelliJ 等现代 IDE 中完成编码工作。她对这些工具和技术没有任何抵触情绪。

恰恰相反:她很喜欢他们!

不过,有时候她也会羡慕这些很酷的现代编程语言,因为它们可以编写一行数据类,总体上样板代码更少,而且空指针异常也不是每一步都令人恐惧的威胁。

Kotlin 编程语言最近已达到“可用于生产环境”的标准。

于是她尝试构建一个小型 Web 应用(比“Hello world”稍微复杂一些)。她似乎仍然可以使用相同的构建工具——Gradle;仍然可以使用她喜欢的任何库;更重要的是,她可以使用相同的 Web 框架——Spring Boot。

使用所有这些功能一点也不尴尬,感觉就像在它们的“原生”环境——Java 中一样自然。

现在,她又有了下一个问题:“这门语言很棒,但它很新……难道我必须放弃IDE的所有强大功能吗?”因为大多数现代语言都会面临这种情况——IDE的支持远远落后于语言本身。

现在她惊喜地发现:她需要的 95% 的 IDE 功能都已具备并得到支持:

  • 基础和高级重构,
  • 跳转至定义,
  • 查找用法,
  • 从集成开发环境运行应用程序和测试,
  • 在当前环境下运行单个测试,
  • 调试器,
  • 代码补全,甚至跨语言
  • ETC。

这完全合情合理,因为这门语言是由开发集成开发环境(IDE)的同一家公司(JetBrains)开发的。这无疑确保了相关工具至少在一定程度上能够跟上这门新语言的步伐。

“这听起来太棒了!”克拉拉心想,“我现在是不是得把我在工作中使用的应用程序完全用 Kotlin 重写一遍?”

促进采纳的最重要规则

她在这里也感到惊喜。她只需要添加 Kotlin Gradle 插件(只需在一个文件中修改几行代码),就可以开始向源代码库添加 Kotlin 文件。所有用 Java 编写的旧文件仍然能够正常工作。

此外,跨语言调用开箱即用:她可以从 Kotlin 调用 Java 代码,也可以从 Java 调用 Kotlin 代码;而且一切都感觉非常自然。调用代码几乎感觉不到它调用的是哪种语言,因为两者之间没有任何区别。

这就是从一开始就将“100%互操作性”作为最重要的比赛规则,能够为现代新语言带来的好处!

所以,如果你要设计一种新的编程语言,我建议你把它作为首要任务之一,因为这将大大提高它的普及率。哪个库、工具或语言的开发者不想要这种强大的普及能力呢? ;)

正如你所看到的,克拉拉并不是在寻找一种完全不同的编码方法,而是在寻找一种方法,保留 75% 的良好运行方式,并可能使用该语言的一些更现代的特性来显著改进其余 25%。

这可以通过让语言自动处理显而易见的情况来减少样板代码,这样就无需每次都手动指定。这也可以是一种不同的做法,即把所有内容都变成表达式,这使得特定场景更加符合人体工程学,也更易于阅读,例如 try-catch 代码块,其中需要在“try”部分设置一个变量,并在“catch”部分抛出一个更复杂的错误。

这些因素以及其他因素都显著提高了可读性。

此外,拥有顶级的不可变变量和可空/不可空类型,可以消除很多类型的错误。这真是太棒了!

站在巨人的肩膀上!

大多数现代语言的设计初衷都是为了独立使用,与现有的库和工具生态系统脱钩,这要么是出于设计考虑,要么是受社区准则或文化“强制”的。

这些现代语言或许会被一些人采用,但最终要么会消亡,要么只会停留在小众市场,因为大多数专业人士会继续使用成熟的语言,毕竟它们在几乎所有方面都提供了更好的支持。当然,这条规则也存在一些罕见的例外。

如果一种新的编程语言想要保持强劲的发展势头,它就需要站在巨人的肩膀上。

所以,与其背离成熟的语言,另辟蹊径,不如尽可能地利用成熟的生态系统,并在此基础上创造更多价值。这样一来,学习这门语言的人无需放弃任何东西,反而能从中获益——这才是真正的双赢!

这是否激起了你对 Kotlin 的兴趣?

我写了一本共 4 部分(总计 350 页)的“终极教程:Kotlin 入门指南”(后续还将推出更多内容),您可以免费订阅我的每月新闻通讯,即可获得此教程作为奖励。

除了 Kotlin 本身,它还包含 TDD、整洁代码、软件架构、业务影响、5 个为什么、验收标准、用户画像等诸多好东西。

—在此注册,开始学习如何构建功能齐全的 Kotlin 应用程序

谢谢,请问您有什么事吗?

非常感谢您阅读这篇文章!希望您喜欢。请在评论区告诉我您的想法!

另外,如果您能将这篇文章分享给您认为可能会从中受益的朋友和同事,我会非常开心。或者您也可以把它分享到您常用的社交媒体上!

欢迎阅读我关于 Kotlin 的博客,以及我关于 TDD 和最佳软件工程实践的博客

欢迎在 LinkedIn 上与我联系:我每周都会发布一些关于软件开发人员的生产力和幸福感、团队合作、心理健康以及 Kotlin 的简短更新。

如果你想了解更多我的观点,请在推特上关注我


原文发表于iwillteachyoukotlin.com 博客

封面图片来源:pexels

文章来源:https://dev.to/waterlink/kotlin-how-can-a-programming-language-be-so-young-and-so-mature-at-the-same-time-25j