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















 
 
 










 
 
 
 