首页 > 程序人生 > 程序员访谈(二):让东西不那么糟
2015
01-26

程序员访谈(二):让东西不那么糟

被访者简介:Loren Brichter 是 App Store 的明星加传奇开发者之一,曾经开发了 Letterpress 霸占欧美排行榜首位很长时间的游戏。其实 Loren 之前曾经在 Apple 任职,担任 iOS 图像方面的开发工作。之后他从 Apple 离职创业,最后成功被 Twitter 并购。2012 年 Loren 离开 Twitter 再次创业,也正是在这之后 Letterpress 横空出世。

Loren,感谢你特地在假期中抽空参加我们的访谈。这几天都在忙什么呢?

我整个假期一直都很忙,大部分时候都在处理家里的事务。现在我终于能回到真正的工作中了。

你当前的工作是什么?

我现在还不能透露任何细节,不过我已经做了一阵子底层的实验了,一些事情已经有了眉目。能回到以前的状态非常棒,这能在没有发布期限压力的情况下反映出我现在到底在干什么。

在你走上编程之路之前,是否有其他职业也让你产生了强烈的兴趣?

我肯定会选建筑师、机械工程师、木匠或者摄影师。最近我正逐渐减少花在这些闪闪发亮的电子设备上的时间,这的确很难,因为它们很容易就吸引了我的视线。

从木匠到摄影师 — 这跨度真大!面对这么多的选择,是什么让你坚持编程?

纯粹是因为惯性。我适合编程,希望能找到一个方式,用我的技能来做些对大家有益的事情。

你事业上做过哪些不起眼的决定?

我觉得那些对我很重要的决定反而在其他人眼里并不起眼,比如为了做一些疯狂的尝试,多次放弃稳定高薪的工作。幸运的是其中的有些事情结果还不错。如果我今天再去做,也许就达不到相同的结果。

除了惯性,还有什么其他吸引你的东西让你坚持编程吗?

老实说,编程对我的吸引力越来越小了。或许这因为我是“高龄工程师”的缘故,我了解的越多,就越感到编程的可怕。我喜欢推倒一切重新开始,但现在却只能逆着浪潮游泳。因此有时我会尝试剔除掉垃圾或者重新定位那些糟糕的技术,来让一切变得不那么糟糕时会让我有点满足感。

随着编程兴趣的下降,你将来可能涉足完全不同的行业吗?

我将一直会做和编程有关的事情,不过这些事情里软件也许只占一小部分,并不会成为主导。

既然你还不准备跳船改行,那我们来谈谈编程里那些糟糕的地方吧……

跟能被修补的船不一样,这更像是乘着一堆积攒下来的垃圾进行越洋航行。当然,总有些东西浮着来避免其他东西下沉。因此问题换成“哪个部分是好的?”可能更加合适些。而你也只能将各个组件分离看待才能回答这个问题。比如我就觉得 Rust 语言不错。但一旦供奉了冯诺依曼的理念,你就能爬下堆栈去质疑一切,这也是不切实际的。

你认为这一切都会朝什么方向发展?会变得更好吗?

我认为事情最终都会变得更好。然后再次变糟。然后又有人跑来感叹说“噢!真是太乱了!”接着他们就会做一些事情来让情况变得好些。然后循环再次开始。因此这就很容易产生抱怨:为什么我一直忙于我已经做过的工作。

当你试图让一切变得“不那么糟糕”时,脑海里有过更大的目标,来指引你决定的方向吗?你为什么要做这一切?

当然有,但它是如此抽象,以至于人们会认为我疯了。因此对于目标,我只想说“创造启迪人类的工具”。我指的“启迪”是 Carl Sagan 认为的那种我们即宇宙,并在试图了解自己的启迪。我们很早就达到了只用大脑所能思考的极限,因此我们需要通过增加心灵沟通的方式来提升它。但现在的工具都太复杂,光尝试着去使用它们就得耗尽你所有的心力,因此你都没有余力来做一些有趣的事情。或者说至少它们对我来说太复杂了。我没有那么聪明。

就我个人而言,我厌烦琐碎的应用程序,而 App Store 并没有让一切变得更有趣。我认为下一个发生在软件业的大事件将跳出这个圈子。

说到软件业的下一个大事件,现在有什么真正有趣的发展吗?

当然有。有许多希望的曙光:Rust、Swift、TypeScript、asm.js、WebGL的广泛支持 — 狭义地来看这些都很有趣。

Swift 的那些方面吸引了你?

它有现代的类型系统,这很棒。(当然当它完成后会更棒) 另外我认为自定义操作符非常可爱,我希望它们能在 Swift 中出现。

你已经将 Swift 用在日常工作中了吗?

我还没有用它来实现任何东西:Swift 的各种工具还十分脆弱。而且在它开源或者代码能被克隆之前,除非它不再和苹果绑定,我都不会真正使用它。你看,至少现在我在 Linux 上都能编译 Objective-C。

你刚刚说你在屏幕上花费的时间越来越少了。我能想象为人父是主要原因。

当然。我将要疯狂地限制在屏幕上花费的时间,这对于我之前的生活也许是个讽刺。我也不知道这是怎么发生的,但是我对移动革命的理解加深了。以前我看到别人拿出 iPhone 时非常激动。现在却变成“嘿小子,别再盯着你的屏幕!”并且我发现应用程序无处不在!各种应用应有尽有。我已经成为一个老顽固。把你的应用程序从我的地盘上拿开!

我想我们中有很多人能从限制接触屏幕的时间中受益 — 你想借此机会做一个公开的承诺吗

哈哈,不行。

好吧。能多透露一些你的工作吗?你主要是在家工作对吧?

是的,每次我试图不在家里工作的时候,都苦不堪言。我喜欢在家工作。

你是如何规划你的一天 — 你是按照固定的时间表工作还是灵活地处理事情?

少年,带孩子这事儿打乱了我的工作日程。我保持了一贯的节奏,之前我毫不分心地工作到凌晨,然后入睡。而现在我必须在合适的时间入睡,这样我小孩早上起床时我才会不像个僵尸。我感觉我已经慢慢地适应这种状况,但是,实际比想象地更困难。

大部分情况下同一时间你是只专注于一个项目还是多个任务同时进行?

我的工作日程是互相关联的单线程序列,环境的切换需要巨大的成本,因此我尽量将时间片的跨度维持在一周。虽然我有许多项目需要同时进行,并且通常它们彼此之间都存在某种方式的联系,但我坚持同一时间只关注一个项目。

我完全不能主动地进行多任务,但是我认为我大脑的工作原理有点像 libdispatch。潜意识可以并行地偷偷执行许多东西。所以当我清醒的思维切换到之前放到一边的工作时,经常会有好几个好主意等着我。

你的出名之处在于能一人完成伟大的应用,并且能整合以往需要不同的人才能完成的任务。同在团队中工作相比,这种工作方式在哪方面吸引你呢?

我们用学科之间的界限来划分工作领域,而你们用同样的方式将程序划分成了不同模块、不同对象或者其他。但无论何时你将事物分成两份,碎片之间难免会出现分歧,而且当你想把各个碎片拼在一起来建造东西的时候,一切就会变得更难。我发现过了一段时间后,实际上你在“胶水”上所花的时间要比处理实际事物本身、处理不协调的阻力以及其他事情都多 (无论是在架构、工程还是在人际交往的水平上,都存在这样的问题)。因此我的小计策是尽量用更全局的方式来构建事物。这实际上没有增加多少工作,因为我只需要先建立确定的部分,就像你知道的那样,先做出一些事情,于是就有了粘合在一起所需要的最小组件。

但是很明显,你一个人可以做出来的事情是有限的。有些项目就是需要更多人才能完成…

没错,不过我认为个人的上限远比人们想象的要高。历史上一些了不起的东西都是由个人完成的 — 关键是要站在正确的肩膀上。可以肯定的是,我一个人所能探索的创意空间肯定比我在大规模团队工作时要小,虽然前者永远都小于后者,但是它们其实都是无限大的。对我个人而言,这个权衡是值得的。

你认为通过良好的管理,团队能最小化你所说的阻力吗?

我不确定。我知道组织中坏的代码架构和个人水平之间没有关系,就像工程师可以以整体的方式建立项目一样,一个好的项目经理只要了解每个人并且知道他们将要面对的问题,也可以以整体的方式组织一个团队。我没有这样的能力,不过我并不认为这影响某些神奇的例子的存在。如果过去几年我真的收获到了什么智慧,那就是我努力试图了解 — 那种真正的了解 – 了自己在做什么。这很困难,但是长远来看这会简单一些。

那么当你以整体的方式来进行一个项目时,在制作原型和开发实际产品之间还会有明显的界限吗?还是说你已经将两件事合在一起做了?

它们被完全融合了,这意味着我通常都在代码中完成我的原型,而不是使用其他原型工具,例如 Quartz Composer 或者 Form。很显然,这些工具的下一个发展阶段就是要抛掉原型工具的帽子,直接创造出最终产品。

原型阶段与在最终产品的实现这两者,时间上是怎样分配的呢?

在我找到想要的东西 (或者时间耗尽) 之前,无论已经完成了多少工作,我认为我的产品 100% 是原型,然而在那之后,我就可以叫它最终产品了。虽然我还有退回去处理失败方案的残骸,整理一下工程,不过这也不会花太多时间。

我猜你的界面设计和开发过程之间也有非常多的交错?

完全正确,既然界面设计和原型是一回事儿,那在开发最终产品时就已经完成了。再一次愉快地说,我完成了。

在这个过程中,你是脑海中现有确定的想法再开发呢,还是跟着开发时所产生灵感流来做产品?

最近产生了一个奇怪的组合。我已经在脑海里确定了产品的目标 (否则这个项目将以长草结束),但是那些已经确定的东西在我编码的过程中又会变得抽象起来。而我所做的越多,我就越能发现我所做的产品并没有不同 — 或者至少不应该 — 是不同的产品。这就像是把一个巨大构想的每一个块拆解下来推入一个垂直发射井。我思考的越多,就越觉得“应用程序”是一种很糟糕的组织软件的方式。

你在应用开发行业已经很长时间,并且取得了巨大的成就。那么这些年你是怎么坚持学习的呢?

要记住,基本上没有人能无所不知。因此在极度的混乱和可怕的敬畏之间,我的大脑处在一种很好的模糊状态,这使得它能很好的接受和吸收事物。我学习主要是通过纸质书籍。

在你说的纸质书里,你最喜欢的是哪些?

有些就在我旁边的架子上:《C 程序设计语言》(The C Programming Language),《Mindstorms》,《Turtle Geometry》,《安德的游戏》(Ender’s Game),《Schild’s Ladder》,《Advanced Global Illumination》,《The Theoretical Minimum》,《Collective Electrodynamics》,《New Kind of Science》。

你有什么建议要对软件行业的新人说吗?

请记住,魔法并不存在。尽管看上去你的工作基于一堆无法理解的抽象事物,但它们终究还是由人制作的 (他们也许又仓促还喝醉了呢)。掌握它们的工作原理,然后再找到如何才能最大限度地减少对它们的依赖。

回顾你所创建的所有东西,有那件是你特别自豪的?

没有。现在回想起来,我觉得我做的一切都糟透了。

好吧,让我们以一个更积极的话题来结尾吧:当你想把工作从脑子里赶走时会怎么做?

陪我儿子玩耍。这是最好的方法。

编程技巧