鍍金池/ 教程/ iOS/ 學(xué)無(wú)止境
與四軸無(wú)人機(jī)的通訊
在沙盒中編寫腳本
結(jié)構(gòu)體和值類型
深入理解 CocoaPods
UICollectionView + UIKit 力學(xué)
NSString 與 Unicode
代碼簽名探析
測(cè)試
架構(gòu)
第二期-并發(fā)編程
Metal
自定義控件
iOS 中的行為
行為驅(qū)動(dòng)開(kāi)發(fā)
Collection View 動(dòng)畫
截圖測(cè)試
MVVM 介紹
使 Mac 應(yīng)用數(shù)據(jù)腳本化
一個(gè)完整的 Core Data 應(yīng)用
插件
字符串
為 iOS 建立 Travis CI
先進(jìn)的自動(dòng)布局工具箱
動(dòng)畫
為 iOS 7 重新設(shè)計(jì) App
XPC
從 NSURLConnection 到 NSURLSession
Core Data 網(wǎng)絡(luò)應(yīng)用實(shí)例
GPU 加速下的圖像處理
自定義 Core Data 遷移
子類
與調(diào)試器共舞 - LLDB 的華爾茲
圖片格式
并發(fā)編程:API 及挑戰(zhàn)
IP,TCP 和 HTTP
動(dòng)畫解釋
響應(yīng)式 Android 應(yīng)用
初識(shí) TextKit
客戶端
View-Layer 協(xié)作
回到 Mac
Android
Core Image 介紹
自定義 Formatters
Scene Kit
調(diào)試
項(xiàng)目介紹
Swift 的強(qiáng)大之處
測(cè)試并發(fā)程序
Android 通知中心
調(diào)試:案例學(xué)習(xí)
從 UIKit 到 AppKit
iOS 7 : 隱藏技巧和變通之道
安全
底層并發(fā) API
消息傳遞機(jī)制
更輕量的 View Controllers
用 SQLite 和 FMDB 替代 Core Data
字符串解析
終身學(xué)習(xí)的一代人
視頻
Playground 快速原型制作
Omni 內(nèi)部
同步數(shù)據(jù)
設(shè)計(jì)優(yōu)雅的移動(dòng)游戲
繪制像素到屏幕上
相機(jī)與照片
音頻 API 一覽
交互式動(dòng)畫
常見(jiàn)的后臺(tái)實(shí)踐
糟糕的測(cè)試
避免濫用單例
數(shù)據(jù)模型和模型對(duì)象
Core Data
字符串本地化
View Controller 轉(zhuǎn)場(chǎng)
照片框架
響應(yīng)式視圖
Square Register 中的擴(kuò)張
DTrace
基礎(chǔ)集合類
視頻工具箱和硬件加速
字符串渲染
讓東西變得不那么糟
游戲中的多點(diǎn)互聯(lián)
iCloud 和 Core Data
Views
虛擬音域 - 聲音設(shè)計(jì)的藝術(shù)
導(dǎo)航應(yīng)用
線程安全類的設(shè)計(jì)
置換測(cè)試: Mock, Stub 和其他
Build 工具
KVC 和 KVO
Core Image 和視頻
Android Intents
在 iOS 上捕獲視頻
四軸無(wú)人機(jī)項(xiàng)目
Mach-O 可執(zhí)行文件
UI 測(cè)試
值對(duì)象
活動(dòng)追蹤
依賴注入
Swift
項(xiàng)目管理
整潔的 Table View 代碼
Swift 方法的多面性
為什么今天安全仍然重要
Core Data 概述
Foundation
Swift 的函數(shù)式 API
iOS 7 的多任務(wù)
自定義 Collection View 布局
測(cè)試 View Controllers
訪談
收據(jù)驗(yàn)證
數(shù)據(jù)同步
自定義 ViewController 容器轉(zhuǎn)場(chǎng)
游戲
調(diào)試核對(duì)清單
View Controller 容器
學(xué)無(wú)止境
XCTest 測(cè)試實(shí)戰(zhàn)
iOS 7
Layer 中自定義屬性的動(dòng)畫
第一期-更輕量的 View Controllers
精通 iCloud 文檔存儲(chǔ)
代碼審查的藝術(shù):Dropbox 的故事
GPU 加速下的圖像視覺(jué)
Artsy
照片擴(kuò)展
理解 Scroll Views
使用 VIPER 構(gòu)建 iOS 應(yīng)用
Android 中的 SQLite 數(shù)據(jù)庫(kù)支持
Fetch 請(qǐng)求
導(dǎo)入大數(shù)據(jù)集
iOS 開(kāi)發(fā)者的 Android 第一課
iOS 上的相機(jī)捕捉
語(yǔ)言標(biāo)簽
同步案例學(xué)習(xí)
依賴注入和注解,為什么 Java 比你想象的要好
編譯器
基于 OpenCV 的人臉識(shí)別
玩轉(zhuǎn)字符串
相機(jī)工作原理
Build 過(guò)程

學(xué)無(wú)止境

學(xué)無(wú)止境

被訪者簡(jiǎn)介:Natasha Murashev 作為一個(gè)俄國(guó)妹子在美國(guó)學(xué)了三年心理學(xué)后成功混入 FBI 擔(dān)任行動(dòng)計(jì)劃專家,之后輾轉(zhuǎn) Google 等知名企業(yè)后,現(xiàn)在在 Captial One 從事 iOS 開(kāi)發(fā)。作為一個(gè) iOS 開(kāi)發(fā)的一年級(jí)生,Natasha 已經(jīng)取得了非常多的成就,并且維護(hù)了一個(gè) Swift 周報(bào)。

Natasha,感謝你抽出寶貴的時(shí)間!你能簡(jiǎn)單介紹一下最近你的工作和開(kāi)發(fā)者社區(qū)中做的事情嗎?

我是 Captial One(第一資本金融公司,是美國(guó)一家金融控股公司,專營(yíng)信用卡、房屋貸款、汽車貸款、銀行等金融產(chǎn)品,名列財(cái)星500大之一。) 的一名 iOS 工程師,我們正在財(cái)政領(lǐng)域做一些令人激動(dòng)的原生應(yīng)用 。工作之余,我一般會(huì)起的很早,寫寫博客,學(xué)習(xí)或者創(chuàng)造點(diǎn)什么,可以說(shuō)早上是我成長(zhǎng)的時(shí)間。

你為什么會(huì)進(jìn)入 iOS 開(kāi)發(fā)這個(gè)領(lǐng)域呢?

我一直渴望學(xué)習(xí),從我剛開(kāi)始開(kāi)發(fā)的時(shí)候就是如此。我在我的上一家公司主要是寫 Ruby on Rails,他們有段時(shí)間很難招到 iOS 開(kāi)發(fā)者,所以他們問(wèn)有沒(méi)有誰(shuí)想轉(zhuǎn) iOS 開(kāi)發(fā)的。那時(shí)我就開(kāi)始想這個(gè)事情了,于是我報(bào)名了 Mobile Makers Bootcamp。我被錄取后,就去找我的老板商量,他給我放了兩個(gè)月的假,這期間我去芝加哥參加了為期 8 周的全職培訓(xùn)課程。我非常喜歡這段經(jīng)歷,有老師教給我很多最佳實(shí)踐,和自己零零碎碎學(xué)習(xí)相比,我以非??斓募铀俣仍趯W(xué)習(xí)。當(dāng)我回來(lái)之后,我加入了 iOS team。

你能告訴我們一些有關(guān) Bootcamp 的事情嗎?你在那來(lái)學(xué)到了什么?

我們學(xué)習(xí)了很多 Objective-C,這是我剛開(kāi)始遇到的最大挑戰(zhàn),因?yàn)樗瓷先?shí)在太嚇人了。早上學(xué)習(xí)到的新知識(shí),會(huì)立刻在下午應(yīng)用上:我會(huì)和其他人一些寫一些小的 App 。我們每周都要完成一個(gè) App ,在 Bootcamp 的最后我們還需要在 App Store 上架一個(gè) App。

你是如何開(kāi)始編程的,為什么呢?

這要說(shuō)到我去舊金山玩的一個(gè)周末了,我立刻就愛(ài)上了那里的技術(shù)氛圍 -- 積極而又富有創(chuàng)造力的氛圍。我參加了很多線下聚會(huì),學(xué)到了很多關(guān)于創(chuàng)業(yè)公司的東西。再后來(lái)我搬到了這里,不到一年的時(shí)間我就和一些朋友開(kāi)始為一家創(chuàng)業(yè)公司工作。我那個(gè)時(shí)候還不太會(huì)寫代碼,但是我不喜歡幫不上忙的自己,所以那之后我很快就開(kāi)始學(xué)習(xí)編程了。

所以你是自學(xué)了 Rails 然后找到了一份 Rails 開(kāi)發(fā)者的工作?

是的。最初我是從斯坦福大學(xué)的一門用 Java 教學(xué)的課程入門的。它是一門在線課程,結(jié)束后我就開(kāi)始學(xué)習(xí) Rails 了。我能以 hack 的方式把東西串起來(lái)并工作。但是我知道這不是我想要的編程方式。那時(shí),Dev Bootcamp 剛出來(lái),我申請(qǐng)了,并在第二階段課程結(jié)束。對(duì)我來(lái)說(shuō)那是一個(gè)能以更聰明的方式來(lái)學(xué)習(xí)編程的機(jī)會(huì)。

順帶問(wèn)一句,你在大學(xué)是學(xué)什么專業(yè)的?

心理學(xué),它實(shí)際上是最有用的專業(yè)了。

人們對(duì)程序員有種很刻板的印象,認(rèn)為他們獨(dú)自找個(gè)地方宅起來(lái)編程就夠了 (原文說(shuō)的 basement,算黑嗎?)。但是現(xiàn)實(shí)生活中你需要和其他人一起工作。在團(tuán)隊(duì)中工作更多的是關(guān)于群體動(dòng)力學(xué)(一個(gè)心理學(xué)術(shù)語(yǔ),或稱團(tuán)體動(dòng)力學(xué)、集團(tuán)力學(xué),在共同工作時(shí)會(huì)出現(xiàn)的各種心理學(xué)和社會(huì)學(xué)現(xiàn)象、機(jī)制和過(guò)程的學(xué)科)和團(tuán)體迷失 (另一個(gè)心理學(xué)術(shù)語(yǔ),是一個(gè)心理學(xué)現(xiàn)象,指的是團(tuán)體在決策過(guò)程中,由于成員傾向讓自己的觀點(diǎn)與團(tuán)體一致,因而令整個(gè)團(tuán)體缺乏不同的思考角度,不能進(jìn)行客觀分析)。有時(shí)候加入一些不同意見(jiàn)是非常重要的,因?yàn)橄嗵幘昧?,大家?huì)變得只會(huì)認(rèn)同某些事情,而這些事情并不一定總是對(duì)的。還有很多是關(guān)于領(lǐng)導(dǎo)力的,比如關(guān)心他人,建立良好關(guān)系等;這些都是每天編程之外需要考慮的。

因?yàn)槟阌行睦韺W(xué)背景,你有什么對(duì)付編程中的起起伏伏的秘訣嗎?比如那些你完全不知道發(fā)生了什么的沮喪時(shí)刻?

這實(shí)際上是我開(kāi)始學(xué)習(xí)編程遇到的最大困難了,因?yàn)槲也皇煜に鼈?。在學(xué)校里,有個(gè)很簡(jiǎn)單的公式:刻苦學(xué)習(xí) = 考試好成績(jī)。甚至在我開(kāi)始編程前的其他工作中,也是類似線性的過(guò)程 -- 事情總會(huì)變得更好。

我剛開(kāi)始編程的時(shí)候,有時(shí)候會(huì)有這種情況:今天感覺(jué)自己已然站在世界的頂點(diǎn),無(wú)所不能,而第二天就感覺(jué)完全不能寫代碼。最重要的事情是一直在學(xué)習(xí)如何 Debug,每次只走一小步,并且懷疑你的全部假設(shè)。

除了這些,冥想 -- 即只專注于呼吸,或者簡(jiǎn)單的走開(kāi),或者休息一下,對(duì)我很有幫助。有時(shí)候直接去睡覺(jué)是更好的選擇。第二天你會(huì)發(fā)現(xiàn)問(wèn)題很容易就被解決了。對(duì)我來(lái)說(shuō),這部分已經(jīng)成為我在編程過(guò)程中最喜歡的挑戰(zhàn)了。

你對(duì)最近新出來(lái)的東西怎么看,比如 Swift,WatchKit 和 iOS 8?你對(duì)它們感到興奮嗎?

所有嗎?我喜歡學(xué)習(xí)。這是我作為程序員最喜歡的一點(diǎn)了。我在我做過(guò)的其他工作上并沒(méi)有體會(huì)到這一點(diǎn),但是編程的話,有更多起起伏伏和學(xué)習(xí)的機(jī)會(huì)。舉列來(lái)說(shuō),Swift 表面上看起來(lái)很簡(jiǎn)單。當(dāng)它公布的時(shí)候,所有的 Javascript 程序員都在說(shuō):“哈,我現(xiàn)在也是 iOS 開(kāi)發(fā)者了”。但是呢,我用了一段時(shí)間發(fā)現(xiàn),Swift 實(shí)際上比 Objective-C 更難。Objective-C 很簡(jiǎn)單,你只能做這么多事情。但是 Swift 是一個(gè)全新的世界格局,并沒(méi)有最佳實(shí)踐。有點(diǎn)像狂野的大西部,你的選擇太多了。

拿 WatchKit 來(lái)說(shuō),雖然現(xiàn)在還非常簡(jiǎn)單,但是它未來(lái)的前景非常好。我只是拿到了一個(gè) FitBit 設(shè)備,它無(wú)縫同步數(shù)據(jù)方式實(shí)在是不可思議的。我對(duì) Apple Watch 跟蹤并且無(wú)縫同步這些數(shù)據(jù)??感到很興奮。

如果我沒(méi)記錯(cuò)的話,你最開(kāi)始對(duì)它很失望,但是很快又激動(dòng)起來(lái)了,沒(méi)說(shuō)錯(cuò)吧?

是的,WatchKit 缺少了一些他們宣稱的一些特性。比如,沒(méi)有針對(duì) Digital Crown(Apple Watch 的旋鈕表冠)或者 Tactic feedback (壓力反饋,Apple Watch 可以通過(guò)不同力度的觸摸來(lái)表現(xiàn)不同的交互)的 API?,F(xiàn)在給出來(lái)的都是些很基礎(chǔ)的 API,比如在 Apple Watch 上展示一個(gè)地圖,iOS 系統(tǒng)會(huì)截一張地圖的圖片然后發(fā)送給 Apple Watch。后來(lái)我們舉辦了一個(gè)關(guān)于 WatchKit 的黑客馬拉松,就算是用這么簡(jiǎn)單的 API 大家也做出了很多很酷的東西。

當(dāng) Swift 出來(lái)的時(shí)候,你很快就在社區(qū)中變得很矚目,這是你“故意”的嗎?

事實(shí)上我已經(jīng)寫了好一整子博客了。當(dāng)我開(kāi)始編程的時(shí)候就開(kāi)始寫了。這是我鞏固知識(shí)的一種方式?,F(xiàn)在我學(xué)到了什么,我就會(huì)把它寫下來(lái),這已經(jīng)變成我的慣例了。所以 Swift 出來(lái)的時(shí)候,這是一種很自然的延伸。而且由于 Swift 太新了,有很多地方值得寫,你會(huì)因?yàn)檎也坏酱鸢付兊煤茏タ瘛?/p>

你在 Swift 社區(qū)獲得的知名度改變了你什么嗎?

我只是接著做我一直以來(lái)在做的事情。我的確開(kāi)了一個(gè)技術(shù)周報(bào),但這也是我學(xué)習(xí)方式的一部分。要說(shuō)新的內(nèi)容話,我開(kāi)始做一些演講了。演講很有趣,也能很好的鞏固我的知識(shí)。因?yàn)楫?dāng)你需要教別人的時(shí)候,你需要真正了解你要講的東西。在 WatchKit 黑客馬拉松上,我們賭了一回,因?yàn)樗陌l(fā)布日期并不確定。到最后,我不得不在 3 天的時(shí)間內(nèi)學(xué)會(huì) WatchKit 并且教學(xué)。不過(guò)我很喜歡這種壓力,因?yàn)樗鼜?qiáng)迫我去學(xué)習(xí);反過(guò)來(lái),與 3 天成為 WatchKit 專家相比,如果只是自學(xué)的話,我可能會(huì)花費(fèi)更長(zhǎng)的一段時(shí)間,而且也不一定能學(xué)的更好。

現(xiàn)在,每個(gè)人都在學(xué) Swift,或許在未來(lái)的幾年內(nèi)會(huì)有確定的一些模式。你認(rèn)為我們還會(huì)像這樣保持社區(qū)的開(kāi)放嗎?

我開(kāi)始有種感覺(jué),Swift 會(huì)給我們更多的選擇以好的方式來(lái)解決特定的問(wèn)題。在 Objective-C 里,大部分方法方式都很清楚,但是 Swift 允許一些不同的風(fēng)格。希望這能夠讓大家學(xué)習(xí)不同的東西并保持思想的開(kāi)放。

今年就要馬上結(jié)束了,你有什么新年目標(biāo)或者具體的計(jì)劃嗎?

是的,我的確有個(gè)清單。它很大一部分是要保持健康。Swift 是如此的令人興奮,我一直在敦促自己并學(xué)習(xí)。但是我也希望自己能快點(diǎn)回歸到正常的睡眠周期。因?yàn)槲野l(fā)現(xiàn)如果你睡眠充足,實(shí)際上你能完成更多的目標(biāo),盡管很多時(shí)候這并不符合直覺(jué)。另一件主要的事情是花更多的時(shí)間來(lái)學(xué)習(xí)。Swift 引領(lǐng)我進(jìn)入了一個(gè)我想學(xué)習(xí)的新世界。以我現(xiàn)在的編程經(jīng)驗(yàn)肯定會(huì)錯(cuò)過(guò)一些內(nèi)容,所以我會(huì)專注這方面內(nèi)容的學(xué)習(xí),然后靈活運(yùn)用它們,寫出更好的代碼。

你有什么長(zhǎng)期的目標(biāo)嗎?

我并不喜歡想太長(zhǎng)遠(yuǎn),因?yàn)槭虑樽兓炝?。這有點(diǎn)像代碼:你不得不推倒重寫。對(duì)我來(lái)說(shuō),更重要的是每天能保持好的狀態(tài)而不是有一個(gè)大大的目標(biāo)。每天醒來(lái)我會(huì)問(wèn)自己,我開(kāi)心嗎?我知道哪些事情能讓我高興:比如學(xué)習(xí),保持健康,還有旅行。這些是以保持自我為中心的的三件大事。我覺(jué)得通過(guò)學(xué)習(xí)更多我還能收獲更多,或許一年后,我會(huì)專注在真正創(chuàng)造和發(fā)布一些東西。

你會(huì)預(yù)見(jiàn)自己會(huì)做一些和編程完全不同的事情嗎?

大概不會(huì),我真的很享受編程。也許 10 年之內(nèi)還會(huì)一直享受吧,誰(shuí)知道呢?我不知道我是否還能找到一個(gè)領(lǐng)域能讓我學(xué)無(wú)止境。我也一直對(duì)學(xué)習(xí)硬件的一些東西感興趣,不過(guò)我認(rèn)為我會(huì)和軟件一起來(lái)學(xué)習(xí)。只要我不斷的學(xué)習(xí)新的知識(shí),不斷挑戰(zhàn)自己,我很樂(lè)意繼續(xù)現(xiàn)在做的事情,稍微偏離一點(diǎn)我的舒適區(qū)會(huì)讓我很開(kāi)心。

當(dāng)你學(xué)習(xí) iOS 或者 Rails 的時(shí)候,有沒(méi)有一些人或者說(shuō)導(dǎo)師確實(shí)啟發(fā)了你?

我從和那些比我經(jīng)驗(yàn)豐富的人結(jié)對(duì)編程之中學(xué)到了很多。結(jié)對(duì)編程真的能加速學(xué)習(xí)過(guò)程。當(dāng)我遇到問(wèn)題或者 bug 的時(shí)候,我會(huì)為找到一個(gè)解決方案而高興不已。但是更資深的程序員會(huì)從不同的視角來(lái)看待它 -- 不僅僅要能解決問(wèn)題,從長(zhǎng)遠(yuǎn)來(lái)看它應(yīng)該也是一個(gè)好的解決方案。對(duì)于 Swift,我從社區(qū)里學(xué)到了很多,它太新了,所以我正在嘗試讀更多的書以及向那些比我優(yōu)秀的人學(xué)習(xí)。

當(dāng)你結(jié)對(duì)編程的時(shí)候,你有學(xué)到什么大的教訓(xùn)嗎,抑或是更多的小細(xì)節(jié)?

我很注重細(xì)節(jié),所以我喜歡學(xué)到的小細(xì)節(jié)或者小技巧。比如,我的同事告訴我在 XCode 中可以打開(kāi) Clang analyzer 來(lái)獲得更好的編譯警告信息。如果他不告訴我,我也不會(huì)知道,甚至也不會(huì)去 Google 這類事情。當(dāng)你結(jié)對(duì)編程的時(shí)候,你會(huì)學(xué)習(xí)到那些人們已經(jīng)習(xí)以為?;蛘哒J(rèn)為理所應(yīng)當(dāng)?shù)男〖?xì)節(jié)。事實(shí)上,我最受歡迎的一些博客文章大部分都是關(guān)于這類小細(xì)節(jié)的,盡管我最開(kāi)始假定是:除了我可能大家已經(jīng)都知道了。

至于說(shuō)大的事情,我在 Capital One 的一個(gè)同事向我展示了如何在真實(shí)環(huán)境下應(yīng)用 MVVM 這個(gè)設(shè)計(jì)模式。我聽(tīng)過(guò)這個(gè)術(shù)語(yǔ),也聽(tīng)說(shuō) Facebook 也在討論它,但是我并不確定它是如何工作的,在他的指導(dǎo)下我過(guò)了一遍一個(gè)實(shí)際的實(shí)現(xiàn),這真是太贊了?,F(xiàn)在我在不同的 App 里一直在使用 MVVM 模式。

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

哈,成為一名 iOS 開(kāi)發(fā)者很有趣。對(duì)于那些正在思考是否要轉(zhuǎn) iOS 開(kāi)發(fā)的人,我想說(shuō)的是:這很有挑戰(zhàn),同時(shí)也會(huì)是一段令人興奮的旅程。

譯者的一些私貨:

最早是通過(guò) Google 知道她的博客的,一篇講解很清楚的關(guān)于 UIEdgeInSet 的文章,后來(lái)就訂閱了她博客的 RSS,也在 twitter 上 fo 了她,再后來(lái)就是 Swift 和 WatchKit 的文章了~。

上一篇:iOS 中的行為下一篇:架構(gòu)