跳到主要內容

常聽人說「現在人人都要學會 coding」-- 但到底是要學什麼?從何開始?去哪裡學?

最近換工作,要學很多以前我沒用過的程式語言技術,像是 TypeScript, GraphQL, Relay 等等。於是我上網找了很多免費的、付費的教學影片,像是在 YouTube、 Udemy、PluralSight 等等平台。

但很多教學影片從製作至今已經過了兩三年甚至五六年。在軟體的世界,過一年就人事已非了,何況是現在去看 2016年的教學說明。許多 web packages 的版本在六年間已經從 version 5.x 跳到 18.x 之類的... 因此即便那個教學影片再怎樣的手把手教學都沒有用。資訊已經完全過時。

軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。

軟體的世界就是這樣,技術日新月異。圖書館都不願意收舊的 coding 教科書,因為過時的資訊難以幫助到人。

許多人常萌生要自學 coding的念頭,但因為不得其門而入,一不小心熱情就會澆熄。身為一個自學 coding轉行當軟體工程師的人,我理解這種感覺。我們身在一個資訊爆炸的時代,但資訊量太大,找到對自己有用的教學資源其實就是自學最困難的一步。

很多人想到要學 coding,會想「課程會不會很貴?」「會不會很難?」「會不會需要花很久的時間?」其實這些問題都問錯了。自學 Coding是個知難行易的學問;如果知道怎麼找自學的資源,不用花多少錢甚至免費就能達成。如果找到對症下藥、適合自己的資源,認真跟著看跟著做也不會難上手。但如何找到那個沒有過時、資訊正確又適合自己的課程?很多人花了大把時間、大把金錢就卡在這個第一步。

我舉一個生活化的例子你就懂了。Ikea 的傢俱你說難組嗎?其實一點都不難,但先決條件是 Ikea的說明文件非常好懂、資訊正確,而 Ikea 家具的品管做得不錯,大部分我們買回家的包裝裡頭零件都正確,因此照著說明書一步一步完成不難還非常有成就感。

但我們也都買過很爛的家具組:說明書沒人看得懂、裡頭的零件缺一大堆,甚至連家具的裁切、材料本身都有問題,大小根本組不起來。不然就是說明書過時了:零件已經改版本了,但說明書沒有更新。如果組一個家具要一直打給客服補貨、換貨,而且甚至問題在哪裡我們都推敲不出來、客服那頭沒人回答我們問題... 我們一定非常洩氣,很快就放棄組家具了。我們一定心想「組家具太難了!」

以網頁開發這塊的 coding來說,市面上充斥著好的、爛的教學資源。免費的也有、付費的也有。並不是愈貴就愈好,也不是免費的就沒用,所以良莠不齊,讓門外漢非常不得其門而入。要知道任何人都可以上傳影片到 Youtube,而就連 Udemy 這種教學平台都是素人教學,真的沒有說誰就是天生的「專家」。

講了一大堆,我要給予想要自學寫程式卻不得其門而入的你幾個建議:

1. Coding 的應用非常廣。首先請理解你為什麼要學寫 code。

很多人問我,學 code要學什麼語言?什麼語言最有用?其實這個問題問錯了。每個語言都有它的用處,端看你想要拿它來做什麼。你說西班牙文比阿拉伯語有用嗎?但如果你的目的是要去阿拉伯旅遊,那自然是阿拉伯語比較有用。

Coding有一層神秘的面紗,因為我們一般人不太知道什麼地方需要用到程式語言。答案是,任何科技產品背後幾乎都有軟體工程師。不管是你的手機、平板電腦、工廠的機器手臂、生產線的運行、網頁、導航程式等等等,這些東西沒有一樣不是靠程式語言達成的。所以先要知道你想要從事哪一個產業、哪一種的軟體工程師,才能知道該學哪一種語言。

這裡有一篇講各式各樣的軟體工程師種類

2. 開始學之前,先花一個月以上的時間做研究、擬定學習計畫、尋找適合自己的資源。

我最近陪女兒看一個芝麻街的影集叫做 Mecha Builders,教小朋友怎麼以工程的角度解決問題。裡頭的人物每次遇到問題都是三個步驟: Plan it, Test it, Solve it。

工程的基本流程,第一個步驟就是規劃。工欲善其事必先利其器。把自己想學 code 的目的是什麼、時程是什麼、教學材料是什麼全部都想好,最後才是開始學。上課是最簡單的步驟。

台灣亞洲流行補習文化。補習班就是把 planning 的步驟都幫你做好了,時程、教材都準備規劃好了。甚至連你的最終目的都告訴你了:按照志願序填下來就對了。在這樣的教學環境長大,會讓我們以為只要等著別人告訴我們該學什麼,然後我們照單全收就對了。就像是別人把食物都熱好放在你面前,看誰吃得了最多就贏了。

但如果今天沒有人幫你把三餐備好,你知道去哪裡買菜、如何切菜、怎麼煮三餐嗎?其實前面的步驟比吃難得多了;如果你種菜、買菜、洗菜、切菜、煮菜都會了,還害怕不會吃嗎?

事實是,如果你只知道怎麼吃,那你就只能等著別人幫你煮好飯,別人煮什麼你吃什麼。只有你自己知道怎麼規劃自己的三餐,你才有選擇權自己煮自己想吃的。
所以說要把重點放在如何擬定學習計畫,尋找學習資源。Ikea 說明書有了、零件道具也都有了,那就幾乎人人都可以組出家具。但自學任何事情的路上不會有人把說明書交到你手中;你要自己主動去搜集資料。搜集資料本身就是很好的工程師訓練。

講個時事,最近的以馬內利補習班事件,其實不就是被強迫灌食小孩知識罷了嗎?但如果要那些小孩自己規劃自己要學什麼、思考自己為什麼要學某件事,那才是更難、而且不是人人都能做到的。

3. 請看教學資源上一次更新的日期。

通常如果是一兩年之內有更新過,那資訊可能還對得上。超過三五年沒有更新的課程,很可能已經過時,不如花時間找更常更新內容的課。


4. 有問題的話,有沒有可以詢問的地方。

Stack overflow 是一個人人都可以上去問問題的平台,但愈冷門的技術,就愈少人討論,你遇到問題的話,很可能就得自己摸索答案。 愈普遍的語言,資源愈多。

就像你如果今天學一個很冷門的語言,比如某個快要沒有人使用的原住民語言,你遇到問題的時候、需要教材的時候,都會比較困難。當然也有好處,就是你一旦變成專家,你的競爭對手也比較少。

最後附上幾門我自己上過,一直不斷更新到最新資訊的課程,價格也很親民。這幾門都是想要從事網頁開發的新手很好入門的課程:

The Complete Web Developer in 2024: Zero to Mastery (這門課現不在 Udemy 上;如果堅持Udemy 平台,建議很受好評的 The Complete 2024 Web Development Bootcamp
Master the Coding Interview: Data Structures + Algorithms
The Complete Junior to Senior Web Developer Roadmap (2024)
Complete Python Developer


最最後....

《讓我自學轉行成為矽谷軟體工程師的唯一一堂線上課程》

直接講結論。那唯一一堂課就是 The Complete Web Developer in 2024: Zero to Mastery (當時上的是 2019 版本,但它每年都更新)。 七折折扣碼 PPP_30 九折折扣碼 FRIENDS10

追蹤我的粉絲頁一段時間的朋友,就知道我一直很推崇一位線上課程的老師 Andrei Neagoie。
我 2019年上的是他這門 The Complete Web Developer: Zero to Mastery。我那時小孩才剛出生幾個月,我沒時間去上程式語言特訓班 bootcamp(光每天要搭地鐵進舊金山這點我就不大可能達成),所以我選擇在家看線上課程。而這門課就是我自學期間 60% 的資訊來源,讓我用九個月的時間轉行找到矽谷軟體工程師的工作。 這門 Zero To Mastery 的課後來Udemy 已經沒有了。原因是 Andrei 自己創業搞自己的平台了。因為他的課程夠多(現有 76門 coding 課,包含網頁開發、前端、後端、AI、機器學習...),這也很合理。

因為Udemy 俗又大碗,我一直沒有推薦 Andrei 自己的課程平台,但現在經過那麼多年了,我還是覺得那門當初帶我入門的 The Complete Web Developer: Zero to Mastery 是門非常好的課,無可取代。它真的是零基礎手把手教學,讓你實作做出好幾個網頁。課程非常有料,我重複看了很多次。而且有讓你發問的地方,助教會回答。還有很重要的一點,他會一直更新他的課程,所以你得到的資訊、學到的技術永遠是最新的。

我每天信箱都收到非常多想要我幫他們推薦書呀、產品呀、課程呀等等的邀約,但因為我是雙寶上班媽媽,沒有太多時間親測這些產品,我絕得不會亂推我自己不了解的東西。但 Andrei 的課是經得起時間的考驗的。他也沒有找我幫他推銷;我從很多年前就自己 email 他問他有沒有跟他合作的機會,幫他把他的課程介紹給我的讀者們。 但因為他自己平台的課程賣得比 Udemy 貴,我還是戒慎恐懼地想了又想,會不會大家覺得只想要便宜的?

如今他的課程已有 76門,他平台上的課程已經規模經濟了,也已經不貴了。重點是我自己上過他五門課(網頁開發、Coding Interview、python、machine learning 等,我把連結在底下 ),我可以很確定他課程的品質是很好的,教的方式也讓人很好理解。他平台上涵蓋的內容包羅萬象,跟coding 有關的主題都可以找到。

有時最花時間的事不是看 Netflix,而是在選片。上線上課程也是這樣;課程很多,但我們要花超多時間過濾資訊。那不如就去 Andrei 的課程平台上找課程吧,確保品質。
你可以選擇
1. 單買你喜歡的課程 (每門價格不一)
2. 付月租費,在會員期間可以上76門課任何一門 (23 USD/month)
3. 終身會員 (999 USD)

以下折扣碼都試試看:

五折: PPP_LOW
七折折扣碼: PPP_30
九折折扣碼:  FRIENDS10


Zero To Mastery Academy (一次瀏覽 76門課程的總課程平台)

其他推薦課程:Complete A.I. Machine Learning and Data Science: Zero to MasteryThe Complete Junior to Senior Web Developer Roadmap (2024)
Master the Coding Interview: Data Structures + Algorithms
Complete Python Developer in 2024: Zero to Mastery


想要聽我完整的轉行故事嗎?
我的自傳《文藝少女的矽谷進擊》博客來連結:https://reurl.cc/GdgLNW


延伸閱讀:
是不是要「很聰明」、「數學很好」才能寫 code?
寫 code 與寫作的相似處猶豫「我適合當工程師嘛?」
這麼老了轉行還來得及嘛? 一歲女兒顛覆我對「時間」的理解女生當工程師比較難嘛?
想學寫程式的我,是否太笨了?(探討先天條件 v.s. 後天努力)
















留言

  1. 謝謝您的分享。
    看到文末這段話「有時最花時間的事不是看 Netflix,而是在選片。」深有同感!
    決定初入門學coding就從Andrei 的課程平台開始。

    回覆刪除

張貼留言

這個網誌中的熱門文章

什麼是 Assertiveness? 你容易被情感勒索嗎?

來到美國後我才第一次聽到 assertive 這個單字。美國人將 assertiveness 視為很高的美德,因為那代表一個人具備足夠的自信、溝通技巧、人際成熟度,以至於能夠堅定、清楚地表達自己想要的與不想要的,卻不會因此傷害他人或顯得傲慢、無禮或威脅他人。 Psychology Today  是這樣定義 assertiveness 的: “Assertiveness is a social skill that relies heavily on effective communication while simultaneously respecting the thoughts and wishes of others. People who are assertive clearly and respectfully communicate their wants, needs, positions, and boundaries to others.  Individuals who are high in assertiveness don't shy away from defending their points of view or goals, or from trying to influence others to see their side. They are open to both compliments and constructive criticism. ” (「Assertiveness 是一種社交技能,依靠的是在有效溝通的同時尊重他人的想法及需求。Assertive 的人能清楚且尊重他人地說明自己的需求、渴望、處境以及社交界線。擁有 assertive 特質的人會積極地說服他人了解自己的觀點,也積極地爭取、辯護自己的想法。他們對於讚美及有建設性地批評同樣地歡迎。」) 美國人如此看重、欣賞的 assertiveness 這個單字在中文卻似乎沒有相對應的翻譯。Google translate 將 assertive 翻成「斷言的、斷定的、過分自信的」;我覺得這些翻譯充滿負面含義且非常不正確。 生長在台灣的我,認為台灣確實沒有 assertiveness 的文化。我觀察到的台灣人,普遍很少直接說出自己想要什麼;如果說出來,

是不是要「很聰明」、「數學很好」才能寫 code?

在我去年開始自學寫程式之前,我常常問是軟體工程師的朋友:「寫 code 很難吧?感覺超難懂。」在我心目中,寫 code 跟「數學能力」最有關係。 有趣的是,凡軟體工程師給我的回答,幾乎都一樣:「不會呀。學寫 code 就像學英文、日文那樣,就是一個語言。」 但我不是很能夠被這個答案說服,因為我以往跟程式語言的歷史告訴我,寫 code 是很困難的。我從高一第一次接觸 C++,到後來大一上土木工程系的必修課也是修 C++,經驗都蠻慘的,因此我就宣判自己沒有寫程式語言的天份。直到去年我從零開始再次透過線上課程自學寫 code,我才終於體會朋友們說的「學 code 就像學任何一個異國語言一樣」這句話的意思。 就從我高一的時候,第一次接觸程式語言的故事說起吧!那時是我學校的物理老師鼓勵我學程式語言的。他以完全免費的方式輔導我在假日期間學 C++,大概也是看到我對理工科有興趣,想說我可以自學寫一些小程式、搞不好還能參加什麼比賽之類的。於是他給我開了書單,讓我買了兩大本比字典還厚的 C、C++ 教學工具書(這種書現在還存在嗎?)來看,並且給我出功課,要我自己研究怎麼做出一些程式。 但朽木如我,一直碰壁,步步都感到挫折。那時的我,還不知道怎麼「自己找答案」,因此我心中一直期待老師可以好好示範他到底要我做什麼,因為我連他出的功課的題目、他到底想要我做些什麼我都不了解,也不知道從何問起。現在回想起來,老師心中一定是想:「這有什麼難的?自己看書,看不懂去找答案,不就這樣嗎?實際做做看、做不出來用力想直到做出來為止,難道還要手把手教學嗎?」但要知道那時候的我,雖然很喜歡數學、物理,理工能力不差,但「電腦」對我而言,就是一個玩接龍和踩地雷的工具,因此我連怎麼按照書上的說明去設定寫程式的環境都搞不清楚。 總之,第一次學寫程式的經驗,就在我心中無限多個黑人問號中無疾而終。直到上了大一又再次遇到 C++。 這次我以為我可以學得比較好,畢竟這是我第二次跟 C++ 碰面了。我們用的課本,再次是那種厚得令我第一天就把它切割成三分的工具書。但豈知第一堂課老師也就講完差不多三分之一本課本,一下就上完一、兩百頁的進度。 「等等啊!」我心中吶喊。第一堂課我們就從 Hello World 上到 for loop,而且是雙層的 for loop, 因為要用程式語言畫出這個形狀: