1998 年開源發(fā)布的 Erlang 項目,在全球范圍內(nèi)只是個小眾編程語言。
根據(jù) TIOBE 最新發(fā)布的語言排行榜,Erlang 僅排名在第 65 位,市場份額占有小于 0.1%。但是作為一門函數(shù)編程語言,它擁有著強大的并行處理能力和容錯機制,簡單好用且易學(xué)。最開始,Erlang 之父 Joe Armstrong 編寫的初衷針對的是類似于電話交換機那樣的高可用性、高可靠性系統(tǒng),但后來卻成就了可靠性達(dá)到 99.9999999% 的目前世界上最復(fù)雜的 ATM 交換機!
須臾二十載,如今的 Erlang 項目仍然煥發(fā)著生機,并在技術(shù)淘汰中穩(wěn)穩(wěn)站住了腳跟。那么 Erlang 在這些年中經(jīng)歷了哪些發(fā)展階段?Erlang 語言的知識階梯如何影響了對它的采用?Erlang 及其社區(qū)未來的發(fā)展方向是怎樣的?......下面就讓我們一探究竟。
聲明:本文已獲作者 Fred T-H 翻譯授權(quán)。
以下為譯文:
大約在 10 年前,我加入了Erlang社區(qū),當(dāng)時正值Erlang語言的第一個炒作階段。我們都被告知,Erlang語言代表著并發(fā)性和并行性開發(fā)的未來,因為它能夠以最輕松和最快速的方式完成開發(fā)。你還可以得到免費的Erlang分發(fā)包,因為它已經(jīng)變成了一個開源軟件。在那個年代,一切都開始變得不可思議。虛擬機也剛剛獲得了SMP支持,而在此之前,要想真正利用同一臺計算機上的所有CPU,你必須在那臺機器運行多個虛擬機。
在這篇文章中,我想先花點時間對這十年的大部分時間作個反思。然后我會介紹一些這期間發(fā)生在Erlang上的事情,例如炒作階段對Erlang的影響?Erlang語言的知識階梯如何影響了對它的采用?以及我在Erlang社區(qū)的十年中自身發(fā)生了什么變化?最后,我將探討一下我認(rèn)為Erlang及其社區(qū)的發(fā)展方向。
炒作階段
炒作周期(或技術(shù)成熟度曲線)在一個產(chǎn)品或技術(shù)的生命周期中引入了“階段”這個概念。這是一個營銷概念,而不是一個科學(xué)概念,但是用它來描述事情的發(fā)展往往會很有用。而我最感興趣的部分是“炒作階段”,它就像一股發(fā)生在編程社區(qū)的淘金熱。你可能見過一個或多個這樣的炒作階段,通常他們似乎都依附于某個殺手級應(yīng)用程序,吸引著每個人蜂擁而至。
我能想到的“炒作”的例子有:炒作Ruby on Rails的“如何在 15 分鐘內(nèi)構(gòu)建一個博客引擎”的視頻(https://www.youtube.com/embed/Gzj723LkRJY,其中的“看看我沒有做的所有事情!”仍然是一句有趣的話),炒作Kubernetes 的“在Kubernetes下使用Go語言”的文章(Kubernetes在此以前已經(jīng)有了大量使用,但在那之后確實進入了一個爆發(fā)期)。在某種程度上,對Elixir和Phoenix的炒作或許也可以列入這個名單。
在這樣的一個炒作階段,大量的新來者蜂擁而至,都想來看看能撈點什么好處。有些人會留下,但多數(shù)人會很快離開。大多數(shù)人的停留時間可能只是幾個月或幾年,能真正地安頓下來并且堅持幾十年的人非常少見。絕大多數(shù)人都是一些絡(luò)繹不絕的先期采用者,他們從一個技術(shù)沖浪到另一個技術(shù),嗅探最佳的機會,希望先行采用某種框架、語言或工具包,來獲取一定的競爭優(yōu)勢。
所以通常的想法是,首先你要擁有一個真正的殺手級應(yīng)用程序,然后人們就會涌入你的生態(tài)系統(tǒng)。殺手級應(yīng)用程序會驅(qū)動這股人潮,只要你把它構(gòu)造出來,人們就會蜂擁而至。如果你能留住他們中的小部分并保持他們的活躍度,那么在可以預(yù)見的未來,你將會擁有一個活躍的社區(qū)。這用一種奇怪的方式,讓我想起了“雨隨犁至”這個理論:
上帝加快犁地的速度。……這是奇妙的“人類主宰自然”的理論假定,天上的云會分配取之不盡的雨水…而[犁]是讓野蠻變成文明的工具;能把沙漠變成農(nóng)場或花園?!蛘吒啙嵉谋磉_(dá),就是“雨隨犁至”。
這一理論的基本前提是,通過人類的定居和農(nóng)業(yè)活動可以影響干旱和半干旱地區(qū)氣候的永久變化,使這些地區(qū)更加濕潤。這一理論在 19 世紀(jì) 70 年代被廣泛推廣,作為美國大平原(曾被稱為“美國大沙漠”)開墾定居的理由。這也被用來證明南澳大利亞在同一時期的邊界土地上小麥種植的擴張是合理的。
如果我們能讓一個大項目一直進行,開發(fā)人員就會出現(xiàn),然后它就會自我維系下去。我認(rèn)為這種觀點顯然是錯誤的,因為盡管Erlang在其最熱的炒作階段擁有了數(shù)十個殺手級應(yīng)用程序,但是,它的社區(qū)仍然維持在很小的規(guī)模。下面,就讓我們看看在那個時代,Erlang都有哪些殺手級應(yīng)用程序:
ejabberd(誕生于 2002 年,第一個穩(wěn)定版本發(fā)布于 2005 年):它是迄今為止最具可擴展性的主機聊天服務(wù)器之一(即使不是之最)。Ejabberd曾經(jīng)是一個巨大的成功,在某種程度上來說現(xiàn)在仍然是。到目前為止,在StackOverflow上仍然能看到關(guān)于它的模塊的提問。在 2011 年左右,它衍生出了MongooseIM分支,現(xiàn)在這兩個解決方案仍然處在維護中。
CouchDB(2005):是根據(jù)CAP定理,用Erlang編寫的第一個流行數(shù)據(jù)庫,也是當(dāng)時新潮的多主文檔存儲解決方案之一。雖然現(xiàn)在MongoDB是該領(lǐng)域的王者,但CouchDB在存儲引擎方面仍然有其精神繼承者,最出名的是BarrelDB,它現(xiàn)在還在維護中。
RabbitMQ(2007):幾乎占據(jù)整個AMQP市場的一個消息隊列軟件,它現(xiàn)在仍在用并且很有價值。在流式工作負(fù)載方面,它經(jīng)常被和Kafka一起討論,盡管它們具有明顯不同的特性和用例。
Facebook Chat(2008):Facebook Chat的初始版本是用Erlang編寫的。由于許多內(nèi)部因素,如系統(tǒng)穩(wěn)定性的考慮,和內(nèi)部C++工程師的強勢地位,以及已經(jīng)有了C++實現(xiàn)的一套解決方案等等,后來它用C++全部改寫。
WhatsApp( 2009 年, 2014 年被收購):在Facebook的聊天系統(tǒng)擺脫了Erlang語言后,他們最終購買了WhatsApp這個眾所周知的只用了 50 個工程師開發(fā)的服務(wù)于 9 億用戶的跨平臺應(yīng)用程序。它今天仍在使用,事實上,WhatsApp的開發(fā)者決定比以前更加深入地參與Erlang和Elixir社區(qū)中。
Riak(2009):是分布式系統(tǒng)世界展現(xiàn)自己優(yōu)勢的最佳例子之一。Riak是一個真正可靠的分布式鍵值數(shù)據(jù)庫店,它是Basho Technology公司開發(fā)的一個當(dāng)前仍在醫(yī)療保健系統(tǒng)和其他關(guān)鍵基礎(chǔ)設(shè)施中運行的NoSQL數(shù)據(jù)庫產(chǎn)品。在Basho Technology遭遇財務(wù)危機并被迫破產(chǎn)時(這在很大程度上是因為公司違反了信托責(zé)任,迅速走向了敗亡),Bet365 買下了它的所有知識產(chǎn)權(quán),并優(yōu)雅地將其開放源代碼,現(xiàn)在Riak數(shù)據(jù)庫仍然在開源世界中運行,盡管它的支持力度和過去最好的時期比稍稍不如。
以上提到的殺手級應(yīng)該程序,很多都是在喬·阿姆斯特朗的《Erlang編程》一書問世的時候出現(xiàn)的。它們制造了一場對Erlang大量采用的完美風(fēng)暴,同時也為Erlang吸引了大量的旁觀者,甚至對黑客新聞網(wǎng)站都產(chǎn)生了明顯的影響,以至于它強制要求在某一天所有討論都必須是關(guān)于Erlang的內(nèi)部機制。
然而,喧囂之后,留下來的人很少。
我認(rèn)為,現(xiàn)在的殺手級應(yīng)用程序的出現(xiàn)和過去相反,它是出于人們想在最初的炒作階段分一杯羹的貪婪。任何應(yīng)用程序,總有一個弱小的、早期的階段,有人嗅出了它技術(shù)的有趣之處,決定喜歡它,并且將它構(gòu)建出來,如果碰巧它成了一個殺手級的應(yīng)用程序,那么就會進入一個更大的炒作階段。人人都盼望從天上掉餡餅,一個成功的故事會培養(yǎng)更多的模仿者。另一個常見的現(xiàn)象是“重塑世界”階段,每個人都花時間重新實現(xiàn)現(xiàn)有的一切,所以你會看到很多很多“與語言無關(guān)”的公告。
但是殺手級的應(yīng)用程序本身從來就不能夠?qū)崿F(xiàn)開源語言的自我維系。其中一個有趣的結(jié)果是,像RabbitMQ和Ejabberd這樣的產(chǎn)品,盡管很受歡迎,但其用戶社區(qū)比貢獻者社區(qū)要大得多。成千上萬的公司使用他們的產(chǎn)品,但他們不一定會參與到Erlang社區(qū)中來。
毫無疑問,部分原因在于Erlang的大多數(shù)殺手級應(yīng)用程序都在專門的基礎(chǔ)設(shè)施中:你創(chuàng)建了一個其他人都可以使用的高可靠性黑盒組件,如果它工作得足夠好,他們就不需要查看盒子內(nèi)部?,F(xiàn)在好了,幾十個開發(fā)人員已經(jīng)為數(shù)千種其他產(chǎn)品和服務(wù)提供了基礎(chǔ)設(shè)施。而按照定義,專業(yè)化的基礎(chǔ)設(shè)施是一個不需要大量人員就能產(chǎn)生巨大影響的地方。所以它們的貢獻者群體和社區(qū)總是比靠近最終產(chǎn)品的群體和社區(qū)要小得多。例如,擁有數(shù)不清的網(wǎng)頁開發(fā)人員的Web開發(fā)框架,或者更通用的基礎(chǔ)設(shè)施,都可以把它們用到小規(guī)模的部署項目上,因為任何企業(yè)都可能找到它們的用途。
但是,即使沒有這些因素,也很容易讓人覺得,Erlang錯過了一個巨大的機會,那就是它在炒作階段沒有獲得更大的蛋糕份額。
知識階梯
我不想用諸如“過去可以發(fā)生或者應(yīng)該發(fā)生”這樣的描述來做反事實推理。相反,我想挖掘我在Erlang社區(qū)多年的教學(xué)和寫作中所看到的常見學(xué)習(xí)模式。這些也是我現(xiàn)在正在Elixir社區(qū)中看到的模式,我覺得這可能是預(yù)示著Elixir可能有著相似未來的一種跡象。
我最鐘愛的一個理論是,像編程語言(及其生態(tài)系統(tǒng))這樣的技術(shù)主題具有多層復(fù)雜性,需要學(xué)習(xí)和發(fā)現(xiàn)各種概念。我第一次開始表達(dá)這種理論是在Learn You Some Erlang的網(wǎng)站上,用一個我稱之為Erlang第九圈的圖表。
我認(rèn)為學(xué)習(xí)一項技術(shù)并不是無休止的痛苦(至少,它不應(yīng)該如此),這話是不是說得有點假心假意,我只是喜歡雙關(guān)語。但簡單地說,對任何新技術(shù)的學(xué)習(xí),通常有一個更“核心”的主題路徑或次序,這樣就有了“知識階梯”這樣的東西,在這個知識階梯上,越有價值的知識/概念被放得越高,也越難到達(dá),所以實際情況是,到達(dá)越高的地方的人會越來越少。
對Erlang來說, 我認(rèn)為它的“知識階梯”可能是這樣的:
函數(shù)式編程;
隔離進程和并發(fā)性;
可靠的并發(fā)性(links, monitors, timeouts);
OTP行為模式和其他系統(tǒng)抽象;
如何構(gòu)建OTP系統(tǒng);
如何構(gòu)建發(fā)布版本并處理其生命周期;
如何保持系統(tǒng)始終在線,以及如何運作。
如果你是第一次接觸Erlang,并且從一本初學(xué)者的書開始學(xué)習(xí),你可能會在第一級階梯上花費大量的時間:與函數(shù)式編程、不可變性、遞歸和類似的概念交朋友。遲早,你會接觸到并發(fā)性和并行性、進程和消息傳遞。在那之后,你開始學(xué)習(xí)links和monitors進程監(jiān)控,錯誤處理,以及Erlang的內(nèi)部機制。在Erlang的大炒作階段,第二級和第三級階梯成了最讓旁觀者驚嘆的賣點。如果你必須學(xué)會一些在未來的項目中必備之知識,那就是其中之一。
其他的梯級會在稍后跟進,尤其是OTP(第 4 級階梯),但前提是你堅持完成編程這一階梯。OTP被視為Erlang的真正價值所在——并發(fā)性和函數(shù)式編程確實不錯,但是OTP代表的一般開發(fā)框架是你必須堅持和使用的真正獨特的東西。很多人愿意使用這些框架,了解它們所做的美好的抽象,但是對于如何正確地構(gòu)建每件事情可能會感到有點困惑。
事實上,像Ejabberd這樣的應(yīng)用程序的大部分開發(fā)幾乎沒有突破第四級階梯。當(dāng)時的生態(tài)系統(tǒng)有點像蠻荒的西部,對于愛立信的員工和最有動力的自學(xué)者來說, OTP知識也就是那么一回事。大多數(shù)人只有在有值得投入生產(chǎn)的東西出現(xiàn)問題、并且想尋找更好的解決方法時,才有可能到達(dá)第五級。直到 2015 年或 2016 年,當(dāng)Relx的出現(xiàn)開始讓整個發(fā)行體驗變得更容易時,第 6 級才被重視。第 7 級幾乎從未到達(dá),事實上,很多人都覺得不應(yīng)該熱升級一個節(jié)點,理想情況下,你也不會在生產(chǎn)環(huán)境中使用SSH命令行進行調(diào)試操作。
在實踐中,并非每個人都會按照相同的順序來學(xué)習(xí)所有這些知識,有些書會調(diào)換它們的次序(這讓我想到了Erlang and OTP in Action這本書)。我覺得這些次序都不是問題,“階梯”用在這里只是為了說明問題。
社區(qū)波浪式向前發(fā)展。炒作階段會使一個社區(qū)的規(guī)模增加十倍甚至百倍,大多數(shù)人會好奇地看一眼然后離開,所以一個社區(qū)中的大多數(shù)用戶傾向于停留在第一個梯級。少部分人會到達(dá)高一級階梯,更少部分的人會到達(dá)更高一級,依此類推,直到你擁有到達(dá)最高階梯的內(nèi)部專家圈為止。
對于Erlang來說,我認(rèn)為前三個梯級可能是最容易到達(dá)的。第四個階梯花了幾年的時間來開發(fā),最終被認(rèn)為是有價值的。第五個階梯非常復(fù)雜。Erlang缺乏工具和生態(tài)系統(tǒng),Erlang社區(qū)留下來的都是自己選擇的,愿意忍受這種貧瘠環(huán)境的人,因此對新來者的困境不敏感。為了保持這篇文章簡短(好吧,長而不是荒謬的長),我就不在此贅述了。
在任何情況下,如果你是一個Elixir的用戶,你可能會看到你在這個硬性定義的階梯上的位置,你可以感覺到一個社區(qū)中的派系通常都在那里。很多人,可能他們只是在Phoenix上做得很好,很少能突破第四階梯,而且在可預(yù)見的將來,他們中的許多會一直停留在第三階梯或以下。在許多情況下,這些情形都是對的。這里我們只是觀察,不作評判。作為一個通過了很多知識階梯的人(可能在這種環(huán)境中,我的頭上還有一些知識階梯,比如“修補虛擬機”之類的),他們似乎錯過了很多知識階梯,但坦率地說,那些東西對他們可能永遠(yuǎn)不會有用。
但所有這些都是說:作為一個社區(qū),我們可能會讓人們很難超越基本水平,從而使我們自己陷入困境。經(jīng)驗教訓(xùn)的學(xué)習(xí)是不可以一蹴而就的,在某種程度上,Erlang社區(qū)是盲人在引導(dǎo)盲人,因為它實在太小了,沒有足夠的人來分享所有需要的經(jīng)驗。今天的情況比較容易,如果你在一個炒作的周期之外,你很可能會找到好的幫助,因為很少有人同時要求所有的幫助。
我想表達(dá)的是,如果明天Erlang有第二個炒作階段,我們會比上一個炒作階段表現(xiàn)得更好。希望這些經(jīng)驗,加上Erlang和Elixir社區(qū)之間更好的合作,讓我們能夠接觸到更多的受眾,讓我們成功的機會加倍。
Erlang有哪些改變?
Erlang不是一具放在一個裝滿甲醛的玻璃容器里的尸體,等待在光天化日之下被帶走——它一直在進化。部分原因是由于Elixir社區(qū)的壓力和需求,幸運的是,他們對自己的工具的期望比Erlang用戶已經(jīng)習(xí)慣的要高。另外部分原因在于推動平臺向前發(fā)展的實際工業(yè)需求,而不像學(xué)術(shù)界,他們只是按照他們自己喜歡的方式推動事情向前發(fā)展。
以下是我能想到的一些改變,大家可能很高興知道有些變化在 2009 年或更早的時候就發(fā)生了:
多核支持現(xiàn)在工作得很好。最初支持2- 4 個內(nèi)核的時候,開發(fā)人員經(jīng)常碰到各種超出自己控制的瓶頸問題,后來就可以很好地處理12- 16 個內(nèi)核了。而現(xiàn)在我不太確定能支持的內(nèi)核上限是多少,但有一點我很確定,我寫的堆棧操作運行在超過 32 個內(nèi)核的機器上沒有任何問題。
Stacktrace異常跟蹤報告支持行號?;氐?jīng)]有行號的年代幾乎是無法想象的,在那個年代,“寫簡短的自我描述的函數(shù)”不僅僅是一個設(shè)計問題,也是一個生存問題?,F(xiàn)在,你不再需要超自然的調(diào)試技能,就可以調(diào)試Erlang程序。
Unicode支持現(xiàn)在可以接受。string模塊包含最重要的算法,Unicode模塊可以很好地處理大多數(shù)轉(zhuǎn)換和規(guī)范化,處理raw codepoint、utf-8、utf- 16 和utf- 32 的一般策略已經(jīng)具備。本地化支持仍然缺乏,但現(xiàn)在一切都可行,諸如re(用于正則表達(dá)式)和所有更高級別的文件處理代碼之類的模塊也可以很好地處理unicode。
支持映射(作為HAMTs實現(xiàn)),具有明確的模式匹配語法。使用Dialyzer對其進行的類型分析也可以將其替換為多個使用案例,在這些案例中,以前使用的記錄非常痛苦。
虛擬機中的時間處理機制是世界級的,在處理時間規(guī)整、各種類型的時鐘等問題時,都可以很好工作。不過,時區(qū)和格式處理使用社區(qū)庫仍然更好一些。
添加了atomics、counters和persistent terms等高性能工具,以幫助改進所有增強可觀測性功能和較低級別核心庫的底層機制。
所有信號處理都是異步的,包括端口,大大減少了瓶頸。
編譯器正在重寫中,以便通過SSA獲得更高級別的分析和性能提高。
運行NIF的臟調(diào)度器已經(jīng)可用,使得與C甚至Rust代碼的集成變得簡單,同時支持IO密集型或CPU密集型工作負(fù)載。因此,盡管該語言可能不會無限快,但它已經(jīng)快過其它語言。在對運行時穩(wěn)定性不造成太大影響的情況下,為獲得更高性能的庫而停機比以往任何時候都容易。
內(nèi)存分配和管理的各種改進。
更快速、更靈活的實時跟蹤和微觀狀態(tài)分析,以保證正確運行和性能調(diào)查。
更靈活的gen-statem OTP行為模式,以實現(xiàn)能夠處理選擇性接收的有限狀態(tài)機。
新的改進的日志框架,內(nèi)置對結(jié)構(gòu)化日志的支持。
重寫crypto加密模塊以便使用NIF,而不是更復(fù)雜(通常更新速度較慢)的驅(qū)動程序。
使用NIF對文件驅(qū)動程序進行整體重寫,以獲得巨大的性能提升。
使用NIF對網(wǎng)絡(luò)驅(qū)動程序進行重寫的工作正在進行,以獲得類似的性能提升。
對用于TLS處理的SSL應(yīng)用程序進行整體重寫。這讓我想起我在HeloCu工作的日子,通過整體重寫使其與C++解決方案在延遲(可能慢5%)方面具有競爭力,并且在可預(yù)測性方面總體上要好得多(大約10- 30 倍的提升)。
ETS性能的主要改進。
我編寫了一本關(guān)于如何使用Erlang VM操作和調(diào)試生產(chǎn)系統(tǒng)的手冊(https://erlang-in-anger.com/)。
全新的構(gòu)建工具(rebar3),與Erlang生態(tài)系統(tǒng)的統(tǒng)一軟件包管理器集成。
在虛擬機上還提供多種新的編程語言,具有可替換的庫用法。包括(但不限于)Elixir、Efen、LFE、Luerl、Clojerl,以及至少兩種使用Gleam和Alpaca進行類型推斷的語言。
其它更多針對核心Erlang分發(fā)包的內(nèi)部和外部的改進。
如果你有興趣了解更多信息,你可以查看版本發(fā)布說明的完整列表(https://www.erlang.org/news/tag/release)。但簡而言之,如果OTP 版本 13 到 16 的發(fā)布時間對愛立信(Ericsson)OTP團隊來說有點晚的話(我們現(xiàn)在已經(jīng)是版本22!),那么他們使用Erlang對他們的旗艦產(chǎn)品中所做的最新投資確實是顯而易見的。但即使在愛立信之外,一切都在發(fā)生變化。Erlang社區(qū),以及Elixir社區(qū)和運行在Erlang VM上的其他語言的貢獻者,都聚集在一起建立了Erlang生態(tài)系統(tǒng)基金會,現(xiàn)在它擁有一個活躍的工作組,幫助協(xié)調(diào)和解決有關(guān)構(gòu)建和打包工具、可觀察性工作、安全性、培訓(xùn)和采用等問題。
如果你像我一樣,在大炒作初期加入Erlang,但又沒有像我一樣留下來,因為你覺得很多東西不可用或太棘手,你可能想再試一次,因為Erlang的語言的人類工程學(xué)及其生態(tài)系統(tǒng)已經(jīng)大大改善。
Erlang將去向何方?
雖然沒有必要像 2007 年到 2009 年那樣突然出現(xiàn)大殺手級的應(yīng)用程序,但這并不意味著沒有任何項目顯示出這種希望。Erlang仍然是許多公司的基礎(chǔ)設(shè)施的不可缺失的部分,其最初的殺手級應(yīng)用程序大多還在其上運行。我們也有很多有趣的新應(yīng)用,就像每個BEAM配置文件顯示的那樣。我自己真的很喜歡基于屬性的測試等概念,并且Erlang和Elixir擁有世界上最好的框架。盡管如此,跡象表明我們現(xiàn)在還沒有進入炒作階段。
會有另一個炒作階段嗎?也許有,也許沒有。你可以說,Elixir會有下一個炒作階段。生態(tài)系統(tǒng)都有足夠的共同點,在一個地方學(xué)到的經(jīng)驗教訓(xùn)可以用到另一個地方。它們之間的相似之處多過不同之處。也許還有一個新的復(fù)興時期,我個人不再那么在乎它了。我喜歡小社區(qū),所以我對此感覺很好。Erlang不需要幾何級增長來讓我覺得樂在其中,它只需要可持續(xù)發(fā)展。
Erlang社區(qū)的規(guī)模大小也從來沒有阻礙它在全世界發(fā)揮它的影響力。就我所知,Erlang一直處于這樣一種狀態(tài),既沒有足夠的工作量滿足Erlang開發(fā)人員的需求,同時沒有足夠的開發(fā)人員來完成Erlang的工作:這兩個方面都有很多工作要做,但他們在地理位置上并不一致。面向偏遠(yuǎn)市場的公司和員工往往做得最好。而在Erlang之前無法輕易突破Webapp市場的地方,整個Elixir的就業(yè)市場現(xiàn)在只需稍加努力就能達(dá)到良性循環(huán)。
從一個更高的層面來看,你是否使用Erlang或類似的語言,這可能并不太重要。雖然我確實覺得它沒有被充分利用而且它的價值被低估了,但最大的好處不是來自于運行一個使用它的系統(tǒng)。而是來自于學(xué)習(xí)可靠系統(tǒng)設(shè)計的基本原理,并在實際環(huán)境中吸收其經(jīng)驗教訓(xùn)。
我多年來聽到的一類問題都和尋求指導(dǎo)有關(guān)。例如,我應(yīng)該如何學(xué)習(xí)系統(tǒng)設(shè)計?關(guān)于構(gòu)建分布式系統(tǒng),你有什么好的建議嗎?我應(yīng)該做什么可以讓系統(tǒng)變得更加健壯和容錯?我怎么知道我的設(shè)計是模塊化的,不會導(dǎo)致抽象泄漏?什么是良好的錯誤處理?有什么好方法可以讓我知道優(yōu)化工作還為時過早呢?聲明(declarative)某個東西意味著什么?
我們總是喜歡簡短易懂的解決方案,如食譜和最佳實踐,但事實證明,大多數(shù)真正的答案都是“我花了很多時間學(xué)到的”或類似的東西。我可以坦誠地說,我的職業(yè)生涯中沒有什么能比得上花時間在Erlang世界里,潛移默化地吸收社區(qū)里老手們的豐富經(jīng)驗。從數(shù)量上看,Erlang不是一個大的社區(qū),但從任何其它指標(biāo)來看,它肯定是富有的。幾年后,我從一個初級開發(fā)人員變成了高級開發(fā)人員,在世界各地發(fā)表演講,尋找方法把我獲得的這些經(jīng)驗傳授傳大家,這其中大部分都?xì)w功于Erlang這個社區(qū)。
也許我在 15 分鐘內(nèi)還是寫不出一個博客引擎(事實上,我不是一個快速開發(fā)人員),但我已經(jīng)成為一個更加可靠的開發(fā)人員和系統(tǒng)架構(gòu)師,我認(rèn)為這是一種非常有效的方式。再說一次,我在這里討論的不是使用系統(tǒng),而是構(gòu)建它們并使它們工作。無論如何,激勵人們的東西并不隨處可見。
我無法想象我能在其他社區(qū)能得到這么多,過去的 10 年里發(fā)生的一切令人驚嘆。有趣的是,Erlang社區(qū)仍然很小,大部分還沒有開發(fā)利用。這意味著你有足夠的機會參與到任何事情中去,與那些充滿智慧的人一對一地進行交流,并為自己爭取一席之地。