區(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。
接下來我會(huì)簡短介紹一下這些編程語言,它們都有哪些優(yōu)缺點(diǎn),上手難度以及哪些區(qū)塊鏈項(xiàng)目在應(yīng)用這些語言。
1. JavaScript
JavaScript 是一門解釋型高級(jí)編程語言。
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í)一下基本知識(shí),當(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)造出來的高級(jí)面向?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ā)者
上手難度
對(duì)于我來說,C# 由于其語法和強(qiáng)類型,不像 JavaScript 那么簡單易學(xué),但是也不像 Go 語言學(xué)起來那樣困難和復(fù)雜。
除此之外,也有比較豐富的學(xué)習(xí)資源和材料使得這門編程語言比較易于學(xué)習(xí)。
應(yīng)用場景
C# 在許多區(qū)塊鏈項(xiàng)目中都有應(yīng)用,其中最著名的是 NEO 公鏈,它號(hào)稱中國版的以太坊。
NEO 是一個(gè)高效的區(qū)塊鏈平臺(tái),每秒可處理的交易數(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ú)立和多平臺(tái)
運(yùn)行高速
和 C 語言類似
強(qiáng)靜態(tài)類型
缺點(diǎn)
代碼冗余程度高
不易學(xué)習(xí)
調(diào)試復(fù)雜
不支持垃圾回收機(jī)制
上手難度
由于 C++ 比 C 語言要更復(fù)雜,所以學(xué)起來也更困難。
對(duì)于初學(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)類型的高級(jí)編程語言。
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é)會(huì)之后,開發(fā)易于上手
可擴(kuò)展性強(qiáng)
缺點(diǎn)
學(xué)習(xí)起來不那么容易
非常年輕的語言,社區(qū)規(guī)模不大
不像 Python 或者 JavaScript 有眾多庫和開發(fā)包
對(duì)于一些開發(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 語言對(duì)你來說應(yīng)該會(huì)比較輕松。
應(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ù)對(duì)代碼進(jìn)行全面測試
上手難度
Solidity 不是一門很復(fù)雜的編程語言,而且和 JavaScript 很類似,像是加入了類型特性的 微縮版的 JavaScript(在 JavaScript 項(xiàng)目中使用 TypeScript 來加入類型這一特性也是很常見的)。
因此許多有經(jīng)驗(yàn)的 JavaScript 開發(fā)者能在幾天之內(nèi)就學(xué)會(huì) 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ái),不依賴操作系統(tǒng)
強(qiáng)類型語言
對(duì)面向?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 加密貨幣平臺(tái) NEM 也用到了 Java(NEM 是使用 Java 編寫的)。
還有一些用到 Java 的區(qū)塊鏈項(xiàng)目有:
Neo 的智能合約
Hyperledger 的智能合約
IBM 區(qū)塊鏈
BitcoinJ(比特幣的 Java 實(shí)現(xiàn))
以太坊
8. Rust
Rust 是一個(gè)系統(tǒng)級(jí)、強(qiáng)類型的編譯型編程語言,自 2009 年以來,Mozilla 一直在對(duì) 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)方式對(duì)數(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ī)會(huì)中薪水年薪超過 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ù)雜或相對(duì)簡單,互聯(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ī)會(huì)最多的以及工作待遇最好的,理應(yīng)勝出。
易于學(xué)習(xí)對(duì)于 Solidity 來說是一個(gè)明顯優(yōu)勢,直到 dApp 不再流行之后,Solidity 的熱度可能會(huì)銳減。
優(yōu)勝者:JavaScript 和 Solidity
然而,如果你仔細(xì)查看排名,你會(huì)發(fā)現(xiàn)所有的語言都有不少工作機(jī)會(huì),而且很多工作機(jī)會(huì)的薪水都很不錯(cuò)。
對(duì)于不同語言來講,工作機(jī)會(huì)的數(shù)量和語言難度的差異并不大,因此我可以負(fù)責(zé)任的告訴你,使用其中任何一門編程語言,你都可以在區(qū)塊鏈行業(yè)很快找到一份好工作。