實習生娜娜

作者: 陳天(ArcBlock 研究開發副總裁)
來源: 程式人生 (ID:programmer_life)
我對實習生的要求,除去學習能力外,便是足夠長的實習時間。所謂「足夠長」,我的定義是至少兩三個月。小於這個長度,往往還沒有開始貢獻有價值的工作,實習生便帶著寫滿好話的評定拍屁股走人了。

娜娜本來原定是六月初來實習的。然而因為她學校辦理 EAD(Employment Authorization Document)令人髮指的低效,她最終八月初才來報到。這個暑期,我們招募了三個實習生,一個打打醬油就提前離開了,一個乾脆沒來。所以對於娜娜的實習,我本是沒有抱太大的希望,甚至略有牴觸 —— 畢竟,一個準大三的孩子,四週的時間,能做些什麼?
儘管如此,我還是和她制定了一個四週的計畫。她自己帶著一個 dApp 的想法而來,我們正好也希望實習生能夠使用我們的 framework 製作簡單的 dApp,於是一拍即合。她的 dApp 基於這樣一個場景:散布在城市各處的自動販賣機是個多方參與的生意 —— 設備方,場地方,營運方,供貨方等。根據合同,這些參與方可以按照規定好的比例獲得最終銷售利潤的分潤。然而目前大家只能信任營運方提供的銷售資料而無法驗證其真偽。這是一個典型的 audit trail 場景,和廣告分帳非常類似。傳統的廣告分帳模式中,廣告商不信任營運方,因而當廣告的 impression 產生時,往往需要將資料傳送至獨立第三方的 tracking server 來對帳。而這種應用,用區塊鏈表徵的帳本(ledger)再合適不過。
課題確定後,我給她的四週安排是:第一週把需求和基礎結構設計好,學習必要的區塊鏈知識和 Forge framework 的使用;第二週把核心的 smart contract 撰寫好,用以支援 audit trail 的傳送,並寫個 simulator 來產生大量資料;第三週在這些資料的基礎上做個 webapp,進行帳單查詢和銷售情況的呈現;第四週美化整個 webapp,使使用者體驗良好。與此同時,每週錄一支短影片,介紹當週所做的工作,順便把影片錄製過程中的文字腳本稍加潤飾,成為部落格文章。這個「與此同時」是 marketing/PR 團隊的要求,我本來覺得浪費時間,但是擔心娜娜無法完成 dApp 的開發,有影片和部落格文章作為保底的產出,也算對她的實習有個交代,所以沒有駁回。
在正式實習之前,娜娜已經主動學習了我們的大部分文件,並且能夠非常自如地介紹我們的產品 —— 這大大出乎了我的意料。因此在給她培訓時,她領悟得很快,並且總能提出一些有深度的問題,讓我為之側目。她來的時間也算幸運 —— 我們北京團隊正好有個新同事和她前後腳報到,因而趕上了我們較有系統、為期兩週的 Elixir 和 blockchain 培訓。她之前用 Python 和 Django 做過簡單的 webapp,因而我把她託付給同事 Riley,幫助她更好地學習和使用我們的 Python SDK。
很快,我一天中有好些時間被她佔據。她問很多問題,包括對架構和設計的疑問,以及 smart contract 的組織、編寫和除錯方面的具體問題 —— 例如商品銷售的 audit trail 由誰傳送、傳送什麼內容,之後如何更新帳本狀態、如何查看日誌等等。我們的 smart contract 是用 Elixir 寫的,這就意味著她在弄清楚這些問題後,至少還需要學習 Elixir 的一個子集,才能開始撰寫程式碼。
第一週的進展比預期慢一點,但我已經有些欣賞這個小女孩了。她做事有條有理,一絲不苟。每週的影片,在我看來是錦上添花的 —— 有時間就好好做,沒時間就將就一下,對 Marketing/PR 那邊有些貢獻和產出即可。結果她往往週四晚上就寫好影片的腳本讓我過目,然後週五花不少時間反覆錄製和修改。起初,錄製好的影片主要由我們的設計師 Echo 花大力氣潤飾;後來,她師從 Echo,學習和琢磨出一些技巧,把在 iMovie 裡調校得差不多的影片交給 Echo,每每品質上乘,Echo 幾乎不用費多少功夫處理。
第二週娜娜已經漸入佳境了。很快 smart contract 除錯好了,為了產生有意義資料的 simulator 也做好了。在這個過程中,她發現了從 SDK 到 framework 裡的一系列問題,回饋給團隊。
第三週我很忙,白天沒太多時間協助她。我們簡單確認了一下 webapp 的方案,她想用 Plotly 的 Dash 來做。我看了一下,得知 Dash 是基於 Flask 的視覺化工具,覺得沒太大的擴展性問題,就讓她放手去做。很快她遇到了新的問題:鏈上資料雖然可信,但無法很方便地呈現。這觸及 off-chain 的邏輯,我告訴她需要搭配一個 index DB 使用(Forge 自己也提供 index DB,我們一直在考慮如何讓這個 index DB 更易於使用)。
第三週的週六,我照例在公司工作(妻子和孩子們不在的單身待遇)。她也來到公司,花了一整天時間,到晚上近八點,把第三集的影片製作完成。這個影片製作的精良程度超出了我的想像,不僅是形式和內容的組織,更重要的是對概念與思想的理解與闡釋。比如她在介紹 check / verify 的區別時,用了機場安檢的兩重步驟來類比處理 transaction 的 light check 和 full inspection,非常形象,一下子把複雜的事情具象化了。
最後這一週,當她的 webapp 初具形態時,已經震撼大家;之後,她又投入大量心力,像對待一個要上線的產品那樣對其精雕細琢 —— 資料模擬使用了 Faker,webapp 的 CSS 也做了一些調整,報表查詢可以用日曆來選擇時間範圍等。最終,週四的 all-hands meeting 上,整個團隊看到了一個驚豔的呈現。


四週的實習結束了,娜娜給我們留下了這些成果:
一個品質不錯的 vending machine dApp
四集高品質的影片,一步步介紹她是如何打造這個 dApp 的
四篇 engineering blog
提交了若干個重要的 issue
以及,最重要的,內部 BBL:Forge: the bad, the bad and the ugly
這個 BBL 是我讓她做的一個講座,請她吐槽身為一個準新手程式設計師,在使用 Forge 開發 dApp 時遇到的各種棘手情況。因為對外影片呈現的是正面形象,所以內部吐槽就不必修飾,於是 the good, the bad and the ugly 中不需要 the good。她把四週來作為開發者遇到的所有問題和不滿都整理分享給大家,並形成一份文件(其中不少問題已隨著她回報 bug 而修復)。
我們需要什麼樣的實習生?
娜娜的這段實習無疑是非常成功的,它超出了我們所有人的預期,包括娜娜自己。對娜娜而言,她學到了很多知識和經驗,不僅在程式碼上,還在其他諸多方面,驗證和提升了自己的才華,並且得到了人生中非常寶貴的閱歷;對我們而言,我們不僅得到了上述的那些成果,娜娜的這段實習還給我們打開了一扇窗,讓我們產生更多的思考和總結。
其中最重要的一個思考是:如何發現和發掘下一個實習生娜娜?如何讓這樣看起來偶發的 serendipity 變成可重複的模式?
透過這二十多天來的觀察和交流,我發現她有著這些特質:
一,對所做事情的熱忱(passion)。
passion 現在是個氾濫的詞了,任何一個求職者都能用最真誠的語氣表達出對你所奮鬥的事情、所拚搏的產業的熱情。但 passion 不是請客吃飯,不是做文章。passion 扎根於行動當中。娜娜在正式加入我們實習前就已經有系統地自學了我們的產品。打個不恰當的比喻,就好像冰火島上的張無忌,外功和內功心法都已瞭然於胸,就差人點撥 —— 這是她對所學之事的 passion;後來在做 dApp 時,她常常折騰到半夜一兩點,不達目標不罷休,有點「鍥而不捨,金石可鏤」的意味 —— 這是她對所做之事的 passion。
二,勤於思考,善於表達。
不管在生活中還是職場裡,表達能力的重要程度一定會名列前茅。好的表達能力體現出一個人對概念的掌握、對內容的抽象和具象、對思路的邏輯化和條理化,以及這個人的親和力。一個勤於思考的人不一定善於表達,但一個善於表達、能把複雜問題抽絲剝繭的人,一定是個勤於思考的人。這一點,看娜娜的幾集影片便可略知一二。
三,學習能力。
娜娜的學習能力挺讓我佩服。從上文中對整個實習期的簡單描述,相信大家也能得出相同的結論。她做的幾集影片我一個個仔細看過,光是這幾支影片,就能讓我有士別三日當刮目相待的感覺。
四,樸素。
樸素用在一個女生身上,似乎不太貼切,但我的確找不到更合適的詞了。娜娜家境應該比較富裕(畢竟是留學生嘛),但她日常的穿著打扮非常樸素自然,跟我這由下而上的 Costco 風格不相上下。樸素有樸素的好處,可以完完全全把心思放在自己認為重要的事情上,無需為其他事情分心。
所以,也許滿足這些部分或者全部特質的人就是我們可以尋找的下一個娜娜。
該給實習生提供何種挑戰?
從娜娜的實習經歷來看,我們把原本可能是兩三個月的挑戰壓縮到了一個月,並且在此之上還附加了很多與市場活動相關的額外工作(如錄製影片、撰寫部落格文章)。一開始,我們並沒有抱著太大的希望,但事實告訴我們,能力越大、責任越大、壓力越大,成就也越大 —— 合適且有層次的工作能帶來意料之外的產出。
娜娜的主要工作由幾部分構成:
- 開發 app
- 以影片回顧開發 app 的歷程
- 文字描述開發中學到的東西。
這三件工作,單是第一件就足以壓得她喘不過氣來,然而她同時高品質完成了三件事,卻僅僅比只做一件事多花了一點精力(同時獲得了更多的成就感和滿足感)。仔細看這三件事,是不是有種「撒一層土,夯實,再撒一層」的感覺?無心插柳的 2)、3) 成為 1) 這道大菜的精美佐餐。意外地,我們促使娜娜以週為單位迭代,實踐 build(開發 app)— measure(製作影片,把學到的內容解釋給別人聽,這是檢驗自己是否理解透徹的試金石)— learn(文字總結)的 feedback loop,一週又一週地螺旋前進。
同時做這三件事的另一個好處是提升影響力。實習生的工作往往是一個黑箱,學校和老師除了拿到一紙評鑑外,一無所知;而用人單位在招募應屆畢業生時,看到的都是千篇一律的「在某某知名或不知名的公司做了某某專案,用了某某技術,實現了某某成果」之類制式文章,難怪篩選履歷的一個私房祕訣是「一疊履歷用力一擲,最遠者前三名」。而我們無意間突破了這個桎梏,透過社群媒體將黑箱透明化,使娜娜們的實習工作可以很方便地被呈現、被瞭解,也提高了她們脫穎而出的可能性。也許經過這段時間的歷練,娜娜會把她學習的課程、個人的成長都以這種方式呈現出來呢!
這次和娜娜一起的寶貴的學習經歷讓我開始反省之前我使用實習生的得與失。未來我們會更好地和實習生一起,為她/他制定一個有趣的,有挑戰的,可以成就自我的實習方案。
本頁涉及
術語
-
區塊鏈
透過密碼學連接記錄,並按共同的驗證與共識規則確定交易歷史的分散式帳本。