在一個寫程式正夯的年代,常遇到有朋友問我:「一點技術都不懂的人可以學寫程式嗎?學的起來嗎?」我的答案通常是:「當然可以學,但是學不學的起來不一定。」
怎樣才能學的起來呢?我歸結幾點觀察如下:
1. 三要素:動機、熱情、成就感
不管學習任何事物,動機都是最重要的。學寫程式本來就不是件容易的事,有動機才會有熱情,遇到挫折也較容易撐過去。2年前我決定開始學寫程式,是想要打造一個(自以為)有趣的產品,過程中遇到挫折與挑戰不計其數,好在有明確的動機與目標,學習的熱情才不至於被瞬間澆熄。
成就感則是另一個關鍵因子,想像你在學英文,每天要背100個單字,過程枯燥乏味,但如果你人在國外或有外國朋友,可以馬上實際應用你每天新學的東西,那成就感絕對比無聊的背單字高得多。學寫程式也是一樣,如果可以在初期很快地在網路上看到你架的網站,或是手機上看到你寫的 app,成就感的提升,自然而然會轉化為你繼續前進的動力。
2. 有系統的入門
學程式要怎麼入門?要自學還是上課,很多人討論過,在此就不贅述。
我想提的是「有系統」的入門,對於完全沒有任何技術背景的人來說特別重要。在進入 ALPHA Camp 以前,我也曾經在網路上找過很多相關的教學課程,免費資源雖然很多,但因為過於零散,東看西看的最後什麼也學不會,反而更加深挫折感。
當然,有系統不是一定要報名XX補習班的課,雖然專業的教學機構,理當是會提供你一個比較有系統的入門,但是,一本可以讀的懂的也讀得下去的書,或是一套完整的線上課程,只要是你能夠吸收的,適合你的模式,就算是有系統的入門,找到對的方向,學習的效果才會好。
(也來看看:最有系統的程式入門課,帶你學會網站開發)
3. 找尋同好
在學習的過程中,同儕的影響超乎想像的大,有上課的人,可以跟同學互相討論、相互扶持,是學習上很大的助益。自學的人,也可以透過參加程式相關社群或是 hackathon 結交同道中人。學習的路上即使再有熱情,如果永遠是孤軍奮戰,也是大大地加深了學習的難度,因此開始找尋同好一起學習吧!
4. 練習、練習、再練習
Erik Trautman 在 Viking Code School 部落格中的文章《Why Learning to Code is So Damn Hard》分析學習程式有多難,中間要經過一段漫長的絕望沙洲 (The Desert of Despair)。在過程中,就不是單靠有熱情有動機可以撐得過去,不斷的練習、不斷地找尋答案才能不斷的進步,這段時間是過程中相對痛苦的一段時間,因此前一點提到有同好一起互相扶持,在此時就顯得更重要。
最近在 PTT 看到一篇「轉職工程師經驗分享」,作者為了要練習 Objective-C, 做了一個 30DaysObjc 的開源專案,更是印證了不斷的練習,絕對是進步的第一法則。學習任何東西都一樣,就算你再有天份,也是需要不斷的練習才能持續進步,今年退休的 NBA 籃球巨星 Kobe Bryant,也是每天早上4:00就到運動場練球才能有今天的成就與榮耀,想成功沒有訣竅也沒有捷徑,一定要練習、練習、再練習。
5. 有目的性的學習
當有了一定基礎之後,接著要面對的問題就是程式語言那麼多,該怎麼選擇要學習哪種新技術?有很多人討論過選擇技術的廣度與深度,我認為雖然兩者都很重要,但除此之外,還是要回到學習最初的「動機」,從0開始要有強烈動機,學新技術也是一樣。
過去有個朋友看了星際效應的電影後,就開始想要寫一個跟黑洞有關的遊戲 app,讓一個原本只會 Android 的工程師因此踏入了 Unity 的世界。我個人也是一樣,兩年前開始學 iOS, 當時有個非常好用的後端服務叫 Parse,今年一月 Parse 宣佈一年後要停止服務,我於是開始研究如何做轉移,一看才發現沒有資料庫以及網路後端的背景知識,根本無從下手,因此又去學了 Ruby on Rails,現在 App 的前後端都有辦法自己維護。在 Parse 還沒宣布停止服務前,也曾經想過要學後端的東西,只是動機不明確,就會縱容自己的懶惰,一直學不起來。
現在的技術不斷更新多到你學不完,如何有效率運用有限的時間去學習以及清楚自己學習的理由非常重要,特地去學一目前很紅但是暫時用不到的東西效率難免不好,一來技術更新很快,二來學了沒拿來用,很快就忘了,有目的性地學習,才能讓自己的技能樹長的穩固又茁壯。
全端開發技能樹 JavaScript 全端工程師23周養成攻略
怎樣的人會學不起來?
3分鐘熱度學不會
很多人可能覺得這是廢話,不過根據筆者的觀察這樣的人並不少,明明就很有天份,一遇到挫折就退縮,不管學什麼東西都是學不起來的。
沒天份學不會
聽起來有點殘酷,事實卻是如此,這跟運動細胞類似,有的人天生運動細胞好,學什麼運動都很快,同樣也有人天生運動細胞不好,100公尺就是要跑個20秒,這樣的人勉強他去一定要把某個運動學得多好,其實也是強人所難。寫程式也是一樣,需要一定的邏輯能力,有的人邏輯好,學得快,有的人轉不過來,硬是勉強也是很辛苦的。
每個人都有自己擅長與不擅長的事,不會寫程式並不會怎樣,知道自己的特質就好了,當然,也有不是很有天份,但以加倍努力彌補的人,這些人多半都還是會有一定成就,關鍵是在於「持之以恆的努力」。依筆者的觀察,更多人是不知道自己沒天份,或是高估了自己的天份,於是對於初期的挫折灰心喪志或是怨天尤人。
每個人本來擅長的事情就不一樣,不會寫程式並不會怎樣,重點是要瞭解自己的特質與強項,誠實地面對。
(初學者必看:一個月內 打好程式基礎!)
結語:怎樣叫做學會?
你會講英文嗎?可能每個人對於「會講英文」的定義都各自不同,因為學無止境,東西沒有學完的一天,有沒有學會程式?要學到什麼程度?端看你對這件事的定義。
我在開始學程式10周後,就上台發表了第一個 app,當時以為自己已經學會了怎麼寫 iOS,後續進到新公司才發現,不會的東西比會的還多很多。一直到現在在 ALPHA Camp 擔任講師,教的也是很基礎的東西,還是發現自己還有很多不足之處,更加領悟到唯有持續的學習,才能不斷的進步。
不要問別人為什麼要學程式?要問你自己為什麼?
筆者過去常常在 ALPAH Camp 的說明會上被問到類似的問題,有很多人對我在華碩擔任資深 PM 卻決定轉換跑道的過程很感興趣,不斷的追問為什麼我要學程式,會不會很辛苦?雖然過程中我都會不厭其煩地回答,但最後都會強調,「 不要問我為什麼要學程式, 要問你自己為什麼要做?」唯有清楚知道自己的目標在哪,才能有熱情解決一路上遇到的問題,遇到困難挫折也才能堅持下去,我真心希望能有更多人找到寫程式的動機,才能真正享受寫程式的樂趣!