怎樣可以做到精通區(qū)塊鏈
區(qū)塊鏈的世界和其他技術(shù)領(lǐng)域沒有什么不同,都必須保持敏銳和奔跑,保持好奇和謙遜,不斷學(xué)習(xí)和實(shí)踐,修訂短板尋求突破,將成果分享給社區(qū)。正如系統(tǒng)需要極大的彈性,人也需要極大的韌性。共勉。
方向之難
“我是誰”、“我在哪”、“我要去哪兒”,一切都源于這么一個(gè)哲學(xué)三問。區(qū)塊鏈?zhǔn)鞘裁矗繀^(qū)塊鏈究竟能做什么?為什么區(qū)塊鏈這么火?不用區(qū)塊鏈行不行?這些問題都充滿了終極拷問的意味。
其實(shí)很難徹底回答這些問題,因?yàn)椋]有標(biāo)準(zhǔn)答案。所有創(chuàng)新的前沿的事物大抵如此,在質(zhì)疑和動(dòng)蕩中發(fā)展,在黑暗和荒蕪中摸索,精華和糟粕齊飛,綠洲與韭菜一色,直到引爆點(diǎn)迸發(fā)。如果因?yàn)槌錆M疑慮而左右搖擺,或者裹足不前,那么在從事相關(guān)工作研究的過程,體驗(yàn)會(huì)很糟糕,結(jié)果也不會(huì)好。
分享一點(diǎn)個(gè)人體會(huì):區(qū)塊鏈領(lǐng)域從一開始就吸引了全世界無數(shù)的聰明人,不乏極客、學(xué)者、大師, 他們進(jìn)行了大量的技術(shù)和社會(huì)實(shí)踐。這個(gè)領(lǐng)域蘊(yùn)含著數(shù)學(xué)、計(jì)算機(jī)、密碼學(xué)、博弈論、經(jīng)濟(jì)學(xué)、社會(huì)學(xué)等學(xué)科的精華,這是一個(gè)智力飛揚(yáng)、思想激蕩的世界。目前,整個(gè)行業(yè)更是獲得前所未有的關(guān)注,包括政府、各行業(yè)巨頭都在關(guān)注,大量注意力和資源持續(xù)涌入,區(qū)塊鏈迎來了“最好的時(shí)節(jié)”。
在持續(xù)進(jìn)化、結(jié)構(gòu)多元的現(xiàn)代社會(huì)里,分布式商業(yè)的理念已經(jīng)成為現(xiàn)實(shí)。人和人、機(jī)構(gòu)和機(jī)構(gòu)之間會(huì)產(chǎn)生更多的聯(lián)系和協(xié)作,信息和價(jià)值在新型網(wǎng)絡(luò)模式中快速流轉(zhuǎn),作為分布式技術(shù)代表之一的區(qū)塊鏈,很有機(jī)會(huì)成為新一代基礎(chǔ)設(shè)施和創(chuàng)新的據(jù)點(diǎn)。
所以,方向并不是問題。即使你不把區(qū)塊鏈當(dāng)做“信仰”,只看這個(gè)充滿魅力的技術(shù)本身,以及區(qū)塊鏈與實(shí)體經(jīng)濟(jì)深度融合的機(jī)遇,還是可以給我們帶來信心。
概念之難
在哲學(xué)三問中,“區(qū)塊鏈?zhǔn)鞘裁础笔亲罨逎膯栴},區(qū)塊、交易、賬戶、共識(shí)、智能合約、雙花...這都是什么?!我自己在剛接觸區(qū)塊鏈時(shí),也有一種被顛覆了認(rèn)知的感覺。有一些介紹區(qū)塊鏈的文章,往往著眼在區(qū)塊鏈的社會(huì)和經(jīng)濟(jì)效能,從價(jià)值理念講起,這些固然是必要的,但俗話說“科學(xué)要定性更要定量”,作為工程技術(shù)人員,我們更應(yīng)該關(guān)注的是,區(qū)塊鏈里的知識(shí)點(diǎn)、基本原理,進(jìn)而澄清術(shù)語、把握架構(gòu)、處理邏輯和程序流程。
前面提到,區(qū)塊鏈蘊(yùn)含著大量學(xué)科的精華,同時(shí),行業(yè)也有一句俗語:“區(qū)塊鏈并沒有發(fā)明什么新技術(shù),都是成熟技術(shù)的組合”。
這些成熟的技術(shù)包括數(shù)據(jù)結(jié)構(gòu),諸如鏈表、樹、圖、過濾器等,是大學(xué)里數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)知識(shí);
基礎(chǔ)密碼學(xué),包括HASH和對稱非對稱加密、數(shù)字簽名等等,已經(jīng)是幾十年的經(jīng)典技術(shù),而事關(guān)隱私保護(hù)等領(lǐng)域的新一代密碼學(xué),更給密碼學(xué)專業(yè)人士開拓了一片廣闊的發(fā)揮空間;
分布式網(wǎng)絡(luò)和系統(tǒng)這門學(xué)科本身包羅萬象,覆蓋了海量服務(wù)的知識(shí)范疇,許多從事過海量互聯(lián)網(wǎng)服務(wù)技術(shù)的同學(xué),都會(huì)對區(qū)塊鏈的P2P網(wǎng)絡(luò)和共識(shí)算法、并行計(jì)算模型、事務(wù)性一致性原理如數(shù)家珍;
博弈論和激勵(lì)相容是協(xié)作方面的知識(shí)點(diǎn),是“區(qū)塊鏈思維”的重要組成部分,工科學(xué)生可能需要翻翻書,社科經(jīng)管背景的同學(xué)估計(jì)會(huì)似曾相識(shí)吧;
至于智能合約,比如solidity語言、WebAssembly等,很少聽說嗎?其實(shí)這些語言以及編程模式學(xué)習(xí)曲線未必有javascript高,有幾年程序基礎(chǔ)的同學(xué)基本上一周就可以上手,寫出順溜的智能合約來。
區(qū)塊鏈讓人覺得認(rèn)知困難,是因?yàn)樗拖駛€(gè)“筐”,什么都可以往里裝,牽涉的技術(shù)繁雜,組合方式卻和常規(guī)技術(shù)套路不同。所以學(xué)習(xí)者一定程度上先要放空自己,避免讓自己在原有領(lǐng)域的思維定勢干擾了學(xué)習(xí),在豐富自己知識(shí)面的同時(shí),接受區(qū)塊鏈的“群體共識(shí)”、“防止篡改”、“不可否認(rèn)”、“高度一致性”等神奇邏輯,然后潛心進(jìn)去看每一個(gè)獨(dú)立的概念時(shí),并不會(huì)覺得高不可攀。
突破概念之難的要點(diǎn),是排除來自各種渠道的噪聲,有些信息似是而非,或者是各說各話,把同一件事用N種話術(shù)講出來,混淆了定義,模糊了本質(zhì),于事無補(bǔ)的同時(shí)還帶來更多疑問??孔V的方法是著重閱讀權(quán)威媒體的正規(guī)內(nèi)容,關(guān)注一些主流區(qū)塊鏈項(xiàng)目的文檔庫,認(rèn)真地、全面地通讀技術(shù)文檔,然后找一個(gè)自己感興趣的領(lǐng)域(如共識(shí)算法),結(jié)合自身經(jīng)驗(yàn)知識(shí)進(jìn)行對照研究。
同時(shí),也可以加入活躍的開源社區(qū)和技術(shù)圈子,和有經(jīng)驗(yàn)的人多討論,勇于把問題拋出來,挨個(gè)術(shù)語,挨個(gè)流程討論透徹。我們在研究區(qū)塊鏈的初期,團(tuán)隊(duì)經(jīng)常就一個(gè)概念的定義咬文嚼字地爭論很久,最后愉快地達(dá)成共識(shí)時(shí),大家都覺得神清氣爽。
在概念階段,切忌求全責(zé)備,不要變成資料收集機(jī),一口吃不成胖子,基于靠譜的學(xué)習(xí)資料,澄清基本概念,在實(shí)踐中去驗(yàn)證和發(fā)掘新的概念,建立發(fā)現(xiàn)問題、解決問題的方法論,慢慢就能舉一反三,說不定某一天就能醍醐灌頂了。
上手之難
好吧,哲學(xué)和概念問題終于不會(huì)阻礙我們學(xué)習(xí)的腳步了,那么怎么繼續(xù)“二十一天入門到精通”之路。作為技術(shù)人員,遇到新的技術(shù)平臺(tái)、軟件體系、編程語言...那當(dāng)然是:“不要慫,就是干!”
幾年前,我們剛開始研究區(qū)塊鏈時(shí),通讀過幾個(gè)國外流行的開源區(qū)塊鏈項(xiàng)目代碼,并搭建測試網(wǎng)進(jìn)行試驗(yàn)剖析,分析如何讓這些平臺(tái)能在復(fù)雜的金融業(yè)務(wù)上用起來。當(dāng)時(shí)有個(gè)困惑,如果直接基于底層平臺(tái)開發(fā)應(yīng)用,當(dāng)需要實(shí)現(xiàn)更多功能時(shí),是不是就得直接修改底層平臺(tái)代碼。
而當(dāng)看到“智能合約”這個(gè)東西時(shí),思路一下就打開了:采用智能合約作為中間層,在合約里編寫業(yè)務(wù)邏輯,并為調(diào)用者定義清晰的功能接口,這樣,業(yè)務(wù)可以很好和底層解耦,而底層平臺(tái)則定位成強(qiáng)大的引擎,通過架構(gòu)的解耦,使得整個(gè)開發(fā)過程變得清晰合理、輕松愉快,感覺就像是從“C/S”架構(gòu)到“B/S”架構(gòu)的演變,多年互聯(lián)網(wǎng)海量服務(wù)開發(fā)的手感又回來了。
另外,我們覺得當(dāng)時(shí)的開源項(xiàng)目主要是公鏈形態(tài),在安全可控以及合規(guī)方面考慮沒有那么周全,并不適合金融場景使用。
那么,沒有趁手的平臺(tái),就想辦法造一個(gè)。從此,深耕底層技術(shù)、迭代應(yīng)用驗(yàn)證的漫漫之路開啟了。這個(gè)過程也和開源社區(qū)一眾伙伴建立了緊密的合作,正是“來自開源并回饋開源”,經(jīng)過開源工作組幾年的打磨,F(xiàn)ISCO BCOS已經(jīng)是一個(gè)全面開源、安全可控、高速穩(wěn)定、易用友好的金融級(jí)底層技術(shù)平臺(tái),面向金融和廣大的產(chǎn)業(yè)領(lǐng)域,提供豐富的功能和各種操作工具。豐富全面的文檔和便捷易用的體驗(yàn),可以幫助開發(fā)者從快速入門到精通,整體的技術(shù)門檻和開發(fā)成本變得前所未有的低。
有了基礎(chǔ)的底層平臺(tái)之后,下載、安裝、配置、運(yùn)行、閱讀使用手冊、寫hello world和業(yè)務(wù)應(yīng)用、Debug和分析日志...都是step by step的工作了。
我們目標(biāo)是,用戶在幾分鐘內(nèi),用一鍵安裝、docker、云服務(wù)等方式順暢無錯(cuò)地搭建出自己的區(qū)塊鏈網(wǎng)絡(luò),在一周內(nèi)通過學(xué)習(xí)就可以寫出完整的智能合約,基于支持多款語言的SDK(Java、Node.js、Python、Go...還在增補(bǔ)中)實(shí)現(xiàn)業(yè)務(wù)邏輯,將業(yè)務(wù)發(fā)布上線,保持穩(wěn)定運(yùn)行。
為了這個(gè)目標(biāo),我們一直在持續(xù)優(yōu)化使用文檔、開發(fā)手冊,以及部署和運(yùn)維工具。眾所周知,“碼農(nóng)”們喜歡寫代碼,而寫注釋和文檔就比較痛苦了,為了向社區(qū)交出一份漂亮的作業(yè),大家傾盡了有生以來的語文水平,一次又一次修訂,硬是寫出了數(shù)十萬字的文檔庫。
同時(shí),開源社區(qū)推出了一系列的線下線上沙龍、培訓(xùn),用社區(qū)的方式,進(jìn)行廣泛交流和技術(shù)支持。在多次的現(xiàn)場學(xué)習(xí)和黑客松大賽中,我們欣喜地看到,開發(fā)者用兩三天時(shí)間,就能基于FISCO BCOS實(shí)現(xiàn)他們精巧的項(xiàng)目設(shè)計(jì),而且有開發(fā)者將其中和開源項(xiàng)目相關(guān)的優(yōu)化貢獻(xiàn)到Github上。
到這個(gè)程度,即使是對沒有區(qū)塊鏈研發(fā)經(jīng)驗(yàn)的開發(fā)人員,快速上手已經(jīng)沒有什么問題,即便區(qū)塊鏈底層還像一個(gè)黑盒子有待探索,但就像在電腦上安裝App、使用mysql、tomcat之類的軟件一樣,足可以用起來,感受區(qū)塊鏈的魅力了。
深入之難
對技術(shù)人員來說,探索技術(shù)的內(nèi)涵永無止境:參與到區(qū)塊鏈底層開發(fā),實(shí)現(xiàn)大型的區(qū)塊鏈應(yīng)用,為區(qū)塊鏈生態(tài)增加更多有用的特性、工具,對現(xiàn)有功能性能進(jìn)行極致優(yōu)化,這些都是進(jìn)入“深水區(qū)”的路線。
之前提到,區(qū)塊鏈系統(tǒng)知識(shí)點(diǎn)和框架涉獵廣泛,無論是知識(shí)面還是深度都有相當(dāng)?shù)囊?guī)模。量化一下的話,可以套用一萬小時(shí)理論:如果每天學(xué)習(xí)工作8-10小時(shí),一個(gè)月足以上手,一年可得小成,兩年輕車熟路,三年可成老司機(jī)...但老司機(jī)要行的前路依舊漫漫。我們希望通過持續(xù)的科普、交流、實(shí)踐,去縮短這個(gè)過程,但畢竟學(xué)習(xí)就是一種最基本的“工作量證明”,并沒有什么其他捷徑。
學(xué)習(xí)方法,首先是大量的泛讀,每天早上一睜眼到晚上,都可以看到持續(xù)更新的行業(yè)新聞、公眾號(hào)文章、技術(shù)大咖博客、郵件組討論組、開源項(xiàng)目......閱讀的過程或許會(huì)遇到不同觀點(diǎn)的碰撞,需要去偽存真,在心態(tài)開放的同時(shí),也保持自己的立場和方向。
然后是深入的精讀,先選定一兩個(gè)感興趣的方向,研讀諸如密碼學(xué)、分布式理論等方面的一些經(jīng)典論文。FISCO BCOS的核心共識(shí)算法使用的PBFT和RAFT算法,是基于對原版論文的研究解讀,有了深入的理解再去做的實(shí)現(xiàn)和優(yōu)化。區(qū)塊鏈里廣泛用到密碼學(xué)原理,場景和邏輯多變,其原理有可能來自某一篇“頂會(huì)”論文。精讀深度原理剖析文章和學(xué)術(shù)論文,基于扎實(shí)的理論,才能根據(jù)自己的需要進(jìn)行發(fā)揮,創(chuàng)造性地解決工程問題。
其實(shí)我們的在線文檔已經(jīng)有數(shù)十萬字的規(guī)模,各種信息應(yīng)有盡有,技術(shù)社區(qū)會(huì)定期對熱點(diǎn)知識(shí)進(jìn)行解讀,只要讀者認(rèn)真閱讀在線技術(shù)文檔,接受公眾號(hào)的體貼推送,并動(dòng)手進(jìn)行更多的實(shí)踐,隨著時(shí)間推移,必能深度理解區(qū)塊鏈的技術(shù)原理,參透架構(gòu)設(shè)計(jì)的來龍去脈,建立起鞏固的知識(shí)體系。
最后,精讀的對象,自然也包括源代碼,畢竟“Talk is cheap, show me the code”,區(qū)塊鏈開源項(xiàng)目代碼大多是幾萬到幾十萬行的級(jí)別,閱讀代碼是達(dá)成庖丁解牛水準(zhǔn)最直接的方法。在研究區(qū)塊鏈的歷程里,我們有許多長夜漫漫review代碼的日子,當(dāng)讀到一瞇眼,眼前都是代碼在飛,各種接口和對象翩翩起舞,既優(yōu)雅又有規(guī)律,脈絡(luò)清晰,那種愉悅簡直難以名狀。這種體驗(yàn),之前有,之后也會(huì)繼續(xù)有。
如果已經(jīng)深入到了這個(gè)程度,領(lǐng)域門檻已經(jīng)基本越過,考驗(yàn)的就是開發(fā)者的腦力和體力了吧。
持續(xù)之難
在過去幾年因?yàn)轸~目混珠、政策法規(guī)、技術(shù)障礙等等一系列情況,區(qū)塊鏈會(huì)遇到市場波動(dòng)、應(yīng)用落地延緩等挑戰(zhàn)。未來如何,雖然沒有預(yù)言家告訴我們,但現(xiàn)在大家已經(jīng)看到了趨勢。這又回到了第一個(gè)問題:“方向”,明確清晰的方向,不但能回答“要不要進(jìn)入這個(gè)領(lǐng)域”,同樣也能回答“要不要堅(jiān)持下去”。我們一直在分布式商業(yè)模式中開拓場景,為公眾提供優(yōu)質(zhì)的服務(wù),為行業(yè)提供完備和好用的開源技術(shù),這是從開始到現(xiàn)在,乃至未來堅(jiān)持的方向,從未改變。
再具體一點(diǎn),如果我們已經(jīng)用區(qū)塊鏈部署上線了業(yè)務(wù)系統(tǒng),那么影響系統(tǒng)生命周期和持續(xù)性的問題還有:可運(yùn)維性、可升級(jí)性、兼容性、數(shù)據(jù)容量、業(yè)務(wù)性能容量等等。
多次和社區(qū)朋友交流的過程,他們會(huì)提起一些問題,例如,新版本是否能兼容舊版本?隨著業(yè)務(wù)發(fā)展,越來越多的數(shù)據(jù)是否可以遷移和重用?這都是用戶的真實(shí)聲音。我們所構(gòu)建的平臺(tái),一定要走可持續(xù)發(fā)展的路線,重視軟件體系的兼容性,有合理的版本發(fā)布節(jié)奏,以及周全的數(shù)據(jù)遷移維護(hù)策略,可以更好地保護(hù)社區(qū)用戶利益,也使得用戶愿意長期與社區(qū)共同發(fā)展。
另外,區(qū)塊鏈領(lǐng)域還在高速發(fā)展中,各種新技術(shù)、新思潮、新模式、新政策還在層出不窮,這個(gè)領(lǐng)域集結(jié)了世界上大量的聰明人,他們不但聰明而且努力,從來都不閑著。于是在這個(gè)領(lǐng)域工作,每天都會(huì)有新的知識(shí)、新的刺激,這一方面是一種幸運(yùn),另一方面,也會(huì)讓人極其焦慮。
如何去消化這么海量的信息,如何去探索和掌握前沿的知識(shí),如何更好滿足高速發(fā)展帶來的用戶需求和新挑戰(zhàn),如何做出卓有成效的突破性創(chuàng)新,這真的是一個(gè)創(chuàng)新和焦慮并存的世界,讓人欲罷不能。
作為從業(yè)者,必須持續(xù)進(jìn)行大量閱讀,在各種信息流里過濾和吸收,不斷地歸納/總結(jié)/思考/開拓;每一個(gè)需求和用戶ISSUE反饋都是一個(gè)小目標(biāo),每發(fā)布一個(gè)新版本都會(huì)是下一個(gè)版本的新起點(diǎn)。區(qū)塊鏈的世界和其他技術(shù)領(lǐng)域沒有什么不同,都必須保持敏銳和奔跑,保持好奇和謙遜,不斷學(xué)習(xí)和實(shí)踐,修訂短板尋求突破,將成果分享給社區(qū)。正如系統(tǒng)需要極大的彈性,人也需要極大的韌性。共勉。