# 「自學程式現場」新手應該要學什麼程式語言？

> 學習程式語言是每位新手開啟程式設計之路的重要一步。無論選擇 Python、Java、JavaScript 還是 C 語言，關鍵在於選擇適合自己的語言。這篇文章說明了新手如何根據自身情況選擇程式語言，並探討了各種語言的優劣，協助讀者做出明智的選擇。

Published: 2021-09-17
URL: https://kaochenlong.com/your-first-programming-language

---

該學什麼程式語言，這是個接近討論信仰等級的戰爭問題，拿去問 10 個軟體工程師，可能會得到 13 種答案。為了避免張飛打岳飛，我先對「新手」做個簡單的定義：

&gt; 新手 = 沒有在學校學過怎麼寫程式，而且也完全沒有自己動手寫過任何一行程式的人

回到原本的問題，我的答案很簡單：

&gt; 都可以！選你看的懂、看的順眼的就好。

這有講跟沒講沒一樣，但我沒開玩笑，真的都可以。喔，有個東西不行啦，就是 HTML，原因很簡單，因為它不是程式語言！

我相信大家很多時候在買東西的時候，都會先網路上 google 評價、比 CP 值，我也是。沒有人想要學一個一開始就輸在起跑點或是沒有前（錢）途的程式語言，所以在 PTT 或其它程式討論區就常看到像是新手入門應該學什麼程式語言比較好之類的問題。

這時候通常會得到許多熱心網友的中肯推薦：

「Python 啦，現在它超紅的，而且用途又很廣，可以寫網站也可以做 AI」 「新手一定要從 C 語言開始打底啊」 「當然是 JavaScript，它前、後端都可以寫，學一套就可以前後端通吃，超划算的」 「組合語言啦，這樣才會完全了解程式在幹嘛...」 「要找工作的話，當然是學 Java 啊，市場上職缺很多」 「你應該先學好英文」

然後就會在推文看到各種花式吵架，從戰語言到戰薪資到戰學校、科系、學歷到戰南北，都有。

網友們這些中肯的建議，每一個單獨來看都可能是正確的，但這些建議，不一定符合發問的人的實際狀況（Context），可能淪為口水戰然後不了了之，最後新手還是不知道到底該選哪一款。

所以，對新手來說，這些「比較」真的是需要的嗎？

附註：附上一篇我很喜歡的文章「[軟體工程師的鄙視鏈](https://vinta.ws/blog/695)」 ，期待出 2021 年的更新版本。

## 你應該先建立程式思維？

「程式語言只是工具，重點是要建立程式思維！」

這樣的說法大家可能曾聽一些技術圈的前輩（或培訓班）講過，這兩句話分開講都對，放在一起講也對，我也認同，但如果這段話的受眾是沒寫過程式的新手的話，那就跟幹話沒兩樣。

習慣程式思維之後，在遇到問題的時候會習慣把工作拆解成一個一個小單元，或是設計可以重複使用的模組，但這些都是會寫程式之後的事。對一個連程式語言長什麼樣、怎麼寫都不知道新手或是一個 SyntaxError 就要解半天的學習者，要建立什麼思維？

就像對我這種不會煮飯的人來說，「加少許的鹽」這樣的說法意義不大。我的手這麼小，你的少許跟我的少許是一樣的嗎？對我這種做菜小白來說，最好是那種鹽巴罐本身就有附一隻小湯匙，然後跟我說要加幾匙的鹽就好。（嘴巴講的好像很秋，但其實我還是只會煮泡麵再加個雞蛋...）

## 你學寫程式的目的是什麼？

有些人學習程式是因為這是學校作業規定，不交作業會被當掉，如果是這種自然就沒什麼選擇，當然就是使用課堂上老師教授的那款程式語言。

有的是因為爸媽聽說隔壁村子的那個誰誰誰，他們小孩最近都有在學程式，我們家的小孩也不能輸在起跑點上，所以趕快也來去報個電腦才藝班。

或是看報紙說寫程式是將來每個人都會的技能，不想被這個世界拋在後面 FOMO（Fear Of Missing Out）焦慮感...

### 「教練，我想寫程式...」

是說，如果是自己興趣或是想靠寫程式當職業，但之前又沒有相關經驗的話，我建議你先找你認識而且有一定交情的現役工程師朋友，問問看覺得你該學什麼比較好。因為你的好朋友通常比較知道你的狀況，雖然給你的建議不會像網友大大們那麼中肯，但應該不會為了想賺你學費而騙你（？）

如果幸運真的有這樣的工程師好朋友，可以再接著問看看他願不願意教你簡單的程式入門，也就是朋友在學什麼，你就先跟他學一樣的。你現在是個什麼都不會菜逼巴，就不要考慮那個程式語言以後會不會年薪百萬了。你先學會一款程式語言的基本語法，知道什麼是變數、知道 `if..else..` 在做什麼、知道函數、迴圈怎麼寫，先跨過最難過的「新手關」。

對新手來說，環境安裝是最討厭的了，但這些環境安裝問題，通常對只要沒有太混的現役工程師來說應該算是幼幼班的問題，看你的朋友願不願花點時間教你跨過這個關卡。就像要推動箱子，至少推力要大於「靜磨擦力」，推動之後的「動摩擦力」就會小一些了（我竟然還記得高中物理課本裡的東西）

但如果你跟我一樣沒朋友怎麼辦？也許實體或線上的社群是個不錯的地方，但這個容我在後面的文章再聊。

## 母語選擇

哪一種程式語言不是那麼重要，重要的是找到讓你學會第一個程式語言的方法，而你第一款接觸的程式語言，可能會影響後續看待其它程式語言的角度。

如果你什麼牌子的程式語言都沒聽過，也沒有什麼朋友可以問，那在 [TIOBE](https://www.tiobe.com/tiobe-index/) 上前 50 名都是還不錯的選擇。PHP、Java、Python 或是 JavaScript 都不錯，用的人比較多，卡關的時候網路上也容易找到答案。

但如果各位是連該用什麼工具寫程式都不知道的超級新手，那我會建議你試試 JavaScript，原因是因為它不太需要安裝什麼軟體，只要打開電腦的瀏覽器連上某些線上網站，例如 [CodePen](https://codepen.io/) 或是 [JS Bin](https://jsbin.com/)，直接在上面就可以練習寫程式。

怎麼寫？實體書店的書都是網路課程都是不錯的選擇，但該怎麼選我會在下一篇文章介紹。同時，在這個系列文章裡我也會試著錄製幾集簡單的 JavaScript 入門，不需要額外安裝什麼開發工具就能體會一下寫程式是什麼感覺。

到這裡也許各位會好奇「你不是寫 Ruby 的嗎？怎麼不推薦 Ruby 呢？」。有啊，我推薦啊，如果你能解決環境安裝問題的話我就推薦你用 Ruby :)

相關連結

- TIOBE https://www.tiobe.com/tiobe-index/
- CodePen https://codepen.io/
- JS Bin https://jsbin.com/

## 怎麼樣知道自己算是學會？

不會，你不會知道，更正確的來說，是「人類不會知道自己不知道的事情」，所以你不太可能知道自己算不算學會。

因為你是當事人，所以不容易透過「內省（Introspection）」方式得知道自己的變化，但透過「反射（Reflection）」可能會簡單一些。用白話文說，你如何覺得自己有長高？你會因為感覺自己的骨細胞不斷增生所以感覺有長高，還是你的朋友看你的角度從原本的俯視變成仰視而覺得自己有長高？

同樣的，怎麼知道自己算是學會？你也許不會知道，但是你的朋友、公司長官應該會感受的到。

某些解題網站可能也會感受到你的進步，原本題目完全看不懂的題目，現在你開始知道怎麼解了；原本 [Codewars](https://codewars.com/) 網站只能解 level 8，現在可以解 level 6 了。

學習的過程不是 0 跟 1，而是 0 到 1。

Codewars：https://codewars.com/

## 但是...

「但我英文不好...」 「但我已經年紀有點大了」 「但是...（人生最厲害的就是這個 BUT）」

不急不急，這些問題也不是這幾天就能解決的，我們就讓我們在後續的文章再來慢慢聊 :)

...to be continued ✌️

