听上去有好多事儿… 是啊,差不多就像侦探似的工作。 听上去 Peter Steinberger 走的是另一个方向,反编译 UIKit 来改 bug 是的,肯定是。每个版本都是很机密的,我们不可能问:“嗨,Facebook 的哥们儿,你们为什么要这么做啊?”我们必须自己搞明白。在这一点上我非常的敬佩 Peter 跟他的团队的工作。我认为那是非常好的事情,也很乐意看到更多这样的事。我期待看到更多框架开发的团队。Facebook 做出了非常好的表率,GitHub 也是。 我从来没想过 Apple 也需要反编译其他人的二进制来分析 bug 是啊,我现在作为一个第三方开发者,也不得不时不时的反编译UIKit,因为我想知道“UIKit,你在干嘛啊?”这样的问题,而回答这个问题最简单的方式就是逆向编译。 去年有无数的新东西面世,有没有哪个让你激动?你对 Swift 的出现兴奋么? 是,我得说这些都挺让人激动的。如果说真正让我激动的事,却并不是在消费软件工程行业。可以帮助我工作的那一类里面,最让我激动的是真正的交互式原 型工具。比如你想要做一个以前从来不存在的交互,或者有这样的概念但并没有真正的工具的交互的时候。我们大多数仍然只是在 Photoshop 中去设计它。当你在 Photoshop 上设计的时候,你只是在创造一个你在 Photoshop 中设计的一样的东西。我记得在 Apple 的时候,我可以分辨出最初从 Photoshop 还是 After Effects 还是现场模型中得来的需求,这之间有非常大的区别。现在有一些工具可以做这件事,虽然我觉得它们都乏善可陈,但我还是非常热诚的关注着,希望能有所贡献。 你是指像 Framer 这样的工具吗? 是的,Framer 是一个不错的例子。我对刚刚被 Google 收购的 Form 这样的产品很感兴趣,当然还有 Origami,也很有意思。我在 Apple 参与了一个原型工具的内部项目,它在有些方面要做的好一些,而另一些方面欠缺一点。每种工具都有优点缺点,我们差不多维护了一个罗列着“这个工具可以用来 干这个,那个工具更适合做那个”的表单,我们不得不来回挑选。我认为它们除了做那些非常类似于早已存在的工具做的事情之外并没有在某个方面特别的擅长。 你是否觉得 storyboard 也在朝这方面走呢? 这个我并不这么认为,但我想我必须进一步解释一下。交互有离散模式和连续模式。像鼠标点击就是离散模式的交互,而手势就是连续模式的交互。类似的,你的应用也有离散状态和连续状态。例如滚动就是连续的而在导航栈中导航到其他层就是离散的。 Storyboard 只允许你控制那个四四方方的空间内的离散区域。因此你可以点屏幕上一个部件,然后通过一个离散的转场把你引导到另一个地方。这种交互是最常见的也最没意思 的,而且说实话我认为这种交互占统治地位的原因是因为我们没有一个工具来让我们思考其他模式的交互方式。 不过从 iOS 7 起,这种离散模式也的边界也开始比较模糊了。比如可以点击一个表单的单元格然后展出单元格下面的内容。这是一些很简单的例子,但却很难用 storyborad 实现。 我们需要更多像 Bret Victor 这样的人来解决这种问题。
是的,那也是为什么我希望没有那么多人去做照片分享类 app 的原因。 你之前提到说消费类软件工程不是你感兴趣的领域,那么这个领域之外你感兴趣的是什么呢? 我阅读了各种不同领域的论文,我仍然在思考这个问题。最近让我注目的是儿童发展或者说教育,教学模式这些方面。我读到的最让我兴奋的调查结果是有一 个班的只有五岁的一年级学生,老师并没有给他们常规的数学指导,而是一个氛围,由一系列慢慢调整的活动组成,而这些活动都是游戏。一年之后,他们进行了评 估,虽然这些学生并没有学习正式的算术方法,但他们都能够答对问题并且有非常独特的认知。这样的事情让我非常的激动。 那么你在 Khan Academy 开始工作以来学到的最重要的事情是什么 队伍不好带啊… 为什么? 这是一种独特的技能,而我之前并没有经验。在软件行业,我们总是让一些有贡献的工程师去做领导的角色,并期望他们脱颖而出。当然,鉴于领导别人是一项特殊的技能,我们必须感激他们做的不错,因为这需要学习大量的知识。 你之前提到过你在 Apple 有很好的导师,为什么他们如此出色?而你又从他们那学到什么呢? 首先因为他们真的非常慷慨的花时间来做我的导师。在 Apple 总是有很多的挑战,但 Apple 的文化有个问题是它并不看重导师的价值。因为 Apple 对此没有特别的奖励,而且教导和学习也没有被纳入企业文化构建当中来。 不管怎样,我真的非常幸运能有人花了很多时间来教我做事,并且当我犯了严重错误的时候能花时间主动帮助我。那么是什么让人印象深刻呢?大概是他们的 经验吧。这个行业现在非常有趣,因为充斥了新毕业生,而正是这些新毕业生在 Twitter 上叽叽喳喳,在会议上演讲。但这个行业已经形成有一段时间了,肯定有很多有 15 或 20 年相关领域经验的大神级软件工程师,但他们并不经常唧唧喳喳。你很难一直读到他们的文章,因为他们基本都被雪藏在公司里,这种情况下他们无法发声也很低 调,但是他们肯定知道很多。 在 Khan Academy,你跟你的团队很快就适应了 Swift。你可以跟我们分享一下你的经验吗? 我们大概有 20000 行 Swift 的代码,那个项目有四位开发人员,都用 Swift 写代码。我们所遇到问题或者说我们称之为问题的东西,其实是实用主意和理想主义的冲突。我相信语言本身的问题都是暂时的,并不能造成宏观的影响,对于你可 以在 6 个月时间做出来的 app 来说,这些问题都不重要。所以完全可以对我的抱怨不置可否,只要专业软件开发的生态系统能长期健康发展,我认为这门新语言将会是一个非常好的贡献,而头几 个月的磕磕碰碰不值一提。 积极的一面来说,Swift 让我们的代码更清晰。这是我读 Swift 接口的时候让我最高兴的事情。比如 Swift 的 block 代码,我可以更清楚当前发生以及接下来要发生的事情。我可以看到返回值并且可以从中理解更多。我可以用更准确的方式来枚举模型里的系统状态。我们可以更准 确的以约束,限制,依赖的方式来使用值类型 (value types)。更广的说,我很赞同这种把 UIKit 当成一种库而不是框架的模式。 如果说问题的话,没有工具,工程师也不能去深究。事实上我其实觉得 Apple 的 Swift 开发团队是 Apple 里最优秀的工程师团队,但是工作还没有完成。现在还到处都是 bug,经常崩溃,偶尔还会生成错误代码。更严重的是,它真的很慢。非常非常慢。不能增长式编译是最大的问题。我们构建的是一个有 UI 的应用,所以我们得花上和考虑如何促进学习差不多相同的时间来打磨应用的用户交互和动画 ,然而每次都要花接近两分钟才能看到效果实在是很伤 — 并不仅仅是效率而是士气。这让所有人都很愤怒,基本上所有时间所有人都很愤怒。更糟的是,这让我们变懒了。因为太慢,我们不想改东西,所以如果用 Swift 实现的 UI 比 Objective-C 实现的 UI 更难看我一点都不会吃惊,因为在上面的迭代总是让我们崩溃。 但那只是暂时的,我对此并不担忧。他们知道这些而且肯定会修正这个问题。只是你无法管理预期,不是出于恶意,我认为 Apple 其实不明白而且之前并没有做过这么大型的东西。 你认为 Swift 会对 Apple 框架的 API 造成什么影响呢?你认为短期内会有什么变化吗? 我没有什么内部消息,所以我只是猜测,但我认为这会是长期的工程。至少当我在那儿的时候,团队的主要工作是维护和提升现有的框架,然后支持诸如新屏幕尺寸或者新硬件之类的市场需求。这都会花很多的时间,所以对大型的决定会更谨慎,我认为并不会很快。 我认为如果我们快进到十年之后,API 将会完全不一样。我对此深信不疑,不然肯定会让人非常的失望。但要是只是一年之后的话,我想大家一定会看到注释得更好的头文件…(不得不说,黑的漂亮!) 或者我们可以有像 Reactive Cocoa 那样的人,把它封装的更好看一点… 是啊,短期内一定会这样的。Facebook 的组件项目 (components project, 其实就是 React) 就做得很好,但那不是 Swift,是 C++,我认为超级赞,这主意太棒了。React 是个不错的设计。我对我在 Apple 最大的怨言就在此,因为 Apple 的文化并不看重学习,所以没有人阅读。我的意思是没有人读正经的东西,没有人读期刊,也没有人读论文,没有人知道现在外面正在发生的什么。人们不知道 React 之类的东西,这真让人沮丧。 不管怎样,我认为那是非常不错的,而且毋庸置疑的是肯定会有人把 UIKit 或者其他框架当做是库来把它们封装的更好。不过,除非 Apple 自己来做否则不会是一个更好的解决办法,也会总是落后,总是不匹配一样。 既然你离开了 Apple,你也开始做更多写作和演讲方面的事情。你有什么其他的计划吗? 基本上都一样。我希望可以发布更多的开源的东西。我之前在这上面吃过亏。很有意思的是,当你发布开源项的时候,人们还希望你去维护它。我想大家对软 件开源社区的期待还没有被明确。有一些开源软件有自己的社区也能被很好的维护,而另外有一些开源软件是以教育或兴趣的目的被分享的,就不怎么被维护。我基 本上只有精力做到后者,因为老实说,软件工程并不是我现在感兴趣处理的问题。 转自 http://blog.jobbole.com/83535/ 原文出处: A Generation of Lifelong Learners 译文出处:April |