
2018年1月6日,我报名参加了硅谷Live举办的《以太坊智能合约全栈开发入门》课程,通过29天紧张密集的学习和实践,2018年2月4日,我拿到了毕业证书。

一、我为什么要学习这门课程?
去年年底我就关注了老董的公众号【老董区块链干货铺】,他制作的区块链原理的系列视频给我留下了很深的印象,所以当他发布第一期的区块链学习课程的时候,我马上就缴费报名了,可惜当时只有50人名额,我未能入选。
第二期扩大到100人,我有幸入选参与了整个学习过程,而我为什么如此卖力地去学习这门课程?我主要有以下几个思考:
1)一个比较实际的问题,周围几个朋友在用imtoken钱包收币,并要给许多人发Token,人数较多时就会变成一件非常费力且容易出错的事,所以想写一个智能合约来自动完成这件事。
2)以太坊号称开创了区块链2.0时代,当前世面上出现的1478种币(来源于coinmarketcap.com),有587种都是以太坊上的代币,想评判这些币的价值,需要深入了解以太坊的背后原理。
3)智能合约在写作社群激励等很多地方有广阔的应用前景,程序员学会它肯定是站在区块链的顶端,既有趣又赚钱。用老董的话来说,学完这门课相当于超过了世界上95%的程序员。
二、苦逼的学习过程
我在报名之前看过一期学员的一篇文章,知道学习强度非常大,而我又没有写过Javascript程序,所以提前预习了一点github、Solidity和Truffle的相关内容,好让自己能够在正式学习过程中不掉队。
1月7日上午10点,学习班正式开班,而我正在杭州参加公信宝新版本发布会,会后与一帮区块链爱好者交流正酣,一直没空看课程视频,直到第二天晚上才有空做作业。
日期 | 课程 |
---|---|
1月7号 | 第一课《智能合约设计初阶-单员工薪酬系统》 |
1月10号 | 第二课《智能合约设计进阶-多员工薪酬系统》 |
1月14号 | 第三课《智能合约后端优化和产品化》 |
1月17号 | 第四课《使用Truffle架构进行前后端交互,测试,部署》 |
1月21号 | 第五课《分布式应用前端产品化》 |
1月24号 | 第六课《分布式应用前端产品化-进阶》 |
1月28号 | 第七课《智能合约的主网部署》 |
2月4号 | 总答疑 |
本次课程的作业发放和批改过程全部在github上进行,而我以前没怎么用过github,第0课的视频看了好几遍才搞明白了复杂的提交过程,后来还是助教整理的一张流程图更清晰。

第一课中关于ETH地址的引号问题就挺折磨人,幸亏有助教帮忙,第一课的作业才能及时完成。现在回忆起来,当时犯错的问题确实比较初级,多些耐心和讨论,前几课的内容还是相对容易的。
第四课的开发环境用到了VirtualBox中的Ubuntu虚拟机,还好以前有Linux的命令行基础,这一课勉强通过,但各种开发工具的版本问题仍是巨大的坑。无奈,我尝试着用Windows跑通了整个Truffle环境。
真正的难点在第五、第六课,这里需要用到Javascript和React框架,再加上node.js、truffle和Testrpc(现在叫Ganache CLI)之类的环境,才能跑通整个程序。我按照视频中的说明敲入了代码,可是运行中总是出现莫名的错误,由于前端开发技能几乎为零,所以遇到错误后束手无策,不知道到哪里去找错。
在第五课的做作业过程中,曾经一度想过放弃,为了体验后面的白帽黑客大赛,借鉴了队友的代码,终于挺了过来。通过认真比对代码,发现自己当时写错了好几处代码。
三、刺激的白帽黑客大赛
第七课可以说是整个课程的点睛之作,老董在以太坊网络上发布了一份带有漏洞的智能合约,10个小组各显神通,运用平生所学去偷走合约中的ETH。这个过程中我有幸担任了B组的组长,这时候才发现队友们个个深藏不露,Python、 Javascript、Solidity、Myetherwallet和Metamask全都运用娴熟,最后还完成了一个Hacking核武器,可惜时间不够用了。
非常遗憾,我们组最终并没有获得比赛冠军,但在这次比赛中,我们不仅巩固了以前学过的内容,更是收获了团队合作的经验和宝贵的友谊。这里我要感谢几位并肩作战的战友,他们是高翔、熊雄、Hong Zhong、陈浩林,有两位战友处于地球的另一端,经常熬夜破解老董的合约,一位战友为了方便队友操作,把以太坊养猫的钱包私钥都贡献了出来。

关于这次比赛的过程,我整理了10多页的详细记录,为了不影响后面学员的学习乐趣,这里就强忍住不能剧透了。如果你入选本次课程,一定要投身于这场比赛,一次比赛的收获远多于前六课的总和。
四、课程的运营
1)教师团队
老董和Frank两位老师,带着4位班长和14位助教组成了一个豪华团队,将课程办得井井有条,大家各司其职,目标只有一个:让学员们学有所成。
2)每日打卡
每天一个热点话题,大家都可以发表个人的见解,优秀的回答还被收录在github的【每日优质内容复盘】中。
3)运营班长
几个班长完成了开班、打卡、写稿、催作业、主持、排练、结业、做证书等等繁重的事务,并且每个细节都死抠不放。我在最后的结业仪式上只安排了一个充满学术气息的抽奖任务,还提前排练了1个小时。
4)精彩分享
课程中间的每个周六,几位助教给我们带来了4份知识加餐,海螺老师的《以太坊白皮书解读》、刘芳璐的《XMR白皮书》、何智华的《IOTA技术介绍》以及蔡志诚的《破解养猫合约与智能合约伪随机数》,可以说每篇都值回999元的票价。
5)催作业
几位班长、组长通过各种手段催交作业,无所不用其极,每天打开微信最怕这种信息,我离开校园已经20多年,如今还被90后班长整天催作业,还是老老实实地去看课程视频敲代码吧。
五、参加这个课程需要哪些基础?
零基础是无法完成这门课程的学习的,大概需要以下基础:
-
会使用科学上网工具,不会它,连炒币都没门;
-
至少掌握一门面向对象编程语言,比如C++、Python之类的,因为Solidity语言与它类似;
-
需要有前端开发的基础知识,有些单元测试是用Javascript写的,最后开发出来的Dapp应用的前端也有许多js代码;
-
最好了解react开发框架,虽然它不是必需的;
-
会Linux的基本命令行操作,比如md、cd、npm之类的,因为老师介绍的truffle环境是部署在Linux虚拟机上的;
-
了解区块链的基本原理,比如钱包、地址、区块、Hash、挖矿、BTC、以太坊等等,当然建议看看我写的《区块链生存训练》PDF电子书,可以快速入门;
花絮
-
小组本来10人,一周后有2人不适合学习,退出,小组只剩8人
-
B组的第一任组长由于工作任务很重,难以安排足够的时间学习和参与团队活动,小组积分垫底,我出任新组长,实际上我也没做什么,只是催催作业、打打气、汇总照片、写写作战报告之类的
-
结业彩排时夏玮欹把老董的奖金说成4000美金,估计想让老董破产
-
好多学员名字全是英文字母,在抽到2名中奖学员时,编程神勇的顺达助教卡在姓名上,我用汉语拼音解围
-
陈浩林同学用40秒默认值设置,将班长的歌声传遍结业典礼
-
学习过程被代码绊住,正好行情冷淡,在场外7万、6万时分别抄底一把