Boisy G. Pitre是一位资深苹果开发专家,曾任Siri语音识别技术提供方Nuance公司Mac产品小组的资深软件工程师,参与开发了语音识别软件Dragon Dictate。MacTech杂志“Developer to Developer”月度专栏作家,曾多次在MacTech和CocoaConf等会议上发表技术演讲。现任情绪识别公司Affectiva的移动远景规划师,领导团队致力于将公司的表情分析技术迁移到移动平台。Boisy著有《Swift基础教程》一书。

问:你写作《Swift基础教程》的目的是什么?

当苹果引入Swift时,我就知道这门语言会在几年之内成为计算机语言版图中的重要一块。我的目标是以有趣而轻松的方式向读者们介绍这门新语言,让读者们抢先起步,并在之后的学习中迅速加速。写作这本书很具有挑战性,因为这门语言可以讨论的东西实在是太多了,而我不想让读者们感到不知所措。这本书是我为初学者设计的,从这个角度上说,这本书很成功。

问:你能否向读者们介绍一下你在Affectiva从事的工作?

当然。Affectiva是一家在数字体验中引入情绪智力的科技公司。我们的技术根据实时面部分析来判断一个人的情绪状态。我是这家公司的移动远景规划师,我的责任是把技术和移动世界连接起来。我们已经实现了这个目标,而我现在正在努力提高移动平台的技术,这些平台包括iOS和Android。我们有一个可以供开发者使用的SDK,用于把情绪智能整合到他们的应用中。

问:在你看来,开源Swift会改变iOS的生态环境以及iOS和Android之间的关系吗?

很难预测作为开源语言的Swift会如何影响Android开发。Google在语言初创方面有Go语言,它对于Android来说就像是Swift之于iOS。我期待会有人用Swift写Android应用,就像是有人用Go写iOS应用一样。一种语言会比另一种语言更成功吗?各自平台的语言会依附在它们本来的平台上吗?只有时间能告诉我们。但是话说回来,苹果开源Swift语言的决定肯定会让各种变化朝更好的方向发展。

问:Swift从其他语言中整合了哪些特性?其中你最喜欢的特性是什么?

所有计算机语言都会从其他语言身上借鉴一些东西。对于Swift来说也是如此。从语法和存储模型的角度上说,我在Swift上能看到很多Rust的影子。很明显,Swift对于安全的强调使其与C和C++保持了一定距离,所以它们之间的共同点比较少。我相信苹果很努力想让Swift遵从自己的主张,成为自己的语言。对于未来,我们拭目以待。

到目前为止,我最喜欢的Swift特性是语法的清晰度。用关键字‘let’建立一个常量变量,和用关键字‘var’建立一个可变变量相比,很大程度上简化了C/C++风格的语法。用执行命名参数可以清晰地写函数(如Objective-C),而创建和使用闭包也变得更简单。

问:Swift在未来有可能会取代Objective-C吗?

当然。但是没人知道会用多长时间,但是我认为应该是在5年之内。我们很容易就忘记计算机语言的生命有多长(现在C语言已经40岁了)。Objective-C不会彻底消失,但是我能预见在未来的某一个时刻,它在语言世界中的份额将变得非常小。

问:iOS中的很多应用框架都还是Objective-C的,目前调用的方式是使用桥接头文件,今后的调用是否有可能变为更加简洁的方式?未来是否会出现更多基于Swift的框架?

几乎可以肯定是这样的,而且我相信苹果正在努力实现这件事。但是我们得记住,这是一个艰巨的任务,需要转换的框架可不在少数。但是我相信这些工作不会花费太久的时间,而且我们很快就会看到专属于Swift的新框架,这样的框架在Objective-C中甚至都找不到同类。这种情况的发生肯定会对Objective-C的后续使用造成很大的影响。

问:你建议初学者应该先学Objective-C还是Swift?

肯定是Swift。Objective-C是一门很不错的语言,但是它带有C语言的遗留问题和包袱。对于编写应用来说,Objective-C在未来会变得越来越脱节。事实上,我现在不会用Objective-C来开启任何一个新的iOS或OS X项目。对于新项目来说我只使用Swift来开发。

问:对于已经掌握一两门编程语言的程序员来说,你认为他们怎样才能快速有效地学习一门新语言?

这取决于已有的一两种语言是什么。如果这两种语言是Objective-C和Swift,或者C和C++,或者其中任何组合,为了挑战思维,我会推荐你学习一种完全不同的语言。像C, C++, Objective-C,以及Swift这样的命令式语言都遵循着相同的模型,所以要学习同类语言很简单。你一定要让自己多接触不同的语言泛型,所以我会推荐你学一种函数式语言,比如Scheme。虽然你不会用这种语言来写应用,但是它会全面打开你对计算机语言的理解。

问:在学习编程语言的过程中,你认为什么时候接触大量的库和API比较合适?对于某个平台的开发者来说,他有必要掌握所有可能用到的API吗?

我经常会用木匠的工具腰带做类比。他的腰带中会装有所有想象得到的工具吗?不……只有那些经常使用的工具。当他需要特殊工具的时候,他会走到他的卡车前,打开放在里面的大工具箱,然后使用某种工具一次到两次,然后把它放起来。

对于编程语言和API来说也是如此。你无法完整地了解所有API,但是你知道得越多,你就越能更好地解决问题。我会建议你先比较完整地学习一门语言,然后再继续研究这种语言的细微之处,也就是开始接触这门语言中可以用来创建有用应用的框架和API。然后你可以每周一次,选择一个新的API,投入3-5个小时来学习它的功能。你可能并不会经常使用这个API,但是你知道它就在那,当遇到适当的时机时,你就会准备好用它来完成特定的任务了。

问:对于一位iOS开发专家来说,他的知识框架是什么样的?

一个全面的iOS专家必须掌握这四样东西:

  • (1) 用来写应用的语言(Swift / Objective-C);
  • (2) 对创建软件的工具的控制(Xcode);
  • (3) 关于iOS应用基础框架和API的强大知识储备;
  • (4) 鉴别好的UI设计的能力。

要经历很多应用和上百小时的编程才能达到这个水平。每个应用都会带来自身的要求和需要的API,所以你写的应用越多,就能越广地接触到各式苹果框架的,而你的UI设计技巧也会越来越好。


更多精彩,加入图灵访谈微信!