0. 如何判断一门语言的好坏

我在组内推广 Kotlin 遇到不少挑战,虽然我自己觉得它确实是一门优秀的语言,有着丰富的特性,能提高我们开发效率,减少 bug 的出现,但同事们并不觉得。而且他们的观点往往不是“Kotlin 并没有比 Java 好多少”,而是“Kotlin 就没比 Java 好“。Kotlin 语法不习惯;Kotlin 这样强推这么多年,也不温不火,说明 Kotlin 不行。

所以本着“先问是不是,再问为什么”的原则,我们在讨论“Kotlin 比 Java 好在哪里之前”,必须先说清楚“Kotlin 比 Java 好吗”这个问题。

关于判断语言是否优秀,我们听过最多的可能就是“XXX 是最好的语言”了。不过这种旧世界的观点,在大家充分学习了网络上的编程知识之后,现在都成为大家调侃的段子了。现在,我们更喜欢“编程语言没有优劣之分”,“没有最好的编程语言,只有最适合的应用场景”这样的论调。这听起来就很有哲理,很编程正确嘛!如果把这些的观点套在 Java 和 Kotlin 身上,也可以得到“要根据具体场景,有些场景确实 Java 更好”的观点。

不过今天,我们不谈这些和稀泥的观点。这篇文章会告诉大家,客观准确评判一门语言好坏的标准。

无论如何,编程语言是给人使用的,那我们就从人本身特点出来来讲这个逻辑。我们人是靠大脑思考的,而大脑有个致命的缺点:容量有限,且有一定错误率。这就导致我们程序员在编写状态复杂流程冗长的代码的时候,容易出现错误。这是人大脑的特点决定的,无法避免。

但劳动人民的智慧是无穷的,程序员们想出各种办法来降低自己犯错概率。从机器码到汇编,到面向流程,到面向对象,到设计模式,编码规范,高级语法特性,不断有新编程技术的出现,让程序员们可以写更简单的代码。也就是用更抽象的表达来表示同样的意图

阿拉伯人:30 加 42 等于 72。

法国人: 30 加 40又2 等于 60又10又2。

你能想象,用汇编去实现你现在要的一个业务,需要多长时间?写出来会有多少个 bug 吗?当你用 Python 快速实现了一个算法并开始验证的时候,别人可能还在用 C++ 吭哧吭哧地写着 std::vector 的 for 循环;当你用 Swift 快速实现了一个 iOS demo 的时候, 别人可能还在用 objective-C 吭哧吭哧的写着头文件声明;当你用 Go 的协程快速实现了并发处理时,别人可能还在用 Java 吭哧吭哧地实现一个线程池。又或者说,用 C++ 和 Java 实现同一个需求,C++ 你需要花费额外的精力关注内存管理,数组越界,类型安全等问题,这样你留给业务本身的精力就少了,开发变慢了,bug 也更容易出现了。

Java:你知道单例线程安全的四种写法吗?

Kotlin:你是说 by lazy 吗?

编程语言是为了实现业务而存在的,那我们就应该选择一门实现业务编写效率高,维护成本低的编程语言。

编写效率高意味着同样的功能我可以用更少的代码实现;同时 sdk 功能齐全,轮子多,大部分基础组件不需要重复开发。没错就像 Python 那样。Kotlin 相比 Java,他的语法表达更简洁,更容易写出低耦合,高内聚的代码;且和 Java 互操作的特性,可以直接使用 Java 的轮子,大大缩短了建设 Kotlin 生态的过程。

维护成本低分为几个方面,分别是:bug 少,代码简洁易懂,对需求变更友善。

bug 少。国外有对千行 bug 数量进行了研究,研究提出 bug 数量和所使用的语言没有直接关系,和语法表达流畅性有关系^[https://stackoverflow.com/questions/2898571/basis-for-claim-that-the-number-of-bugs-per-line-of-code-is-constant-regardless], ^[https://stackoverflow.com/questions/2898571/basis-for-claim-that-the-number-of-bugs-per-line-of-code-is-constant-regardless]。 我觉得可以理解为,人大脑的犯错频率是比较固定的,使用时长越长,出现的“bug”也就越多。如果你能通过选择一门语言,更快的实现指定功能,那么 bug 数量会相应减少。

代码简洁易懂。Kotlin 需要编写的代码更少,是因为 Kotlin 对语意有更精简的表达,你在习惯之后可以比 Java 更快的阅读完同样的功能。这点在后面我会继续说明。

对需求变更友善。这是代码简洁易懂的自然延伸,所谓 less is more 嘛。

Pythonista:人生苦短,我用 Python。

Androider:以前我没得选,现在我想做个 Kotlin boy。

PS:我也了解到很多同学拒绝 Kotlin 的理由是“不习惯”。比如说语法用着不习惯,看着也不习惯,很难看懂云云。我想说的是,无论是编程语言还是其他工作外的事,千万要忌讳用“习惯”作为理由。那些 30 多岁的外企程序员,失业中年危机,不就是“习惯”习出来的么?习惯会让你避开新的东西,而能让你能力,事业,资产产生“增量”的,往往就是这些新的东西。新的东西最容易产生“增量”。

我们判断一个东西好不好,有没有价值,有没有必要去投入,不要用“习惯”。要把好与不好列出来。就像我这样,我说 Kotlin 好,我把好的理由讲给你听,你觉得没道理,你可以针对这些点进行反驳,或者提出新的观点,然后和我进行讨论。用“不习惯”作为理由来拒绝,只会让自己错失“增量”的机会。

版权所有,转载请注明出处:
https://sickworm.com/?p=1766

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据