確切地講,我是30天前開始學習swift的。3天前,我開發的第一個應用程式通過了蘋果公司的稽核。相比其他事情,這一開發過程並不算什麼,但是對我而言,卻是一個巨大的成就。
我沒有計算機的學位,也沒有專業的開發經驗,但是在過去的5年中,我一直在一個開發團隊中擔任產品經理。因為興趣,曾經也用Ruby寫過一些Rails應用。我一直想和我的工作有一個更直接的聯絡,所以我決定開始程式設計。
為什麼選擇iOS和Swift
- 移動市場是巨大的;手機是個人的。我想開發一些對使用者切實有用的軟體,並且我非常喜歡人們與手機之間的親密關係。我們的手機非常瞭解我們——它知道我們什麼時候醒來,什麼時候睡覺,在什麼位置,是怎麼到達這個位置的,我們的日常安排、我們與朋友、家人的談話內容,甚至更多。因為我一直使用蘋果產品,所以很自然地選擇從iOS開始。前段時間,我嘗試了下Objective-C,發現它的地位正在受到威脅,因為Swift一直很受歡迎。
- 良好的約束。專注於蘋果平臺和在適用於口袋般大小的螢幕開發提供了良好的約束。這些約束讓我很好的專注在需要學習的技術上(相對於永無休止的網頁開發),還促使我把創造力聚焦在使用者體驗上。
- Swift是一門快速進化的語言。我喜歡看著事物從底層開始成長和發展,並參與其中,這也是我為什麼喜歡在初創公司裡工作的原因。有些事情能夠使一門不成熟的語言日趨完善,我加入到一個小團隊一起去嘗試解決那些有待完善的問題。我很興奮能有可能為這門語言和社群做出個人的貢獻。
入門資源
7月1號當我開始我的學習之旅時,我已經有了一個開發一款簡單應用的想法。就我的初衷和當時學習情況而言,帶著這一想法是非常有幫助的。
我花了很長時間在網上搜尋有關Swift的最好的資源、教程和課程。對於初學者來說,網上有很多好的資源, 但大多數都是假定你從沒有看過一行程式碼,並開始得非常緩慢,比如介紹什麼是變數,變數如何跳轉等。另外還有一些都是技術文章和參考資料(包括蘋果的官方文件),這些貌似只有那些有豐富經驗的或者是從Objective-C轉到Swift的同學能夠看得懂。
最終,我還是找到了適合我這樣初學者的資源,以下是我找到的一些最有用的:
- Paul Hegarty的史丹佛課程:[url=”https://itunes.apple.com/us/course/developing-ios-8-apps-swift/id961180099″]Developing iOS8 Apps with Swift[/url] (用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的資源。如果你有其他好的資源,請新增評論並註明你喜歡它什麼以及好在哪裡。