My Feedback about Hello Base

Michael Lynch

我對 Hello Base 的回饋

加密貨幣的語言隔閡

目前,技術人員之間存在著一道不幸的語言隔閡。

加密貨幣愛好者對現在的生態系和加密世界正在發生的事情感到興奮。他們試圖吸引新人加入,但他們往往深陷於自己的加密同溫層,以至於很難向圈外人解釋任何與加密相關的事物。

我覺得自己是彌合這道語言鴻溝的合適人選,因為我了解加密貨幣的基本原理,但已有大約七年沒有密切關注任何與加密相關的事物。

Base 本應是那座橋梁

一年前,我聽了Into the Bytecode其中一集裡對 Jesse Pollak(傑西·波拉克)的專訪。他對 Coinbase 正在開發的一項名為 Base 的新技術感到非常興奮。

Base 的設計初衷是吸引剛接觸加密貨幣世界的新手開發者,並讓他們能輕鬆地在該生態系中開始建構。

我開始探索 Base,發現它和其他大多數加密貨幣專案一樣,存在著同樣的語言隔閡。我發現官方文件難以理解,而且似乎假定讀者對 Ethereum 區塊鏈有著深入的了解。

傑西·波拉克曾針對我的回饋數次 回應,表示這有助於他理解非加密圈的觀點,但之後他依然故我,所以我便失去了繼續給他回饋的興趣。

我再度被召喚

本週,Steve Simkins(史蒂夫·西姆金斯) 在 Twitter 上標註了我,分享他製作的一份 Base 入門介紹:

我打算再給 Base 一次機會,並以非加密圈內人的身分,分享我對其宣傳訊息的看法。

我喜歡 Hello Base 的地方

提供清晰的學習路徑

官方的 Base 文件在「入門」說明中,立刻就給新手開發者呈現出一座令人眼花撩亂的岔路迷宮。

Hello Base 為讀者提供了一條從頭到尾清晰的流程。讀者不必為了入門而在多條學習路徑中做選擇。只有單一的學習軌道,消除了選擇學習路徑的複雜性。

能在瀏覽器中完成整個教學

Hello Base 在簡化 hello world 範例方面做得很好。讀者不必安裝任何工具或學習複雜的技術堆疊。他們可以直接在瀏覽器中嘗試所有內容。

解釋專有名詞

我對官方 Base 入門文件的一個批評是,它隨意使用了許多會讓新手感到困惑的圈內術語。

Hello Base 很好地辨識出新手無法理解的概念,並在一開始就加以解釋。它簡潔地說明了 Base 試圖在加密貨幣生態系中解決的問題。

我認為 Hello Base 可以改進的地方

更早點出價值

我認為 Hello Base 也有和許多其他 Base 文件類似的問題,那就是它假定讀者已經對 Base 感到興奮。

現實是,99% 的讀者根本不在乎 Base,如果你不給他們一個有力的理由留下來,他們幾秒鐘內就會關掉分頁。

第一段就應該向讀者解釋,為什麼他們應該關心 Base,以及為什麼應該繼續讀下去。

目前的第一段是這樣寫的:

如果你是一名開發者,從未接觸過區塊鏈或對其了解甚少,那麼你來對地方了。只需短短幾分鐘,你就能學到基礎知識,並了解如何在 Base 上開始建構——這是一個旨在讓下一代開發者 onchain(上鏈) 的區塊鏈。

如果我是一名非區塊鏈開發者,讀到這段話,Base 能給我什麼?我為什麼要學 Base,而不是其他任何區塊鏈技術?我為什麼要學 Base,而不是 web2 技術?

將 Hello Base 的介紹與Ruby on Rails 的介紹相比:

壓縮現代網頁應用的複雜性。

只需學習入門所需,然後隨著前進不斷升級。Ruby on Rails 能讓你從 HELLO WORLD 一路擴展到 IPO。

Rails 的宣傳很有說服力。它說它會讓你簡單地啟動並運行,而且你可以用同樣的工具達到巨大的規模。

我很希望看到 Base 的介紹能一開始就回答這個問題:

  • 今天在 Base 上我能做到哪些用其他任何技術都做不到的事?

傑西·波拉克曾舉出在 Base 上可建構的應用範例,但對我而言,這些範例極不吸引人。它並非進行身分驗證或發送付款最簡單的方式,所以我們不該假裝它是。

如果我是一名 web2 開發者,為什麼我要選擇在 Base 上建構,而不是其他任何可用的技術堆疊?

Hello Base 不必證明它是適合所有人的最佳解決方案。即使它現在很小眾也沒關係(例如,如果你無法使用傳統銀行服務,它是一種收款方式),但必須有某個引人入勝的使用情境來吸引人。

精簡到有趣的部分

我很希望看到教學能馬上進入有趣的部分。我理解 Hello Base 想要解釋基礎知識,但那應該是在向讀者展示一些酷東西之後再做。

如果我讀 Python 教學,它不會從有型別與無型別語言的歷史解釋開始,然後鼓吹記憶體安全的優點。它只會直接示範如何印出「hello world」。

「hello, world!」之所以成為經典的程式設計範例,是因為它出現在 Kerninghan and Richie(克寧漢與瑞奇)合著的 The C Programming Language(《C 程式語言》)第 1 章第 1 頁。當時其他程式設計書籍都是從變數和型別的基礎知識開始,而《C 程式語言》則是直接進入範例。

能不能做得比 hello world 更好?

某種程度上與上述幾點相關,我不斷看到 Base / Ethereum 的範例,所展示的只是用更迂迴的方式去做那些用 web2 技術本來就能做到的事。

也許對於第一個範例,只能這樣做,但有沒有什麼更酷的東西可以展示,能充分利用 Base 獨特的特性?

如果讀者對單純為了把資料儲存在區塊鏈上這件事本身不感興趣,那麼有什麼令人興奮的事情,是用 Base 就能輕鬆做到,但在 web2 技術中卻很困難甚至不可能的?

我能不能把內容放在付費牆後面,而不必讓 Gumroad 抽成 13%?我能不能建立一個簡單的方式,讓粉絲每月捐款給我,而不必經過 Patreon 的核准?

減少術語

儘管 Hello Base 解釋了大部分術語,仍有許多詞彙並未真正被定義(例如「gas(燃料費)」、「optimistic rollups(樂觀彙總)」)。

但即使你把所有詞彙都定義了,讀者也無法快速瀏覽來掌握教學的大意,因為讀到一半,基本上就像在說另一種語言。

以下是教學進行到 30% 處的一段摘錄。我已將非加密開發者不熟悉的詞彙以粗體標示:

這些 rollups(彙總) 的另一個巨大好處是它們保持 EVM compatible(EVM 相容),這意味著你為 Ethereum 撰寫的程式碼可以 deployed to an L2(部署到 L2),且無需額外工作。

我們真的需要這些解釋嗎?如果我正在跟著教學操作,我只想看到技術實際運作的樣子。我不需要知道歷史。而且,對於我需要理解的任何概念,我也能接受簡化的說明。

誠實面對 Base 的挑戰

我對 Base 宣傳訊息最大的不滿之一,就是他們不斷重複這樣的口號:「這是開發者建構新網頁應用程式最簡單的方式!它是 permissionless(無需許可) 的,所以任何人在任何地方都能做到!」

然後你嘗試開始建構,他們卻說:「喔,對了,你需要一個 Coinbase 帳號*,而且 Coinbase 會需要對你進行全身掃描來驗證身分。還有,你的應用程式無法儲存超過幾 KB 的持久性資料,除非你採取這些彆扭的變通方法。還有,你部署應用程式後就永遠無法修改它,除非你採取這些彆扭的變通方法。」

* 我知道使用 Base 其實不一定需要 Coinbase 帳號,但所有教學都走這條路,卻沒有提供其他選擇。

Base 目前有一些粗糙之處,讓入門變得困難。我認為教學應該誠實面對這些問題,而不是讓開發者做到一半才感到意外,或假裝這些痛點不存在:

  • 即使只是想試驗 Base,你也需要花錢。
  • 要把錢弄上鏈很麻煩(即使是在測試網上,因為 testnet faucets(測試網水龍頭) 會讓你費盡周折)。
  • 你無法像在 web2 中那樣正常地修改應用程式。
  • 你無法像在 web2 中那樣簡單地儲存資料。
  • 似乎光是進行基本開發,就必須與許多不同的參與者互動(OnChainKit、Hardhat、Coinbase、Solidity)。
    • 這可能不正確,但這是我目前隨意探索後的觀感。

擺脫對 Coinbase 的依賴

我確信一定有很好的理由非得是 Coinbase 不可,但如果讀者必須建立一個 Coinbase 錢包,真的會大大拖累教學體驗。

其實我有一段時間抗拒嘗試這個教學,因為我以為需要進行真正的 Coinbase 驗證(Coinbase 多年前曾因奇怪的原因鎖定了我的帳號)。

我鬆了一口氣,發現它只用一個 passkey(通行金鑰) 就讓我建立了錢包,但或許這點可以說得更清楚,這樣讀者就不會以為必須走完整個帳號設定流程。

但我更希望這種阻礙能完全消失。比起為了將一個「hello world」smart contract(智慧合約) 發布到 Base testnet(測試網) 而必須費盡周折的教學,我更偏好一個無摩擦且虛擬的教學(也就是並非真正發布到區塊鏈上)。

Julia Evans(茱莉亞·埃文斯) 製作的 mess with dns 就是一個很好的範例,這是一個需要複雜基礎設施(DNS 伺服器)的教學,但作者把複雜的部分抽象化了,讓讀者可以在單一網頁應用程式內完成所有操作。

在 Firefox 上測試

我能夠跟著教學進行到「Read Contract」這個步驟,然後就在「Read Contract」卡住不動了。我使用的是 Win10 上的 Firefox:

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯