00 后程序员:12 岁入门,MIT 大赛前十,凌晨 4 点在编程
作者 | 若名
出品 | AI科技大本营(ID:rgznai100)
当所有中国的高中生都在拼命为跨过高考这道窄门疲惫不堪时,美国的准高中毕业生们也开始申请大学,北京某国际学校的陶子进是其中一员,他的眼神中似乎看不出慌张感。
今年 18 岁的陶子进出生在美国芝加哥,11 岁的时候由于父亲工作的原因随全家回到北京生活。
回国后,在国际学校就读的他仍然成长在美国教育体系下,与国内的同龄人被淹没在繁重的学业压力下相比,陶子进在学习之余还坚持拉小提琴、下棋、击剑,成绩都还不错。
近两年他还喜欢上了编程,当国内的大部分同龄人还在死磕数学题时,他已经做了十几个编程小项目,除了兴趣使然,当然也受到了家庭影响。其父亲是一位连续创业者——涛思数据 CEO 陶建辉。说起陶子进学编程的经历,陶父认为主要是美国教育体系下成长的学生知识面很广,而国内的高中生除了准备高考的课程内容,没有时间和精力考虑太多。
随着对编程语言了解的更加深入,陶子进开始通过参赛来检验自己的编程水平。
在今年 2 月初结束的由大学生和高中生组队参加的MIT Battlecode 比赛上,600多个参赛队伍中,陶子进和四人团队在全球所有参赛队伍中拿到第 9 名,高中生团队中排名高居第 4。
(左一为陶子进,右边依次为队友 Alex、Drason,Tom 连线参加颁奖)
Battlecode 是一款即时策略游戏,参赛者通过两两对战决出胜负。每年的比赛目标任务都会有变化,今年双方需要编写 AI player,通过管理机器人资源并执行不同的攻击策略来摧毁对方的城堡。参赛者将需要学习使用 AI, pathfinding 插件,分布式算法和网络通信技术以使自己的 AI player 尽可能具有竞争力。 整个比赛历时一个月,前十六强在麻省理工学院进行比赛,奖金总额超过 50000 美元。它目前已成为发掘优秀程序员的选拔赛。
这是陶子进第二次参加 Battlecode 大赛,他称这是 MIT 最硬核的 AI 编程比赛,因为特别难做,经常要写程序到半夜,才有机会进入前 16 ,他们整个团队在最后一个星期的比赛中,有好几次到了凌晨 4 点还在编程。
对编程的激情离不开陶子开始学编程时做的小项目,积累更多经验后,才能在大赛中施展拳脚。就此,AI科技大本营与陶子进就参与 Battlecode 的过程和感受,高中生入门学编程的经验进行了交流,其背后也呈现出美国教育体系下学生成长路径的一个切面。
不可否认,纵然家庭环境对陶子进的成长非常关键,而成长在中国教育体系下的大部分高中生没有多少可比性,因为大多数人都没有其他选择。即便如此,至少在编程学习方法和路径上,陶子进的个人学习经验对国内高中生甚至大学生来说是具体、可执行的操作建议。也不止于编程,从他身上,你更应该看到那种超越国内大部分同龄人都还未拥有的广阔眼界和认知。
再战 Battlecode
问:为什么还要再次去挑战 Battlecode 比赛?
陶子进:去年打完以后就去看其他人写的 code,看到各种各样的比赛方法,学习后感觉今年有更好的改变,再加上今年我用的编程语言是 JavaScript,写得更快。另外,我近期也参加了华尔街对冲基金 TwoSigma 的 Halite AI 比赛,全球共有来自 100 多个国家的 4000 多个队伍参加, 我最终排位第 66,属于击败 Benchmark 的前 94 个队之一。在参赛的全球 500 多高中生中,排名第 5,在中国区参赛队中排名第 2。它比 Battlecode 比赛更简单,但是拿第一必须得用好多其他方法,我也积累了一些比赛经验。
问:比赛中主要使用了哪种编程语言?
陶子进:这是第二次参赛,团队的其他三个成员都是我同学。去年第一次参赛的成绩不太理想,当时总排名是前 32,在国际的选手中是前 16。我们第一年用的语言是 Java,今年用的是 Javascript,其他比赛队伍有使用 Java 的,Python 也是有的,但 JavaScript 其实更快。
问:你们在比赛中是如何编写算法来制定战略?取胜的关键点是什么?
陶子进:你要编写一种能够在引擎上运行的算法,然后结合比赛中的地图和已经给出的数据,来给出最好的策略,比如写的某个策略是你用来控制整张地图的,如果你获得更多的机器人资源,你就会比竞争对手更好,但如果你写的程序超过 20 毫秒都没有响应,那可能就会输掉比赛。比赛的第一周基本都是写 Foundation,这样后面写的策略都可以加进去,
每个队伍都有自己的策略,然后你要看他们的用的是哪种策略,因为这种比赛可能有 A、B 和 C 三种策略,你得先选一个好的,然后再看你对方在做什么,完了再改你自己的,但由于比赛时间有限,有些策略是没时间去做的,所以你要全局考虑进行应对。
问:拿到这么高的名次,你们团队还有哪些做得比较好的地方?
陶子进:我们经常会看别人以前的比赛,仔细研究为什么输了或者赢了,这会提醒我们在比赛中要做出改变,比如最后一次比赛中就用了观察到的新策略让我们进入了前 16。其次是我们写程序算是比较快的,比如要对 DFS(深度优先算法)很熟悉,马上能在几十秒内就写完,所以加新的策略很容易,没有花那么多时间在 Foundation 框架上。
问:比赛过程中遇到比较困难的地方有哪些?当时是怎么解决的?
陶子进:困难的就是 Debug,因为这次比赛中没有明显给我们提示程序哪个地方出了错,所以还是耗了好多时间找到问题来解决。
问:比赛最刺激的经历是什么?
陶子进:赛程是 22 天,特别短。有意思的是你必须要选做什么,没有足够的时间找到最优解,必须得选要写 A 还是写 B,做数学计算,估计它的重要性。当然,最后我们团队拿到了第九名,主办方给了我们 1750 美元奖金。
问:团队止步第九名,哪里出现了失误?
陶子进:每一场比赛里面都是随机地图,你得做出很好的判断去适应这些地图,第二句和第三局(双淘汰机制)我们都没有做好。赢了我们的那个团队,其实平常我们是打败他们的,只是这一次他们有一点小幸运。
编程入门之道
问:你是从什么时候对编程感兴趣的?
陶子进:六年级的时候接触过编程,但当时并没有产生兴趣,真正开始学编程是在高中十年级的时候,最近两年,做的项目也更多了,对编程产生了更大兴趣。去年开始写程序的时候,是从 JavaScript 和 CSS 开始写的,逐渐开始对编程感兴趣,通过 JavaScript 还学了 Processing.js、Node.js。
问:主要通过哪些途径学习编程?
陶子进:主要是看网上的资源,一些在大学里开始学计算机的朋友给我推荐了一些网站,对我帮助挺大的。另外我自己有几本 CS 书和 Script 类的书,这两者还是有关系的。
问:有哪些可以推荐的学习网站?
陶子进:美国的 edX 课程(注:edX 是麻省理工和哈佛大学于 2012 年 4 月创建的大规模开放在线课堂平台),还有 freecodecamp, Github 和 MDN Web Docs 网站,比如我要做软件的话,就会从 Github 上找到我需要的库,我最基础的编程能力都是从这些网站学来的,不会的东西都是靠维基百科现搜。
问:除了参加编程比赛,你都做过哪些项目?
陶子进:现在大概做了十几个项目。去年 10 月,我和另一个人帮北京一所小学写了一个读英文书 ese 学习平台,帮助小学生学英语,平常记录他们读书的时间,通过这个平台可以检测学生是真的读,还是在玩游戏。
还有一个圣诞节做的“teachers appreciate week”的小程序,通过扫二维码,把祝福和感谢的话发送到大屏上,然后显示出来,后台统计有超过 400 人扫码。
很多小项目都是通过我自己在微信跟人聊,觉得好玩的才去写的。一个比较大的项目是 Polytomizator,这是一个 web 小程序,当你上传照片到这个网站上的时候,它可以几秒钟生成 Poly 艺术照,但如果你要用 PhotoShop 处理照片的话,可能需要很长时间。它主要是用 JS 和 HTML 来做的。
还有一个是让人玩的 Cut-Bread 的小程序,它可以均匀切割面包、水果等事物,比如图片上有两个面包一个火腿,可以让你一刀切下去保证一半是火腿,一半是面包,我也不知道为什么,但这个小游戏已经有数千人玩过了。
更多项目可查看 GitHub 网站:
https://stonet2000.github.io/projects.html
问:让你不断去做这些项目的动力是什么?
陶子进:做这些项目很有成就感,因为都是很容易可视化的成果,这其实是比较好的。但如果一开始不是直接写程序,而是学离散数学这些理论知识,我觉得自己不会对编程产生兴趣,但我知道那些东西是需要学的。
问:这应该跟美国教育的风格相关。
陶子进:是,我有个老师之前教了一些基本的编程原则,教得很好,而且美国人的教法特别注重你自己要做点什么东西。
问:你爸妈都会编程,家庭环境的影响也是一部分?
陶子进:会有影响,会讲一些基本概念,但并没有具体辅导。
问:马上要读大学了,申请了哪些学校?准备读什么专业?
陶子进:申请了 MIT 等 10 所大学。因为我现在做了这么多 CS 项目,现在主要想学的是 CS,但也不一定说大学还想去做,我也不是特别知道我想干嘛,所以我特别想去美国,因为美国学校可以让你(自由)选择。
热 文 推 荐
☞ ICPC 2019国际大学生程序设计竞赛,中国高校未能夺冠
☞ 身为程序员的父母,你年薪多少才能让“码二代” 不输在起跑线上
☞ 30 位 90 后霸榜:名企 CEO、10 亿身家,马云的接班人?
☞ 交恶微软、拒绝乔布斯,21 岁的他是如何开发出 Linux 的?