苹果控件:你是谁?你做什么工作?
Nick Lockwood:我叫Nick Lockwood,过着双重生活。
白天,我在伦敦一家名为AKQA的数字广告公司的iOS开发部门担任负责人。
晚上,我是一个开源库制造商和渴望成为独立App Store应用程序开发者的准专业人士。
我还要设法抽出时间睡觉,抚养女儿,以及花在Twitter上的时间比应有的多。
CC:你的iPhone主屏幕上有什么?
NL:哎呀,多么尴尬。
我是个应用程序爱好者,尤其是游戏,所以我手机里的东西乱成一团,没有特定的顺序。我曾经试图通过按类别将应用程序分组到文件夹中,这反而使情况变得更糟。现在,我除了使用搜索功能外找不到任何东西。我的主屏幕是一个警示性的例子——不要像我一样。
如果您在好奇,1,969个未读通知是我的收件箱中的未读电子邮件。我还没有完全弄懂“收件箱清空”这个概念。 社交中57个未读通知是来自招聘人员的未读领英请求,因为不,我对您误读您在网上某处找到的10年前简历后,认为非常适合我的初级设计师职位不感兴趣。
CC:你是如何、为什么以及何时成为iOS开发者的?
NL:我已经做Mac开发大约十年了,正如我那糟糕过时的个人网站(http://www.charcoaldesign.co.uk)中所证明的那样。
我最初是通过REALbasic进入Mac编程的,当时从Amiga上的AMOS Basic(以及在那之前的BBC Model B上的BBC Basic)毕业。
在伦敦,对REALbasic的需求量不大,所以我找到了一份前端网络开发者的工作,并对企业端JavaScript应用开发产生了浓厚的兴趣,同时在业余时间继续用REALbasic开发Mac应用(但没有从中赚钱)。
我主要忽略了原始的iPhone(一部又大又笨重的手机,没有3G或GPS——唉 ;-)),但当2008年应用商店革命发生时,我立刻意识到这是未来,并开始自学Cocoa,同时还得到Dave Mark等人的《入门iPhone 2开发》等书籍的一些帮助。
随着AKQA启动iPhone项目,我从网站建设转向原生物理应用,最终终于把我的日常工作与爱好统一起来了。
CC:你犯了一个什么错误,你不会再犯?
NL:最初我试图做web应用那件事,我的第一个(也是唯一一个)独立应用程序Rainbow Blocks是以全屏JavaScript应用程序的形式运行的,在原生网络视图中运行,但在发布了几个版本之后,我对拥有长时间运行的网络视图应用程序的奇怪错误和性能问题越来越感到沮丧。
当应用运行时间较短且可以通过按主页按钮解决问题时,iOS 3上的体验勉强可以忍受,但当iOS 4增加了多任务功能后,我接到了许多抱怨——用户发现应用冻结了(通常是由于CSS3过渡竞争条件导致出现空白屏幕),并不知道如何修复它(小贴士:大多数用户都不知道如何在iOS上结束冻结的应用——他们通常会删除并从App Store重新安装)。
当我看到HTML5始终无法在应用质量和发展工具方面与原生应用并驾齐驱时,我意识到开放网络革命要么已经死亡,要么处于昏迷状态,现在是时候“彻底转向原生”了。
我在2011年将彩虹积木的iOS版本迁移到了完全原生代码,从此没有回头。
CC:您在软件开发生涯中做出的最佳决策是什么?
NL:移动和原生化,我们已经讨论过这个话题。
我认为第二好的决定是开始在GitHub上免费发布东西。
我不是那些“信息渴望自由”的嬉皮士——我对收费没有一丝顾虑——但我也认识到,开发者通常对源代码的价值不高,因为他们看到它时往往会想:“我自己也能写出来,所以我为什么要为它付钱?”
我认为软件的甜蜜点是对应用收费,但免费发布可重用库——它能成为你作品的极佳展示窗口,分享代码的精神和避免重复造轮子的需求使我们所有人受益。我并不是说中间件中没有钱可赚,但出售组件是一项艰巨的工作,很难赚钱。
我发现发表我编写的库强迫我对其进行适当的测试和文档记录,这让我免去了以后再次使用它们时“wtf?”的时刻,因为我已经忘记了它们是如何工作的。我还从千眼之源代码中查找错误中受益。
CC:你最喜欢的开源组件是什么?为什么?
我更喜欢写代码而不是阅读文档,所以我虽然认识到有些库非常出色,但我实际上使用得很少。
也许我最感兴趣的项目是Icon Factory团队的Chameleon。如果你还没见过它,Chameleon基本上是Mac OS上UIKit的完整重实现——这是一个惊人的成就。当我将彩虹积木的Mac版本更新到原生代码时,我几乎肯定会使用Chameleon,这样我就可以不用从头开始使用令人讨厌的AppKit API来构建一切。唯一的问题是它不支持nibs。
CC:您在Cocoa Controls上最受欢迎的项目是iCarousel,也是GitHub上最受欢迎的Objective-C存储库之一。您写它的初衷是什么?从写它之后,你个人或职业上是否有任何意想不到的收益?
NL:在我参与的一个项目中,我需要一个类似于CoverFlow的控制,可以显示任意视图,而不仅仅是图片。当时没有任何解决方案能够做到这一点。当我完成编写后,我发现它可以轻松扩展以支持额外的布局样式,逐渐发展到现在这个样子。
就收益而言,我可以直接将几个有利可图的合同归因于人们通过iCarousel找到我。我从没料到会这样。
CC:您对其他iOS开发者如何最佳地构建美观、流畅、可重用的组件有什么建议?
NL
1) 不要设出构建可重用组件的目标。只需编写解决你自身项目中的真实问题的良好代码。
只要遵循像KISS(保持简单)以及关注点分离等最佳实践,你会发现你的类本身就具有可重用性。如果你在多个自己的项目中成功重用了一个类,那么它可能是一个很好的开源组件候选者。
我常常违反这条规则,试图做得可重用,但每次都最终得到的东西要么不是我最初编写它的解决方案,要么是别人都不愿意使用的。
2) 抵抗复杂性。除非你马上需要它,否则决不要添加你认为可能会需要的东西。学会拒绝功能请求。解决80%的问题域且易于使用的组件,比解决100%但过于复杂的组件要好得多。
3) 最佳的组件即插即用。绝对不要强迫人们在开始之前先阅读文档。良好的设计关乎于选择,就算特性可以进行配置,你也应该选择对大多数用户来说都合理的默认设置。
随着时间的推移,iCarousel已经发展成为一个相当复杂的系统,但只要设置了数据源,你就能得到一个零配置即可使用的CoverFlow实现。我的其他一些库(例如iRate、iVersion)要实现其功能实际上不需要任何配置,你甚至不必在你的项目中引用它们。
CC:我们还应该了解你哪些方面吗?
目前我首选的沟通方式是Twitter。如果有6个月我没有回应你的错误报告,这可能是原因(我提到过我的收件箱中有1,969封未读邮件吗?)。
我喜欢品尝好咖啡,但我不愿意谈论它。
我不喜欢运动。
你有什么建议关于我们应该下次采访哪位专家?请通过 [emailíprotected] 通知我们。