天天看點

排除萬難,從入門到精通區塊鍊

目前越來越多的人已經進入或準備進入區塊鍊領域,過程中不免抱着各樣的疑慮和問題。想起自己之前用幾年時間,從“略懂”區塊鍊到all in,同樣也經曆着類似的心路曆程,這個領域确實是有一些門檻的,但萬事開頭難,摸索路上還遠不止八十一難,這裡梳理幾個概要性的困難和感悟,謹作分享。

方向之難

“我是誰”、“我在哪”、“我要去哪兒”,一切都源于這麼一個哲學三問。區塊鍊是什麼?區塊鍊究竟能做什麼?為什麼區塊鍊這麼火?不用區塊鍊行不行?這些問題都充滿了終極拷問的意味。

其實很難徹底回答這些問題,因為,并沒有标準答案。所有創新的前沿的事物大抵如此,在質疑和動蕩中發展,在黑暗和荒蕪中摸索,精華和糟粕齊飛,綠洲與韭菜一色,直到引爆點迸發。如果因為充滿疑慮而左右搖擺,或者裹足不前,那麼在從事相關工作研究的過程,體驗會很糟糕,結果也不會好。

分享一點個人體會:區塊鍊領域從一開始就吸引了全世界無數的聰明人,不乏極客、學者、大師, 他們進行了大量的技術和社會實踐。這個領域蘊含着數學、計算機、密碼學、博弈論、經濟學、社會學等學科的精華,這是一個智力飛揚、思想激蕩的世界。目前,整個行業更是獲得前所未有的關注,包括政府、各行業巨頭都在關注,大量注意力和資源持續湧入,區塊鍊迎來了“最好的時節”。

在持續進化、結構多元的現代社會裡,分布式商業的理念已經成為現實。人和人、機構和機構之間會産生更多的聯系和協作,資訊和價值在新型網絡模式中快速流轉,作為分布式技術代表之一的區塊鍊,很有機會成為新一代基礎設施和創新的據點。

是以,方向并不是問題。即使你不把區塊鍊當做“信仰”,隻看這個充滿魅力的技術本身,以及區塊鍊與實體經濟深度融合的機遇,還是可以給我們帶來信心。

概念之難

在哲學三問中,“區塊鍊是什麼”是最晦澀的問題,區塊、交易、賬戶、共識、智能合約、雙花...這都是什麼?!我自己在剛接觸區塊鍊時,也有一種被颠覆了認知的感覺。有一些介紹區塊鍊的文章,往往着眼在區塊鍊的社會和經濟效能,從價值理念講起,這些固然是必要的,但俗話說“科學要定性更要定量”,作為工程技術人員,我們更應該關注的是,區塊鍊裡的知識點、基本原理,進而澄清術語、把握架構、處理邏輯和程式流程。

前面提到,區塊鍊蘊含着大量學科的精華,同時,行業也有一句俗語:“區塊鍊并沒有發明什麼新技術,都是成熟技術的組合”。

這些成熟的技術包括資料結構,諸如連結清單、樹、圖、過濾器等,是大學裡資料結構的基礎知識;

基礎密碼學,包括HASH和對稱非對稱加密、數字簽名等等,已經是幾十年的經典技術,而事關隐私保護等領域的新一代密碼學,更給密碼學專業人士開拓了一片廣闊的發揮空間;

分布式網絡和系統這門學科本身包羅萬象,覆寫了海量服務的知識範疇,許多從事過海量網際網路服務技術的同學,都會對區塊鍊的P2P網絡和共識算法、并行計算模型、事務性一緻性原理如數家珍;

博弈論和激勵相容是協作方面的知識點,是“區塊鍊思維”的重要組成部分,工科學生可能需要翻翻書,社科經管背景的同學估計會似曾相識吧;

至于智能合約,比如solidity語言、WebAssembly等,很少聽說嗎?其實這些語言以及程式設計模式學習曲線未必有javascript高,有幾年程式基礎的同學基本上一周就可以上手,寫出順溜的智能合約來。

區塊鍊讓人覺得認知困難,是因為它就像個“筐”,什麼都可以往裡裝,牽涉的技術繁雜,組合方式卻和正常技術套路不同。是以學習者一定程度上先要放空自己,避免讓自己在原有領域的思維定勢幹擾了學習,在豐富自己知識面的同時,接受區塊鍊的“群體共識”、“防止篡改”、“不可否認”、“高度一緻性”等神奇邏輯,然後潛心進去看每一個獨立的概念時,并不會覺得高不可攀。

突破概念之難的要點,是排除來自各種管道的噪聲,有些資訊似是而非,或者是各說各話,把同一件事用N種話術講出來,混淆了定義,模糊了本質,于事無補的同時還帶來更多疑問。靠譜的方法是着重閱讀權威媒體的正規内容,關注一些主流區塊鍊項目的文檔庫,認真地、全面地通讀技術文檔,然後找一個自己感興趣的領域(如共識算法),結合自身經驗知識進行對照研究。

同時,也可以加入活躍的開源社群和技術圈子,和有經驗的人多讨論,勇于把問題抛出來,挨個術語,挨個流程讨論透徹。我們在研究區塊鍊的初期,團隊經常就一個概念的定義咬文嚼字地争論很久,最後愉快地達成共識時,大家都覺得神清氣爽。

在概念階段,切忌求全責備,不要變成資料收集機,一口吃不成胖子,基于靠譜的學習資料,澄清基本概念,在實踐中去驗證和發掘新的概念,建立發現問題、解決問題的方法論,慢慢就能舉一反三,說不定某一天就能醍醐灌頂了。

上手之難

好吧,哲學和概念問題終于不會阻礙我們學習的腳步了,那麼怎麼繼續“二十一天入門到精通”之路。作為技術人員,遇到新的技術平台、軟體體系、程式設計語言...那當然是:“不要慫,就是幹!”

幾年前,我們剛開始研究區塊鍊時,通讀過幾個國外流行的開源區塊鍊項目代碼,并搭建測試網進行試驗剖析,分析如何讓這些平台能在複雜的金融業務上用起來。當時有個困惑,如果直接基于底層平台開發應用,當需要實作更多功能時,是不是就得直接修改底層平台代碼。

而當看到“智能合約”這個東西時,思路一下就打開了:采用智能合約作為中間層,在合約裡編寫業務邏輯,并為調用者定義清晰的功能接口,這樣,業務可以很好和底層解耦,而底層平台則定位成強大的引擎,通過架構的解耦,使得整個開發過程變得清晰合理、輕松愉快,感覺就像是從“C/S”架構到“B/S”架構的演變,多年網際網路海量服務開發的手感又回來了。

另外,我們覺得當時的開源項目主要是公鍊形态,在安全可控以及合規方面考慮沒有那麼周全,并不适合金融場景使用。

那麼,沒有趁手的平台,就想辦法造一個。從此,深耕底層技術、疊代應用驗證的漫漫之路開啟了。這個過程也和開源社群一衆夥伴建立了緊密的合作,正是“來自開源并回饋開源”,經過開源工作組幾年的打磨,FISCO BCOS已經是一個全面開源、安全可控、高速穩定、易用友好的金融級底層技術平台,面向金融和廣大的産業領域,提供豐富的功能和各種操作工具。豐富全面的文檔可以幫助開發者從快速入門到精通,整體的技術門檻和開發成本變得前所未有的低。

有了基礎的底層平台之後,下載下傳、安裝、配置、運作、閱讀使用手冊、寫hello world和業務應用、Debug和分析日志...都是step by step的工作了。

我們目标是,使用者在幾分鐘内,用一鍵安裝、docker、雲服務等方式順暢無錯地搭建出自己的區塊鍊網絡,在一周内通過學習就可以寫出完整的智能合約,基于支援多款語言的SDK(Java、Node.js、Python、Go...還在增補中)實作業務邏輯,将業務釋出上線,保持穩定運作。

為了這個目标,我們一直在持續優化使用文檔、開發手冊,以及部署和運維工具。衆所周知 ,“碼農”們喜歡寫代碼,而寫注釋和文檔就比較痛苦了,為了向社群交出一份漂亮的作業,大家傾盡了有生以來的國文水準,一次又一次修訂,硬是寫出了數十萬字的文檔庫。

同時,開源社群推出了一系列的線下線上沙龍、教育訓練,用社群的方式,進行廣泛交流和技術支援。在多次的現場學習和黑客松大賽中,我們欣喜地看到,開發者用兩三天時間,就能基于FISCO BCOS實作他們精巧的項目設計,而且有開發者将其中和開源項目相關的優化貢獻到Github上。

到這個程度,即使是對沒有區塊鍊研發經驗的開發人員,快速上手已經沒有什麼問題,即便區塊鍊底層還像一個黑盒子有待探索,但就像在電腦上安裝App、使用mysql、tomcat之類的軟體一樣,足可以用起來,感受區塊鍊的魅力了。

深入之難

對技術人員來說,探索技術的内涵永無止境:參與到區塊鍊底層開發,實作大型的區塊鍊應用,為區塊鍊生态增加更多有用的特性、工具,對現有功能性能進行極緻優化,這些都是進入“深水區”的路線。

之前提到,區塊鍊系統知識點和架構涉獵廣泛,無論是知識面還是深度都有相當的規模。量化一下的話,可以套用一萬小時理論:如果每天學習工作8-10小時,一個月足以上手,一年可得小成,兩年輕車熟路,三年可成老司機……但老司機要行的前路依舊漫漫。我們希望通過持續的科普、交流、實踐,去縮短這個過程,但畢竟學習就是一種最基本的“工作量證明”,并沒有什麼其他捷徑。

學習方法,首先是大量的泛讀,每天早上一睜眼到晚上,都可以看到持續更新的行業新聞、公衆号文章、技術大咖部落格、郵件組讨論組、開源項目...閱讀的過程或許會遇到不同觀點的碰撞,需要去僞存真,在心态開放的同時,也保持自己的立場和方向。

然後是深入的精讀,先標明一兩個感興趣的方向,研讀諸如密碼學、分布式理論等方面的一些經典論文。FISCO BCOS的核心共識算法使用的PBFT和RAFT算法,是基于對原版論文的研究解讀,有了深入的了解再去做的實作和優化。區塊鍊裡廣泛用到密碼學原理,場景和邏輯多變,其原理有可能來自某一篇“頂會”論文。精讀深度原理剖析文章和學術論文,基于紮實的理論,才能根據自己的需要進行發揮,創造性地解決工程問題。

其實我們的線上文檔已經有數十萬字的規模,各種資訊應有盡有,技術社群會定期對熱點知識進行解讀,隻要讀者認真閱讀線上技術文檔,接受公衆号的體貼推送,并動手進行更多的實踐,随着時間推移,必能深度了解

手機号購買平台

區塊鍊的技術原理,參透架構設計的來龍去脈,建立起鞏固的知識體系。

最後,精讀的對象,自然也包括源代碼,畢竟“Talk is cheap, show me the code”,區塊鍊開源項目代碼大多是幾萬到幾十萬行的級别,閱讀代碼是達成庖丁解牛水準最直接的方法。在研究區塊鍊的曆程裡,我們有許多長夜漫漫review代碼的日子,當讀到一眯眼,眼前都是代碼在飛,各種接口和對象翩翩起舞,既優雅又有規律,脈絡清晰,那種愉悅簡直難以名狀。這種體驗,之前有,之後也會繼續有。

如果已經深入到了這個程度,領域門檻已經基本越過,考驗的就是開發者的腦力和體力了吧。

持續之難

在過去幾年因為魚目混珠、政策法規、技術障礙等等一系列情況,區塊鍊會遇到市場波動、應用落地延緩等挑戰。未來如何,雖然沒有預言家告訴我們,但現在大家已經看到了趨勢。這又回到了第一個問題:“方向”,明确清晰的方向,不但能回答“要不要進入這個領域”,同樣也能回答“要不要堅持下去”。我們一直在分布式商業模式中開拓場景,為公衆提供優質的服務,為行業提供完備和好用的開源技術,這是從開始到現在,乃至未來堅持的方向,從未改變。

再具體一點,如果我們已經用區塊鍊部署上線了業務系統,那麼影響系統生命周期和持續性的問題還有:可運維性、可更新性、相容性、資料容量、業務性能容量等等。

多次和社群朋友交流的過程,他們會提起一些問題,例如,新版本是否能相容舊版本?随着業務發展,越來越多的資料是否可以遷移和重用?這都是使用者的真實聲音。我們所建構的平台,一定要走可持續發展的路線,重視軟體體系的相容性,有合理的版本釋出節奏,以及周全的資料遷移維護政策,可以更好地保護社群使用者利益,也使得使用者願意長期與社群共同發展。

另外,區塊鍊領域還在高速發展中,各種新技術、新思潮、新模式、新政策還在層出不窮,這個領域集結了世界上大量的聰明人,他們不但聰明而且努力,從來都不閑着。于是在這個領域工作,每天都會有新的知識、新的刺激,這一方面是一種幸運,另一方面,也會讓人極其焦慮。

如何去消化這麼海量的資訊,如何去探索和掌握前沿的知識,如何更好滿足高速發展帶來的使用者需求和新挑戰,如何做出卓有成效的突破性創新,這真的是一個創新和焦慮并存的世界,讓人欲罷不能。

作為從業者,必須持續進行大量閱讀,在各種資訊流裡過濾和吸收,不斷地歸納/總結/思考/開拓;每一個需求和使用者ISSUE回報都是一個小目标,每釋出一個新版本都會是下一個版本的新起點。區塊鍊的世界和其他技術領域沒有什麼不同,都必須保持敏銳和奔跑,保持好奇和謙遜,不斷學習和實踐,修訂短闆尋求突破,将成果分享給社群。正如系統需要極大的彈性,人也需要極大的韌性。共勉。