區(qū)塊鏈項(xiàng)目中經(jīng)常應(yīng)用的各種編程語言介紹
區(qū)塊鏈技術(shù)由于其安全、快速以及去中心化的特性(雖然不是所有項(xiàng)目都滿足這些特性,但是大多數(shù)項(xiàng)目是符合的)已經(jīng)迅速滲透到了各種業(yè)務(wù)場景、我們的生活以及身邊的企業(yè)中。
數(shù)以千計(jì)的區(qū)塊鏈項(xiàng)目正在開發(fā),或者已經(jīng)開發(fā)完成并且部署到了網(wǎng)絡(luò)中。各個(gè)企業(yè)都在尋求區(qū)塊鏈的新點(diǎn)子或者試圖去改進(jìn)其他公司正瘋狂創(chuàng)造的東西,然而這僅僅是區(qū)塊鏈技術(shù)驅(qū)動(dòng)這個(gè)世界的開始。
作為開發(fā)者來說,在區(qū)塊鏈行業(yè)找到一個(gè)薪水高、待遇好的工作是讓人夢寐以求的。因此,這就引出了一個(gè)很重要的問題:
哪種編程語言最適合區(qū)塊鏈?
在區(qū)塊鏈開發(fā)圈子里,我們找到了一些流行的編程語言,有 JavaScript、C#、C++、Python、Golang、Solidity、Java 和 Rust。
接下來我會簡短介紹一下這些編程語言,它們都有哪些優(yōu)缺點(diǎn),上手難度以及哪些區(qū)塊鏈項(xiàng)目在應(yīng)用這些語言。
1. JavaScript
JavaScript 是一門解釋型高級編程語言。
JavaScript 是基于原型編程的動(dòng)態(tài)弱類型語言,是出眾的 Web 技術(shù)之一。
JavaScript 在近些年非常流行,像 Angular、React、Vue、Node.js 這些流行的開發(fā)框架都是基于 JavaScript 的。
優(yōu)點(diǎn)
面向?qū)ο?/p>
原型編程設(shè)計(jì)
支持函數(shù)式編程
非常流行,幾乎所有 IT 公司都需要 JavaScript 框架
缺點(diǎn)
動(dòng)態(tài)語言
弱類型(但是可以使用 TypeScript 解決這個(gè)問題)
上手難度
JavaScript 屬于一種入門難度比較低的編程語言,我們甚至不需要深入進(jìn)行學(xué)習(xí)就能將其應(yīng)用于生產(chǎn)。
使用 JavaScript 進(jìn)行編程,我們只需要學(xué)習(xí)一下基本知識,當(dāng)有需要的時(shí)候再去深入了解就好。
目前,在網(wǎng)上有非常豐富的課程和教程能夠幫助我們學(xué)習(xí) JavaScript,不僅僅可以學(xué)習(xí) JavaScript 這門語言,還可以學(xué)習(xí)很多流行的開發(fā)框架。
區(qū)塊鏈應(yīng)用
最著名的應(yīng)用是 web3.js 和 ethereum.js 這兩個(gè) JavaScript 庫,他們能夠幫助開發(fā)者在前端應(yīng)用中和以太坊網(wǎng)絡(luò)以及智能合約進(jìn)行交互。
開發(fā)者用到的比較多的另外一個(gè) JavaScript 庫是基于 node.js 的 Hyperledger Fabric SDK。Hyperledger Fabric SDK 在大公司和企業(yè)中應(yīng)用比較廣泛。
JavaScript 另外一個(gè)在區(qū)塊鏈智能合約方面的應(yīng)用場景是 NEO。NEO 是一個(gè)高效的區(qū)塊鏈公鏈,能夠每秒處理數(shù)以千計(jì)的交易。
另一個(gè)使用也比較頻繁但是不那么著名的 JavaScript 應(yīng)用是閃電應(yīng)用,它是構(gòu)建于比特幣網(wǎng)絡(luò)上的快速支付通道。還有一個(gè)我想提的是 Raiden 網(wǎng)絡(luò),它是構(gòu)建于以太坊網(wǎng)絡(luò)之上的高速基礎(chǔ)架構(gòu)設(shè)施。
2.C-Sharp
C# 是一門 20 世紀(jì) 90 年代末創(chuàng)造出來的高級面向?qū)ο缶幾g型編程語言,20 世紀(jì)初為 Microsoft 所開發(fā)。
它是一門非常類似于 C++ 或者 Java 的編程語言,采用了類集合和繼承。
優(yōu)點(diǎn)
支持 .NET
比較易于上手
流行度高
面向?qū)ο?/p>
強(qiáng)類型語言
動(dòng)態(tài)代碼支持
缺點(diǎn)
欠缺 Linux 系統(tǒng)支持
面向 Windows 開發(fā)者
上手難度
對于我來說,C# 由于其語法和強(qiáng)類型,不像 JavaScript 那么簡單易學(xué),但是也不像 Go 語言學(xué)起來那樣困難和復(fù)雜。
除此之外,也有比較豐富的學(xué)習(xí)資源和材料使得這門編程語言比較易于學(xué)習(xí)。
應(yīng)用場景
C# 在許多區(qū)塊鏈項(xiàng)目中都有應(yīng)用,其中最著名的是 NEO 公鏈,它號稱中國版的以太坊。
NEO 是一個(gè)高效的區(qū)塊鏈平臺,每秒可處理的交易數(shù)量可達(dá)數(shù)千條。
另外一個(gè)流行的使用 C# 的區(qū)塊鏈項(xiàng)目是 IOTA,它面向的場景是物聯(lián)網(wǎng),它是一個(gè)具有高拓展性以及 0 交易手續(xù)費(fèi)的公鏈項(xiàng)目。
3. C++
C++ 是一門強(qiáng)類型的、高效的、面向?qū)ο蟮木幾g型語言。
重要的是,C++ 是一門非常高效并且能夠?qū)τ布M(jìn)行訪問的語言。
有趣的是,C++ 是在上世紀(jì) 70 年代~80 年代發(fā)明出來的,當(dāng)時(shí)是作為 C 語言的擴(kuò)展。
優(yōu)點(diǎn)
獨(dú)立和多平臺
運(yùn)行高速
和 C 語言類似
強(qiáng)靜態(tài)類型
缺點(diǎn)
代碼冗余程度高
不易學(xué)習(xí)
調(diào)試復(fù)雜
不支持垃圾回收機(jī)制
上手難度
由于 C++ 比 C 語言要更復(fù)雜,所以學(xué)起來也更困難。
對于初學(xué)者來說,C++ 確實(shí)是一門不那么易于學(xué)習(xí)的編程語言。
應(yīng)用場景
C++ 在許多著名的區(qū)塊鏈加密貨幣以及重要的區(qū)塊鏈項(xiàng)目中得以應(yīng)用:
比特幣(最著名的加密貨幣)
瑞波幣(中心化高速加密貨幣)
比特幣現(xiàn)金(加密貨幣)
萊特幣(加密貨幣)
門羅幣(匿名加密貨幣)
EOS(高速區(qū)塊鏈網(wǎng)絡(luò),其中的系統(tǒng)加密貨幣也叫做 EOS)
Stellar(支付網(wǎng)絡(luò),其中一位創(chuàng)始人是 eDonkey 的創(chuàng)始人之一)
QTUM(某種意義上來說,它是以太坊技術(shù)和比特幣技術(shù)的結(jié)合)
Cpp-ethereum(C++ 實(shí)現(xiàn)的以太坊客戶端)
4. Python
Python 是一門流行的動(dòng)態(tài)類型的高級編程語言。
Python 也支持面向?qū)ο缶幊桃约昂瘮?shù)式編程。
這門編程語言比起以前更加流行了,在機(jī)器學(xué)習(xí)以及人工智能方面的開發(fā)中表現(xiàn)非常出眾。
許多 IT 巨頭使用 Python 開發(fā)了許多智能工具和框架(比如 dialogflow 以及 TemsorFlow)。
在開發(fā)聊天機(jī)器人時(shí),Python 也是一門被選用比較廣泛的語言。
優(yōu)點(diǎn)
非常易于學(xué)習(xí)
有很多現(xiàn)成的庫和框架,比如 Django 或 Tensorflow
快
缺點(diǎn)
通常被用于服務(wù)端
上下文環(huán)境不那么智能
各種類庫的文檔并不足夠完善
上手難度
Python 非常流行并且經(jīng)常被選為第一門用于入門的編程語言。
互聯(lián)網(wǎng)上有非常豐富的教程和課程,使得 Python 這門語言非常易于學(xué)習(xí)。
應(yīng)用場景
Python 在許多優(yōu)秀的區(qū)塊鏈項(xiàng)目中得到應(yīng)用,比如說有使用 Python 實(shí)現(xiàn)的以太坊客戶端。我們也能用 Python 在 NEO 和 Hyperledger 上部署智能合約。
另一個(gè)我想要提到的是:steempython。它是 steemit 的 Python 實(shí)現(xiàn)版本,steemit 是一個(gè)流行的社交媒體、內(nèi)容提供生態(tài)。
5. Golang
Go 是由 Google 員工發(fā)明的一門靜態(tài)類型的編譯語言。
Go 想要做的是將 Python 這種易于開發(fā)的特性和 C++ 這種編譯語言的高效特性結(jié)合起來。
優(yōu)點(diǎn)
內(nèi)存安全
垃圾回收機(jī)制
強(qiáng)類型語言
運(yùn)行速度快
學(xué)會之后,開發(fā)易于上手
可擴(kuò)展性強(qiáng)
缺點(diǎn)
學(xué)習(xí)起來不那么容易
非常年輕的語言,社區(qū)規(guī)模不大
不像 Python 或者 JavaScript 有眾多庫和開發(fā)包
對于一些開發(fā)者來說,Go 語言的語法不清晰甚至有些丑陋
上手難度
Go 語言在互聯(lián)網(wǎng)上沒有那么多像 JavaScript 教程這樣多隨處可見的好教程,人們不得不更深入地尋找一些學(xué)習(xí)資料,而且 Go 是一門復(fù)雜的語言,所以大家普遍覺得它是一門難學(xué)的語言。
其實(shí),這個(gè)觀點(diǎn)更多的是來自于 Python/JavaScript 開發(fā)者,因?yàn)?Go 語言和這些語言的差異的確很大。
如果你之前學(xué)習(xí)過 C++ 或者 Java,學(xué)習(xí) Go 語言對你來說應(yīng)該會比較輕松。
應(yīng)用場景
和 Golang 相關(guān)的區(qū)塊鏈項(xiàng)目非常之多,我這里只介紹一些最流行的。
Go 語言編寫的最著名的一個(gè)項(xiàng)目是 Go-ethereum,它是一個(gè) Go 語言編寫的以太坊客戶端。
另一個(gè)著名項(xiàng)目 Hyperledger Fabric 項(xiàng)目也是使用 Go 語言來實(shí)現(xiàn)的,Hyperledger Fabric 是一個(gè)可以為大公司提供區(qū)塊鏈解決方案的項(xiàng)目。
Loom Network 也是用 Go 編寫的一條鏈,它目標(biāo)的方向是為去中心化在線游戲提供解決方案。不那么出名的項(xiàng)目還有 Btcd,它是比特幣的 Go 語言實(shí)現(xiàn)版本。還有一個(gè)項(xiàng)目叫做 Gochain,它是一個(gè)用 Go 實(shí)現(xiàn)的與以太坊兼容的區(qū)塊鏈項(xiàng)目。
除此之外,我還想介紹的一個(gè)項(xiàng)目是 Dero,它也是用 Go 實(shí)現(xiàn)的一個(gè)高效的區(qū)塊鏈項(xiàng)目,目標(biāo)是解決智能合約的隱私性問題。
6. Solidity
Solidity 是一門面向智能合約的靜態(tài)類型語言,它是由以太坊開發(fā)者發(fā)明的。
它是為 EVM (以太坊智能合約執(zhí)行虛擬機(jī))而生的,是智能合約開發(fā)的主要編程語言,也是以太坊智能合約的主要編程語言。
優(yōu)點(diǎn)
靜態(tài)類型語言
易于學(xué)習(xí)
使用人群增長迅速
缺點(diǎn)
非常年輕的一門語言
社區(qū)規(guī)模小,能夠得到的支持比較少
不通用(僅用于以太坊生態(tài))
非常脆弱(易被攻擊)
非常容易犯關(guān)鍵性錯(cuò)誤,因此需要反復(fù)對代碼進(jìn)行全面測試
上手難度
Solidity 不是一門很復(fù)雜的編程語言,而且和 JavaScript 很類似,像是加入了類型特性的 微縮版的 JavaScript(在 JavaScript 項(xiàng)目中使用 TypeScript 來加入類型這一特性也是很常見的)。
因此許多有經(jīng)驗(yàn)的 JavaScript 開發(fā)者能在幾天之內(nèi)就學(xué)會 Solidity,尤其是當(dāng) duomly.com 這樣的網(wǎng)站提供了許多交互式學(xué)習(xí)教程之后,學(xué)習(xí) Solidity 就變的更容易了。
應(yīng)用場景
我們通常使用 Solidity 來開發(fā)以太坊的智能合約。
我沒有看到其他項(xiàng)目有使用 Solidity 的,但是目前以太坊的開發(fā)生態(tài)是一個(gè)很龐大的生態(tài),是區(qū)塊鏈開發(fā)領(lǐng)域中非常重要的組成部分,因此,Solidity 也是區(qū)塊鏈產(chǎn)業(yè)中應(yīng)用最廣泛的編程語言之一。
7. Java
Java 是一門強(qiáng)類型的、基于類的編譯型編程語言,它是由 Sun Microsystems 開發(fā)的。
Java 是面向?qū)ο蟮恼Z言,在大公司之中很流行。
優(yōu)點(diǎn)
跨平臺,不依賴操作系統(tǒng)
強(qiáng)類型語言
對面向?qū)ο缶幊讨С址浅S押?/p>
社區(qū)龐大并且類庫豐富
比起 C、C++ 開發(fā)更容易
具有垃圾回收機(jī)制
內(nèi)存清理容易
缺點(diǎn)
需要 Java 虛擬機(jī)運(yùn)行環(huán)境
比 C++ 和 Go 慢
上手難度
Java 和 C# 難度相當(dāng),比 JavaScript 或者 Python 稍難一些,也更復(fù)雜一些。但 Java 是一門非常流行的編程語言,有很多學(xué)習(xí)材料。
一般來講,Java 比 Golang 和 C++ 都簡單一些。
應(yīng)用場景
Java 語言在區(qū)塊鏈行業(yè)中是很流行的,比較流行的項(xiàng)目 IOTA(在 C# 那部分內(nèi)容已經(jīng)介紹了 IOTA)用到了 Java。一個(gè)比較有名的 P2P 加密貨幣平臺 NEM 也用到了 Java(NEM 是使用 Java 編寫的)。
還有一些用到 Java 的區(qū)塊鏈項(xiàng)目有:
Neo 的智能合約
Hyperledger 的智能合約
IBM 區(qū)塊鏈
BitcoinJ(比特幣的 Java 實(shí)現(xiàn))
以太坊
8. Rust
Rust 是一個(gè)系統(tǒng)級、強(qiáng)類型的編譯型編程語言,自 2009 年以來,Mozilla 一直在對 Rust 進(jìn)行開發(fā)和贊助。
Rust 的語法類似于 C++。
優(yōu)點(diǎn)
強(qiáng)類型語言
安全
支持函數(shù)式編程
和 C++ 一樣快
基于特征的繼承
運(yùn)行環(huán)境精簡
缺點(diǎn)
學(xué)習(xí)難度大
不是特別有名,因此社區(qū)規(guī)模不大,可用類庫不多,因此經(jīng)常需要開發(fā)者從頭開始寫代碼解決一些問題
沒有清晰的標(biāo)準(zhǔn)方式對數(shù)據(jù)庫進(jìn)行訪問
應(yīng)用場景
并沒有特別多的區(qū)塊鏈項(xiàng)目用到了 Rust。
其中一個(gè)用的 Rust 的項(xiàng)目是 Parity,它是一個(gè) Rust 編寫的以太坊客戶端,它運(yùn)行速度快并且很安全。
另一個(gè)流行的項(xiàng)目是以太坊經(jīng)典,這個(gè)項(xiàng)目的產(chǎn)生源于以太坊歷史上一次重大的黑客事件,它是從以太坊分叉產(chǎn)生出來的加密貨幣項(xiàng)目。
介紹的最后一個(gè)項(xiàng)目是 Exonum,它是一個(gè)面向區(qū)塊鏈安全的框架,它每秒鐘能處理上千條交易。
總結(jié)(獲勝者)
不同編程語言在區(qū)塊鏈行業(yè)中的工作招聘數(shù)量:
JavaScript:565 份
Solidity:424 份
Python:394 份
Go:361 份
C#:301 份
C++:289 份
Java:289 份
Rust:54 份
JavaScript 勝出
工作待遇排名:
為了獲取到最優(yōu)工作待遇的排名,我們挑出了各個(gè)編程語言的工作機(jī)會中薪水年薪超過 15 萬美金的招聘信息,以數(shù)量多少的形式進(jìn)行了排名。
結(jié)果如下:
JavaScript:89 份
Go:81 份
Solidity:77 份
Python:71 份
C#:61 份
C++:61 份
Java:52 份
Rust:14 份
JavaScript 勝出
易學(xué)性排名
盡管學(xué)習(xí)是非常有個(gè)體性差異的事情,但是編程語言或復(fù)雜或相對簡單,互聯(lián)網(wǎng)上的學(xué)習(xí)資源也良莠不齊,因此,我決定根據(jù)我的個(gè)人經(jīng)驗(yàn)和互聯(lián)網(wǎng)統(tǒng)計(jì)數(shù)據(jù)進(jìn)行一個(gè)排名。結(jié)論如下:
1. Solidity
2. Python
3. JavaScript
4. Java / C#
5. C++
6. Go
7. Rust
Solidity 勝出
綜合排名
在列出了以上的關(guān)鍵點(diǎn)之后,我們可以結(jié)合這幾項(xiàng)選出一個(gè)綜合排名最高的語言了。
由于 JavaScript 廣泛用于前端應(yīng)用中,在后端和中間件中也有不少應(yīng)用,同時(shí)也是工作機(jī)會最多的以及工作待遇最好的,理應(yīng)勝出。
易于學(xué)習(xí)對于 Solidity 來說是一個(gè)明顯優(yōu)勢,直到 dApp 不再流行之后,Solidity 的熱度可能會銳減。
優(yōu)勝者:JavaScript 和 Solidity
然而,如果你仔細(xì)查看排名,你會發(fā)現(xiàn)所有的語言都有不少工作機(jī)會,而且很多工作機(jī)會的薪水都很不錯(cuò)。
對于不同語言來講,工作機(jī)會的數(shù)量和語言難度的差異并不大,因此我可以負(fù)責(zé)任的告訴你,使用其中任何一門編程語言,你都可以在區(qū)塊鏈行業(yè)很快找到一份好工作。