被訪者簡介:Loren Brichter 是 App Store 的明星加傳奇開發(fā)者之一,曾經(jīng)開發(fā)了 Letterpress?霸占歐美排行榜首位很長時間的游戲。其實 Loren 之前曾經(jīng)在 Apple 任職,擔任 iOS 圖像方面的開發(fā)工作。之后他從 Apple 離職創(chuàng)業(yè),最后成功被 Twitter 并購。2012 年 Loren 離開 Twitter 再次創(chuàng)業(yè),也正是在這之后 Letterpress?橫空出世。
Loren,感謝你特地在假期中抽空參加我們的訪談。這幾天都在忙什么呢?
我整個假期一直都很忙,大部分時候都在處理家里的事務(wù)?,F(xiàn)在我終于能回到真正的工作中了。
你當前的工作是什么?
我現(xiàn)在還不能透露任何細節(jié),不過我已經(jīng)做了一陣子底層的實驗了,一些事情已經(jīng)有了眉目。能回到以前的狀態(tài)非常棒,這能在沒有發(fā)布期限壓力的情況下反映出我現(xiàn)在到底在干什么。
在你走上編程之路之前,是否有其他職業(yè)也讓你產(chǎn)生了強烈的興趣?
我肯定會選建筑師、機械工程師、木匠或者攝影師。最近我正逐漸減少花在這些閃閃發(fā)亮的電子設(shè)備上的時間,這的確很難,因為它們很容易就吸引了我的視線。
從木匠到攝影師 -- 這跨度真大!面對這么多的選擇,是什么讓你堅持編程?
純粹是因為慣性。我適合編程,希望能找到一個方式,用我的技能來做些對大家有益的事情。
你事業(yè)上做過哪些不起眼的決定?
我覺得那些對我很重要的決定反而在其他人眼里并不起眼,比如為了做一些瘋狂的嘗試,多次放棄穩(wěn)定高薪的工作。幸運的是其中的有些事情結(jié)果還不錯。如果我今天再去做,也許就達不到相同的結(jié)果。
除了慣性,還有什么其他吸引你的東西讓你堅持編程嗎?
老實說,編程對我的吸引力越來越小了?;蛟S這因為我是“高齡工程師”的緣故,我了解的越多,就越感到編程的可怕。我喜歡推倒一切重新開始,但現(xiàn)在卻只能逆著浪潮游泳。因此有時我會嘗試剔除掉垃圾或者重新定位那些糟糕的技術(shù),來讓一切變得不那么糟糕時會讓我有點滿足感。
隨著編程興趣的下降,你將來可能涉足完全不同的行業(yè)嗎?
我將一直會做和編程有關(guān)的事情,不過這些事情里軟件也許只占一小部分,并不會成為主導(dǎo)。
既然你還不準備跳船改行,那我們來談?wù)劸幊汤锬切┰愀獾牡胤桨伞?/strong>
跟能被修補的船不一樣,這更像是乘著一堆積攢下來的垃圾進行越洋航行。當然,總有些東西浮著來避免其他東西下沉。因此問題換成“哪個部分是好的?”可能更加合適些。而你也只能將各個組件分離看待才能回答這個問題。比如我就覺得 Rust 語言不錯。但一旦供奉了馮諾依曼的理念,你就能爬下堆棧去質(zhì)疑一切,這也是不切實際的。
你認為這一切都會朝什么方向發(fā)展?會變得更好嗎?
我認為事情最終都會變得更好。然后再次變糟。然后又有人跑來感嘆說“噢!真是太亂了!”接著他們就會做一些事情來讓情況變得好些。然后循環(huán)再次開始。因此這就很容易產(chǎn)生抱怨:為什么我一直忙于我已經(jīng)做過的工作。
當你試圖讓一切變得“不那么糟糕”時,腦海里有過更大的目標,來指引你決定的方向嗎?你為什么要做這一切?
當然有,但它是如此抽象,以至于人們會認為我瘋了。因此對于目標,我只想說“創(chuàng)造啟迪人類的工具”。我指的“啟迪”是 Carl Sagan 認為的那種我們即宇宙,并在試圖了解自己的啟迪。我們很早就達到了只用大腦所能思考的極限,因此我們需要通過增加心靈溝通的方式來提升它。但現(xiàn)在的工具都太復(fù)雜,光嘗試著去使用它們就得耗盡你所有的心力,因此你都沒有余力來做一些有趣的事情?;蛘哒f至少它們對我來說太復(fù)雜了。我沒有那么聰明。
就我個人而言,我厭煩瑣碎的應(yīng)用程序,而 App Store 并沒有讓一切變得更有趣。我認為下一個發(fā)生在軟件業(yè)的大事件將跳出這個圈子。
說到軟件業(yè)的下一個大事件,現(xiàn)在有什么真正有趣的發(fā)展嗎?
當然有。有許多希望的曙光:Rust、Swift、TypeScript、asm.js、WebGL的廣泛支持 -- 狹義地來看這些都很有趣。
Swift 的哪些方面吸引了你?
它有現(xiàn)代的類型系統(tǒng),這很棒。(當然當它完成后會更棒) 另外我認為自定義操作符非??蓯?,我希望它們能在 Swift 中出現(xiàn)。
你已經(jīng)將 Swift 用在日常工作中了嗎?
我還沒有用它來實現(xiàn)任何東西:Swift 的各種工具還十分脆弱。而且在它開源或者代碼能被克隆之前,除非它不再和蘋果綁定,我都不會真正使用它。你看,至少現(xiàn)在我在 Linux 上都能編譯 Objective-C。
你剛剛說你在屏幕上花費的時間越來越少了。我能想象為人父是主要原因。
當然。我將要瘋狂地限制在屏幕上花費的時間,這對于我之前的生活也許是個諷刺。我也不知道這是怎么發(fā)生的,但是我對移動革命的理解加深了。以前我看到別人拿出 iPhone 時非常激動。現(xiàn)在卻變成“嘿小子,別再盯著你的屏幕!”并且我發(fā)現(xiàn)應(yīng)用程序無處不在!各種應(yīng)用應(yīng)有盡有。我已經(jīng)成為一個老頑固。把你的應(yīng)用程序從我的地盤上拿開!
我想我們中有很多人能從限制接觸屏幕的時間中受益 -- 你想借此機會做一個公開的承諾嗎?
哈哈,不行。
好吧。能多透露一些你的工作嗎?你主要是在家工作對吧?
是的,每次我試圖不在家里工作的時候,都苦不堪言。我喜歡在家工作。
你是如何規(guī)劃你的一天 -- 你是按照固定的時間表工作還是靈活地處理事情?
少年,帶孩子這事兒打亂了我的工作日程。我保持了一貫的節(jié)奏,之前我毫不分心地工作到凌晨,然后入睡。而現(xiàn)在我必須在合適的時間入睡,這樣我小孩早上起床時我才會不像個僵尸。我感覺我已經(jīng)慢慢地適應(yīng)這種狀況,但是,實際比想象地更困難。
大部分情況下同一時間你是只專注于一個項目還是多個任務(wù)同時進行?
我的工作日程是互相關(guān)聯(lián)的單線程序列,環(huán)境的切換需要巨大的成本,因此我盡量將時間片的跨度維持在一周。雖然我有許多項目需要同時進行,并且通常它們彼此之間都存在某種方式的聯(lián)系,但我堅持同一時間只關(guān)注一個項目。
我完全不能主動地進行多任務(wù),但是我認為我大腦的工作原理有點像 libdispatch。潛意識可以并行地偷偷執(zhí)行許多東西。所以當我清醒的思維切換到之前放到一邊的工作時,經(jīng)常會有好幾個好主意等著我。
你的出名之處在于能一人完成偉大的應(yīng)用,并且能整合以往需要不同的人才能完成的任務(wù)。同在團隊中工作相比,這種工作方式在哪方面吸引你呢?
我們用學科之間的界限來劃分工作領(lǐng)域,而你們用同樣的方式將程序劃分成了不同模塊、不同對象或者其他。但無論何時你將事物分成兩份,碎片之間難免會出現(xiàn)分歧,而且當你想把各個碎片拼在一起來建造東西的時候,一切就會變得更難。我發(fā)現(xiàn)過了一段時間后,實際上你在“膠水”上所花的時間要比處理實際事物本身、處理不協(xié)調(diào)的阻力以及其他事情都多 (無論是在架構(gòu)、工程還是在人際交往的水平上,都存在這樣的問題)。因此我的小計策是盡量用更全局的方式來構(gòu)建事物。這實際上沒有增加多少工作,因為我只需要先建立確定的部分,就像你知道的那樣,先做出一些事情,于是就有了粘合在一起所需要的最小組件。
但是很明顯,你一個人可以做出來的事情是有限的。有些項目就是需要更多人才能完成...
沒錯,不過我認為個人的上限遠比人們想象的要高。歷史上一些了不起的東西都是由個人完成的 -- 關(guān)鍵是要站在正確的肩膀上。可以肯定的是,我一個人所能探索的創(chuàng)意空間肯定比我在大規(guī)模團隊工作時要小,雖然前者永遠都小于后者,但是它們其實都是無限大的。對我個人而言,這個權(quán)衡是值得的。
你認為通過良好的管理,團隊能最小化你所說的阻力嗎?
我不確定。我知道組織中壞的代碼架構(gòu)和個人水平之間沒有關(guān)系,就像工程師可以以整體的方式建立項目一樣,一個好的項目經(jīng)理只要了解每個人并且知道他們將要面對的問題,也可以以整體的方式組織一個團隊。我沒有這樣的能力,不過我并不認為這影響某些神奇的例子的存在。如果過去幾年我真的收獲到了什么智慧,那就是我努力試圖了解 -- 那種真正的了解 -- 了自己在做什么。這很困難,但是長遠來看這會簡單一些。
那么當你以整體的方式來進行一個項目時,在制作原型和開發(fā)實際產(chǎn)品之間還會有明顯的界限嗎?還是說你已經(jīng)將兩件事合在一起做了?
它們被完全融合了,這意味著我通常都在代碼中完成我的原型,而不是使用其他原型工具,例如 Quartz Composer 或者 Form。很顯然,這些工具的下一個發(fā)展階段就是要拋掉原型工具的帽子,直接創(chuàng)造出最終產(chǎn)品。
原型階段與在最終產(chǎn)品的實現(xiàn)這兩者,時間上是怎樣分配的呢?
在我找到想要的東西 (或者時間耗盡) 之前,無論已經(jīng)完成了多少工作,我認為我的產(chǎn)品 100% 是原型,然而在那之后,我就可以叫它最終產(chǎn)品了。雖然我還有退回去處理失敗方案的殘骸,整理一下工程,不過這也不會花太多時間。
我猜你的界面設(shè)計和開發(fā)過程之間也有非常多的交錯?
完全正確,既然界面設(shè)計和原型是一回事兒,那在開發(fā)最終產(chǎn)品時就已經(jīng)完成了。再一次愉快地說,我完成了。
在這個過程中,你是腦海中現(xiàn)有確定的想法再開發(fā)呢,還是跟著開發(fā)時所產(chǎn)生靈感流來做產(chǎn)品?
最近產(chǎn)生了一個奇怪的組合。我已經(jīng)在腦海里確定了產(chǎn)品的目標 (否則這個項目將以長草結(jié)束),但是那些已經(jīng)確定的東西在我編碼的過程中又會變得抽象起來。而我所做的越多,我就越能發(fā)現(xiàn)我所做的產(chǎn)品并沒有不同 -- 或者至少不應(yīng)該 -- 是不同的產(chǎn)品。這就像是把一個巨大構(gòu)想的每一個塊拆解下來推入一個垂直發(fā)射井。我思考的越多,就越覺得“應(yīng)用程序”是一種很糟糕的組織軟件的方式。
你在應(yīng)用開發(fā)行業(yè)已經(jīng)很長時間,并且取得了巨大的成就。那么這些年你是怎么堅持學習的呢?
要記住,基本上沒有人能無所不知。因此在極度的混亂和可怕的敬畏之間,我的大腦處在一種很好的模糊狀態(tài),這使得它能很好的接受和吸收事物。我學習主要是通過紙質(zhì)書籍。
在你說的紙質(zhì)書里,你最喜歡的是哪些?
有些就在我旁邊的架子上:《C 程序設(shè)計語言》(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》。
你有什么建議要對軟件行業(yè)的新人說嗎?
請記住,魔法并不存在。盡管看上去你的工作基于一堆無法理解的抽象事物,但它們終究還是由人制作的 (他們也許又倉促還喝醉了呢)。掌握它們的工作原理,然后再找到如何才能最大限度地減少對它們的依賴。
回顧你所創(chuàng)建的所有東西,有那件是你特別自豪的?
沒有。現(xiàn)在回想起來,我覺得我做的一切都糟透了。
好吧,讓我們以一個更積極的話題來結(jié)尾吧:當你想把工作從腦子里趕走時會怎么做?
陪我兒子玩耍。這是最好的方法。