程式設計師訪談(一):學無止境

objc中國發表於2015-01-26

被訪者簡介:Natasha Murashev 作為一個俄國妹子在美國學了三年心理學後成功混入 FBI 擔任行動計劃專家,之後輾轉 Google 等知名企業後,現在在 Captial One 從事 iOS 開發。作為一個 iOS 開發的一年級生,Natasha 已經取得了非常多的成就,並且維護了一個 Swift 週報。

Natasha,感謝你抽出寶貴的時間!你能簡單介紹一下最近你的工作和開發者社群中做的事情嗎?

我是 Captial One(第一資本金融公司,是美國一家金融控股公司,專營信用卡、房屋貸款、汽車貸款、銀行等金融產品,名列財星500大之一。) 的一名 iOS 工程師,我們正在財政領域做一些令人激動的原生應用 。工作之餘,我一般會起的很早,寫寫部落格,學習或者創造點什麼,可以說早上是我成長的時間。

你為什麼會進入 iOS 開發這個領域呢?

我一直渴望學習,從我剛開始開發的時候就是如此。我在我的上一家公司主要是寫 Ruby on Rails,他們有段時間很難招到 iOS 開發者,所以他們問有沒有誰想轉 iOS 開發的。那時我就開始想這個事情了,於是我報名了 Mobile Makers Bootcamp。我被錄取後,就去找我的老闆商量,他給我放了兩個月的假,這期間我去芝加哥參加了為期 8 周的全職培訓課程。我非常喜歡這段經歷,有老師教給我很多最佳實踐,和自己零零碎碎學習相比,我以非常快的加速度在學習。當我回來之後,我加入了 iOS team。

你能告訴我們一些有關 Bootcamp 的事情嗎?你在那來學到了什麼?

我們學習了很多 Objective-C,這是我剛開始遇到的最大挑戰,因為它看上去實在太嚇人了。早上學習到的新知識,會立刻在下午應用上:我會和其他人一些寫一些小的 App 。我們每週都要完成一個 App ,在 Bootcamp 的最後我們還需要在 App Store 上架一個 App。

你是如何開始程式設計的,為什麼呢?

這要說到我去舊金山玩的一個週末了,我立刻就愛上了那裡的技術氛圍 — 積極而又富有創造力的氛圍。我參加了很多線下聚會,學到了很多關於創業公司的東西。再後來我搬到了這裡,不到一年的時間我就和一些朋友開始為一家創業公司工作。我那個時候還不太會寫程式碼,但是我不喜歡幫不上忙的自己,所以那之後我很快就開始學習程式設計了。

所以你是自學了 Rails 然後找到了一份 Rails 開發者的工作?

是的。最初我是從史丹佛大學的一門用 Java 教學的課程入門的。它是一門線上課程,結束後我就開始學習 Rails 了。我能以 hack 的方式把東西串起來並工作。但是我知道這不是我想要的程式設計方式。那時,Dev Bootcamp 剛出來,我申請了,並在第二階段課程結束。對我來說那是一個能以更聰明的方式來學習程式設計的機會。

順帶問一句,你在大學是學什麼專業的?

心理學,它實際上是最有用的專業了。

人們對程式設計師有種很刻板的印象,認為他們獨自找個地方宅起來程式設計就夠了 (原文說的 basement,算黑嗎?)。但是現實生活中你需要和其他人一起工作。在團隊中工作更多的是關於群體動力學(一個心理學術語,或稱團體動力學、集團力學,在共同工作時會出現的各種心理學和社會學現象、機制和過程的學科)和團體迷失 (另一個心理學術語,是一個心理學現象,指的是團體在決策過程中,由於成員傾向讓自己的觀點與團體一致,因而令整個團體缺乏不同的思考角度,不能進行客觀分析)。有時候加入一些不同意見是非常重要的,因為相處久了,大家會變得只會認同某些事情,而這些事情並不一定總是對的。還有很多是關於領導力的,比如關心他人,建立良好關係等;這些都是每天程式設計之外需要考慮的。

因為你有心理學背景,你有什麼對付程式設計中的起起伏伏的祕訣嗎?比如那些你完全不知道發生了什麼的沮喪時刻?

這實際上是我開始學習程式設計遇到的最大困難了,因為我不熟悉它們。在學校裡,有個很簡單的公式:刻苦學習 = 考試好成績。甚至在我開始程式設計前的其他工作中,也是類似線性的過程 — 事情總會變得更好。

我剛開始程式設計的時候,有時候會有這種情況:今天感覺自己已然站在世界的頂點,無所不能,而第二天就感覺完全不能寫程式碼。最重要的事情是一直在學習如何 Debug,每次只走一小步,並且懷疑你的全部假設。

除了這些,冥想 — 即只專注於呼吸,或者簡單的走開,或者休息一下,對我很有幫助。有時候直接去睡覺是更好的選擇。第二天你會發現問題很容易就被解決了。對我來說,這部分已經成為我在程式設計過程中最喜歡的挑戰了。

你對最近新出來的東西怎麼看,比如 Swift,WatchKit 和 iOS 8?你對它們感到興奮嗎?

所有嗎?我喜歡學習。這是我作為程式設計師最喜歡的一點了。我在我做過的其他工作上並沒有體會到這一點,但是程式設計的話,有更多起起伏伏和學習的機會。舉列來說,Swift 表面上看起來很簡單。當它公佈的時候,所有的 Javascript 程式設計師都在說:“哈,我現在也是 iOS 開發者了”。但是呢,我用了一段時間發現,Swift 實際上比 Objective-C 更難。Objective-C 很簡單,你只能做這麼多事情。但是 Swift 是一個全新的世界格局,並沒有最佳實踐。有點像狂野的大西部,你的選擇太多了。

拿 WatchKit 來說,雖然現在還非常簡單,但是它未來的前景非常好。我只是拿到了一個 FitBit 裝置,它無縫同步資料方式實在是不可思議的。我對 Apple Watch 跟蹤並且無縫同步這些資料感到很興奮。

如果我沒記錯的話,你最開始對它很失望,但是很快又激動起來了,沒說錯吧?

是的,WatchKit 缺少了一些他們宣稱的一些特性。比如,沒有針對 Digital Crown(Apple Watch 的旋鈕錶冠)或者 Tactic feedback (壓力反饋,Apple Watch 可以通過不同力度的觸控來表現不同的互動)的 API。現在給出來的都是些很基礎的 API,比如在 Apple Watch 上展示一個地圖,iOS 系統會截一張地圖的圖片然後傳送給 Apple Watch。後來我們舉辦了一個關於 WatchKit 的黑客馬拉松,就算是用這麼簡單的 API 大家也做出了很多很酷的東西。

當 Swift 出來的時候,你很快就在社群中變得很矚目,這是你“故意”的嗎?

事實上我已經寫了好一整子部落格了。當我開始程式設計的時候就開始寫了。這是我鞏固知識的一種方式。現在我學到了什麼,我就會把它寫下來,這已經變成我的慣例了。所以 Swift 出來的時候,這是一種很自然的延伸。而且由於 Swift 太新了,有很多地方值得寫,你會因為找不到答案而變得很抓狂。

你在 Swift 社群獲得的知名度改變了你什麼嗎?

我只是接著做我一直以來在做的事情。我的確開了一個技術週報,但這也是我學習方式的一部分。要說新的內容話,我開始做一些演講了。演講很有趣,也能很好的鞏固我的知識。因為當你需要教別人的時候,你需要真正瞭解你要講的東西。在 WatchKit 黑客馬拉松上,我們賭了一回,因為它的釋出日期並不確定。到最後,我不得不在 3 天的時間內學會 WatchKit 並且教學。不過我很喜歡這種壓力,因為它強迫我去學習;反過來,與 3 天成為 WatchKit 專家相比,如果只是自學的話,我可能會花費更長的一段時間,而且也不一定能學的更好。

現在,每個人都在學 Swift,或許在未來的幾年內會有確定的一些模式。你認為我們還會像這樣保持社群的開放嗎?

我開始有種感覺,Swift 會給我們更多的選擇以好的方式來解決特定的問題。在 Objective-C 裡,大部分方法方式都很清楚,但是 Swift 允許一些不同的風格。希望這能夠讓大家學習不同的東西並保持思想的開放。

今年就要馬上結束了,你有什麼新年目標或者具體的計劃嗎?

是的,我的確有個清單。它很大一部分是要保持健康。Swift 是如此的令人興奮,我一直在敦促自己並學習。但是我也希望自己能快點回歸到正常的睡眠週期。因為我發現如果你睡眠充足,實際上你能完成更多的目標,儘管很多時候這並不符合直覺。另一件主要的事情是花更多的時間來學習。Swift 引領我進入了一個我想學習的新世界。以我現在的程式設計經驗肯定會錯過一些內容,所以我會專注這方面內容的學習,然後靈活運用它們,寫出更好的程式碼。

你有什麼長期的目標嗎?

我並不喜歡想太長遠,因為事情變化太快了。這有點像程式碼:你不得不推倒重寫。對我來說,更重要的是每天能保持好的狀態而不是有一個大大的目標。每天醒來我會問自己,我開心嗎?我知道哪些事情能讓我高興:比如學習,保持健康,還有旅行。這些是以保持自我為中心的的三件大事。我覺得通過學習更多我還能收穫更多,或許一年後,我會專注在真正創造和釋出一些東西。

你會預見自己會做一些和程式設計完全不同的事情嗎?

大概不會,我真的很享受程式設計。也許 10 年之內還會一直享受吧,誰知道呢?我不知道我是否還能找到一個領域能讓我學無止境。我也一直對學習硬體的一些東西感興趣,不過我認為我會和軟體一起來學習。只要我不斷的學習新的知識,不斷挑戰自己,我很樂意繼續現在做的事情,稍微偏離一點我的舒適區會讓我很開心。

當你學習 iOS 或者 Rails 的時候,有沒有一些人或者說導師確實啟發了你?

我從和那些比我經驗豐富的人結對程式設計之中學到了很多。結對程式設計真的能加速學習過程。當我遇到問題或者 bug 的時候,我會為找到一個解決方案而高興不已。但是更資深的程式設計師會從不同的視角來看待它 — 不僅僅要能解決問題,從長遠來看它應該也是一個好的解決方案。對於 Swift,我從社群裡學到了很多,它太新了,所以我正在嘗試讀更多的書以及向那些比我優秀的人學習。

當你結對程式設計的時候,你有學到什麼大的教訓嗎,抑或是更多的小細節?

我很注重細節,所以我喜歡學到的小細節或者小技巧。比如,我的同事告訴我在 XCode 中可以開啟 Clang analyzer 來獲得更好的編譯警告資訊。如果他不告訴我,我也不會知道,甚至也不會去 Google 這類事情。當你結對程式設計的時候,你會學習到那些人們已經習以為常或者認為理所應當的小細節。事實上,我最受歡迎的一些部落格文章大部分都是關於這類小細節的,儘管我最開始假定是:除了我可能大家已經都知道了。

至於說大的事情,我在 Capital One 的一個同事向我展示瞭如何在真實環境下應用 MVVM 這個設計模式。我聽過這個術語,也聽說 Facebook 也在討論它,但是我並不確定它是如何工作的,在他的指導下我過了一遍一個實際的實現,這真是太讚了。現在我在不同的 App 裡一直在使用 MVVM 模式。

還有什麼你想分享給大家的嗎?

哈,成為一名 iOS 開發者很有趣。對於那些正在思考是否要轉 iOS 開發的人,我想說的是:這很有挑戰,同時也會是一段令人興奮的旅程。

譯者的一些私貨:

最早是通過 Google 知道她的部落格的,一篇講解很清楚的關於 UIEdgeInSet 的文章,後來就訂閱了她部落格的 RSS,也在 twitter 上 fo 了她,再後來就是 Swift 和 WatchKit 的文章了~。

相關文章