國外程式設計師訪談:學無止境

發表於2015-01-25

【受訪者簡介】: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 的文章了~。

相關文章