為什麼 Erlang 流行不起來?


其實是類c語言在廣大人民當中根深蒂固,要一群偏執,自以為是,自命不凡,固步自封的教徒放棄自己的信仰,是相當困難的

吐槽完畢,下面進入正題:

erlang在廣州遊戲公司很流行。


一直在觀察這個問題。無法得出結論,有一些經驗和觀察:

大學

(1)教無編程基礎的本科生,自學+輔導半年,用Erlang幹活,畢業設計過了。研究生,半年,有的在項目上卡住了,也可能態度問題。

(2)大學有幾個學弟學的編程語言比我還偏門,小眾。就是不學Erlang。(我嘗試在人人上多提及Erlang,但是沒有誘導成功)

(3)大學裡,Go, Scala也比Erlang 受歡迎。

(4) 作為通信專業,專業課就提及了 Erlang一次,就和其他不考試的非重點一樣,大家認為這是一個不用深入的領域。其實在讀大學的時候,哪個領域深入了?我也是本科以後才用到Erlang。

工作的人

(1)很多坊間傳言說,Erlang很簡單,因為是行業的秘密武器,所以大家不會廣泛的說我們用的Erlang開發效率可高了,反而唬人說Erlang很難,反思維。Qt有個階段大家都閉口不談 ,現在是被大家都知道了,但是選擇MFC和QT是個人的事情,但是當時學MFC的人,幾個知道QT也很簡單。

(2)自己體會,某個項目連續寫了2年Erlang代碼,效率比Java這類OO類用起來還是不爽。


1. 語法上, 作為初期大量吸收了prolog語法的函數式語言, 在命令式語言的受眾里流行不起來的原因和prolog一樣.

2. 一開始的定位是, 特定領域特定應用的利器, 在並行計算之外流行不起來的原因和lua一樣.

3. 作為一門由非當今互聯網巨頭Ericsson開發的語言, 在吸引使用者上流行不起來的原因和當今的delphi一樣.

4. 以後會不會流行就不知道了, 目前還是很小眾.

ps. 貌似有回答里說到學了半年做項目被卡住了, 如果不是設計有問題, 而是語言不會用的話, 我覺得應該是智商問題.


賺的不夠多。就這點錢,給你寫寫C就不錯了。


通過觀察其他幾款流行語言的特點,可以發現:

- Erlang 沒有一個強有力且積極的商業力量推動,這點跟 Golang / Java / Swift 等編程語言形成鮮明對比;

- Quick Get Started 這個環節沒有做好。特別地,Erlang 生態下的構建工具非常不好用(用過 Go tool 後就知道差距),文檔對入門者也不夠友好,所以很多人就卡在第一步,阻礙了流行趨勢;

- Erlang 缺少一個生機勃勃的社區,缺少大量愛好者的 side project ,這從 GitHub 上就可以看出來, Erlang 相關的項目能獲得幾百個 star 已經是非常非常難得了,極少數有幾千個 star;

- Erlang 所定義的問題域不夠通用,主要是面向服務端開發( 看 OTP 就知道)。流行的語言幾乎是面向好幾個問題域的。

但是不流行不意味著不重要,Erlang 的設計思維較之其他語言是非常優雅簡潔的,假如(應該不太可能)有商業力量推動,它還是有流行的可能性的。

膚淺之見,希望有所參考。


別的地方不知道。但我想在國內主要原因還是程序員群體中的大多數是在從事各種亂七八糟的企業項目的開發,不適用erlang/otp。


從團隊新成員學習erlang的過程來看,基本上是越年輕的人入手越快,老程序員反而有障礙。這個過程新人1-3個月可以做比較有質量的代碼了,當然如果要做的非常好,這就不是一個語言的問題了,而是整個高性能服務和集群開發的經驗和能力的問題了。

部分老程序員的障礙和分散式系統固有的複雜性會在口碑傳播方面給erlang推廣造成負面影響。


我們團隊過去一年(2014)從零基礎開始學習 Erlang,並且把我們系統大部分模塊用 Erlang 改寫,對這個問題有點理解。

一個東西要流行起來,需要滿足大眾的口味。語言、平台也一樣,需要滿足大部分程序員的口味。但是 Erlang 對於目前很多程序員來說,顯然不是第一選擇。

我列舉一些我能想到的場景:

  1. 做一個小東西,能跑起來就可以了,很多人並不會考慮穩定性、分散式、長期運行等等。Erlang 顯然不會是第一選擇。
  2. 真正需要(或者說想到)用 Erlang 做海量並發服務的團隊並不多,工作機會有限。
  3. 現在大學教育基本都是 C、Java,OOP 等,看到 Erlang 這種函數式語言就嚇到了,自學能力有限。
  4. Erlang 的中文社區、培訓資源極少。英文資料其實還是蠻豐富的,很多人英文不好...
  5. 學習 Erlang,語法只是一小部分,還有很多 Erlang 的平台級(BEAM、OTP)的東西要學習,那些基本都是操作系統級別的知識。操作系統學的好的程序員極少,現在碼農橫行...
  6. Erlang上手還是很容易的,主要是開發的流程沒有統一的規範,雖然現在有rebar。基本上大部分人就被擋在了環境和項目搭建上面。

總之,Erlang 不符合大眾口味,做小的東西也用不上。


名字不好讀是重要原因之一~我現在都不知道erlang該怎麼發音~


跟大家的看法相反,我覺得erlang之所以流行不起來正是因為其複雜性。erlang的複雜並不在語法上,如其他答案所提到的例子,新人可以在很短的時間內學習完畢進入開發狀態。其複雜在所針對領域的一系列特殊設定。

我們先看一下erlang與c/java等差別較大的設定:

  1. 函數式、一次賦值語法;
  2. 競爭式的協程;
  3. 快速失敗、熱更新;
  4. OTP等。

我們都知道scheme這類純函數式語言,最主要的特徵就是stateless。第一個好處是函數輸入輸出邊界易確定,非常方便寫測試用例。其二是放在並發環境下,我連狀態都沒有了,開發中就不需要去考慮死鎖等資源競爭問題。

而將線程放在用戶空間內自行調度(協程)是為了獲得儘可能大規模的並發能力,競爭式(與go
odejs的協作式不同)的決策則為大規模的多人開發提供了保證,避免某個協程的死循環或過量運算影響其他任務的進行。

同時,erlang花了非常大的力氣去維護和開發了一整套中間層工具OTP,而這些工具、框架也正是被用來開發諸如分散式伺服器、錯誤處理、資料庫等應用的利器。

我們可以看到,所有的這些努力,都是為了能夠健壯、高效的完成一個大規模分散式軟實時系統構建。對於沒有接觸過實際工程環境的學生,或者是一般性的軟體開發人員,這些過於深入的概念恰恰是不必要的。

鎚子一旦用對了地方,自然是事半功倍,但是你要拿鎚子去開發個遊戲客戶端、寫個數學函數庫什麼的,就得小心小心自己的腦細胞了。至少就現在看來,以高性能伺服器開發為工作的IT人員,也僅僅只佔計算機行業較小的一部分而已,首先erlang就沒有理由、也沒有這個想法去跟C/JAVA相比較。

至於NodeJS的火爆我覺得也很好理解。它把伺服器開發的門檻降到了一個非常可觀的水平。往日里的白富美突然一下子變得平易近人了許多,這積極性調動起來能低嗎。雖然這白富美從各個技術角度來講,都不如Erlang的活好。但是畢竟設計目標不一樣,沒法比較嘛。


工程語言(相對的是腳本語言)在沒有學校大規模提供半成品碼蟻的前提下都較難流行起來,所以大頭一直被 Java 和 C++ 占著。

然後函數式語言又自帶小眾屬性。


公司不主推的話,沒有相應的環境,新語言就不會再公司內流行,大多數公司不用,自然就感覺沒流行了。

就我使用erlang4年來看,這個語言上手速度其實可以很快,但的確如果oop思想太頑固的話,不好轉彎。所以你想讓老的程序猿轉用這個語言是很困難的事情。

至於未來,感覺還是會流行起來,畢竟在多線程方面是有天生優勢。


數據結構描述過於蛋疼,至少對我而言。


一個語言的流行或好用,需要做到:

支持的平台多開發(包括閱讀、維護)高效

(開發出來的系統)運行高效(寫服務端時,對硬體要求低),配置方便(如果一台中低端伺服器不夠,能方便地加機器擴展。這個似乎與語言的關係比較間接了,但是有些語言是需要支撐環境,這個環境的配置是否方便,也很重要)

開發高效,就要求:新手入門容易,語法直觀平實,坑少(想犯錯都難),代碼精悍效力強大(代碼短,錯誤也就少)

最近為了替換一個後台程序(delphi寫的isapi程序,只能運行在win2003的iis6,雖然效率極高,但是平台少了),找了php、go、lua、node.js,還真沒試過erlang。


函數式流行不起來,畢竟廣大程序員基層沒幾個懂過程式外的東西,連個lambda出來都要奔走相告


感覺就要流行起來了。

elixir吸引了很多人來了解erlang。

OTP team也在持續地解決一些歷史遺留問題。

越來越多公司對高並發,容錯的需求。


推廣的運用的企業少,學習資料少 ,社區小,工作機會少而且相對招人也難,有問題相對不容易查,新手好入門,精通升華到爐火純青的地步還是需要淬鍊和悟性的


erlang 其實挺不錯的,不流行說起來有3個原因:

1、語言性質決定的

erlang作為一門並發編程的語言,順序執行的性能不高,加上語法迥異,如變數單次賦值,沒有循環結構等。而現有大多項目都是順序編程,順序編程思維的人占很大比重。

2、高端人才匱乏

等到項目大到,迫切需要解決高並發問題的時候,發現erlang高端人才是極度缺乏的,而其他語言現成的成熟方案有很多,人才相對也富足

3、精通erlang不容易

erlang雖然語法簡單,很容易學會。但是底層實現複雜,幾乎模仿操作系統實現了一遍,相較其他開源項目難以閱讀。真想研究底層實現要花費很大精力,對比拿這些精力去研究其他成熟框架有更明顯直接的成就


Erlang很好用,輕量級進程,穩定高可靠;學習成本不高,團隊人員要求不高,主要是開發思維改變。在頁游、手游中用得多。


我猜可能是因為太簡單了,所以不會有人專門去翻譯英文資料,不要有老師大學去教這門課程;而且erlang天生就不適合可視化編程,學起來就比較煩悶。大家可以對比一下C++、Java等編程語言,想想就能知道個大概啦。。。


因為Erlang就是Erlang,它天生就註定了它僅能在某一個小圈子裡流行。


推薦閱讀:

Hadoop和Spark解決了哪些並行資料庫沒解決的問題?
現在主流開源分散式系統架構都有哪些?
Paxos(Multi-Paxos)在工程實現中需要注意哪些問題?
如何理解Nvidia英偉達的Multi-GPU多卡通信框架NCCL?
關於分散式程序設計有哪些書籍值得推薦?

TAG:分散式計算 | 編程語言 | 編程 | 函數式編程 | Erlang編程語言 |