作者: 陈天(ArcBlock 研发副总裁)

来源: 程序人生 (ID:programmer_life)

我对实习生的要求,除去学习能力外,便是足够长的实习时间。所谓「足够长」,我的定义是至少两三个月。小于这个长度,往往还没有开始贡献有价值的工作,实习生便带着写满好话的评定拍屁股走人了。

cover

娜娜本来原定是六月初来实习的。然而因为她学校办理 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 的一个可视化工具,觉得没太大(扩展性)问题,就让她放手去做。很快她遇到了新的问题:链上的数据虽然可信,但无法很方便地展示。这触及到 offchain 的逻辑了,我告诉她需要用一个 index db 来配合使用(forge 自己也提供 index db,我们一直在考虑怎么让这个 index db 可以被更好地使用起来)。

第三周的周六,我照例在公司工作(老婆孩儿们不在的单身待遇)。她也来到公司,花了一整天时间,到晚上近八点钟,把第三期的视频做了出来。这个视频制作的精良程度超出了我的想象,不光是形式和内容的组织,更重要的是对概念和思想的理解和阐释。比如她在介绍 check / verify 的区别时,用了机场过安检的两重步骤来类比处理 transaction 的 light check 和 full inspection,非常形象,一下子把复杂的事情具象化了。

最后这一周,当她的 webapp 初具形态时,已经震撼大家;之后,她又花了很大力气,像对待一个要上线的产品那样对其精雕细琢 —— 数据的模拟使用了 faker,webapp 的 css 也做了一些调整,报表的查询可以用日历来选择时间范围等。最终,周四的 all hands meeting 上,整个团队看到了一个惊艳的展示。

webapp2

@

四周的实习结束了,娜娜给我们留下了这些成果:

一个质量不错的 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 风格有的一拼。朴素有朴素的好处,可以完完全全把心思放在自己认为重要的事情上,无需为旁的事儿分心。

所以,也许满足这些部分或者全部特质的人就是我们可以寻找的下一个娜娜。

该给实习生提供何种挑战?

从娜娜的实习经历来看,我们把原本可能是两三个月的挑战压缩到了一个月,并且在此之上还附着了很多额外的和市场活动相关的工作(如录制视频,撰写博客)。一开始,我们并没有抱着太大的希望,但事实告诉我们能力越大,责任越大压力越大,成就越大 —— 合适的有层次的工作能得到意料之外的产出。

娜娜的主要工作由几部分构成:

  1. 开发 app
  2. 视频回顾开发 app 的历程
  3. 文字描述开发中学到的东西。

这三件工作,单是第一件就足以压得她喘不过气来,然而她同时高质量完成了三件事,却仅仅比只做一件事多花了一点精力(同时获得了更多的成就感和满足感)。我们仔细看这三件事,是不是有种「撒一层土,夯实,再撒一层」的感觉?无心插柳的 2),3) 成了 1) 这道大菜的精美佐餐,意外地,我们迫使娜娜以周为单位迭代,践行 build(开发 app) - measure(制作视频,把学到的解释给别人听,这是检验自己是否理解通透的试金石) - learn(文字总结) 的 feedback loop,一周又一周地螺旋前行。

这三件事同时做的另一个好处是提升影响力。实习生的实习工作往往是一个黑盒,学校和老师除了拿到一纸鉴定外,别无所知;而用人单位在招募应届毕业生时,看到的都是千篇一律地「在某某知名的不知名的公司做了某某某项目,用了某某某技术,实现了某某某成果」的八股文,无怪乎筛简历的一个私域秘籍是「一沓简历奋力一掷,最远者三为头三甲」。而我们无意间突破了这个桎梏,通过社交媒体将黑盒白盒化,使得娜娜们的实习工作可以很方便地被展示,被了解,也加强了她们脱颖而出的可能性。也许经过这段时间的历练,娜娜会把她学习的课程,个人的成长都以这种方式展现出来哩!

这次和娜娜一起的宝贵的学习经历让我开始反省之前我使用实习生的得与失。未来我们会更好地和实习生一道,为她/他制定一个有趣的,有挑战的,可以成就自我的实习方案。