大約在年初的時候,我就在煩惱今年的鐵人該寫些什麼東西?這個暑假該精進什麼東西?這時我剛好慢慢地在接觸區塊鏈的世界,也就對於成為一個 DApp 工程師有了很大的興趣。
於是我就在 medium 找了很多文章,像是「How to become a blockchain developer」、「How To Become A Web3 Developer」。觀察過幾篇文章之後,可以發現要成為一個 DApp 工程師最為需要的技能主要有:
在看過這麼多個類似的文章後,我決定整理一下關於這些技能的資訊!並在認真學習裡面的一些資源過後,分享一下我自己的研究還有學習的心得,希望對於想開始做 DApp/ Web3 開發的人們有一點幫助。
在這些介紹網頁中常寫道:「現在要準備進入到 web3 的時代了」,其實我一方面好奇到底什麼是 web3?另一方面也在想到底在 web3 的時代,我需要怎樣的技能才能成功的存活?
首先要從 web1.0 開始講古,這個時候網站大多是只能閱讀而無法互動的網頁。且這時的個人網站通常是架在 IPS-server 上面,簡單來說就是個人網站是直接架在某個人家中的伺服器上的。
這種架網站的方式有幾個很明顯的缺點:
Web 2.0 的開端大概是 2004 年,這年 Zuckerberg 創立 Facebook,引起了一種新的網路互動模式。人們開始使用社群媒體當作接觸網路的主要媒介,例如Facebook 提供了一個介面讓人們可以互動、分享、留言,為我們的生活帶來很多便利。但是於此同時也為我們帶來很多資本世界的險惡。
一個好玩的例子是當你 google 某個商品,例如「褲子」,過一天之後你的 Facebook 或是 Instagram 上面就會充斥著「褲子」的廣告。這些大公司取得我們的個人資訊,但是我們對於他們是如何使用我們的資料的卻無從得知,這造成了很大的資訊不對等與嚴重的隱私侵犯。
Web2 的公司還存在更多的問題,像是例如你在一個網站 (像是 medium,只是舉例XD) 上投稿了一篇文章,若隔天網站的經營者決定把他們的伺服器收掉不做了,你又沒有儲存這一篇文章,就代表你撰寫的那篇文章瞬間消失在這個世界上了。
又或是一些 YouTuber 的影片因為違背 YouTube 設置的規範而遭平台封鎖,但是在封鎖的時候只會告訴你違背了這個規範,但卻不會告訴你何處標準為何,這點也被現今很多網路工作者詬病,有些人甚至憤而離開 YouTube 圈。
簡而言之,Web2 的缺點是這些網站的經營權與資訊的擁有權都掌握在公司的手上,這些公司可以輕易的透過他們龐大的資源來控制人們的思想或是行為,像是透過投放很多的廣告讓人們被洗腦。另外 Web2 也無法保障人們在網路上的智慧財產權或是其他權力等,個體用戶(如你我)就只是一個被當作被那些公司操作的小小棋子而已。
Web3 或是 DApp 的概念主要就是將產品建立在區塊鏈上,以去中心化為主軸建構網站、社群、或是其他去中心化金融商品等。在這個時代人們都是平等的,或者說在這個時代建構的產品主要是以個體為中心,將權力下放給所有的用戶,他們可以真正擁有自己的財產、權力。
而上述提到的 Web2 的缺點現在已經提供了很多解決方法,像是上面提到文章遭刪除的問題,可以透過上傳 InterPlantary File System (IPFS) 等分散式儲存系統,只要上傳後便會永遠的儲存在這個系統裡面無法被竄改、刪除了。
例如 Web3 版本的 medium:Matters,他們的每一篇貼文都會儲存在 IPFS 上 (所以一發布之後便無法更改),而創作者的獎勵機制是利用閱讀者的按讚作為收入。且在演算法方面也相對於創作者較友善,不會因為是新加入的創作者而有較少的閱讀的人數。
簡單來說,Web3 世代所需要的技能其實跟 Web2 相差不遠,幾乎主要都是將產品建構在網站、網頁上運行,而實際上不同的只是網路的協議與底層運作的方式不同而已。因此學習 Web2 的網站建構能力對於 DApp 工程師是一件非常重要的事情!
下面會介紹一下前端技能的功能還有資源:
網頁基本上就是靠 html 完成架構,並利用 css 來調整成我們想要的模樣。
JS 也是非常重要的前端語言,在網頁互動、資料傳輸的時候很常會用到。
React 是一種 JS library 的框架,是以 component 為導向的前端開發工具。
智能合約是儲存在以太鏈上,並可以透過以太坊的虛擬機 Ethereum Virtual Machine (EVM) 運作的一段程式。
在 Ethereum 撰寫智能合約的首要選擇應該就是 solidity ,它是一個高階的程式語言,在寫完之後可以透過用戶 deploy 在以太鏈上(也就是合約會儲存在鏈上),接著以太鏈會將 solidity 編譯並儲存成 EVM 可以看懂得 OPcode。隨後若是有其他人想要使用這個合約中的某個 function 時,EVM 就執行已經編譯好的 OPcode,完成程式的運作!
做為一個區塊鏈的始祖,你當然最需要了解他到底在做什麼!像是比特幣的運行方式,了解雜湊函式在區塊鏈的應用 (連結會放在參考的部分),如果你更有興趣可以去看看比特幣的白皮書,不過我自己是沒有看啦。
而要做出一個 DApp,首要學習的鏈肯定是以太鏈,除了在以太鏈上所有的資源都是開源的,在他們網頁上具有不同語言版本的文件,甚至還有一個地方是專門放各式各樣的教學!此外可能需要學習以太坊上一些基本知識,如地址是什麼?交易的進行方式?或更深入一點的像是程式 deploy 到以太鏈上後會發生什麼事情,都是一些蠻有趣但是需要花時間理解的事情。
除此上述提到的技能之外我覺得更為重要的有幾點:
現在網路上非常多教學影片,且又有像是 coursera 這種開放式教學 (Massive Open Online Course, MOOC)的教程,因此比起上述的前端技能,我認為自我學習的技能才是更不可或缺的!
另外我自己的習慣是會在學習一項技能的時候用一些小小的 project 讓自己熟悉。例如我在學 js 的時候,用教程中提到的一些函式如 Math.random()
來做出一個產生亂數密碼的小網頁,另外我想到產生密碼之後應該要可以使用複製的按鈕,在網頁中用 navigator.clipboard.writeText()
複製亂數密碼等。
在做這些事情的時候,自然會有很多不會的地方,這時候就會去 StackOverflow 或 Geekforgeek 等網站上面尋找有沒有人問過同樣的問題。這個尋找答案過程本身就是一個最佳的學習方式,不僅可以加深自己的印象,也可以增強自己搜尋的能力。
下面這些話給一些剛開始學程式的人們!
雖然現在網路上的資訊都非常的多,程式或是區塊鏈的教學影片與文章也很多,直接上 Google 找就有很多了,但是該怎麼選擇會比該如何尋找更為重要,選擇你現在正需要的才會讓你的學習過程更有效率,學習的成效也更大!
若有文章內有任何錯誤的地方歡迎指點與討論!非常感謝!
歡迎贊助窮困潦倒大學生
0xd8538ea74825080c0c80B9B175f57e91Ff885Cb4