免责声明:本文来自微信公众号CSDN(ID:CSDNnews),作者:Fred T-H,炫宇科技转载授权发布。 翻译器| Su Benru的Erlang项目于1998年作为开源发布,在世界范围内只是一种小众的编程语言。 根据TIOBE发布的最新语言排名,Erlang仅排名第65位,市场份额不到0.1%。 但是作为一种功能性编程语言,它具有强大的并行处理能力和容错机制,简单易用且易于学习。 最初,Erlang的父亲Joe Armstrong的初衷是为类似于电话交换机的高可用性和高可靠性系统编写的,但后来成为世界上最复杂的ATM交换机,其可靠性为99.9999999% ! 十年来,今天的Erlang项目仍然充满活力,并且在消除技术方面已经建立了稳固的立足点。 那么,Erlang多年来经历了哪些发展阶段? Erlang语言的知识阶梯如何影响其采用? Erlang及其社区的未来发展方向是什么?...让我们找出答案。 。 免责声明:本文已由作者授权,由Fred T-H进行翻译。 翻译如下:大约10年前,当我进入Erlang语言的第一个大肆宣传阶段时,我加入了Erlang社区。 我们都被告知,Erlang语言代表了并发和并行开发的未来,因为它可以以最简单,最快的方式完成开发。 您还可以获得免费的Erlang发行软件包,因为它已成为开源软件。 在那个时代,一切都变得不可思议。 虚拟机刚刚获得了SMP支持,在此之前,如果要真正利用同一台计算机上的所有CPU,则必须在该计算机上运行多个虚拟机。 在本文中,我想花点时间来回顾一下这十年中的大部分时间。 然后,我将介绍这段时间在Erlang中发生的一些事情,例如Erlang的炒作阶段ang的影响? Erlang语言的知识阶梯如何影响其采用? 在我在Erlang社区的十年中,发生了什么变化? 最后,我将探讨我认为Erlang及其社区的发展方向。 炒作阶段炒作周期(或技术成熟度曲线)在产品或技术的生命周期中引入了“阶段”的概念。 这是一种营销概念,而不是科学概念,但通常可以用来描述事物的发展。 我最感兴趣的部分是“炒作阶段”,就像编程社区中的淘金热。 您可能已经看到这些炒作阶段中的一个或多个,通常它们似乎都附加在一个杀手级应用程序上,吸引了每个人蜂拥而至。 我可以想到的“炒作”示例包括:Ruby on Rails的“如何在15分钟内构建博客引擎”视频(https://www.youtube.com/embed/Gzj723LkRJY)(https://www.youtube .com / embed / Gzj723LkRJY,“看我”我还没有做的一切仍然很有趣!),有关“在Kubernetes下使用Go语言”的文章大肆宣传Kubernetes(Kubernetes之前已经被使用很多, 此后确实进入了爆炸期)。 在某种程度上,有关Elixir和Phoenix的炒作也可能包含在此列表中。 在如此大肆宣传的阶段,大量新人涌入,所有人都想知道可以得到什么好处。 有些人会留下来,但大多数人会很快离开。 大多数人可能只待几个月或几年。 真正能够安定下来并坚持数十年的人非常罕见。 绝大多数人是源源不断的早期采用者,他们从一种技术浏览到另一种技术,嗅探最佳机会,希望首先采用某种框架,语言或工具包来获得某种竞争优势。 因此,一般的想法是,首先您拥有一个真正的杀手级应用程序,然后人们就会涌入您的生态系统。 杀手级应用程序将推动这一人群,并且只要您构建它,人们就会蜂拥而至。 如果您能保留其中一小部分并保持活跃,那么在可预见的将来您将拥有一个活跃的社区。 它以一种奇怪的方式使我想起:“雨水顺着犁“这个理论:上帝加快了耕地的速度。……这是“人类支配大自然”的奇妙理论,假设天空中的云将散布取之不尽的雨……而[犁]是一种工具 可以将野蛮变成文明,可以将沙漠变成农场或花园...。或者,更简单地说,“雨后耕犁。”该理论的基本前提是干旱和半干旱地区的气候 永久的变化使这些地区变得更加潮湿,这一理论在1870年代得到了广泛推广,成为美国大平原(以前称为“美国沙漠”)定居的原因。 还被用来证明南澳大利亚州在同一时期扩大边境地区的小麦种植是合理的,如果我们能够继续进行一个大型项目,开发商就会出现,然后它将继续维持自身。 认为这种观点是不对的 错是错的,因为尽管Erlang在最热门的炒作阶段有数十个杀手级应用程序,但其社区仍然很小。 让我们看一下那个时代Erlang的杀手级应用:Ejabberd(出生于2002年,2005年发布了第一个稳定版本):它是迄今为止最具扩展性的主机聊天服务器之一(如果不是最多的话)。 埃贾伯德曾经是一个巨大的成功。 在一定程度上,它仍然是。 到目前为止,您仍然可以在StackOverflow上看到有关其模块的问题。 在2011年左右,它产生了MongooseIM分支,并且这两个解决方案仍在维护中。 CouchDB(2005):根据CAP定理,它是第一个用Erlang编写的流行数据库,也是当时流行的多主文档存储解决方案之一。 尽管MongoDB现在是该领域的王者,但CouchDB仍然是存储引擎。它有其精神上的继任者,最著名的是BarrelDB,它仍在维护中。 RabbitMQ(2007):一种消息队列软件,几乎占据了整个AMQP市场,仍在使用中,并且很有价值。 在流式工作负载方面,尽管它们具有明显不同的特性和用例,但经常会与Kafka进行讨论。 Facebook聊天(2008):Facebook Chat的初始版本是用Erlang编写的。 由于许多内部因素,例如系统稳定性考虑,内部C ++工程师的强势地位以及已在C ++中实现的一系列解决方案,因此后来用C ++对其进行了重写。 WhatsApp(分别于2009年和2014年收购):在Facebook的聊天系统摆脱了Erlang语言之后,他们最终购买了WhatsApp,这是一种著名的跨平台应用程序,仅由50名工程师开发,可为9亿用户提供服务。 它至今仍在使用,实际上,WhatsApp的开发人员决定比以前更深入地参与Erlang和Elixir社区。 Riak(2009):这是分布式系统世界展示其优势的最好例子之一。 Riak是真正可靠的分布式键值数据库存储。 它是Basho Technology开发的NoSQL数据库产品,目前仍在医疗保健系统和其他关键基础架构中运行。 当Basho Technology遭受金融危机并被迫破产时(很大程度上是由于该公司违反了信托义务并迅速破产),Bet365购买了其所有知识产权并优雅地开放了其源代码,现在Riak数据库 尽管它的支持程度不如过去的最佳时期,但它仍在开源世界中运行。 当乔·阿姆斯特朗(Joe Armstrong)的“ Erlang编程”一书问世时,上面提到的许多杀手级程序就出现了。 他们掀起了大规模采用Erlang的完美风暴,同时吸引了大量的Erlang旁观者,甚至对黑客新闻站点产生了重大影响,因此迫使某一天的所有讨论都围绕Erlang的内容展开。 内部机制。 然而,在喧嚣之后,很少有人留下来。 我认为杀手级应用程序的出现与过去是相反的,人们不愿意在最初的炒作阶段获得一席之地。 任何应用程序总是处于较弱的早期阶段。 有人嗅探到它技术的有趣方面,决定喜欢它,并加以推广。 如果它恰好是一个杀手级应用,那么它将进入更大的炒作阶段。 大家都期待着希望馅饼能从天上掉下来,成功的故事会培养更多的模仿者。 另一个常见现象是“重塑世界”阶段,每个人都花时间重新实现当前可用的所有内容,因此您会看到很多很多“与语言无关”的公告。 但是杀手级应用程序从未能够实现开源语言的自我维持。 有趣的结果之一是,尽管RabbitMQ和Ejabberd之类的产品很受欢迎,但其用户社区比贡献者社区要大得多。 成千上万的公司使用他们的产品,但不一定会加入Erlang社区。 毫无疑问,部分原因是Erlang的大多数杀手级应用程序都位于专用的基础架构中:您创建了一个高度可靠的黑匣子组件,其他人都可以使用它,并且如果运行良好,它们将不需要查看箱子内部。 现在,许多开发人员已经为数千种其他产品和服务提供了基础结构。 根据定义,专用基础架构是不需要大量人员产生巨大影响的地方。 因此,其贡献者群体和社区总是比接近最终产品的参与者和社区小得多。 例如,具有无数Web开发人员的Web开发框架,或更通用的基础结构,可以将它们用于小型部署项目,因为任何公司都可以使用它们。 但是,即使没有这些因素,也很容易感觉到Erlang错过了一个巨大的机会,也就是说,在炒作阶段,它并没有获得更大的份额。 我不想使用知识阶梯来进行反事实推理,例如“过去可能发生或应该发生”。 相反,我想找出我多年来在Erlang社区的教学中所见到的常见学习模式。 这些也是我现在在Elixir社区中看到的模式,我认为这可能表明Elixir可能会有类似的未来。 我最喜欢的理论之一是诸如编程语言(及其生态系统)之类的技术主题具有多层复杂性,需要学习和发现各种概念。 我第一次开始表达这种理论是在我学了一些Erlang的网站上,使用了我称为Erlang第九圈的图表。 我不认为学习技术会带来无尽的痛苦(至少不应该如此),对吗?有点假,我就像双关语。 但简单来说,对于学习任何新技术,通常会有一个“核心”主题路径或顺序,因此就有了类似“知识阶梯”的东西。 在这个知识阶梯上,知识/概念越有价值,它所处的地位越高,就越难达到目标,因此实际情况是,到达该位置越高的人就越少。 对于Erlang来说,我认为它的“知识阶梯”可能是这样的:函数式编程; 隔离的流程和并发; 可靠的并发(链接,监视器,超时); OTP行为模式和其他系统抽象; 如何建立OTP系统; 如何构建发行版并处理其生命周期; 如何保持系统始终在线以及如何操作。 如果您是Erlang的新手并开始学习初学者的书,则可能会花很多时间进行第一步:通过函数式编程,不变性,递归和类似概念结交朋友。 迟早,您将面临并发性和并行性,流程和消息传递。 之后,您将开始学习链接并监视过程监视,错误处理和Erlang的内部机制。 在Erlang的大肆宣传阶段,第二步和第三步成为围观者最惊奇的卖点。 如果您必须为将来的项目学习一些必要的知识,那就是其中之一。 其他步骤将在稍后跟进,尤其是OTP(第四步),但前提是您坚持要完成编程步骤。 OTP被视为Erlang并发的真正价值,并且函数式编程确实不错,但是以OTP为代表的通用开发框架是您必须坚持并使用的真正独特的东西。 许多人愿意使用这些框架并了解它们所做出的精美抽象,但是对于如何正确地构造所有事物,他们可能会有些困惑。 实际上,大多数诸如Ejabberd之类的应用程序开发都无法突破第四级。 当时的生态系统有点像狂野西部。 对于爱立信的员工和最有动力的自学生来说,OTP知识是一回事。 大多数人只有在某些值得投入生产的产品出现问题并且希望找到更好的解决方案时才达到第五级。 直到2015年或2016年,当Relx出现时,整个发行版当体验变得更轻松时,将获得第6级的重视。 几乎从未达到7级。 实际上,许多人认为不应对节点进行热升级。 理想情况下,您不会在生产环境中使用SSH命令行进行调试。 在实践中,并不是每个人都会以相同的顺序学习所有这些知识,有些书会颠倒它们的顺序(这让我想起了《 Erlang和OTP in Action》一书)。 我认为这些命令不是问题。 “梯子”在这里仅用于说明问题。 社区风起云涌。 炒作阶段将使社区的规模增加十倍甚至一百倍。 大多数人会好奇地离开,因此社区中的大多数用户倾向于停留在第一层。 少数人将达到更高的水平,少数人将达到更高的水平,依此类推,直到您有一个内在的专家圈子来达到最高的阶梯。 对于Erlang,我认为前三个步骤可能最容易实现。 第四个阶梯花了几年的时间开发,最终被认为是有价值的。 第五阶梯非常复杂。 Erlang缺乏工具和生态系统。 Erlang社区留下了愿意忍受这样贫瘠的环境的人,因此对新移民的困境不敏感。 为了使这篇文章简短(好长而不是荒谬),我在这里不再赘述。 无论如何,如果您是Elixir的用户,您可能会看到您在这个严格定义的阶梯上的位置,并且您会感觉到社区中的派系通常都在那儿。 许多人,也许他们只是在Phoenix上做得很好,很少突破第四梯子,并且在可预见的将来,他们中的许多人将停留在第三梯子或以下。 在许多情况下,这些情况是正确的。 在这里,我们只是观察,而不是判断。 作为一个已经通过很多知识阶梯的人(也许在这种环境下,我的脑海里有些知识阶梯,例如“修复虚拟机”),他们似乎错过了很多知识阶梯,但是坦率地说,那些事情可能 永远不会对他们有用。 但这一切都是要说的:作为一个社区,我们可能使人们难以超越基本面,从而使自己陷入困境。 学到的教训不可能一overnight而就。 在某种程度上,Erlang社区引导盲人的是盲人,因为它是如此之小以至于没有足够的人来分享所有必要的经验。 今天的情况比较容易。 如果您不在炒作周期之内,那么您很可能会找到好的帮助,因为很少有人同时要求所有帮助。 我要表达的是,如果Erlang明天进行第二阶段的炒作,我们的表现将比上一阶段的炒作更好。 我希望这些经验,再加上Erlang和Elixir社区之间更好的合作,将使我们能够吸引更多的受众,并使我们获得成功的机会加倍。
可能您还想看