被访者简介:Andy Matuschak,现就职于知名在线教育网站 Khan Academy 领导其移动开发团队。在之前他担任了 iOS 4.1 至 8 的 UIKit 的开发和维护工作。同时 Andy 也是 Mac 知名框架 Sparkle 的创建者。可以说无论是 iOS 开发者还是 Mac 开发者,我们其实每天都在使用着 Andy 所开发的东西。 Andy,谢谢你抽空接受采访。可以跟我们谈谈你是如何开始编程的吗? 我想应该跟很多人一样是从游戏开始的。小时候有段时间,家里是不允许我玩游戏机的,于是我就经常去公共图书馆。在我九岁的时候,我发现那些我以为是 教编程的书其实只是罗列了基本的源码。还有一些讲游戏设计的书整本都是源码。于是当我想玩游戏的时候就把这些源码输入计算机,但又常常半路遇到语法错误, 而我当时还不能理解这些错误信息,也不知道如何解决。所以我不得不重来一遍,直到我终于可以玩这个游戏,如此反复之后我意识到我可以修改这个游戏,而从那 以后就一发不可收拾了。我学了 C++ — 那时我大概 10 岁 — 因为人们是用它写游戏的,我试图写过一个 MUD 游戏 — 那是我第一个大项目,还进行的不错… 你完成它了吗? 单人模式下所有功能都可以很正常的运行,但多玩家的模式没有完成 — 所以我想答案应该是没有吧。因为后来我转移注意力到图形方向去了,开始迷恋上 GL 和 3D 渲染之类的事情。 然后你就继续做游戏? 我做了一阵游戏引擎之类的东西,看了所有 OpenGL 的教程,什么旋转的方块啊,颗粒引擎啊这些东西,然后我开始做真正的游戏。在那个时候,对一个 13 岁的我来说,那真是繁复的工作。我发现没有足够好的图形工具来显示游戏内容。于是,我跟我的室友开始做一个像素编辑器。我们把它叫做 Pixen。那是我第一次接触 Cocoa,还是开源的。当我们发布 1.0 版本的时候,我当时大概 14 岁吧,我们去购物中心里面苹果商店的 OS X Panther (还是 Jaguar?) 的发布会。那个时候他们就开始搞发布会了!我们想赠送我们那个像素编辑器的 CD。 是不是有其他的什么可能你就不会成为一个程序员了?你当时还对其他什么特别感兴趣吗? 我当时的理想就是成为某种工程师。我当时对电气工程,或者甚至是高中的那些化学小实验的理工科挺着迷的,所以当时是想成为这些工程师中的一种,而软 件工程是我当时真正可以着手做的。当时我把这称为编程,而不是软件工程,于是有些人告诉我:“不对不对,你应该叫它计算机科学!”当然,在当时,我并不明 白在计算机科学,软件工程和编程当中暗流汹涌的文化差异,我只觉得它们是很有用的清晰的术语。但其实我们常常把它们用错了。 好勒。那你现在基本上就是软件工程师了? 我肯定不是计算机科学家,虽然我是学这个的。我觉得我差不多算是软件工程师,一个深受计算机科学影响的软件工程师。不过我最近会花大概一半时间做一些儿童教育方面的研究,读论文和书籍,分析设想,我们希望能在这个方向略尽绵力。 离开 Apple 去 Khan Academy,帮助人们学习和教育,看起来是个不小的跨越。这是怎么发生的呢?是什么促动你的? 这个, 我想我可以从其他一些事来回答这个问题… 我之前去加州理工学习过一段时间,这所学院支持了大量自然科学的项目,诸如 NASA 和 DARPA,所以当时的讨论都集中在人性化影响上。当时有一个 NASA 的人过来对我们说:“好了,你们是最优秀的,而你们即将在世界上最好的研究学院之一学习,你们将拥有无数可能。这对你是无限机遇,而你们也应当把握这样的 机遇,将它们利用来做些真正有意义的事情。” 当我来到更广阔的软件社区里时,我是少数的几个毕业之后没有去做研究的人之一。刚毕业的时候我希望能做一些事情,但我对大多数商业软件工程和软件销 售的能产生的影响和追求的目标感到失望,于是我冥思苦想到底可以在哪个领域发挥我的专长, 而最先踏出的第一步最终决定了我的方向。我深受物理学家 David Deutsch 的影响,通过他我确认了我想要走的方向,那就是扩展人类知识和能力范围,继而我就开始思考怎样才可以做到。 如果人类能活得更久一些,那我们就能在知识能力上走得更远,所以在生物技术和化学工程会有很多的机遇。如果人类有更好的工具进行试验,也能更进一 步,所以在工具制造,综合工具,虚拟现实,或者是接下去的人工智能领域也都有很多的机会。但基于我的背景和机遇,我最终决定在教育方面做一些贡献,我认为 这将会是更好的选择。因为如果我可以创造终身学习的一代人,那么我们将有更多的人来解决这些问题。 那么你是想为后代打造一些帮助学习的工具以便于他们解决更艰难的问题? 是的,那是我的期望。学习的一大挑战就是元学习 (meta learning,即“学习如何学习”)。这是一种可以不必摧毁自信或摧毁学习态度的学习方式。如果我开发的这些工具不但可以让毕业生得到相同成绩,并且 他们最终不但对数学有更好的认知而且会更倾向于在之后的生活中学习数学,那我就达到目标了。 看起来很显然你并不满意我们已有的教育?你可以详细谈谈吗? 是的,它还不够好,并且在很多方面都不够好。最缺乏的是没有让学生得到刚才我说到的那些机遇和资源,我觉得那是最重要并且最首要需要改善的事情。所 以这就是为什么现在的任务是给所有人提供免费教育,而 Khan Academy 的使命是为大家提供世界一流的免费教育。所以现在我们会先将重点集中在为大家提供免费教育上面,接下来会是世界一流的免费教育。但那是后续的事了,因为我 对现在所谓的世界一流还有些怀疑和考虑。 我有很多同学接受了最好的付费教育,由诺贝尔获奖者授课。尽管如此,他们的学习态度却很糟,认为一毕业就算完。他们只想结束这一切然后去找份稳定的工作,放空大脑,因为他们已经被系统和制度打倒,而好奇心跟智慧也已经枯竭。 听上去真让人沮丧… 是啊。如果你问人们你觉得数学怎么样,大多数人都会回答说:“哦,数学很无聊。”或者“我数学不好,我不太适合学数学。”。如果你问他们对科学的态 度,答案也类似。但如果问到文学,或许他们会谈论一些他们读过的书籍里的有趣桥段,但那也只是他们学生时代读过的罢了,现在已经停止阅读了。所以我最期望 影响的是改变人们认为教育随着大学毕业一并终止了这一认知。而这其实并不是一个技术上的问题,所以我对给我自己贴上“软件工程师”的标签有些顾虑。虽然我 大部分的经验与之相关,但我的目标是却不是这个方向。 既然你现在在终身学习上面有这样一个大计划,那你对你十年后的愿景是怎样的呢?你期望达到什么目标? 眼下,学习的标准含义已经被普遍认可。不论是读教课书,看一个视频还是听一个演讲,你都是被动的吸收知识。你只用坐在那接收,或许如果你比较有钱的 话还可以在之后有个对话交流之类的。但当你毕业之后,你必须自己去创造这样的学习环境。我对所谓的构建式学习环境 (constructivist learning environments) 很感兴趣。这是一位几十年前的学习研究者 Papert 创造的术语。在构建式学习环境下,学生由被动的从教科书里学习转变成自主的创造知识。在这样的模式下,会更像是创造了一种环境,让你在这样的氛围中积极主动的理解事物继而掌握它们。 Papert 的研究里有一个例子,他尝试用 Logo 来 教学生抽象及程序性思维,而不是编程本身。 他甚至有一个教室里挂了一个 Logo 的海龟的标志。那时候还有一种机械海龟,可以在真的纸上作画。这个教室四周挂满了画,有些是源代码生成的,有些不是。这些画作会随着一批批的学生换掉,因 为比如有些学生会看到一朵花然后说:“哦,我喜欢那个图,能给我吗?”然后教师会说:“当然可以,不过你必须输入这些代码,海龟会按代码画出这个图。”接 着学生会说:“好的。”然后开始画画。之后他或许又看上其他画作,但那些并没有源代码,于是他就得自己想办法。 教室里这些没有源码画作是被设计出来的,需要学生理解原理后制作出来。创造性环境就这样塑造出来了。我正在研究这个很可能会被研究很多年的假说,首 先是允许人们自助的构建知识,那么将很可能得到同样的学习效果,当然如果达到这一结果我会非常高兴,不仅如此,他们还会在自我认知,学习态度和学习兴趣上 都比其他同学高出不少。 除了用构建式方式鼓励人们更主动的学习之外,另一个相比你在 Khan Academy 做的和更传统的教育方式之间的主要区别是更自由地选择想学习什么以及什么时候学习。那么你觉得这个改变有什么影响呢? 另外有一个儿童教育研究者 Piaget 对 此有很多的研究成果。他认为对青年一代的开发当中最重要的事情之一是对自主性的训练。而这里的自主性比我们平时认为的自主性还要更宽范一些。不是“我可以 随便的玩”这样的自主性,而是“我正在对我生活中所有的的事情做决定”。这跟其他人来告诉你要怎么分配你的时间或诉诸权威是相抵触的。比如说,常规性的回 答 “Bobby 在玩游戏的时候作弊了” 这样的问题,会是 “哦,我去找他谈谈”。与之相反的,如果是自主性的回答将会是 “那么你是怎么跟 Bobby 说的?”。我认为自主性的训练在各方面都是非常重要的。有些研究认为这会在短期内得到更好的效果,但我认为从长期来说也会引导出更善于思考的人。 我对那种一整天的日程都被别人安排的情况很质疑。我认为如果一个导师以日复一日的调整学生的学习环境来达到修正学生学习进程的方式会是更积极的。确 切一点,举个例子,比方说与其一次性给学生全部人类知识的目录,并且把每个知识点都按重要程度分类,我认为更好的方式是把所有的知识都看成是书架上的书, 然后按难易程度由低到高的摆放。 那么在 Apple 有没有什么很让你怀念的呢? 当然,我怀念那儿的人,这太重要了。事实上这正是我对这个行业感到一些失望的地方。有这么多优秀的人被局限在这些巨型公司里,他们只是偶尔被善加利 用,但更经常的情况下他们只是一台机器的零件,但以他们的智慧其实可以做更大更影响深远的贡献。我并不是说一定要来我这个项目,我是指更广泛的情况。让我 觉得有点伤感的不仅仅情感上的想念,我更怀念的是诸如当时在 NeXT 和那些非常有经验的人进行的非常有激发性的谈话。我仍然希望他们可以发挥更大的影响力。 可以多分享一下在 Apple 的时光吗?开发一个被如此多人使用的框架是个什么体验?而你又是怎么从做游戏一步步达到的? 填补这中间的鸿沟的一件事是当我 16 岁的时候,我写了一个叫 Sparkle 的框架。它让我认识到了到了一些框架开发的现实,比如说你要修改大家正在用的 API,他们就会非常生气。这是框架开发的基本现实之一,但老实说其实我在到 Apple 之前并不知道我当时在干嘛。我完成了学业,我有了更大的雄心,而 Apple 看起来是个非常好的学习地点,事实上也是。其实现在也仍然是,所以我还是会跟那些跟我当时抱一样想法的人提出相同的建议。跟我共事的团队是开发了这个体系 超过十年的人们,而我差不多是当中垫底的。于是我被迫非常快速的学习和理解许多设计这种规模框架所需的独特的角度。尤其是考虑框架的二进制兼容 (binary compatibility)问题,而 Sparkle 并没有考虑过。幸运的是,我周围的人都非常慷慨的付出他们的时间和精力帮助我进步。在犯了很多很多错误之后,我终于意识到我都干了些什么蠢事儿,而当我几 年后离开,之后大概再也用不到那些技术。 开发这样大型规模的框架里面最让你吃惊的是什么 我认为二进制兼容是最让我吃惊的事情。我当时并不理解当中的困难和复杂。想象一下这类的 bug 吧:在 iOS 8 里按钮是白色背景,但在 iOS 7 里面却是透明的。iOS 8 还没有发布,所以这肯定是我们自己的问题。于是你开始一点点钻研,发现可能在 iOS 7 里调用的一个方法是控制这个的,但这个方法在 iOS 8 里已经不被调用了。然后很快的你为了知道怎么回事,去分解,追溯,结果发现这是一个第三方的代码所为,而且你还没有源代码。基本上有一半的时间,有些人在 做一些奇怪的令人发指的事以达到效果,而另一半时间我们用一些非常规的手段做了些改动,于是我们需要因此增加一些防御措施。 |