Erlang這十年 - ferd.ca

banq發表於2019-07-10

大約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,怎麼辦?

相關文章