當前位置:編程學習大全網 - 編程語言 - erlang golang學習哪個

erlang golang學習哪個

我最早使用的語言是Java和Python, 並且壹直都對Python充滿好感, 我喜歡這種很樸實和高效率的感覺, 但我卻最後沒有采用Python,原因其實也很簡單, 我就是不喜歡縮進語法, 就跟很多人換工作僅僅是為了屏幕更大壹點壹樣, 另外就是有了同樣很棒的可選方案, 這就是Ruby, 所以我最終采用了Ruby作為主力編程語言, 同樣也為不能使用Python而有壹點小遺憾,畢竟Python的健壯性比Ruby好很多,只不過Ruby也壹直在進步, 所以這壹點無傷大雅

我們都知道,無論是Python還是Ruby,甚至Java, 都是在解決業務層的問題, 屬於應用型語言, 以解決業務邏輯為主, 但還有壹個領域是系統領域,偏網絡層和底層操作,在這壹塊我壹直在尋找壹種優雅的方案, C++被我首先給淘汰掉了, C的開發效率太低, Java倒是比較合適, 就是太臃腫,而且缺少系統編程的基因,畢竟它是企業級開發出身的

最後我選擇了Erlang, 因為它在網絡層方面表現優秀, 同時容錯性和健壯性都很不錯, 它的虛擬機是唯壹可以跟JVM媲美的, 而且還有OTP的超重量級武器, 幾乎可以是通殺網絡層應用, 但根據我的總結它有壹個硬傷和壹個軟肋,這壹點後面展開,可以說選擇Erlang是我目前所知道的方案裏面是最優的

直到有壹天我了解了Golang, 我知道Golang其實也蠻早的, 大概08年的時候就知道Google在搞壹門奇怪的語言, 之後的幾年,壹直有不少以老莫為代表的人在嘀咕Golang, 其實我壹直沒太關註,我從ROR中吸取的經驗是,成熟度對於商用很重要, 後來基於Golang開發的產品越來越多,讓我不得不去研究壹下, 這我才知道, 這就是我夢想中的Python, 效率和性能達到了最佳的平衡,對Go了解越多, 就越不願意用Erlang寫代碼,主要原因:

1、Erlang的硬傷在於代碼的可讀性、表現力, 讓我來舉個小例子, 比如妳為妳的系統軟件構建壹個RESTFUL的接口,我們大致了解壹下代碼風格,先不說Erlang, 無論是妳c/c++/python/ruby/java 出身, 對Go是不是有種很久違的感覺, 為什麽說是硬傷? 因為對壹門語言來說,語法是不大可能會大幅度變更的, 而且不會出現大的變化, 我不知道有沒有人讀過《松本行弘的編程世界》,裏面闡述的道理很明白, 真正好的編程方式是人去主宰計算機而不是計算機主宰人, 我感覺Erlang就有點主宰我的編程思維的感覺(我的視力本身就不好,它還在不斷的扼殺我的眼睛!), 編程首先是門邏輯學,其次是工程學,最後才是數學, 又讓我想起吳軍的《數學之美》所說的, 人工智能上個世紀壹直在走彎路, 期望機器的高度圖靈完備, 而忽視人類本身已有的文明,統計歸納的應用

2、Erlang的軟肋在於高質量的庫少,盡管有不少殺手級應用, 同樣Go在這方面也是軟肋, 這壹點對於壹個不到五年的語言有情可原, 但對於壹個20多年的語言是不是有點說不過去, 比如妳用json解析庫,很多人都是從mochiweb這個基本不更新的庫中去抽取, 而我認為對於類似json這種東西可以考慮融入到語言標準庫中, 因為未來的商業軟件的api化趨勢越來越明顯,說的難聽點 , 壹個倚老賣老壹個與時俱進,反正我對Golang的庫壹點也不擔心, 目前的成績易經非常棒了, 遠遠優於Ruby/Python的前五年, 可參見已有的高質量的庫列表

3、Erlang不合群, 這主要體現在跟其他語言的交互性上, 當然這也有深層次的原因, Erlang本身有自己的哲學, 如出錯恢復機制, 妳融入壹個其他語言的東西進去, 這帳就不好算,就好比妳硬要讓壹個喝咖啡的跟壹個吃大蒜的坐在壹起, 總之妳寫壹個Erlang的port遠遠比Go復雜, 甚至比Python/Java還要復雜, 這就造成了Erlang在底層編程上效果不是很好, 沒法利用linux已有的很多優秀成果,我壹直認為Erlang的什麽的mysql/pg/oracle驅動都沒有必要存在, Erlang壹定是壹個self-container應用, 妳只要用到了其他東西, 根據木桶理論, 妳就不敢號稱9個9,以系統的眼光看問題, 我覺得壹個系統的魯棒性不能依賴於某壹組件, 這也是為什麽愛立信本身的Erlang應用並不廣泛

4、說說數據類型吧, 我不止聽到1個人說Erlang對字符串的處理不有好, 它把string當做list來處理,其實本質上是該這麽,但,還是那句話, 違背了面向人的哲學, 應該做壹些DSL, 比如Golang裏面的 := 就是壹個糖衣, 等價於 var xx yyy = zzzz, 大大方便的程序員少敲不少字符, Golang裏面對字符轉可以說基本和python差不多, slice map函數很強大, 支持lambda條件,雖然Erlang的基本類型很少, 但有很多構造, 所謂構造等價於Golang裏面復雜的struct, 也奇怪了,我就是感覺Erlang構造傷眼睛好嗎?可能是各種括號的比對的原因吧, 而且我認為這是不必要的, 顯然Erlang缺少DSL的基因, 當然跟Erlang出身的年代有關, 我不誇張的說, 自打用Erlang以後我的視力又下降了100度左右, 我不是很喜歡lisp所說的符號也是壹種語法, 可能這又跟函數式編程有關吧:形式推導遠大於邏輯演繹

5、其實我最不關註的是性能問題, 因為隨著摩爾定律, 單位計算單元的性價比會無限高,但Golang既然提出它的性能逼近C, 那我還是提壹下吧, 當然, Erlang也還可以, 雖然比Java慢, 但跟Python壹個檔次吧

6、再談談報錯機制, 因為Erlang的的報錯信息太讓人糾結了, 起初以為我不會看出錯信息, 後來也使用了Sasl, 還是不夠直觀,甚至有時要用工具分析crash文件來定位問題,還是跟Erlang的哲學有關, 在Erlang中壹切都是並行的, 所以它根本不care是物理哪壹行出錯, 只跟Actor綁定, 然後告訴妳Actor的ID和出錯代號, 妳自己憑經驗去分析吧,這樣做的好處是可以很方便定位出並行中出現的問題,但凡事都是相對的, 在這壹點上有點糾枉過正,根據我的經驗, 絕大部分時候我只希望先給我明確的指出哪壹行出錯了好嗎? 甚至把順序的backtrace用完整的英文句子打印出來好嗎?至於並行中的錯誤及時在命令式多線程語言中是不常見的,雖然並不是沒有, 但遇到錯誤我再費勁去調試好了, 但並不是所有的邏輯都用並行的思維去定位問題, 我甚至認為, 對於壹個系統不完全是並行也不完全是串行,跟好比我們衡量世界不能單純的唯物也不能完全的唯心壹樣, 這壹點Golang就做了很好的折中, 不需要並行的時候妳老老實實的寫串行代碼, 需要並行的時候也有較復雜的機制來應對, 合乎情理

7、再說說招人吧, 以前招過好幾個C出來的人,說實話水平很好, 可以壹周就完成壹個小組件, libevent用的熟的很,後來我逼人家用Erlang,結果把人家逼走了,至今我還很後悔, 自己的壹廂情願強加在別人身上真是太不合適了,但我招純Erlang出來的人,可以說比招objc的人還難, 沒有人,空談技術的優雅性首先就是不靠譜的,再看看郵件列表, Golang的活躍度明顯比Erlang高很多, 基本逼近Ruby,更重要的是, 我根本不擔心Golang的人才,因為只要熟悉Python/C/Ruby/或者C++, 基本可以實現半天入門, 之後就可以劈裏啪啦邊搜資料邊幹活了,雖然有足夠的深度,但門檻極其平緩,工程人員也可以復用很多已有的知識。 Erlang在這壹點其實跟第壹點硬傷有關,大部分人學壹周都摸不著頭腦,不是每個人的抽象思維和世界觀都是壹樣的好嗎, 所以函數式編程盡管不比命令式語言起步晚,但始終學的人很少,這就是歷史, 對於大部分人, 更希望解決問題,創造價值, 而不是數學來推導去

8、最後我建議, 如果妳是玩c/c++的, 現在開始學Golang,是最好的時機, 跟壹門靠譜的語言壹起成長, 這種感覺非常棒, 妳用Erlang折騰1個應用, 用Go恐怕都完成了10個開源項目, 當然,也要結合自己的口味, Golang就是Sublime Text, Erlang就是Emacs

相信自己的判斷,相信自己的邏輯, 贏就是贏,輸就是輸

轉載僅供參考,版權屬於原作者。祝妳愉快,滿意請采納哦

  • 上一篇:星球大戰系列介紹?
  • 下一篇:線切割編程是什麽?
  • copyright 2024編程學習大全網