國外程式設計師訪談:讓東西不那麼糟

發表於2015-01-25

【受訪者簡介】: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》。

你有什麼建議要對軟體行業的新人說嗎?

請記住,魔法並不存在。儘管看上去你的工作基於一堆無法理解的抽象事物,但它們終究還是由人制作的 (他們也許又倉促還喝醉了呢)。掌握它們的工作原理,然後再找到如何才能最大限度地減少對它們的依賴。

回顧你所建立的所有東西,有那件是你特別自豪的?

沒有。現在回想起來,我覺得我做的一切都糟透了。

好吧,讓我們以一個更積極的話題來結尾吧:當你想把工作從腦子裡趕走時會怎麼做?

陪我兒子玩耍。這是最好的方法。

相關文章