编程语言成功的几大要素

最近,有人在推特上讨论编程语言如何才能取得成功。有人提到了社区、营销、低成本的开发人员等等。

然而,我认为这些因素与编程语言的成功并没有太大关联。20 多年来,我使用过很多编程语言,也反思过它们的优缺点。在本文中,我想总结一些常见的模式,说明为什么有些语言取得了成功,而有些语言则失败了。

解决痛点

如果编程语言没有解决任何实际的开发人员问题,那么也走不长远。成功的语言都会解决困扰开发人员的问题。在早期,性能是一个主要问题,因为那时的计算机真的很慢。C 编程语言之所以流行起来,很大程度上是因为人们可以利用 C 编写速度非常快的代码。相比之下,LISP 和 Smalltalk 由于性能低下,其发展就非常有限。

C++ 流行是因为它解决了很多 C 代码中的问题,而 Java 是因为它解决了许多 C++ 的问题。就像 Swift 解决了许多 Objective-C 的问题一样。Perl(虽然现在不怎么流行了)变得非常流行,是因为它极大地简化了 shell 编程。

从很多方面来说,Python 之所以流行,是因为它针对 Perl 带来的混乱提供了一种解决方案。而Ruby 也因同样的原因广受欢迎。从某种程度上说,它们通过不同的方式解决了 Perl 的痛点,同时又没有放弃许多 Perl 的优点。说到这里,我们不得不提兼容性和熟悉度。

熟悉度与兼容性

许多语言都利用 C 来解决问题。最有名的例子就是 C++。它使用的语法与 C 非常相似,甚至可以与 C 的代码兼容,因此你可以将已有的 C 代码与新的 C++ 代码混合起来使用。这样采用 C++ 的门槛就会降低。

Java虽然没有提供源代码兼容性,但它提供了熟悉度。它大量借用了许多人熟悉的 C/C++ 语法,同时简化了许多概念。Java 诞生之时,面向对象非常流行,它借助了面向对象的热潮,并宣称Java 甚至不允许编写自由函数。一切都必须是方法;这是面向对象的Java!虽然这是个有点愚蠢的噱头,但从营销的角度来看,效果非常好。这种说法很容易被人们接受,即便逻辑有问题。

JavaScript的创建者注意到了 Java 的广泛流行,并采纳了 Java 风格的语法。因此,JavaScript 通过熟悉的语法推动了采用。即便语义上完全不同也不重要。人们是肤浅的,如果语法看起来很熟悉,人们就会觉得这门语言很容易学习。

而Perl、Ruby 和 Python 像是存在于平行宇宙中。Unix 不仅带来了 C 编程,还带来了shell 脚本。对于简单的任务和自动化,shell 脚本明显比 C 程序更有优势。人们纷纷开始编写大型 shell 脚本,然而 shell 语法不太适合大型脚本。于是,救星 Perl 出现了。它是一种更合适的语言,而且对于熟悉shell 脚本的人来说,Perl 的语法非常熟悉。因此,任何习惯使用 Bash shell 的人都可以轻松掌握 Perl。

于是,Perl 成为了文本处理界的“瑞士军刀”。它有正则表达式,你可以与之交互。它与C、C++ 和 Java 有着不同的市场。

Python和Ruby 的成功也借鉴了这类经验。它们也是可以在 Unix shell 中轻松运行的 shell 语言。虽然二者在 Bash 之外也有很多用途,但它们的语法让 Perl 程序员倍感亲切。它们吸引了熟悉非脚本语言(比如 Java)的程序员,同时对 shell 也很友好。

因此,它们也建立在熟悉的基础之上,尽管源代码不兼容。

垄断

令人惊讶的是,通过垄断的方式将某种语言推向顶峰的做法也很常见。例如,作为 Web 语言,JavaScript 设计得相当随便。但由于它成为了网页的标准,因此垄断了客户端 Web 开发。随着 Web 越来越流行,JavaScript 的普及度也水涨船高。

Objective-C和Swift 的情况也完全相同。在 iPhone 大受欢迎、人们爱上智能手机应用之前,Objective-C 是一种相对难懂的语言,几乎只有苹果生态系统使用。我是早期的粉丝之一。事实上,在 Objective-C 被纳入苹果之前,我就是它的粉丝,该语言来自 NeXT 公司,是乔布斯在 80 年代被踢出苹果公司后创办的。

对于我来说,Objective-C 的吸引力在于它结合了 C 的性能与 Smalltalk 优雅的对象模型。当然,这种只有技术宅男才会关注的点并没有对大众带来太多吸引力。真正让 Objective-C 得到发展的是iPhone。Mac OS X 基于 NeXTSTEP,而 iPhone OS 基于 Mac OS X。在 NeXT 和 OS X 的世界中,Objective-C的地位如同 Unix 系统中的 C 一样,完全主宰一切。

事实上,我们可以说 C 流行起来的原因也大抵相同。就像 iPhone 的流行成全了 Objective-C 一样,Unix 的流行也将 C 推向了巅峰。Unix 中所有重要的功能都是用 C 编写的,因此如果你想攻克 Unix,首先必须学习 C。这就是 70 年代人们纷纷开始C 的原因。

Swift的发展思路也大致相同。苹果宣布 Swift 是未来,它将取代 Objective-C。这就等于保证了该语言的巨大市场份额。

杀手级应用

虽然上述因素可以让编程语言达到一定的流行度,但可能还不足以解释为什么这些语言会如此流行。通常,这些语言中的某些功能可以构建某款杀手级的应用。

例如,Ruby 具有强大的元编程功能。因此,有人构建了 Ruby on Rails,而这反过来又推动了 Ruby 的发展。

对于Objective-C 和 Swift,我猜你会说杀手级应用是iPhone 应用。

对于JavaScript,我们很难得出相同的结论,因为其在 Web 的垄断始终可以确保主导地位。然而我认为,可以说 Node.js 的开发巩固了 JavaScript 的地位。

虽然长期以来 Python 一直很受欢迎,但真正让它走红的是数据科学与机器学习的兴起。这些领域需要交互式解决方案。编译语言不太适合。Python 拥有 NumPy 以及其他解决方案,并且没有面临太多竞争。JavaScript 被锁到了 Web 上。Perl 是一种非常难读懂的语言。Matlab 走的是商业路线,而且年头太久远。并且二者都没有提供面向对象编程或函数式编程,只是简单的过程式编程。Lua 主要适用于嵌入,没有丰富的库生态系统。R 有古怪的语法和混乱的生态系统,对程序员没有吸引力。

然而, R 相对发展得还不错,部分原因是数据分析的兴起,以及软件行业对大数据的痴迷。

易于学习和使用

一门编程语言可以解决很多痛点,并提供很大的优势,但如果不易于使用和学习,也走不长远。请注意,易学和易用并不一定是一回事。举个例子,C++ 是一种极其复杂的语言,而且使用也很不方便。那么,它是如何变得如此受欢迎的呢?

因为它借助了 C 的成功。对于有 C 经验的人来说,学习 C++ 不会特别难。而且当初 C++ 流行起来的时候,它远比如今简单得多。此处,我们还要提一下临界质量和社区的概念。一个成功会推动另一个成功。某种语言一旦拥有庞大的社区、教程、大量用它编写的软件、愿意招聘的公司,那么无论该语言存在何种缺陷,都会得到发展。但是也不能将 C++ 的成功完全归功于社区,因为这并不能解释最初它是如何俘获社区的。

还有一点也很重要,易用性往往是表面上的。例如,Objective-C 是一种比 C++ 简单得多的语言。然而人们通常会认为 C++ 更容易学习,因为它的语法看起来更熟悉。熟悉感是强大的驱动力。

如今的 Java 可能并不是一种简单的语言,但在它刚出现时,很多改进都超过了 C++。开发人员不必了解引用、指针、指向指针的指针、地址运算符以及各种导致 C++ 开发复杂化的底层概念。

在这方面,90 年代的 Go 编程语言也有类似的感觉。它是一种非常简单的小型语言,但是没有像 Java 那样受到面向对象 炒作的影响。相反,它努力遵循 C 的理念。我记得当初 Go 刚问世不久我就尝试了一下。当时我是一名 C++ 开发人员,但我用 Python 编写了一些小型命令行工具,来简化我的工作流程。

我记得,我只用了短短几天就学会了 Go。我很惊讶它的速度竟然如此之快。对于接触过 C 和 Python 编程的人来说,Go 的库和语法似乎都很熟悉。几乎有点像使用脚本语言。我记得,很快 Go 就取代 Python,成为我编写小工具的首选语言。静态类型检查有助于发现 bug,而不会像 C++ 那样扼杀生产力。当时在我看来,Go 必然会成功。它不仅易学、熟悉、而且性能良好,并解决了真正的痛点,比如并发等。

那时,我实际上并不关心并发。我只是在比较 Julia、C#、Java、Erlang 和 Swift 的并发系统时尝试了 Go 并发。那时我才意识到 Go 的提升有多明显。

然而,我认为 Python、Ruby 和JavaScript 的兴起,很大程度上也要归功于学习这些语言的简单性。

未能成功的语言

说起未能成功的语言,我不禁会想起 Haskell、Standard ML、OCaml、F#、LISP、Scheme、D 和 Smalltalk。这些语言都很棒,可以解决实际问题。然而,尽管经过了多年的努力,它们始终未能取得任何进展。为什么呢?

Haskell是一种面向各种编程极客的语言。从很多方面来看,我都像是会写大量夸赞 Haskell 有多么了不起的文章,并再三预言 Haskell 革命即将来临。然而,我几乎从未写过关于 Haskell 的文章。为什么?

也许是因为我也是 UX 的忠实粉丝,有时会写一些有关易用性和用户界面设计的文章。从某种数学和技术的角度来看,Haskell 看起来像是天才的杰作。然而,从易用性的角度来看,我觉得它不及格。

没错,它具有数学优雅和简单性,完全不同于 C++ 的混乱。然而,高级抽象数学,无论多么优雅,都不是普通人可以轻松掌握的。相反,尽管英语十分混乱,人们还是可以学习英语。很多英语的拼写毫无逻辑,缺乏一致性。然而,人们可以容忍这些问题。尽管微积分在概念上更简单,但普通人却完全掌握不了。

这就是这些语言失败的地方。通常,它们都具有数学之美,但它们的构建方式并不适合我们愚钝的大脑。这些语言的知音人可能会觉得意难平。看似极乐世界尽在掌握,只可惜有些人就是不开窍。有时,可能只是你太聪明了,无法理解普通人的难处。

我个人认为 LISP、Scheme 和 Smalltalk 曾有过机会。对于这些语言,我认为问题不在学习有困难,而是缺乏熟悉度。与编程世界已经习惯的语法相比,它们都包含一些奇怪的语法。另一个原因是生不逢时。它们根本无法达到当时所需的性能。这些都是开源项目和互联网出现之前的时代。这导致这些语言出现了许多变种,阻碍了其发展。

尽管Smalltalk 有一个漂亮的开发模型,但它太另类了。开发基于修改镜像而不是源代码文件。它类似于直接操纵真实的数据库。这与人们习惯的方式完全不同。无论有多么优异都不重要,人们还是会选择熟悉的语言。

参考链接:https://medium.com/geekculture/what-makes-a-programming-language-succeed-de7c0d15b7f9

(0)

相关推荐

  • 十大编程语言,选择任意一门都不吃亏

    如果你是软件开发领域的新手,那么你会想到的第一个问题是"如何开始?"编程语言有数百种可供选择,但是你怎么发现哪个最适合你,你的兴趣和职业目标又在哪里呢?选择最佳编程语言以学习的最简 ...

  • 下面这些程序员大神,你知道几个?

    程序员的贡献没人能够否认,你能看到这篇文章,就是得益于程序员.有的程序员的贡献可谓是改变了人类进程.众所周知,互联网需要依靠平台和硬件来运行,然而,是谁构建了这些平台所需要的编程语言呢?程序员!下面列 ...

  • 习练易筋经的几大要素!

    一."气"是练好易筋经的核心要素 "内练一口气,外练筋骨皮."易筋经将练功分为三个层次,即练筋.练膜和练气.练筋必须练膜,练膜必须练气. 修炼内气,是练好易筋经 ...

  • 创业走向成功的五大要素

    要素一:控制权非常重要 在经营1号店的时候,我们因为对资本理解的浅薄缴了学费,在融资过程中,逐渐失去了控制权.创业者融资的时候宁可放慢速度,也不要失去控股权.有的时候,欲速则不达,公司以为引入了投资者 ...

  • 《易经》笔记丨14.影响体质的几大要素:先天与后天

    体质,是由先天因素和后天因素共同影响所形成的身体素质.每个人都有不同的体质,不同的人在适应环境变化时有不同程度的反应. 比如:不同的人对于致病因子的敏感程度和疾病发展的倾向性上都会有所不同.所以,对体 ...

  • 决定一个人成功的四要素

    我想每个人都渴望成功,可现实并不是每个人都能成功!那到底是什么决定了一个人的成功! 这里我想分享四点:趋势.认知.命格.运气! 1:趋势,纵观历史,99.99%真正获得大成功的人都是历史趋势或行业趋势 ...

  • 选择老婆的几大要素!长得漂亮会撒娇没用,有以下优点必须追到手

    原创85于先森2021-04-16 08:46:12 能够带来家庭成功,婚姻美满的女人有以下10个方面的特征: 1.知冷知热解人意 她细心.有洞察力.能从你表露的一些苗头想问题,快活时与你一同分享,有 ...

  • 选人几大要素

    选人几大要素[太阳][太阳][太阳] 1,初期搭架构一定要先选跟你关系到位的,到那能陪同你一起走完整个流程的 2,要有接受新鲜事物的,整日一层不变,仨饱俩到的人,十分安逸的人不是我们的人选,这种人只适 ...

  • “波尔加”神童启示:好奇心、兴趣和持之以恒是成功的三大要素

    三个女儿的童年合影 匈牙利的拉斯洛·波尔加与三个女儿 匈牙利的拉斯洛·波尔加和妻子 波尔加三姐妹在国际象棋领域取得的杰出成绩,缘于其父亲拉斯洛波尔加的教育实验. 美国行为主义心理学创始人约翰华生曾向美 ...

  • 长跑与营养(一):合理饮食是跑者成功的核心要素

    跑步是一项越来越受欢迎的大众运动,运动营养学家们认为,要想跑得好,首先要吃好.食物是人体的重要燃料,"吃得好"是一个跑者成功的核心要素.长跑运动耗时长,强度较大,无间歇,所以,对饮 ...

  • 稻盛和夫:成功的三大要素,看看你具备几个?

    在这个竞争日愈激烈的年代,人人都渴望成功,人人都希望自己能够出人头地.但怎样才能获得成功呢?成功需要具备哪些条件呢?很多人可能并不是太清楚. 日本的企业家稻盛和夫,大家可能听说过,这是一个了不起的人物 ...