当前位置: 首页 > 科技观察

终生学习的一代——专访AndyMatuschak

时间:2023-03-18 14:11:30 科技观察

AndyMatuschak,现就职于知名在线教育网站可汗学院,领导其移动开发团队。此前,他负责iOS4.1到8的UIKit的开发和维护。Andy也是Mac上著名的框架Sparkle的创建者。可以说,不管我们是iOS开发者还是Mac开发者,其实每天用的都是Andy开发的东西。安迪,谢谢你抽出时间接受采访。您能告诉我们一些您是如何开始编程的吗?我觉得我应该像很多人一样从游戏开始。有段时间我还是个孩子,家里不让我玩电子游戏,所以我经常去公共图书馆。九岁那年,我发现那些我以为是教编程的书,其实只是在铺陈基本的源代码。还有一些游戏设计的书都是源码的。所以当我想玩游戏的时候,我就把这些源代码输入电脑,但是经常会在中途遇到语法错误,而且当时看不懂这些错误信息,也不知道怎么解决。所以我不得不重新做一遍,直到我终于可以玩这个游戏,经过这么多次迭代,我意识到我可以修复游戏,从那以后它就失去了控制。我学习了C++——我大约10岁——因为人们用它写游戏,而我试着写一个MUD游戏——那是我的第一个大项目,而且很顺利……你完成了吗?在单人模式下一切正常,但多人模式还没有完成——所以我想答案是否定的。因为后来我将注意力转移到图形方向并开始沉迷于GL和3D渲染以及类似的东西。然后你继续制作游戏?我在游戏引擎和东西上工作了一段时间,看了所有的OpenGL教程、旋转立方体、粒子引擎等等,然后我开始制作真正的游戏。当时,对于一个13岁的我来说,这是一项繁重的工作。我发现没有足够好的图形工具来显示游戏内容。所以,我和我的室友开始制作像素编辑器。我们称之为Pixen。那是我第一次接触Cocoa,它是开源的。当我们发布1.0版时,我大约14岁,我们去购物中心的AppleStore参加了OSXPanther(或者是Jaguar?)的发布会。那个时候他们就开始开记者会了!我们想赠送一张像素编辑器的CD。还有其他可能使您无法成为程序员的方式吗?当时您还有什么特别感兴趣的吗?我当时的梦想是成为某种工程师。我有点着迷于电气工程,甚至是高中时的那些小化学实验,所以我想成为这些工程师中的一员,而软件工程是我当时真正可以做的事情。当时我叫它编程,不是软件工程,有人告诉我,“不不不,你应该叫它计算机科学!”当然,当时的我并不了解计算机科学、软件工程和编程中的暗流。激烈的文化差异,我只是发现它们有用的明确术语。但实际上,我们经常错误地使用它们。那太棒了。所以你现在基本上是一名软件工程师?我绝对不是计算机科学家,尽管那是我学到的。我认为我是一名软件工程师,一名深受计算机科学影响的软件工程师。不过,我最近会花一半左右的时间做儿童教育方面的研究,阅读论文和书籍,分析假设。我们希望在这个方向上尽力而为。离开Apple前往可汗学院,帮助人们学习和教育,这似乎是一个巨大的飞跃。这怎么发生的?是什么激励了你?好吧,我想我可以从其他一些事情来回答这个问题……我去加州理工学院学习了一段时间,这个学院支持很多自然科学项目,比如NASA和DARPA,所以当时的讨论重点关于人的影响。美国国家航空航天局的一个人走过来对我们说,“好吧,你是最棒的,你将在世界上最好的研究型学校之一学习,而且可能性是无限的。这对你来说是无限的。机会,你应该抓住这样的机会,利用它们做一些真正有意义的事情。”当我来到更广泛的软件社区时,我是少数毕业后不做研究的人之一。刚毕业时,我希望做点什么,但对大多数商业所追求的影响和目标感到失望softwareengineeringandsoftwaresales,所以我苦思冥想我可以在哪个领域发挥我的专长,***我迈出的第一步终于确定了我的方向。我深受物理学家DavidDeutsch的影响,通过他我确定了方向我想去,就是扩大人类知识和能力的范围,然后我就开始想怎么去做。如果人类可以活得更久,那么我们的知识和能力就可以走得更远,所以就会有很多生物技术和化学工程的机会。如果人类有更好的实验工具,就可以走得更远,所以在工具制造、综合工具、虚拟现实或者人工智能的下一个领域都有很多机会。但基于我的背景和机会,我最终决定在教育方面做出一些贡献,我认为这是一个更好的选择。因为如果我能培养出一代终身学习者,那么我们就会有更多的人致力于解决这些问题。所以您想为子孙后代构建一些学习工具,以便他们能够解决更棘手的问题?是的,这是我的期望。学习的挑战之一是元学习(意思是“学习如何学习”)。这是一种不必破坏自信或破坏态度的学习方式。如果我开发这些工具,使毕业生不仅获得相同的成绩,而且最终不仅对数学有更好的理解,而且更愿意在以后的生活中学习数学,那么我就实现了我的目标。很明显,您对我们的教育不满意?你能说得更详细些吗?是的,它还不够好,而且在很多方面都不够好。最缺的是没有给学生我刚才说的机会和资源。我认为这是需要改进的最重要的事情。这就是为什么现在的使命是为所有人提供免费教育,而可汗学院的使命是为所有人提供世界上最好的免费教育。所以现在我们将专注于为所有人提供免费教育,然后我们将成为世界上最好的免费教育。不过那是后续,因为对于所谓的世界***,我还是有一些疑惑和思考的。我的很多同学都在***接受过有偿教育,由诺贝尔奖获得者授课。尽管如此,他们对学习的态度很糟糕,认为一旦毕业就完了。他们只想结束这一切,找一份稳定的工作,放空自己的思想,因为他们被体制和制度打倒了,他们的好奇心和智慧被榨干了。听起来很令人沮丧……是的。如果你问别人你觉得数学怎么样,他们中的大多数人会回答,“哦,数学很无聊。”或者“我不擅长数学,我真的不擅长数学”。如果你问他们对科学的态度,答案是相似的。但是如果你问起文学,也许他们会说说他们读过的书里的一些有趣的段落,但那只是他们学生时代读过的,现在已经不看了。所以我最想影响的是改变教育以大学毕业而告终的看法。这并不是一个真正的技术问题,所以我对给自己贴上“软件工程师”的标签有些顾虑。虽然我的大部分经历都与之相关,但我的目标不在这个方向。既然您在终身学习方面有了如此大的计划,那么您对十年后的愿景是什么?你希望达到什么目的?今天,学习的标准意义已被普遍接受。无论是看课本、看视频还是听演讲,都是在被动吸收知识。你只是坐在那里接受它,也许如果你更富有,你可以在之后进行对话或其他什么。但是当你毕业时,你必须自己创造学习环境。我对所谓的建构主义学习环境很感兴趣。这是一个有几十年历史的学习研究者Papert创造的术语。在建设性的学习环境中,学生从被动地从课本学习转变为自主创造知识。在这种模式下,更像是创造一个环境,让你主动去了解事物,进而掌握事物。Papert研究的一个例子是尝试使用Logo来教学生抽象和程序性思维,而不是编程本身。他甚至在教室里挂了一个乌龟标志。当时还有一种可以在真纸上作画的机械乌龟。教室四周都是绘画,有些是从源代码生成的,有些不是。这些画会换成一批批的学生,因为比如有些学生看到一朵花会说:“哦,我喜欢那幅画,你能给我吗?”而老师会说:“当然可以,但是你必须输入这些代码,乌龟会根据代码画图。”然后学生会说,“好的。”并开始绘图。然后他可能会看到其他画,但是那些没有源代码,所以他必须自己弄清楚。课堂上这些没有源码的画是自己设计的,同学们需要先了解原理再制作。创作环境就是这样形成的。我正在研究这个假设,可能会研究很多年,首先是让人们自助建构知识,那么很可能会得到同样的学习效果,当然如果能达到这个结果我会很高兴,不仅如此,他们在自我意识、学习态度、学习兴趣等方面都远高于其他同学。除了以建设性方式鼓励更积极的学习之外,您在可汗学院所做的与更传统的教育方法之间的另一个主要区别是您可以更自由地选择您想学习的内容和时间。那么您认为这种变化会产生什么影响?此外,儿童教育研究者皮亚杰在这方面也有不少研究成果。他认为,在年轻一代的发展中,最重要的事情之一就是自主性的培养。而且这里的自治比我们通常认为的自治更广泛。不是像“我想玩什么就玩什么”这样的自主权,而是“我正在为我生活中的所有事情做决定”。这与别人告诉你如何打发时间或诉诸权威是不一致的。例如,对“Bobby在玩游戏时作弊”这样的问题的常规回答是“哦,我会和他谈谈”。相比之下,自主反应将是“那么你告诉Bobby什么?”。我觉得自主性的训练在各个方面都很重要。一些研究表明,这会带来更好的短期结果,但我认为,从长远来看,这也会让人们更好地思考。我对别人的日程安排是一整天的情况持怀疑态度。我认为,如果导师可以通过每天调整学生的学习环境来改变学生的学习过程,那会更积极。更准确的说,比方说,与其一次性给学生一个人类所有知识的目录,然后把每个知识点按重要程度分类,我觉得更好的办法是把所有的知识都当成书架上的书。书籍,然后按照难度从低到高的顺序排列。那么在Apple有什么让你怀念的吗?当然,我想念那里的人,这很重要。其实这也是我对这个行业感到有点失望的地方。在这些大公司里困住了那么多好人,他们只是偶尔派上用场,更多时候他们只是机器的一部分,但他们的智慧其实可以做更大更深远的事情。我并不是说一定要来我的项目,我的意思是更广泛的情况。让我感到有些难过的不仅仅是情感上的思念,还有我在NeXT与非常有经验的人进行的非常刺激的对话。我仍然希望他们能产生更大的影响。你能分享更多关于你在Apple的经历吗?开发一个被这么多人使用的框架是什么感觉?你是如何从制作游戏一步步走到这一步的?填补这两者之间空白的其中一件事是在我16岁时,我编写了一个名为Sparkle的框架。让我认识到一些框架开发的现实,比如你要修改大家都在用的API,他们会很生气。这是框架开发的基本现实之一,但老实说,在我来到Apple之前,我并不知道自己在做什么。我完成了学业,有了更大的抱负,Apple似乎是一个学习的好地方,而且确实如此。它仍然是,所以我仍然给那些和我当时有同样想法的人同样的建议。与我一起工作的团队都是开发该系统十多年的人,而我几乎处于最底层。我被迫非常快速地学习和理解设计这种规模的框架所需的许多独特角度。特别要考虑框架的二进制兼容性,这是Sparkle没有考虑的。幸运的是,我周围的人都非常慷慨地花时间和精力帮助我提高。在犯了很多很多错误之后,我终于意识到我做了什么愚蠢的事情,几年后我离开的时候,我可能再也不会使用那些技术了。开发如此规模的框架最让您感到惊讶的是我认为二进制兼容性是最让我惊讶的事情。我当时不明白其中的难度和复杂性。想象一下这样的bug:按钮在iOS8中是白底的,但是在iOS7中是透明的。iOS8还没有发布,所以这一定是我们自己的问题。所以你开始一点点挖掘,发现可能在iOS7中调用了一个方法来控制这个,但是在iOS8中不再调用那个方法。然后很快,为了知道发生了什么,你反汇编并追溯,发现这是第三方代码做的,而你还没有源码。基本上,有一半的时间,有人在做一些奇怪的、离谱的事情来达到效果,而另一半的时间我们正在以一些非常规的方式进行一些改变,因此我们需要增加一些防御措施。听起来很多……是的,几乎就像一名侦探一样。听起来PeterSteinberger正朝着另一个方向发展,反编译UIKit以修复错误是的,当然。每个版本都非常机密,我们不能问,“嘿,Facebook的家伙,你为什么要这样做?”我们必须自己想办法。在这一点上,我真的很佩服彼得和他的团队所做的工作。我认为这是一件非常好的事情,我很乐意看到更多。期待看到更多的框架开发团队。Facebook树立了一个很好的榜样,GitHub也是如此。没想到苹果还需要反编译别人的二进制来分析bug。是的,我现在作为第三方开发者,时不时要反编译UIKit,因为我想知道“UIKit,你在干什么?”?”,而回答这个问题最简单的方法就是逆向编译。去年出现了无数新事物。有没有让你兴奋的?你对Swift的出现感到兴奋吗?是的,我得说这非常令人兴奋。如果说有什么真正让我兴奋的话,那就不是消费软件工程行业了。在对我的工作有帮助的类别中,最让我兴奋的是真正的交互式原型制作工具。例如,当你想做一个以前没有的交互,或者你有这样的概念但没有真正的交互工具。我们中的大多数人仍然只是在Photoshop中进行设计。当您在Photoshop中进行设计时,您只是在创建您在Photoshop中设计的相同内容。我记得当我在Apple时,我可以分辨出最初来自Photoshop、AfterEffects或实时模型的需求之间的区别。有执行此操作的工具,虽然我发现它们乏善可陈,但我热切地关注它们并希望做出贡献。你是说像Framer这样的工具吗?是的,Framer就是一个很好的例子。我对像刚刚被谷歌收购的Form这样的产品很感兴趣,当然还有Origami,它也很有趣。我在Apple的一个内部项目中开发了一个原型制作工具,该工具在某些方面很擅长,但在其他方面却不太擅长。每个工具都有优点和缺点,我们几乎维护了一个列表,“这个工具可以用于这个,那个工具更适合那个”,我们必须来回选择。我不认为他们特别擅长做与现有工具非常相似的事情。你认为故事板也会朝这个方向发展吗?这个我不这么认为,但我想我必须解释一下。有离散和连续的交互模式。就像鼠标点击是一种离散的交互模式,而手势是一种连续的交互模式。同样,您的应用程序也有离散和连续状态。例如,滚动是连续的,而导航到导航堆栈中的其他层是离散的。故事板只允许您控制该方形空间内的离散区域。所以你可以点击屏幕上的一个部分,一个离散的过渡会引导你到另一个地方。这种交互是最常见也是最不有趣的,老实说,我认为它占主导地位的原因是因为我们没有一个工具可以让我们思考其他模式是如何交互的。不过从iOS7开始,这种离散模式的界限也变得模糊了。例如,您可以单击窗体的某个单元格并在该单元格下方显示内容。这些是一些非常简单的示例,但很难用故事板实现。我们需要更多像BretVictor这样的人来解决这类问题。(译者注:可以看看这个网站的酷炫交互,可以说是持续交互的典范)是的,这就是为什么我希望不要有那么多人做照片分享app。你之前提到消费者软件工程不是你感兴趣的领域,那么你对这个领域之外的什么感兴趣?我已经阅读了不同领域的各种论文,但我仍在考虑这个问题。最近引起我注意的是儿童发展,或者说教育和教学模式。我读到的最令人兴奋的调查结果是一班五岁的一年级学生,他们没有接受常规的数学教学,而是接受了一种由一系列缓慢调整的活动组成的氛围,而这些活动是游戏。一年后考核,虽然没有学过形式算术,但都答对了题,认知也很独特。这种事情让我很兴奋。那么自从您开始在可汗学院工作以来,您学到的最重要的事情是什么?带团队不容易……为什么?这是我以前没有经验的独特技能。在软件行业,我们总是让一些有贡献的工程师担任领导角色,并期望他们表现出色。当然,鉴于领导他人是一项特殊技能,我们必须感谢他们做得很好,因为这需要大量学习。你之前提到你在Apple有很棒的导师,为什么他们这么好?你从他们那里学到了什么?首先是因为他们非常慷慨地抽出时间来担任我的导师。Apple总是面临挑战,但Apple文化的问题在于它不重视指导。因为苹果对此并没有特别的奖励,教与学也不是企业文化的一部分。无论如何,我真的非常幸运,有人花时间教我如何做事,并在我犯下可怕的错误时花时间帮助我。那么它有什么令人印象深刻的呢?大概是他们的经历吧。这个行业现在非常有趣,因为它充斥着应届毕业生,而且正是这些应届毕业生在会议上发表推文和演讲。但这个行业已经有一段时间了,在该领域拥有15年或20年经验的神级软件工程师肯定有很多,但他们并不多。他们的文章很难一直看下去,因为他们基本都隐匿在公司里,在这种情况下不能说出来,不能低调,但是他们知道的肯定不少。在可汗学院,您和您的团队很快就习惯了Swift。你能和我们分享你的经验吗?我们有大约20,000行Swift代码,该项目有四名开发人员,他们都用Swift编写代码。我们遇到的问题,或者我们所说的问题,实际上是实用思想与理想主义之间的冲突。我认为语言问题是暂时的,没有宏观影响。对于您可以在6个月内完成的应用程序,这些问题并不重要。所以请尽管驳回我的抱怨,只要专业软件开发生态系统长期健康,我认为这种新语言将是一个非常好的贡献,前几个月的颠簸和颠簸都无需担心。从积极的方面来说,Swift让我们的代码更简洁。当我读到Swift接口时,这是最令我兴奋的事情。例如,使用Swift块代码,我可以更加了解当前正在发生的事情以及接下来将要发生的事情。我可以看到返回值并从中了解更多。我可以更精确地枚举模型中系统的状态。我们可以以受约束的、有限的、依赖的方式更精确地使用值类型。更广泛地说,我是这种将UIKit视为库而不是框架的模式的忠实拥护者。如果我们谈论问题,没有工具,工程师无法追根究底。其实我其实觉得苹果的Swift开发团队是苹果最好的工程团队,只是工作还没做完。它仍然充满错误,经常崩溃,偶尔会生成错误代码。更何况,它真的很慢。非常非常慢。无法增量编译是最大的问题。我们正在构建一个带有UI的应用程序,因此我们必须花费与思考如何促进学习所花费的时间大致相同的时间来完善应用程序的用户交互和动画,而且每次都必须花费近两分钟是很痛苦的是时候看看效果了——不仅是效率,还有士气。它让每个人都生气,基本上每个人都一直生气。更糟糕的是,它让我们变得懒惰。我们不想改变东西,因为它太慢了,所以如果用Swift实现的UI比用Objective-C实现的UI更丑我也不会感到惊讶,因为上面的迭代一直让我们崩溃。但这只是暂时的,我并不担心。他们知道这一点,并且一定会解决问题。只是你不能管理期望,不是出于恶意,我不认为Apple真的理解并且以前没有做过这么大的事情。您认为Swift将如何影响Apple框架的API?您认为短期内会有什么变化吗?我没有任何内部信息,所以我只是猜测,但我认为这将是一个长期项目。至少我在的时候,团队的主要工作是维护和改进现有的框架,然后支持新屏幕尺寸或新硬件等市场需求。这会花很多时间,所以做大的决定要谨慎,我认为不会很快。我认为如果我们快进十年后,API将完全不同。对此我毫不怀疑,否则肯定会很扫兴。但如果只是一年之后,我想大家会看到更好看的注释头文件...(不得不说,美黑!)或者我们可以有像ReactiveCocoa这样的人,它封装了更好看的...是的,它一定是在短期内。Facebook的组件项目(实际上是React)做得非常好,但它不是Swift,它是C++,我认为它超级酷,这是个好主意。React是一个不错的设计。那是我对我在苹果的***的抱怨,因为苹果的文化不重视学习,所以没人看。我的意思是没有人读严肃的东西,没有人读期刊,没有人读论文,没有人知道现在发生了什么。令人沮丧的是人们不知道像React这样的东西。无论如何,我认为这很酷,毫无疑问有人会使用UIKit或其他框架作为库来更好地包装它们。但是,除非苹果自己来做,否则不会是更好的解决方案,永远是落后的,永远是不匹配的。现在你离开了Apple,你也开始做更多的写作和演讲。你还有其他计划吗?基本一样。我希望发布更多开源的东西。我以前遇到过这个问题。有趣的是,当您发布一个开源项目时,人们希望您维护它。我想大家对软件开源社区的期望还没有说清楚。一些开源软件有自己的社区并且维护得很好,而另一些开源软件是出于教育或业余爱好的目的而共享的,维护得不是很好。我基本上只能做后者,因为老实说,软件工程不是我现在感兴趣的事情。