程序員訪談(二):讓東西不那么糟
被訪者簡介:Loren Brichter 是 App Store 的明星加傳奇開發者之一,曾經開發了 Letterpress?霸占歐美排行榜首位很長時間的游戲。其實 Loren 之前曾經在 Apple 任職,擔任 iOS 圖像方面的開發工作。之后他從 Apple 離職創業,最后成功被 推ter 并購。2012 年 Loren 離開 推ter 再次創業,也正是在這之后 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》。
你有什么建議要對軟件行業的新人說嗎?
請記住,魔法并不存在。盡管看上去你的工作基于一堆無法理解的抽象事物,但它們終究還是由人制作的 (他們也許又倉促還喝醉了呢)。掌握它們的工作原理,然后再找到如何才能最大限度地減少對它們的依賴。
回顧你所創建的所有東西,有那件是你特別自豪的?
沒有。現在回想起來,我覺得我做的一切都糟透了。
好吧,讓我們以一個更積極的話題來結尾吧:當你想把工作從腦子里趕走時會怎么做?
陪我兒子玩耍。這是最好的方法。
來源:objc中國