寫在彼得潘iOS App課程結束之後

會來上彼得潘的iOS App程式設計課程是因為想擁有另一個專業。雖然自己已經是多才多藝了,但根據時下最流行的一個詞,斜槓青年,才藝永遠不嫌多,所以即使已經橫跨Project Manager、Chess Player、Youtuber的領域,還是想再多學一點。而且自己有評估過這麼多斜槓,真正能為自己帶來金流的不多。經過我自己對市場的評估,認為iOS App Designer是真的可以帶來金流,所以集滿好幾個\\\\\還是其次,可以為自己帶來金流的\才是有用的。

這門課的老師是一位年輕且有活力,幽默且風趣的帥哥(希望這樣之後可以幫我介紹一些案子來XD)。而且難得的是上完這期課程,之後要重聽,彼得潘是不收費的(聽說十月底就要再開課了)。另外就是彼得潘把Swift和Xcode的使用方式幾乎完整介紹了,至少涵蓋的主題比市面上的書籍多很多,所以繳這個學費真的是值回票價。

而我認為最難能可貴的是彼得潘要求同學交的作業一定要附上程式碼,而且要能供所有同學下載。這真是讓我最感動的,何以如此說?請先看彼得潘的這篇文章:

我們的世界太多歌頌天才的故事,卻對於後面10%,甚至40%的人,提供的幫助實在太少。這是人的天性,人們總愛錦上添花,不愛雪中送炭。所以分享程式碼至少提供給後面的朋友一個追趕的機會,不會寫就先抄,不理解就先背。我本身過去也是從後面10%一路努力到今天,所以深有同感。

其實早在2015年,我就想自己開發iOS App,但是當時市面上的書籍真的更新太慢,跟不上Swift語法的改版,以及Xocde介面的改版,自己看書學真的蠻挫折的,記得當時光想要寫個解析JSON格式的Open Data就無法完成。沒想到今年在上了彼得潘的課程後,寫出了氣象人這個天氣預報的App,現在的我真的認為解析JSON原來就是這麼回事而已,小菜一碟。之前沒follow到氣象人的同學可以參考以下兩篇,總共有兩集。

另外就是上了彼得潘的課程後,完成了生平第一個電子書的程式,為什麼這麼說,因為我雖然是資工科系畢業,但之前不論是用C、Visual Basic,都還沒寫過電子書的程式。當然不是說那些程式語言不能寫出電子書,只是Swift在某些功能的App上,真的可以很迅速地開發出一個成果,而彼得潘在一開始的前幾堂課就把這個訣竅告訴大家了。

當初在報名時,我原本以為在班上應該是有很多資工背景的程式高手,結果發現還蠻多不是本科系或是沒有程式設計背景的,甚至有些同學對於程式語言的理解有些困難,這裡我想順便分享我最近重新對程式這門學問的理解給大家。

所謂程式,就是你和電腦對話的語言,只是這個對話比較特別,基本上是單向的,因為電腦不太會回應你每一句程式,通常只有在你寫錯時才會告訴你這一句話說錯了。但電腦真的是很聽話的,你要他做什麼,他就做什麼,只要你說的語言完全符合邏輯。如果你先把冷冰冰的電腦印象拋開,把他當成一個人,聽話的人,或者就說是工具人,他是會完全照你的吩咐去做事的,那麼其實電腦就跟我們人類一樣。何以如此說?因為我們也是遵從這個世界、國家、社會、公司、學校提供的環境、法令、政策在做事。只是我們可以有意志決定自己現在該做什麼,但是我們無法做出脫離我們所處的環境所制定的法規。所以如果有個台灣男人的protocol,會如以下所寫的:

protocol 台灣男人 {   func 12年國民教育()   func 納稅()   func 服兵役()}

然後每個出生的台灣男人都必須follow這個protocol,實作一種類別的人。我們知道這社會上有各式各樣類型的人,有人就是會逃漏稅、有人就是會逃兵,有人就是高中唸四年,這就是最後實作的類別不同。比如對於一個會逃漏稅的奸商,這個Class就會像這樣:

class 逃漏稅人: 台灣男人 {   func 12年國民教育() {     唸完12年畢業 
}
func 納稅() { 逃漏稅
}
func 服兵役() { 按時服完兵役
}
}

這個類別生成的台灣男人寫法如下:

var 奸商: 台灣男人 = 逃漏稅人()

所以每年五月,這個奸商都會執行這個function:

奸商.納稅()

外表是納稅,而實際內容就是逃漏稅。

但社會上還是有一些奉公守法的好國民,class就會像這樣:

class 好國民: 台灣男人 {   func 12年國民教育() {     唸完12年畢業
}
func 納稅() { 誠實納稅
}
func 服兵役() { 按時服完兵役
}
}

如果這個奸商哪一天良心發現,要遵守國家的稅法,誠實納稅,那麼他也會是一個好國民,這時他就變成這類型的人:

奸商 = 好國民()

同樣地,每年五月,這個奸商都會執行這個function:

奸商.納稅()

這時侯執行的實際內容就是誠實納稅。

為什麼奸商可以直接變成好國民?因為他是follow台灣男人的protocol,所以只要是follow台灣男人的protocol的類型的人,都是奸商可以成為的人。透過上面的例子,是不是就把難以理解的protocol搞懂了?

另外,我們班上的台灣男人都是好國民,會接受國民教育、誠實納稅與服兵役,但我們的人生當然不會只做這些事,我們也曾經學過很多專業與才能,所以我們就像是繼承了好國民的義務之後又發展了一些能力,比如會投三分球和桌球的彼得潘:

class 三分球與桌球王子: 好國民 {   func 12年國民教育() {     唸完12年畢業
}
func 納稅() { 誠實納稅
}
func 服兵役() { 按時服完兵役
}
func 三分球 { 三分球命中率60% }
func 桌球 {
殺球強勁
}}

這個類別生成的好國民寫法如下:

var 彼得潘 = 三分球與桌球王子()

所以下次和彼得潘打桌球時,他就會執行這個function:

彼得潘.桌球()

這時就會被強勁殺球給KO了,這樣子又搞懂繼承的觀念了。

而像是if…else,就像是我們每天做任何事都是有條件地去選擇自己要做的事,這跟電腦接受程式後的思維是一樣的。比如我們每天都在做的幾件重要的事,判斷這時要做什麼的寫法如下:

if 上班時間到 {   我.起床()} else if 肚子餓 {
我.吃飯()} else if 睡覺時間到 { 我.睡覺()} else { 我.工作() }

看了之後,有沒有覺得我們的每天生活蠻無趣的XD。

而迴圈就像是我們每天在重複做的事情一樣,就像我們每天都會去上班,但是遇到週末就會休息,到了週一又繼續這樣的生活,所以在我們身上的程式就會像這樣寫:

for 今天星期幾 in 星期一...星期日 {
if 今天星期幾 == 星期六 || 今天星期幾 == 星期日 { continue
}
我.上班()}

注意這裡使用了continue的指令,這是不執行迴圈之後的動作直接跳到下一個迴圈的意思。但是以上的程式只描述了一週的行為,要描述我們一年365天的行為就必須這樣寫(假設一年有48週):

for i in 1...48 {   for 今天星期幾 in 星期一...星期日 {      if 今天星期幾 == 星期六 || 今天星期幾 == 星期日 {         continue
}
我.上班() } 今天星期幾 = 星期一
}

看了之後,有沒有更覺得我們的每年生活蠻無趣的XD。

以上的說明是為了讓程式語言背景比較薄弱的同學,可以用非常生活化的想法,來理解程式語言真正的含義。其實人、電腦,都是有腦的,所以要做任何事必須follow的邏輯基本上是一樣的,我個人認為那些發明程式語言、物件導向的先進,應該也是用這樣的思維在設計這些理論的。總之,敬祝各位同學在往後的學習之路上更精進,也謝謝彼得潘這兩個月來的指導。

--

--