當你努力想學習 Swift 時,全世界都會來幫你

如果大學時不小心錯過沈佳宜,也錯過資工電機等傳授程式機密的科系,是否就一輩子和 21 世紀最棒的工作 — iOS App 開發無緣,無法在咖啡廳寫寫程式扮扮文青,享受發光蘋果帶來的別人羨慕眼光呢 ?

從前答案是很殘酷的 YES ,開發 iOS App 的 Objective-C 程式語言只比火星文好懂一點。然而在 2014 年的秋天,一切都變了! Apple 發明最適合人類學習的程式語言 Swift ,接下來就讓我們好好瞧瞧它的迷人之處吧。

一. 簡潔易懂,8 歲小孩也能上手的語法

Swift 是新發明的年輕語言,就像世界上大部分的定律一樣,新的總比舊的好,年輕的總比老的好。全新打造的 Swift 十分淺顯易懂,而且懂得沈默是金的道理,絕不多話,讓我們用少少的程式實現大大的功能。

精簡易懂的 Swift

let movieDic = ["男主角": "劉德華", "女主角": "關之琳"]
for (key, name) in movieDic {
   print("\(key)是\(name)")
}

冗長難懂的 Objective-C

NSDictionary *movieDic = @{@"男主角":@"劉德華", @"女主角":@"關之琳"};
for (NSString *key in movieDic) {
   NSString *name = movieDic[key];
   NSLog(@"%@是%@", key, name);
}
二. 重金打造,適合程式練功的遊樂園 Playground

大家都知道 Apple 什麼沒有,就是錢多。但最令人感到窩心敬佩的,卻是 Apple 總把錢花在有意義的地方,比方那重金打造,適合初學者程式練功的 Playground 遊樂園。在遊樂園裡我們可以隨心所欲輸入程式碼,立即見到程式執行的結果,馬上體會每行程式產生的蝴碟效應。

不過如此好玩的遊樂園十分挑剔,只接受 Swift 語法,只有 Swift 門派的學徒可以免費入場,其它語言門派只能被檔在門口,終生不得入園玩耍,就好像神鵰俠侶裡男子不得踏入神聖的古墓半步。

三. 站在金字塔頂端,快如小李飛刀

Swift 克服其它語言長久以來無法兩全的難題。 C 語言執行效能一流,但開發速度遠遠不及 JavaScript , Python 語言。 Python 開發很快,但執行效能卻又比不上 C , Java 。 Swift 同時兼顧開發速度和執行效能,幫助我們快速開發順暢的 App,讓我們有更多時間玩耍。(玩耍是一定要的,許多火紅 App 靈感都是在玩樂中現身的。)

Apple 官方投影片
四. 安全擺第一,不再帶給 App 無心的閃退傷害

Swift 在設計時將安全擺在第一順位,以幫助我們寫出更強壯,更不易閃退,問題更少的 App 為生平大志。它的許多設計都緣自安全的考量,而且更多時候它將在程式開發時給予警告和錯誤提示,將傷害減到最低,防止 App 執行時閃退,帶給使用者一輩子抹不去的陰影。

Swift: 我以我爺爺的名字發誓,絕對不再帶給 App 無心的閃退傷害
五. 點子都是偷來的, Swift 集百家之大成,成為地球上最先進的語言

全新打造的 Swift 站在巨人的肩膀上,結合各家所長,偷師其它語言的優點,改善其它語言的缺點,成為地球上最先進,功能最強大的程式語言。

六. 物以稀為貴, Swift 高手前景(錢景)不可限量

同樣開發程式,薪水的差距其實頗大,從無經驗的三四萬,到高手等級的破十萬月薪。台灣雖然工程師不比矽谷多,但精通 C 、 Java 、 Objective-C 的專家也已多到總能在街角的咖啡廳偶遇的地步。與其等待奇蹟發生,幻想自己某天一覺醒來功力大增,程式開發技術追上五年開發經驗的前輩,不如把握良機,儘早開始學習 Swift ,未來公司徵求三年經驗的 Swift 專家時,你我都有機會成為市場上少數符合資格,走路有風的 Swift 專家。

七. 豐富的學習資源

牧羊少年奇幻之旅裡有句名言,”當你努力想完成某件事時,全世界都會來幫你”。擁有 Apple 這個富爸爸在背後支持,如今 Swift 的學習資源已經十分豐富,

當你努力想學習 Swift 時,全世界都會來幫你

無數的好書,好老師,好網站,好影片,傳授著關於 Swift 的點點滴滴。

當你努力想學習 Swift 時,全世界都會來幫你

Apple 全力推廣 Swift ,甚至為 Swift 打造專屬網站,成為第一個擁有個人網站的程式語言。

所謂書中自有黃金屋,想要增進 Swift 技藝,一定要培養看書自學的能力。 Apple 官方的免費電子書 The Swift Programming Language 絕對是不能錯過的必讀聖經,關於 Swift 的一切都寫在裡面,其地位就像當年武林中人人爭搶的九陰真經。

雖然 The Swift Programming Language 寫得很棒,不過彼得潘也承認它有點難度,一般人往往無法消化,看到睡著也是件稀鬆平常的事,就好像當年西毒練九陰真經練到發瘋一樣。如果真的看不下去也不用勉強,坊間還有許多不會讀到兩鬢雙白,頭冒白煙的 Swift 好書可參考,比方 Apple 為初學者精心撰寫的兩本免費全彩電子書。

另外也可考慮壞人虎克船長死對頭寫的那本彼得潘的 Swift 程式設計入門。(既然是壞人的死對頭,想必是個好人,好人寫的書想必是本好書。)

走在時代尖端的大學也開始傳授 Swift 課程,例如美國 Stanford 的 Developing iOS 11 Apps with Swift。(ps: 不過此課程針對 Stanford 資工系的學生,所以建議有一些程式基礎後再來看比較適合)

網路上的程式教學網站和實體的補習班也一個個熱血地投入 Swift 教學,例如 App Coda Ray Wenderlich Udacity 等。

值得注意的,Objective-C 的相關學習資源已慢慢淹沒在時間的洪流。倘若搜尋最近出版的 App 開發書籍,將發現大部分皆以 Swift撰寫,英文和中文皆是如此。而網路上知名的教學組織,為了不讓自己顯得落伍,也都毫不留情地甩掉 Objetive-C,改以 Swift 為主角。時間不只是治癒失戀最好的解藥,同時也是輔佐 Swift 壯大的最大功臣。隨著時間腳步的推移,我們將發現未來想尋覓 Objective-C 的相關書籍,只能進入如同鬼屋的舊書店探險尋寶。關於 Objective-C 的一切,令人感傷地聯想到華仔的來生緣 ~ “尋尋覓覓,在無聲無息中消逝。總是找不到回憶,找不到曾被遺忘的真實。”

八. 向全世界開放的 Open Source

Apple 為了讓全世界體驗 Swift 的美好,下了一個改變世界的決定! Swift Open Source (開源),不再受限於 Mac 和 iOS 平台,目前已經能在 Linux 平台執行。可以預期未來將有愈來愈多的平台支援 Swift ,將來不只 App ,大大小小的軟體都有機會透過 Swift 打造! 也許 22 世紀的鋼鐵人就是由 Swift 製造的呢。

談了那麼多 Swift 的優點,也許有人還是因為以下兩點江湖傳言對於學習 Swift 有所疑慮,彼得潘倒是覺得不用害怕,它們不過是飄來散去的流言罷了。

流言一. Swift 還在成長階段,不斷改版,語法一直改變,不如等它穩定後再學習

Apple 每年持續改版 Swift,讓它變得更強大,更容易學習,更方便開發 App。這些小改變並不會成為我們學習的阻礙,因為 Swift 主要的核心精神和概念並沒有變。而且 Swift 現在已經進入穩定的狀態,未來的改版主要是增添一些新功能,只會有小幅度的更動。之後當新版推出時,只要再花點時間即可上手。

就算偶爾真的發生新舊版不相容的問題,開發工具 Xcode 也已貼心提供自動轉換的功能,可說是踏破鐵鞋無覓處,得來全不費功夫!

Xcode 提供舊版 Swift 轉換成新版語法的功能
流言二. 台灣大多數的 App 公司有情有義,仍然念舊地採用 Objective-C

台灣人是最念舊的,公司也不例外,所以也難怪很多 App 公司還是繼續採用 Objective-C 開發。如果公司要求一定要以 Objecitve-C 開發,認為 Swift 是旁門左道,那也不用沮喪。學會 Swift,再來學習 Objective-C 更是易如反掌,因為很多觀念是相通的。相反的,若是先學 Objective-C ,再學 Swift ,可能很多人在 Objective-C 的階段就已死在沙灘上,改行去賣雞排。

結語

Swift 的誕生,對於早已名聞江湖的 Objective-C 高人和想要投入 App 開發的新人,都是一個全新的契機。現在就好像一個新的時代剛剛開始,大家都站在同一個起跑點,人人有機會搶第一。開跑的鐘聲即將響起,請別再猶豫,拔腿狂奔地投入 Swift 的懷抱吧。

後記
當你努力想學習 Swift 時,全世界都會來幫你。
我也這麼覺得,當初彼得潘大學讀資工時,學校也沒教 iOS 開發。後來畢業上班後,因為喜歡 Apple 和上班無聊,開始下班在 ptt 的 CodeJob 找 iOS 案子,幸運地遇到很好的案主,讓我一邊看書學習,一邊完成案子。
做了幾個案子練功後寫信給出版社,也遇到好心的松崗願意幫一字未寫的我出書,讓我在寫書的過程中學習更多 iOS App 開發的細節。
出書之後有了當 iOS App 工程師和講師的機會,讓我繼續研究 iOS 技術,甚至實現製作偶像戴佩妮 App 的夢想。
Apple 果然有魔法。當你努力想學習 Swift (或 Objective-C)時,全世界都會幫你實現夢想 !
ps: 其實彼得潘當初是先學 Objective-C,因為那時 Swift 還沒出生,想學也學不到呀。