在 30 天內,從零開始學習 Swift
確切地說,我是在 30 天前開始學習 Swift 語言的。三天前,我的第一個對外公測版的應用被 Apple 審核通過了。這個對外公測的版本和最終產品比較起來,算不上什么,但是對我而言,這是一次極大的成就。
我沒有計算機科學的學位,也沒有做為開發人員所需要的專業經驗,但是最近 5 年,我在軟件開發組里的角色是產品經理,本著玩的心態,曾經做了一些 Ruby on Rails 方面的應用。我一直想和我忙碌的工作取得更加直接的聯系,因此我決定開始寫代碼。
為什么選擇 iOS 和 Swift?
龐大的移動;私人化的移動。我想做一款人們真正在用的軟件,人們和他們的手機有著親密感,我愛這種感覺。我們的手機太懂我們了——我們什么時候起床、睡覺,我們在哪里以及怎樣去那里,我們的日程表,和朋友、家人的交談等。這是我感興趣的地方,我很早就是一名 Apple 用戶了,當然從 iOS 開始比較好了。我短暫地體驗了一把 Objective-C,它比較恐怖,而 Swift 一直都受人喜歡。
約束的好處。Apple 平臺,可裝入口袋的屏幕,在這種范圍內去開發應用,就需要良好的約束。這些約束讓我專注于要學習的東西(與之相對的是,web 開發中深不見底的兔子洞【注4】),并促使我圍繞用戶體驗進行創新。
Swift 是一門快速發展的語言。我喜歡在剛開始時參與,觀察該語言的發展及演化,并成為小社區的一分子——這就是我為什么喜歡在創業公司工作的原因。創業公司允許用一種相對不太成熟的語言來攻關某個問題,加入更小的群組,盡量讓人和事銜接起來。對于向語言和社區貢獻一己之力的可能性,我感到興奮。
初學者資源
7 月 1 號,我開始了這段旅程,當時的想法是做一個真正簡單的應用。始終把這一點擺在最高位置,有助于激勵我、并應用我學到的東西。
為了找到 Swift 相關的最好資源、教程和課程,我投入了很長時間在互聯網上搜羅。有很多面向初學者的優秀資料,但是大部分都假設你從來沒有寫過一行代碼,起點非常低。比如,這是一個變量,看下變量跳轉。另一些資料是技術文章和參考材料(包括 Apple 的文檔),貌似有個前提:你有豐富經驗、或從 Objective-C 轉到了 Swift。
下面是一些不錯的資源,對于我這種水平的初學者,我覺得非常有用:
Paul Hegarty 的斯坦福大學課程《Developing iOS8 Apps with Swift》,可免費在 iTunes U 【注1】里獲取。我從這里開始,在一個多星期里,聽了前五節課,又做了一份家庭作業。這份教程很快就變得有挑戰了,因此在我入門之后,為了找到下面更實用的教程,我暫停了這個進度。不過,這是一份非常棒的課程,Paul Hegarty 教授熟悉他的資料,因此我打算回頭繼續學。如果你在練習上遇到了困難(你在 iTunes U 里找不到解決方案),那么這個網站解釋了每個問題的設置和方法。
Apple 推出的 Swift 編程語言教程。如果你之前有過一些編程經驗,這本 Swift 語言的書,和 Apple 的 iOS SDK 文檔相比,將非常易于閱讀。它清晰、扼要、可快速瀏覽,當你碰到問題時,你能明白在哪里能夠找到某些概念。Big Nerd Ranch 針對其訓練營打造了一份《Swift Pre-reading Assignment》,包含了類似概念,但為初學者準備了更多實用的例子,供你練習。
www.raywenderlich.com。這像是某個家伙的個人網站,但是不要被它的外表欺騙了。這個網站是我曾經遇到過的、最好的資源站。如果你從未創建過 iOS 應用,那就注冊 newsletter,訪問「史詩般的教程」吧——有那么一刻,感覺其極具史詩風格,但是,如果你愿意,用一天時間就能搞定。這個教程讓我初次深入 iOS 開發的古怪世界,為我們揭開了很多容易讓初學者望而生畏的秘密。我自己在開發自己的應用時,會參考這份教程,以喚醒我對 Xcode 里的某些特性或功能的記憶。在你學完這一份教程之后,該網站還有大量另外的免費教程,我精心挑選著學了一些概念,它們對于我做應用的想法有幫助。有如此多的優秀內容,以致于我早點兒想回去看看。
(大概的)時間線
第一周:沉浸其中。我沉浸在斯坦福課程里的演講和練習里,通讀了大量 Swift 語言書籍,完成了來自于 www.raywenderlich.com 的「史詩般教程」。之后,我就準備開始著手我的應用了。
第二、第三周:打磨。在我開始寫代碼的那一天,我碰巧啟動了為期 12 天的、在緬因州的帆船上的生活。咖啡、平靜的水面,我每天早上在這個地方待上好幾個小時。這里不能上網,我可以高度集中在 Xcode 里,而不用在 40 個瀏覽器標簽里來回穿梭。這迫使我停下來,認真思考了我正在嘗試做的事情及其原因。在這些天里,我發現自己在思考代碼時,會想出新方法,第二天早上就迫不及待地嘗試。
第四周:我目前正在做的事情。有一根陡峭的學習曲線,但是和前幾周相比,我在一天里有著更高的效率,感覺太神奇了。在最后一天,我清理了代碼,弄通了奇怪的邊界情形【注2】,令人驚奇、著實滿意。做為產品經理,我對這些場景感到厭煩,把多個小任務分配給工程師。我自己就有能力去除這些工作,感覺不錯。最后,我用 Sketch 創建了一個基本的應用圖標,按照步驟上傳到了 iTunes Connect,并做為公測應用提交給了 Apple。這個版本用了不到 24 小時。
在 7 月份(根據 RescueTime 統計),我在 Xcode 花了 25 小時,在 iOS 模擬器上花了 2 小時 52 分鐘,在預覽【注5】上花了 4 小時 23 分鐘(閱讀教程),在 Stack Overflow 上花了 51 分鐘。我還在手機上閱讀了很多資料。
Swift 社區
我還做了一些其它事情,讓自己融入 Swift 社區:
訂閱 We ❤ Swift 的 newsletter
訂閱 Dave Verwer 的 iOS Dev weekly
關注 Medium 上的 TAG:「Swift」
觀看 www.raywenderlich.com 上的播客
找到當地的 meetup(我參與了 Brooklyn Swift Developers* 和 iOSoho)
加入一個 Slack 小組:(1)helpMeCodeSwift 是我偶然進去的一個小團體。現在只有少部分活躍的人,但是他們超級友好,從來不會對各種小白問題感到厭煩。(2)swift-lang slack 是大團體,有問必答,不過貌似沒有太多初學者,對于進入這種交談的情況,我稍稍感到不安。可能我應該只是為初學者建立一種渠道。
說了這么多,都是我覺得有幫助的。如果你有其它的優秀資源想推薦,請在評論里,把你喜歡的東東、以及它為什么好的理由都寫上。
我第一次參加的 meetup 是由 Dave Grandinetti 發表的「Learning Swift the Euler Way」演講。Dave 開發了一個工具 EulerKit,我很激動地簽出了,它包含了一些 helper 方法,能為解決 Project Euler 問題助一臂之力。我參加了前兩次,此后就有些吃力。
最后,我的第一個應用——RoundTrip
我的應用,名字是 RoundTrip,面向那些乘坐大都會運輸署(MTA)【注3】的公交、且喜歡優化他們地鐵費用的紐約人。這是一款非常簡單的工具應用。
RoundTrip — MTA AppRoundTrip — MTA 的應用,敬請期待!
算出向你的 MetroCard 充入多少錢,以致于不會剩下用不到的錢。如果你充值超過 5.5 美元,MTA 將給你 11% 的獎金,且充值的最小幅度只能是 5 美分。這兩個條件交織在一起,讓匆忙行走的人們做心算,情何以堪呀。
評估你每月的乘坐次數,和買一張 30 天的、無限制的 MetroCard 做對比,看能否省錢。你還能記錄你的行程,查看你乘坐頻率的統計。
如果你想成為公測人員、或想知道什么時候可以獲取這個應用,請在這里注冊、或關注 @helloroundtrip。
感謝了解我的旅程,感謝 @cm 和 @amrithap,幫我評審本文的初稿。
我正在尋找一份工作、或以實習生身份做 iOS 開發人員!如果你有機會,請聯系 katie@katiesmillie.com 。
我的 twitter 是 @katiesmillie,網站是 katiesmillie.com