尼克洛克伍德 - Cocoa开发者访谈

阿隆·布雷索斯特,2013年4月8日

Nick Lockwood

Cocoa控件:你是谁?你做什么工作?

尼克洛克伍德:我叫尼克洛克伍德,我过着双重生活。

白天,我是英国伦敦一家数字广告公司AKQA的iOS开发主管。

晚上,我是一个开源库制造者和有志于独立App Store应用的开发者。

我还设法抽出时间睡觉、抚养女儿,并把过多的时间花在推特上。

CC:你的iPhone主屏幕上有哪些应用?

NL:天哪,太尴尬了。

我是个应用控,特别是对游戏,因此我的手机上乱七八糟地堆满了东东,没有任何顺序。我尝试过按类别将应用归类到文件夹里,结果变得更糟。我现在只能通过搜索功能才能找到东西。我的主屏幕是一个警示性例子——不要像我一样。

顺便说一句,1,969个未读通知是我收件箱里的未读邮件。我还没有完全明白“收件箱为零”是什么意思。社交中的57个通知是未读的LinkedIn招聘请求,因为,不,我对你想当然地认为对我完美的初级设计师职位不感兴趣,而这完全是因为你在互联网上某个地方误读了10年前的简历。

Nick Lockwood

CC:你是如何、为什么以及何时成为iOS开发者的?

NL:我做了大约10年的Mac开发者,正如我在令人难堪过时的个人网站上的古老应用所证明的那样。

最初我是通过REALbasic进入Mac编程的,之前我在Amiga上的AMOS Basic(以及在那之前,BBC Model B上的BBC Basic)编程。

REALbasic在伦敦的商业需求量并不大,所以我找了一份前端的网页开发工作,并且对基于标准的客户端JavaScript应用开发非常热情。同时,我在业余时间继续在REALbasic上开发Mac应用(但没有因此赚钱)。

我最初基本上忽略了原始的iPhone(一个大 irrelevant; unas的部分没有3G或GPS的地方 – 破了;- )),但当App Store革命在2008年发生时,我立刻意识到这将是有前途的,并开始自学Cocoa,并得到了Dave Mark等人所著的《Beginning iPhone 2 Development》的有些帮助。

随着AKQA开始做iPhone项目,我从建网站转到了原生应用程序开发,最终能把我的日常工作与爱好统一起来。

CC:你犯过的一个错误是什么,你不会再犯同样的错误了?

NL:最初我尝试做网页应用的事情,我的第一个(也是唯一一个)独立应用“彩虹块”是一个在原生网页视图中运行的满屏JavaScript应用,但在前几次发布之后,我逐渐对长期运行的网页视图应用中的奇怪故障和性能问题感到越来越沮丧。

当应用运行时间较短并且可以通过按下首页按钮修复任何问题时,iOS 3上这还算可以忍受,但当iOS 4增加了多任务处理功能后,我收到了大量抱怨。人们发现应用程序已冻结(通常是由于CSS3过渡竞争条件导致他们遇到空白屏幕),而且他们根本不知道如何处理这个问题(小贴士:大多数用户根本不知道如何在iOS上结束冻结的应用程序——他们通常会直接从App Store删除并重新安装)。

随着我观看HTML5在应用质量和开发工具方面始终无法跟上原生应用,我意识到开放的互联网革命要么已经死亡,要么处于昏迷状态,现在是时候“全盘原生”了。

我在2011年将彩虹积木的iOS版本迁移到完全原生代码,而且再也没有回头。

CC:你在软件开发生涯中作出的最佳决定是什么?

NL:转向移动以及全盘原生,但我们已经讨论过了。

我认为第二好的决定是在GitHub上免费发布东西。

我并不是那些“信息想要自由”的嬉皮士——我并不介意为我自己的工作收费——但我也认识到,开发者通常对源代码的估价较低,因为他们看到它时往往会想“我自己可以写这个,为什么我要为它付费?”

我认为软件的黄金法则是对应用程序收费,但免费发布可重用库——它很好地展现在商店,共享代码和避免重写轮子让我们 everyone 受益。我并不是说中间件中没有营利,但销售组件是一份很难真正赚钱的工作。

我发现发布我编写的库迫使我正确测试和文档化它们,这使我避免了“wtf?”时刻,当我后来需要使用它们并且记不起它们是如何工作时。我还从众人对代码的观察中受益,他们在寻找错误而不是只有我的代码。

CC:你最喜爱的开源组件是什么?为什么?

我更喜欢写代码而不是阅读文档,所以我虽然知道有一些非常出色的库,但实际上我只使用其中的一小部分。

可能我最钦佩的项目是Icon Factory团队的人的Chameleon。如果您还没有见过它,Chameleon基本上是UIKit在Mac OS上重写的完整实现——这是一项惊人的成就。当我更新彩虹积木的Mac版本以原生代码时,我几乎肯定会使用Chameleon,这样我就不必从头开始使用糟糕的AppKit API构建一切。唯一的缺点是它不支持nibs。

CC:您组件iCarousel在Cocoa Controls上列出的最热门项目之一,也是GitHub上最热门的Objective-C仓库之一。您写它的初衷是什么?从写它中您获得了哪些个人或职业上的意外好处?

NL:我在一个特定项目中需要一个类似于CoverFlow的控制,它可以显示任意视图而不是只是图像。当时没有任何解决方案能达到这一效果。当我编写它的时候,我发现它可以很容易地扩展到支持额外的布局方式,特征一个接一个地成长到现在的样子。

在收益方面,我可以直接将这些有利可图的合同归因于人们通过iCarousel找到我。我从没有料到会这样。

CC:您对其他iOS开发者有什么建议,让他们能最好地构建美观、流畅、可重用的组件?

NL

1) 不要试图构建可重用的组件。只需编写解决你自己的项目中的实际问题的良好代码。

只要遵循像 KISS 和关注点分离的最佳实践,你会发现你的类天生可重用。如果你的类在多个项目中都成功重用,那么它很可能是将其转变为开源组件的好候选。

我经常违反这个规则,试图使某物可重用,但最终往往得到的东西要么不能解决我最初编写它时的问题,要么没有人想使用。

2) 抵制复杂性。除非你立即需要,否则永远不要添加你认为可能需要的东西。学会对功能请求说“不”。一个解决80%问题域且易于使用的组件,比一个解决100%但过于复杂的组件好得多。

3) 最好的组件无需配置即可直接使用。不要强迫人们在使用前先阅读文档。好的设计在于做出选择,即使是可配置的功能,你也应该选择对大多数用户都合理的默认值。

随着时间的推移,iCarousel 已变得相当复杂,但只要设置好数据源,你就能获得零配置的 CoverFlow 实现。我的其他一些库(如 iRate、iVersion)实际上什么都不需要配置就能正常工作,甚至你不必在自己的项目中引用它们。

CC:我们还需要了解关于您的什么信息?

现在,我最喜欢的沟通方式是 Twitter。如果您我的一个错误报告已6个月未得到回复,想知道原因的话(我提到了我的收件箱里有1969封未读邮件吗?),请考虑这一点。

我喜欢好的咖啡,但我不想讨论它。

我不喜欢运动。


关注 Nick 的 Twitter

在 Cocoa Controls 上查看 Nick 的所有项目

Nick 的 GitHub 页面

您有什么建议要告诉我们下一步采访谁吗?在 [email protected] 告诉我们。