Erlang这十年 - ferd.ca


大约10年前,我在第一个Erlang语言的主要炒作阶段加入了Erlang社区。我们被告知,Erlang是并发和并行的未来,完成任务的最简单,最快捷的方法,您也可以免费获得分发。但是事情刚刚开始就变得惊人。虚拟机是最近才获得了SMP支持,在此之前您需要在同一台计算机上运行多个VM才能真正使用所有CPU。
我想花点时间来反思这十年的大部分时间。在这篇文章中,我将介绍一些事情,例如炒作阶段,以及这与Erlang的关系,语言中的思想阶段以及如何影响采用,我十年来发生的变化,我认为Erlang应该为整个编程社区带来什么。

炒作阶段
这是一个营销概念,而不是一个科学概念,但描述事情的进展往往是有用的。最让我感兴趣的部分是炒作阶段的想法,这是一种在编程社区中发生的淘金热。浮现在脑海中的例子可能包括Ruby on Rails和如何建立一个博客引擎在15分钟内/或者Kubernetes,在较小的程度上,Elixir和Phoenix也可以适合繁缛这个炒作名单。
在这样的炒作阶段,一群令人难以置信的新人涌入,有些人会留下,大多数人会离开。逗留时间可能是几个月或几年,在极少数情况下,您可以找到一个可以持续数十年的坚持者,但其中绝大多数将是连续的早期采用者,他们从技术使用到技术冲浪,通过首先使用一种框架、语言或工具包来嗅探获得竞争优势的最佳机会。
因此,通常情况下,您需要做的是获得一个真正的杀手级应用程序,人们才会来到您的生态系统。我认为这显然是错误的,主要是因为Erlang在其最大的炒作期间已经拥有数十个杀手级应用程序,然而,社区仍然很小。例如,请参阅那个时代的以下杀手级应用:

  • ejabberd(2002年,2005年第一次稳定发布):它是迄今为止最可靠的托管聊天服务器之一。Ejabberd取得了巨大的成功,在某种程度上仍然是如此。到目前为止,您仍会找到有关模块的StackOverflow问题。在2011年左右,它被分成了MongooseIM,两种解决方案仍然得到维护。
  • CouchDB(2005):遵循CAP定理在Erlang中编写的第一个流行数据库之一,也是当时多主文档存储的新浪潮之一。虽然MongoDB 占据了大部分空间,但CouchDB仍然在存储引擎(例如BarrelDB)中拥有精神遗留,但仍然可以维护。
  • RabbitMQ(2007):一个队列软件实现,几乎占用了整个AMQP空间。它仍然是持续的和相关的,并且在流媒体工作负载方面经常与Kafka一起讨论,尽管它们具有非常独特的属性和用例。
  • Facebook聊天(2008):Facebook聊天的初始版本是用Erlang编写的。由于很多内部决策(稳定性,C ++工程师强大的内部存在以及一套既定的解决方案),它在以后用C ++重写
  • WhatsApp(2009年,2014年买入):一旦facebook摆脱了Erlang的聊天系统,他们最终购买了WhatsApp,其中900万用户只需要50名工程师。它今天仍然在进行中,事实上,WhatsApp的人们已经决定在Erlang和Elixir社区中获得比以往更多的参与。
  • Riak(2009):分布式系统数据库的最佳例子之一。Riak是一个非常可靠的分布式键值存储,是一个仍然在医疗保健系统和其他关键基础设施中运行的Basho产品。在Basho陷入财务困境并被迫破产之后(在很大程度上是由于违反信托义务导致公司陷入亏损”)。从那以后,Bet365的人们已经购买了所有IP,优雅地打开了所有IP,数据库仍然存在于开源世界中,尽管支持比其更好的日子更有限。

其中许多都出现在Joe Armstrong的书“ Erlang编程”出版的时候。这为大量采用创造了一种完美的风暴,而Erlang有很多旁观者。
总是有一个较小的,早期阶段的人嗅出有趣的技术,决定他们喜欢它,然后建立一些东西,如果这是一个杀手级的应用程序,那么你确实得到了更大的炒作阶段。人们会囤积邪恶的东西,成功的故事会滋生更多的抄袭者。
但是杀手级应用程序本身并不足够。其中一个有趣的结果是像RabbitMQ和Ejabberd这样的产品,尽管它们受欢迎,但其用户社区远远大于贡献者社区。成千上万的使用其产品的公司不一定非常参与Erlang社区。
部分原因无疑是因为大多数Erlang的杀手级应用程序都是专门的基础架构:你创造了一个其他人都可以使用的高可靠性黑盒子组件,如果它运行得很好,他们永远不需要看在盒子里面。
不管怎样,几十位开发人员已经为数以千计的其他产品和服务提供了基础。根据定义,专业基础设施是一个您不需要大量人员才能产生巨大影响的空间。它总是会有更小的贡献者群体和社区而不是最接近最终产品的东西,例如具有无数网络开发人员的Web框架,或甚至更为通用的基础架构。
但即使没有这些因素,人们也很容易感觉到Erlang错过了一个巨大的机会,本来可以在大肆宣传期间获得更多的人流量。

思想的阶梯
我想深入研究我在Erlang社区中看到的常见学习模式,这些模式是我多年来教授和撰写的。这些也是我现在在Elixir社区中发生的模式,我觉得它可能是类似未来的标志。
我的宠物理论是,像编程语言(及其生态系统)这样的技术主题具有多层复杂性,需要学习和发现各种概念。我不认为学习一项技术是无尽的痛苦(至少,它不应该是)。你学习技术,创造一个“思想阶梯”,更有价值的概念越来越高,但是因为它们更难实现,学会的人就越来越少。在Erlang中,我认为梯形图可能如下所示:

  1. 函数式编程
  2. 孤立的进程和并发
  3. 可靠的并发(链接,监视器,超时)
  4. OTP行为和其他系统抽象
  5. 如何构建OTP系统
  6. 如何构建版本并处理其生命周期
  7. 如何永远不要关闭系统,以及如何操作它

如果您是第一次使用Erlang并获取初学者的书,那么您可能会花费大部分时间在第一个阶段:成为函数式编程,不变性,递归和类似概念的朋友。
迟早,您将进入并发和并行,进程和消息传递。在此之后,您开始了解链接和监视器,处理故障以及使Erlang成为现实的原因。
在Erlang的大炒作阶段,第二和第三个阶段对大多数旁观者真正惊人的销售冲击力。如果你必须在未来的所有项目中学习一些东西,那就是其中之一。
其他梯级稍后会跟进,但前提是你坚持使用该程序。并发和函数式编程确实很好,但是OTP所代表的通用开发框架是一个真正独特的东西,你必须坚持和使用。很多人会玩他们,找出他们所做的漂亮的抽象,但可能会对如何正确地构建一切感到困惑。
实际上,像Ejabberd这样的应用程序的开发大部分都没有打破第4阶段。当时的生态系统有点像狂野的西部,OTP知识对于曾经在爱立信工作的人和最有动力的自学者来说是件事。
大多数人永远不会达到第5阶段,直到他们有一些值得投入生产并开始出现问题并希望寻找更好的方法。
在2015年或2016年,当Relx开始使整个体验变得更加容易时,第6阶段是罕见的。第7个阶段几乎从未到达,实际上很多人觉得你永远不应该热升级节点,理想情况下你也不会在那里通过SSH来调试它。

在实践中,并不是每个人都会按照相同的顺序浏览所有这些,并且有些书会翻转它们(想到Erlang和OTP in Action)。没关系,梯子仅用于说明目的。

社区倾向于波动。由于炒作阶段可以将社区的规模增加十倍或一百倍,并且大多数人会采取好奇的态度然后离开,社区中的大多数用户将倾向于坐在第一个梯级。

我认为对于Erlang来说,前三个阶段可能很容易进入。第四个花了几年的时间来发展并被认为是值得的。第五个是事情变得非常艰难的地方。Erlang的工具和生态系统缺乏。Erlang社区的人自我选择是能够容忍贫瘠环境的人,因此对新移民的困境不敏感。

在任何情况下,如果您是Elixir用户,您可能会看到您在这个任意定义的阶梯上的位置,并且您可以了解社区中的派系通常位于哪里。

改变了什么
Erlang没有留在装满甲醛的玻璃容器中,等待在光天化日之下取出。它不断发展中。部分原因还在于实际的工业需求推动了平台向前发展,而学术界只是按照自己喜欢的方式推动前进。
以下是我能想到的一些事情,人们可能很高兴知道自2009年或更早的变化。

Erlang未来方向
从2007年到2009年,不一定有大型杀手级应用程序突然出现,但这并不意味着没有任何项目显示出承诺。Erlang仍然深入很多公司的基础设施,其大多数最初的杀手级应用仍然存在。Erlang和Elixir拥有世界上一些最好的框架。尽管如此,有迹象表明我们现在还没有处于炒作阶段。

是否会有另一个炒作阶段?也许,也许不是。你可以说Elixir 是下一个炒作阶段。生态系统有足够的共同点,即在一个地方学到的经验教训可以转移到另一个地方。它们之间存在更多相似之处。也许还有新的文艺复兴。我个人对此不再那么关心了。我倾向于喜欢较小的社区,所以我对此感觉很好。Erlang不需要几何增长来享受它,它只需要保持可持续性。

....

这10年来一直令人惊叹、有趣的是,Erlang社区仍然很小,而且大部分尚未开发。这意味着有很多机会参与任何事情,与渴望分享它的人充满智慧,并为自己创造一席之地。

参考:
女程序员肺腑之言:请停止美化不必要的复杂情况 
如果是Erlang语言本身很复杂complicated,而不是complex,怎么办?