現在回想起來,我從5月份開始學 Swift 語言到現在斷斷續續也算有近六個月,從對程序一點感覺也沒有,到現在的“開壇做法”,一路經歷了很多。可能說對於工作多年的高手來說,這些都太膚淺了,一句“你還需要項目經驗”就可以把我殺的血槽-1,不過對於大多和我一樣的“小白”來講,我覺得我這半年走來的路是可以復制的。
對於OPEN(面向對象編程)的入門,我是從學習 Swift 開始的。目前為止,我還能記得所有學習的過程,知道一個自學的人是多麼的艱辛,遇到問題從來沒有人解答,別人遇到過得還好,Google可以找到答案,如果是其他奇奇怪怪的問題,那幾乎只能保留。推上經常有人說:“對於編程語言,只有兩種,一種是比較新的語言,另一種是過時的語言”——Swift就是前者,這就注定了關於它的文章中文的資料沒有多少,所以就有很多人錯誤地以為:“我想要學習Swift,就要學習OC(Objective-C)”。
Swift 和 OC
Swift 不是 OC,相反它和蘋果早年的 Objective-C 一點關係都沒有。儘管由於 Cocoa 的關係 Swift 從一開始就在向 OC 做妥協,點那也只是時間的關係,現在 Swift 版本已經到了2.1,裡邊 OC 的影子越來越少了。所以說,如果你真的想要學習的是 Swift ,那麼為此而先走一遍 OC 是沒有必要的。
——“那企業裡做 OC 和 Swift 混合開發怎麼辦?”
這可能是堅持先學 OC 的人最大的理由了,再進一步講“現在大部分企業其實還是在用 Objective-C 做開發”,沒錯,這是事實,Swift 還需要時間來迭代,但目前的確有不少企業在向 Swift 做遷移,混合開發也是必要的,但……總得有人做 Swift 部分不是嗎?如果你問我 OC 部分怎麼辦,我答你:“等你學會了 OC,那 OC 的開發者學會了 Swift,等你再學會了 Swift……”。
言而總之,Swift 是一門獨立且完整的編譯語言,將來開源的是 Swift 也不是 OC,如果你以語法為理由,那我覺得你還不如先去學 Python ,這是一門動態語言,但語法和 Swift 差不多——至少都沒有分號。
也許——學習OC的唯一理由就是 Cocoa ,這是做蘋果平台開發的基礎(比如 OS X 有 Cocoa ,iOS版有可可觸摸),為什麼說這是唯一的理由呢?因為 Cocoa 是 OC 寫的,它會對 Swift 做優化做遷移沒錯,但從年代來講,關於框架的文獻無論中文還是英文,都是 OC 的更多一些。好吧,關於這一條理由,我無法反駁——我目前還沒有接觸框架,因為我還在學習設計模式。這部分內容,我會在將來再回來討論。
視頻和書籍
讀書!
別看我在網上錄製視頻講課、在直播,但我自己卻真的很少看視頻來學習。一個是你很難遇到真的優秀的課程,另一個是視頻講的會很慢——也可能我就是那種所謂的視覺型學習者,我對於聽進去的知識很難消化,無論是看視頻也好,還是課堂聽講。
另外一點就是書籍的內容會相對比較嚴謹,也便於查閱。不過遺憾的是關於 Swift 的中午書籍少的可憐,另外由於 Swift 本身處在快速迭代期,而出版又有著滯後性,所以你買到的入門書籍也不可能是最新的語法——這一點和視頻一樣,你找到的視頻,我想,幾乎是沒有 Swift 2.1 的。
總之,學習還是要繼續下去,那麼我就分別說說,這兩種方式:
視頻
相對於出版的困難,出一套視頻就簡單多了,這也注定了現在網上關於 Swift 的教學視頻一抓一大把,不過你還是應該具有分辨視頻年代以及 Swift 語法版本的能力,我的學院就經常會有抱著舊語法來問為什麼報錯的,所以,相對於學習了過時的語法再糾正——我們要盡可能地學習新語法——至少讓糾正的成本變小。
視頻如果提供了發布的時間,那麼它至少應該在六個月以內,超過了,就不要看了——尤其是關於語法的東西。但也有例外,比如斯坦福有個cs106a的課程,幾乎是10年前了,但還是可以看的,為什麼?原因是它講的是面向對象,這種理論性的東西,幾十年可能都難以改變,所以就算編程語言不同,語法也舊了,但一樣不會過時。
另外就是看 Xcode 的版本了,截止到這篇文章第一次發布的時間,Xcode 的版本是 7.1.1,Swift 編譯器支持的版本是 2.1,如果是Xcode 6.4,那麼對應的就應該是 Swift 1.2,所以,如果你看到的視頻裡Xcode 版本是 6.0,或者更低,那請轉身就走。——除非你已經有能力根據語法特點進行排錯——這也確實是一項不錯的鍛煉方法。
最後就是視頻的推薦了,其實鏈接上文已經給出,是網易公開課的鏈接,就是我說的那個 cs106a 的課程,挺老的,語言是Java,但不妨礙我們學習編程的思想和麵向對象。
另外,有個知名的公開課就是那個iOS的開發 8 斯威夫特與應用(斯坦福大學公開課:iOS 8開發) 不過可惜的是這個我竟然一直都沒有機會看——一開始覺得自己水平不夠所以沒看,後來一直就沒有顧上~現在看來,估計語法也過時了,不過喜歡的朋友也不妨一看:)。
最後,現在網上有不少關於 Swift 的專門教學的網站,去看看那些實際 APP 栗子的視頻也是一個不錯的選擇。
書籍
那麼說起書籍,就有的聊了,我們先來聊聊出版書籍,國內的出版書籍基本你就別看了——大家水平都一個樣,那些《21天入門Swift》《xx帶你玩轉Swift》《Swift一笑而過》《由淺入深學Swift》《xx老師力荐Swift》(注:這些書名是我自己杜撰的,大家請不要對號入座,領會精神即可?)看看名字就好,如果其中真的有你喜歡的作者(比如將來的十步奶一人出書了的話?)那麼就買一本來收藏就好了。
國外的出版書籍嘛,由於出版的滯後性,再加上翻譯出版……我想,等它到你的手裡,是不是一本好書我們先不說,至少它語法不是最新的了。所以,如果將來有了Swift關於框架的書,那麼不妨買一本來研讀,語法就算了,實在是跟不上的。
下面再說電子書籍,由於電子書分發快,又容易修改,所以大部分都是能夠做到與時俱進,我們不要求作者追到最新的Swift 2.1,但至少作者會不停的去更新,這就讓人很感動了。下面,我就把我學習 Swift 讀的書分享給大家。
這其實是一本 Java 的入門書籍,它講了Java語法,另外更詳細地講解了面向對象! ——其實天下OO語言是一家,Swift 與 Java 也十分的相似。我入門 Swift,除了那門老舊的 cs106a 視頻外,就是這本“頭第一個Java”。
另外一本炒雞好的書是AppCoda的“開始的iOS 9 斯威夫特與編程“價格有點感人,但真的值這個價格,作者以一個APP作為栗子,從頭開始,把一個APP的完整開發流程帶你過了一遍!我在學習 Swift 的第二個月花了整整一個月的時間把這個APP從頭到尾做了出來! ——好吧,可能唯一的遺憾就是它是英文的,目前並無中文的翻譯,不過語言並不復雜,呃——如果你英語不是特別差的話。
對於進階,那麼我推薦王巍大俠的“更快 – 100 個 Swift 必備 tips (第二版)“,我覺得搞懂了這100個相關知識點,可以出師矣。書不貴,還持續更新,乃良心之作。我買了正版,讀完之後還專門打印下來慢慢翻看,真的是很棒。
最後,自然少不了蘋果官方的手冊,《Swift 編程語言》這裡我要吐槽的是它其實也不是最新的……咳咳,是的,最新的還要看 Xcode,不過,這是我們能找到的最新的權威文檔了。遺憾的是它也沒用中文版本,網絡上有1.0和2.0版本的翻譯,可惜由於是開源版本,更新並不迅速,翻譯的錯誤也不少——所以我自己開了一個項目,目前基礎章節的內容已經翻譯完成,你可以來這裡瞧瞧。
語法和理論
學習一門編程語言,我們的目的是在於如何用它來開發想要的軟件(或者服務),而不是開發一個計算器,一個小遊戲。所以你就必須要學會那些理論上的東西,因為這些東西對合作開發有著指導意義。
我們說 Swift 語言是一門OO語言,其實就是說它是一門面向對象的語言,那麼它就和 Java,和 Python 差不多,你學會了 Swift,你不會 Java,但如果你學會了面向對象,那麼可能 OC、Java、Python 就都能夠讀懂了。所以請千萬不要忽視面向對象理論的學習,只熟練了語言的語法是沒有多大用處的!
經常會有學員來問為什麼這裡就要這樣做,那裡不那樣就不行嗎?為什麼看你講課我就會,可是自己上手的話做什麼都沒有頭緒?為什麼你對任何應用一听就能分析能講能設計?
其實是我會忽悠而你不會(誤),其實是你不懂面向對象,沒有設計程序的分析能力。這樣對於一個問題甚至都不能把它拆分成基本的單位,有談何把它寫成代碼呢?沒錯如果不會語言就算能分析懂面向對像也沒有用,可是如果你不懂這些基本的 OO,又怎麼能理解的了框架和設計模式呢?
不懂框架和設計模式,穩定的程序是必然不會出現的。你不知道mvc,怎麼能用好框架?怎麼能用好別人的輪子?又如何與團隊合作?
——學好 OOP 啊,不然寫出來的不是代碼,是bug。
Baidu 和 Google
對於百度這個東西,我個人的意見是就連花邊新聞也不要用它來搜索,我從來沒有用百度找到過有用的東西,可能你會說關於隱私 Google 和 Baidu 是一樣的都會偷窺,但我覺得只是 Google 確實會收錄那些有用的東西——大部分情況下,如果你寫代碼遇到錯誤,把錯誤的內容貼到 Google 裡,就能夠找到先烈啦。
至於訪問,我博客右上角有個鏈接“如何才能科學上網“,這裡邊收集了近期可以使用的 Google 反代,隨便挑一個能用的不就行了?
最後
好吧,目前就只有這麼多了,隨著我學習的深入,我會再來填充更多的內容,希望這些東西對你的自學之路有所幫助!
本文由 落格博客 原創撰寫:落格博客 » 該如何學習 Swift 編程語言?
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1358.html