30天從0開始學習Swift
英文原文:From Zero to Swift in 30 Days
確切地講,我是 30 天前開始學習 swift 的。3 天前,我開發的第一個應用程序通過了蘋果公司的審核。相比其他事情,這一開發過程并不算什么,但是對我而言,卻是一個巨大的成就。
我沒有計算機的學位,也沒有專業的開發經驗,但是在過去的 5 年中,我一直在一個開發團隊中擔任產品經理。因為興趣,曾經也用 Ruby 寫過一些 Rails 應用。我一直想和我的工作有一個更直接的聯系,所以我決定開始編程。
為什么選擇 iOS 和 Swift
- 移動市場是巨大的;手機是個人的。我想開發一些對用戶切實有用的軟件,并且我非常喜歡人們與手機之間的親密關系。我們的手機非常了解我們——它知 道我們什么時候醒來,什么時候睡覺,在什么位置,是怎么到達這個位置的,我們的日常安排、我們與朋友、家人的談話內容,甚至更多。因為我一直使用蘋果產 品,所以很自然地選擇從 iOS 開始。前段時間,我嘗試了下 Objective-C,發現它的地位正在受到威脅,因為 Swift 一直很受歡迎。
- 良好的約束。專注于蘋果平臺和在適用于口袋般大小的屏幕開發提供了良好的約束。這些約束讓我很好的專注在需要學習的技術上(相對于永無休止的網頁開發),還促使我把創造力聚焦在用戶體驗上。
- Swift 是一門快速進化的語言。我喜歡看著事物從底層開始成長和發展,并參與其中,這也是我為什么喜歡在初創公司里工作的原因。有些事情能夠使一門不成熟的語言日 趨完善,我加入到一個小團隊一起去嘗試解決那些有待完善的問題。我很興奮能有可能為這門語言和社區做出個人的貢獻。
入門資源
7 月 1 號當我開始我的學習之旅時,我已經有了一個開發一款簡單應用的想法。就我的初衷和當時學習情況而言,帶著這一想法是非常有幫助的。
我花了很長時間在網上搜索有關 Swift 的最好的資源、教程和課程。對于初學者來說,網上有很多好的資源, 但大多數都是假定你從沒有看過一行代碼,并開始得非常緩慢,比如介紹什么是變量,變量如何跳轉等。另外還有一些都是技術文章和參考資料(包括蘋果的官方文 檔),這些貌似只有那些有豐富經驗的或者是從 Objective-C 轉到 Swift 的同學能夠看得懂。
最終,我還是找到了適合我這樣初學者的資源,以下是我找到的一些最有用的:
- Paul Hegarty 的斯坦福課程:Developing iOS8 Apps with Swift (用 Swift 開發 iOS 8 應用)。這個在 iTunesU 上是免費的。我是從學習這個課程開始的,并僅在一周之內就完成了前 5 節課和第 2 個作業。課程很快就變得很有挑戰性了,所以當我小試牛刀之后,我暫停了我的進度,去學習更多的實用教程。但是這真的是一個很棒的課程,Hegarty 教授真的有兩把刷子,以至于我現在都打算重新回顧一遍。如果你被一個問題難住(不要去 iTunesU 上找解決方案),這(http://cs193p.m2m.at/)是一個很有幫助的網站,會解釋每個問題并有解決方案。
- 蘋果的官方文檔:The Swift Programming Language (Swift 編程語言)。如果在這之前你有編程經驗的話,相比與蘋果的 iOS SDK 文檔,這本關于 Swift 語言的書還是很容易讀的。它清楚而簡潔,可以快速瀏覽,當你遇到問題時,可以很快地找到對應的參考概念。這個網站(Big Nerd Ranch)為他們的 Swift 訓練營成員提供了一些課前文件(pre-reading assignment),包含了一些類似概念的內容,還有面向初學者可實現的實例。
- www.raywenderlich.com。這 個看起來像是個花花公子的個人網站,但是不要被它迷惑了。這個網站是我訪問過的最好的學習資源網站。如果你從沒有創建過 iOS 應用,就從注冊這個網站開始吧,你可以獲得簡報和經典的教程——這些教程會讓你感到如史詩般。只要你愿意,你絕對可以在一天之內完成它。這些教程使我第一 次投入到神秘的 iOS 開發中,它揭開了許多很容易讓初學者氣餒的謎團,當我使用 Xcode 編程時,它會給我很多特性和功能上的啟發。當你完成第一個教程之后,網站還會提供大量額外的免費教程。我可以從中挑選一些去學習,以滿足我開發應用的需 要。這里有如此多的很棒的資源,讓我迫不及待的要去學習。
我大致的時間安排:
- 第 1 周:入門。我快速地投入到斯坦福課程的講義和任務中,我通讀了大量關于 Swift 語言的書,并且完成了 raywenderlich.com 網站上的經典教程。在這之后,我感覺我已經準備好開始開發我的應用了。
- 第2-3 周:磨礪。就從我開始開發我的應用的那天起,我也開始了在緬因州的一艘帆船上的 12 天之旅。與咖啡和平靜的水面相伴,我每天早上都會花幾個小時在我的應用上。由于沒有網絡,我唯有專注在代碼上,而不是在 40 個網頁之間來回切換,這使我停下來去思考我在嘗試做的事情及其原因。這些天我發現我一直在考慮我的代碼,并迸發出新的思路,并渴望在第二天早上嘗試它們。
- 第四周:我真的做到了。經過一段緩慢的學習過程,我進入了高產階段,當我一天的成果超過之前幾周的總量時我倍感驚訝。最后一天,我清理了我的代 碼,并跑通了一些詭異的邊界測試用例,這讓我出奇的滿意。作為一名產品經理,每當我把任務分配給很多工程師時,我會為此感動擔憂。當我有能力自己去完成 時,我感覺非常棒。最后我在 Sketch 上創建了一個簡單的應用圖標,根據引導把應用上傳到 iTunes Connect 上,并提交給蘋果審核,不到 24 小時,我就通過了審核。
7 月(通過 RescueTime 記錄),我在 Xcode 上花了 25 小時,在 iOS 模擬器上花了 2 小時 52 分,在 Preview 上花了 4 小時 23 份(閱讀教程),還有 51 分鐘花在 Stack Overflow 上。另外我還在手機上讀了許多資料。
Swift 社區
為了融入 Swift 社區,我還做的其他的一些事情:
- 訂閱 We ? Swift 的簡報
- 訂閱 Dave Verwer 的 iOS 開發周報
- 關注 Medium 網站的 Swift 標簽
- 收聽 raywenderlich.com 的播客
- 通過 meetup 尋找志同道合的人聚會(我加入了布魯克林 Swift 開發組和 iOSoho 組)我參加的第一個線下聚會是由 Dave Grandinetti 組織的,叫做“Learning Swift the Euler Way”的談話式聚會。Dave 開發了一個工具,我很高興可以去看看這個“EulerKit”,它提供了一些輔助方法可以協助你解決 Project Euler problems。我已經完成了前兩個,但是之后會變得越來越難。
- 加入學習小組:(1)helpMeCodeSwitf 是我無意中加入的一個小組織, 現在只有兩三個人活躍其中。但是他們超級友好,從不會因為問他們一些菜鳥問題而惱火。(2)swift-lang slack 是一個大一點的組織,它可以給我一些即時的反饋,但似乎沒有太多的初學者,這讓我不敢輕易加入他們的交談。或許我應該要求他們為初學者創建一個頻道。
以上是我發現的有助于學習 Swift 的資源。如果你有其他好的資源,請添加評論并注明你喜歡它什么以及好在哪里(譯者/程林)。