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