先玩一个MMORPG游戏。不开玩笑。
这个游戏长这样,开源免费,用GitHub账号登录(不登录也行,对匿名用户完全友好),不用绑定手机号,不用扫二维码关注公众号回复XXX。还在开发中,有空会直播开发过程——开发测试完,直播上生产。
做一个用来学习编程的游戏是我构思了很多年的一个想法:学习编程的过程和闯关打怪很像,费尽九牛二虎之力,只为了了最后通关那一刻的愉悦感;那么,我们能不能做一个游戏,打游戏的过程就是学习的过程呢?能不能只要打通关游戏,就能成为一个合格的、可以立即上岗的软件工程师呢?
这样的话,现在的这个“怎样入门”的问题就变成了“这个游戏怎么入门?”——然后这就不是一个问题了,毕竟游戏的魔力就在于能让完全不识字的学前班儿童都欲罢不能。但是问题是,如何设计一个游戏,能让人具有持续玩下去的动力的同时(正反馈),还能循序渐进的给人以提升(压平学习曲线)。
学习编程的核心在于练习,写码过万行下笔如有神。我先来说重要的事情:
只看视频是学不会任何东西的!
只看视频是学不会任何东西的!
只看视频是学不会任何东西的!
学习编程只有一条秘诀:
设法给自己找到坚持写代码练习的动力。
这个动力可以是兴趣,可以是生活所迫,可以是你妈的鄙视,可以是赚钱娶媳妇的渴望,可以是花一两万报名培训班不甘心浪费的那种不甘。无论如何,在出师之前,都要写上成千上万行的代码。能坚持写很多的代码,就能成功,反之,就不行,就这么简单。
我花了很久的时间研究这个问题:如何能坚持下去写枯燥无味的代码?过去的两年间,我在一个在线培训机构担任了两年的兼职讲师,做了很多尝试,比如说,要掌握“Git切换分支”这个技能,我设计了一个特殊的GitHub仓库,你必须自己操作一遍,clone并切换到某分支,该分支的代码运行会打印出来一个密码(实际上是Base64加密的字符串),然后把密码粘贴到课后题的答案框中才能过关。
然后我在想,能不能让这个过程更有意思一点?比如你需要用这个密码去打开一个宝箱,获取bling bling的大砍刀?
在我设计的游戏里,在新手村,一个NPC会向你要咖啡:
你需要去酒吧里(酒吧的名字叫Foo Bar,中文名福报酒吧,慢慢你就会知道它为什么叫这两个名字)获取咖啡 。获取咖啡的密码是java -version
的输出,因此为了获得这个物品继续游戏,你就需要学习怎么安装Java。
通过这样持续的游戏互动, 慢慢在游戏里锻炼编程的能力。当一切变成游戏的时候,我们的思路就豁然开朗了:我们可以有彩蛋,吸引玩家去探索;碰到不会做的题目,加入公会,让前辈带你……
当然代码还要你自己写。那么如何激励自己持续的写代码呢?
游戏里的方法是Pull Request。在解释Pull Request是什么之前,我先问你一个问题:假如你明天要应聘司机这个职位,今天你要做些什么准备?
你肯定会说,今天晚上我会借隔壁二狗子的车(或者三蹦子)来练练手。
Pull Request就是编程世界的三蹦子。大多数正常的公司都用Pull Request (或者叫Merge Request)来组织日常的开发工作,所以需要你从今天开始,就开始练习开三蹦子。
得益于我在GitHub和自动化构建领域的多年的经验,我设计了一套CI系统,你就某个知识点的题目提交的代码,会触发CI和GitHub webhook,然后游戏中的系统就会做出相应的反应,比如让你通关或者达成某个成就。
这套系统在我做兼职讲师的时候工作良好,一共收到了两万多个PR,因为全是机器判题,几乎不消耗任何人力。同时,你可以尽情发挥想象力,比如顺便checkstyle一下以养成良好习惯(下面是我随便截的一个图,这样的PR还有两万多个):
同时,游戏支持一种特殊的、交互式的路线图,你可以把整个学习过程中的进度可视化:
顺便说一句,游戏支持十几种语言(当然大部分是机器翻译的,因为开源,所以也支持社区贡献)。来看一下鬼畜的韩语版:
阿拉伯语来一发:
做i18n是因为按照以前的经验,有很多同学有留学或者海外求职的需求,所以希望尽可能地营造外语的学习环境。
因为我有正经工作,这个项目只能在业余时间做(感谢我厂不996,能让我陪娃之余还有时间写自己喜欢的代码)。项目持续开发中,未来的晚上黄金时间会考虑在b站(中文)或者YTB(英文)直播开发。
开源地址:
有人质疑这个游戏是否真的能让“连软件都不会安的小白“入门,我必须承认,你说的很有道理,不过,这个问题我已经思考了几年了,并且自认为有一个完善的解决方案——这是未来要开发的经济系统和社交系统要解决的问题,让子弹飞一会吧。
看到其他答案,3年前的事情现在翻出来。
“聚众******罪”都能洗,我是没想到的。反而对维护**的横加指责。