原文出處: objc 譯文出處:徐濤(@hewig) 歡迎分享原創到伯樂頭條 html
【受訪者簡介】:Natasha Murashev 做爲一個俄國妹子在美國學了三年心理學後成功混入 FBI 擔任行動計劃專家,以後展轉 Google 等知名企業後,如今在 Captial One 從事 iOS 開發。做爲一個 iOS 開發的一年級生,Natasha 已經取得了很是多的成就,而且維護了一個 Swift 週報。 ios
Natasha,感謝你抽出寶貴的時間!你能簡單介紹一下最近你的工做和開發者社區中作的事情嗎? git
我是 Captial One(第一資本金融公司,是美國一家金融控股公司,專營信用卡、房屋貸款、汽車貸款、銀行等金融產品,名列財星500大之一。) 的一名 iOS 工程師,咱們正在財政領域作一些使人激動的原生應用 。工做之餘,我通常會起的很早,寫寫博客,學習或者創造點什麼,能夠說早上是我成長的時間。 程序員
你爲何會進入 iOS 開發這個領域呢? 編程
我一直渴望學習,從我剛開始開發的時候就是如此。我在個人上一家公司主要是寫 Ruby on Rails,他們有段時間很難招到 iOS 開發者,因此他們問有沒有誰想轉 iOS 開發的。那時我就開始想這個事情了,因而我報名了 Mobile Makers Bootcamp。我被錄取後,就去找個人老闆商量,他給我放了兩個月的假,這期間我去芝加哥參加了爲期 8 周的全職培訓課程。我很是喜歡這段經歷,有老師教給我不少最佳實踐,和本身零零碎碎學習相比,我以很是快的加速度在學習。當我回來以後,我加入了 iOS team。 設計模式
你能告訴咱們一些有關 Bootcamp 的事情嗎?你在那來學到了什麼? api
咱們學習了不少 Objective-C,這是我剛開始遇到的最大挑戰,由於它看上去實在太嚇人了。早上學習到的新知識,會馬上在下午應用上:我會和其餘人一些寫一些小的 App 。咱們每週都要完成一個 App ,在 Bootcamp 的最後咱們還須要在 App Store 上架一個 App。 學習
你是如何開始編程的,爲何呢? spa
這要說到我去舊金山玩的一個週末了,我馬上就愛上了那裏的技術氛圍 — 積極而又富有創造力的氛圍。我參加了不少線下聚會,學到了不少關於創業公司的東西。再後來我搬到了這裏,不到一年的時間我就和一些朋友開始爲一家創業公司工做。我那個時候還不太會寫代碼,可是我不喜歡幫不上忙的本身,因此那以後我很快就開始學習編程了。 設計
因此你是自學了 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 開發的人,我想說的是:這頗有挑戰,同時也會是一段使人興奮的旅程。