十年前端老兵:學習DApp開發,投身下一個浪潮
過去的十年,可以說是 App 的十年。但未來的十年,DApp 被寄予了厚望。App 的形態是前端開發者的專長,而 DApp 將同樣離不開前端開發者的參與。
“CSS 魔法”,08 年加入網際網路,是一位有十年經驗的前端老兵。他認為區塊鏈將是下一個重要的節點,對區塊鏈技術也有著自己的理解和有啟示意義的看法。
InfoQ:魔法哥,您能先向 InfoQ 的讀者介紹下自己嗎?
大家好,很高興能在 InfoQ 這個平臺和大家見面。我叫 “CSS 魔法”,熟悉我的朋友都叫我 “魔法哥”。
我在 2008 年來到上海,進入網際網路行業。一轉眼,我已經是一個 “十年經驗” 的前端老兵了。工作之餘,我會折騰一些開源專案,也經常會在 “CSS 魔法” 公眾號編寫教程、翻譯技術文件。在 2015 年,我還翻譯了一本前端領域的重磅圖書《CSS 揭祕》,算是為中文技術社群做出了一點微小的貢獻。
InfoQ:作為一名前端工程師,您經歷的關鍵點和轉折點都有哪些?
其實對我來說,“前端” 本身就是一個巨大的轉折點。來上海之前,我一直在傳統行業工作,投身網際網路大潮是一次急轉彎式的轉型。不過當時的我並不具備對行業大勢的深入洞察,轉型的動力僅僅是源於興趣——在網際網路行業做產品,離使用者更近、效率更高、影響力更大,實在是酷斃了!
這次轉行顯然是正確的。這些年每次回老家遇見老同事,他們都會誇我當年有魄力有遠見。我其實是很不好意思的,我哪裡有遠見,只不過是跟著感覺走罷了。
在前端領域奮鬥的這幾年,都還算順利。五年前加入百姓網,可以說是又一個關鍵點——感覺自己的職業生涯終於邁上了正軌。
今年上半年,因為一些偶然的機會,我接觸到了區塊鏈和 DApp。沒想到一發不可收拾,我內心的小宇宙又一次燃燒起來,當年 “投身網際網路” 的那種衝動似乎又出現了。我隱隱感覺到,我即將走向下一個重要節點,又一個不可錯過的浪潮已經撲面而來!
InfoQ:為什麼區塊鏈和 DApp 會吸引到您的關注?
我這個人一向來對炒得很熱的東西是無感的。所以我剛開始對區塊鏈完全沒興趣,甚至是牴觸的。前端領域的新東西都看不過來了,還看什麼區塊鏈?不過,機緣巧合之下,我驚奇地發現,原來區塊鏈除了記賬,還可以跑程式碼;作為開發者,還可以在區塊鏈上開發應用!
基於區塊鏈開發的應用稱作 “去中心化” 應用( Decentralized Application ),簡稱 DApp。去中心化的含義是指,你的應用不僅是把資料儲存在區塊鏈節點上,你的應用本身就執行在區塊鏈節點上!
這個 “新大陸” 深深地吸引了我。簡單解釋一下,我作為一名前端工程師,精力所限,並不是那麼精通後端;但我仍然有一顆做產品的心,一直想著某天可以獨立搞一個完整的應用出來,為使用者提供價值。可是光有前端,沒有後端,能做的事情是比較有限的。而當我遇見 DApp 的時候,不由地眼前一亮!
做一個 DApp 可以不需要後端。因為 DApp 的資料就儲存在區塊鏈上,讀寫資料的邏輯也跑在區塊鏈上,我並不需要用後端語言寫一套程式,也不需要搭一個後端環境,更不需要維護資料庫——區塊鏈就是我的後端!
開發 DApp 的體驗讓我想起 Flash 時代的個人創作者,只要掌握了 Flash,製作一部動畫的所有事情,包括導演、編劇、剪輯、美工、特效,都可以全包了。同樣,在區塊鏈上,只要我具備前端技能,就可以寫一個完整的應用出來。這種開發體驗對一個前端工程師來說,是相當誘人的。
當然,除此以外,區塊鏈和 DApp 還有一些天生的優勢——具體細節我們稍後會聊到——這些也是我關注它們的原因。
InfoQ:去中心化的 DApp 與傳統的 Web 應用相比,架構上有什麼差異?
這兩者確實有明顯不同,但 DApp 的各個環節是可以類比到傳統 Web 應用的:DApp 由客戶端和合約端配合實現,類似傳統 Web 應用的客戶端和服務端。
“客戶端” 顧名思義,是提供給使用者使用的產品介面。它可以是 Web 形態,也可以是桌面或移動 app 形態等等。對於前端工程師來說,Web 形態的客戶端就是大家的專長,毋庸贅言。
“合約端” 是指 “智慧合約”。智慧合約是 DApp 的靈魂,是 DApp 開發者部署到區塊鏈上的一段程式碼,擔任客戶端與鏈之間的橋樑——合約端負責提供介面,客戶端可以呼叫這些介面,觸發業務邏輯,或對資料進行增刪改查。這聽起來和前後端分離的 Web 應用是相為相似的,沒錯,前端工程師可以快速理解並接受 DApp 的架構模式。
InfoQ:DApp 相對於傳統 Web 應用,優勢是什麼?
這是一個好問題。我們通常會聽到一種論調,“區塊鏈必將顛覆啥啥啥”。但事實上,這只是一種博眼球的營銷口號。區塊鏈被髮明並不是為了取代傳統網際網路,就好比智慧手機的誕生不是為了取代 PC。
但如今區塊鏈廣受關注,說明它確實具備一些傳統網際網路做不到的特性。因此,與傳統 Web 應用相比,區塊鏈和 DApp 所擅長的場景和方向肯定會不一樣。
先來說幾個 DApp 的先天特性:
-
去中心化。區塊鏈的 “去中心化” 是由分散式節點來體現的,它通常意味著 DApp 沒有單點故障的風險,資料的可信度和安全性也會比中心化應用要高。
-
公開透明。在大多數鏈的設計中,區塊資料是完全公開的,甚至合約程式碼也是區塊中的資料,合約的呼叫記錄也是區塊中的資料,全都是公開的——你能想像一個 Web 應用的後端程式碼是公開的嗎?就算公開了,別人如何相信這些公開的程式碼就是現在在執行的程式碼呢?但對 DApp 來說,這就是它的先天特性。所以,如果你需要一個完全公開透明接受公眾監督的應用,DApp 可能就是最好的選擇。
-
不可篡改。鏈式結構保證了區塊資料不會被輕易篡改,這個大家都知道。大家可能不知道的是,在大多數鏈的設計中,合約程式碼在部署之後就無法修改了。這一點在傳統 Web 應用看起來簡直就是個 bug,但反過來想一想:如果程式碼是一種 “規則”,那在某些場景下,“規則可以修改” 是不是反而不可接受?
大家可能發現了,我一直在說 “特性”,而不是 “優勢”。其實所謂優勢,就是把特性用在了合適的地方。區塊鏈的魅力在於,它天生就是不一樣的東西,它不是為了取代誰。拿現有的框框去套它,可能不會得出什麼有意義的結論;而拋開固有思維去擁抱它的 “不一樣”,則可能會開創全新的應用形態。
InfoQ:您剛才提到了應用形態,對於區塊鏈的落地,您看好哪些應用場景或方向?
區塊鏈和 DApp 作為新生事物,還處在演化之中,同時,我們對它的認知也處在不斷演化之中。我很難在這裡預測區塊鏈將以哪些應用形態落地,不過我可以簡單聊一聊 DApp 已經在某些場景中展現出的潛力:
-
資料安全。上面提到區塊鏈資料的安全性,這一點在存證、監管、選舉等場合將大有用武之地。
-
遊戲。區塊鏈的老本行就是記賬,而且是公開的、防篡改的賬本,在資產確權方面擁有不可替代的優勢。因此不少遊戲開發團隊已經在區塊鏈領域裡試水或大量投入了。
-
通證經濟。通證作為鏈或應用生態內的價值載體,可以有很多的玩法,開發者可以通過設計激勵機制來實現各種運營目的。
InfoQ:我們討論的 DApp,一般都是部署在公鏈上的,那麼您選擇公鏈的標準是什麼?DApp 的概念最初是由以太坊提出的,那麼您如何看待以太坊這些主流的公鏈平臺?
確實,對於嘗試 DApp 的開發者來說,遇到的第一個問題可能就是公鏈的選擇了。選擇鏈相當於選擇一個開發平臺,類似開發手機 app 需要確定是 iOS 還是 Android 一樣。魔法哥認為,在入門階段選擇一條易上手且有前途的公鏈是最為明智的。“易上手” 可以讓你快速入門、快速收穫成就感,而 “有前途” 則意味著你積累的經驗不會浪費。
以太坊確實是 DApp 概念的開山鼻祖,我非常佩服他的創始人。以太坊上線已經好幾年了,但它仍在不斷進化。在眼下,它的某些技術引數已經明顯落伍,但它的深厚積累和發展潛力仍然值得看好和期待。
接下來就不得不提 EOS 了,今年鏈圈最具話題性的平臺就是它了。EOS 有很多獨特的設計,也表現出優異的效能,獲得了很多開發者的青睞。不過 EOS 定位於企業級市場,對個人開發者來說門檻較高,它的很多設計也一直存有爭議,因此魔法哥持觀望態度。
InfoQ:前端工程師著手開發一個最小化的 DApp,需要掌握哪些技能、使用哪些工具、怎麼選擇程式語言?
首先,我們需要對區塊鏈的原理、DApp 架構、DApp 產品形態具備基本概念。接下來,我們從客戶端和合約端分別來講一下所需的技能和工具。
DApp 客戶端的開發,其實跟大家平常開發 Web 應用是基本一致的。你可以使用你自己最順手的前端框架、編輯器、構建工具,無需改變開發習慣。在實現客戶端與合約端的互動時,往往需要用到鏈的 SDK,這是需要開發者去了解的。
而合約端的開發,就要跟著鏈的設計和生態來走了。鏈除了提供客戶端 SDK 之外,往往也會提供合約端的開發工具,比如合約開發框架、Web IDE、合約 Lint 工具等等。如果我們只是開發一個小型的 DApp,其實脫離工具純手寫也沒什麼問題,讀通相關文件就好。
最後,說到程式語言,各條鏈所採用的合約端開發語言也不盡相同。如果我們選擇的某條鏈剛好採用我們最熟悉的 JavaScript 作為合約語言,那就基本不存在語言學習成本了。關於這幾個方面,魔法哥也會在 “CSS 魔法” 公眾號陸續釋出教程,希望能給大家提供一些參考和幫助。
總而言之,對前端工程師來說,DApp 的開發成本並不高。而且前端工程師天生離使用者最近,更懂互動,更容易開發出使用者體驗出眾的產品來。
InfoQ:您認為前端工程師有必要去學習區塊鏈並轉入相關行業工作嗎?
我覺得這要看情況,看看自己是什麼型別。
如果你是一個謹慎派,喜歡穩紮穩打,則不妨專注地把自己規劃好的路線一步步走踏實。對於區塊鏈和 DApp 可以保持關注,也可以上手實踐,但不一定要立即投身其中。
這是因為,區塊鏈行業仍然處於早期,還多方面還很不成熟——畢竟傳統網際網路已經發展了這麼多年,該有的都有了,而區塊鏈才剛剛走出極客的小圈子。另一方面,區塊鏈天生就是招黑體質,發展方向也遠遠不夠明朗,從業者往往需要承受更大的壓力。
而反過來,如果你是一個激進派,喜歡嘗試新事物、喜歡開拓未知世界,那區塊鏈行業可能就比較適合你。
總的來說,這是一個因人而異的問題。但不管怎樣,如果你是一個技術人,而且正在對自己的職業生涯做一個或短或長的規劃,那麼區塊鏈值得你去了解和關注,說不定它就是你打破僵局的轉折點。