# 程式為什麼這麼難學？

> 在前篇文章我跟大家介紹了 senior 工程師的共通特質以及 junior 工程師的自我修練的...

Published: 2023-10-04
URL: https://kaochenlong.com/how-to-be-a-developer

---

在[前篇文章](/2023/10/04/from-junior-to-senior-developer.html)我跟大家介紹了 senior 工程師的共通特質以及 junior 工程師的自我修練的建議，希望對大家有些幫助。

但如果你不是軟體工程師，可能不知道在哪裡看到招生廣告點進來的，或是剛好正在考慮想要轉職軟體工程師的話，有一些過去以及我們自己帶學生的經驗可供你參考。

同樣，如果懶的看文字，也可以看影片配雞排：

&lt;figure class=&quot;youtube-video&quot; data-id=&quot;kf1LPgH9C50&quot; data-size=&quot;75&quot; data-caption=&quot;https://www.youtube.com/watch?v=kf1LPgH9C50&quot;&gt;
&lt;/figure&gt;

## 你為什麼想轉職軟體工程師？

如果你正在考慮轉職軟體工程師這件事，請你要認真的想想這個問題，為什麼？

有些朋友可能是目前的工作崗位的薪資天花板到頂了，或者在前幾年疫情比較嚴重的時候迫沒工作，這都是常見的轉職的原因。

我不知道大家想像中軟體工程師的生活是怎樣，會不會有人是覺得最近在刷抖音、刷 YouTube 影片都看到好像那些軟體工程師感覺一個過得比一個爽，看看那些矽谷工程師，收入又高，上班好像也都沒在做事...這是一定的啦，因為拍影片的人總不能把苦的一面拍出來給你看吧。

那會不會有這種年薪百萬、事少錢多離家近的工作？我相信一定有，只是以比例上來說相對比較少。以台灣來說比例會更少一些些，所以你一定、一定、一定（要講三遍）要想想看，你為什麼想要轉職軟體工程師。假設你已經想清楚了，想再了解更多細節，就再往下看吧

## 軟體工程師入門

軟體工程師種類很多，有做開發網站的，有做手機應用程式的，也有做硬體、韌體的，很多種類。如果你是資訊本科系應該沒有轉職的問題，所以我假設看到這裡的你是非本科系，如果想要進到這個產業但又不知道該選哪個角色的話，我的建議是**網站工程師**。

為什麼？首先，網站工程師的入門門檻相對比較低一點，並不是說這個比較簡單，我指的是入門門檻，要踏進去這一道門是相對比較簡單的。你不需要有什麼厲害的設備或實驗室或是多高的學歷，你只要有一台電腦，然後買幾本書或看幾個線上課程跟著做，你就有機會踏進這道門，說不定可以找到工作、拿到一張軟體工程師的入場券了，我是說真的。

但我還是必須很囉嗦的提醒大家，就是門檻低歸低，裡面水是很深的，不要以為說進來之後就是可以在這個行業就穩穩的吃了，不是這樣子的。

另外一個也比較推薦的原因是職缺相對比較多一些，然後薪資也還行，軟體工程師現在的薪資行情，以剛入門 junior 工程師來說，在台北來說低一點的月薪大概 35 \~ 38K 左右，狀況比較好的大概可以到 45 \~ 50K 之間。

學程式一直都不是一件很簡單的事情，不要去聽那些補習班跟你說只要學這個東西就可以找到工作。是啦，是找的到工作，但是如果要學的更好、想往更高的地方爬，如前一篇文章提到的，怎麼樣從 junior 變成 senior 工程師，過程其實很漫長的。

我先不提我們家的[培訓課程](https://5xcampus.com/camp/)怎樣怎樣，我想先跟大家聊聊為什麼學程式這麼難。

## 為什麼程式這麼難學？

有一張圖我想秀給大家一下：

![程式學習](/rails/active_storage/representations/proxy/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBalFEIiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--2f3366638f23db2f9679b9b17196ac7c94ad7a43/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2RkhKbGMybDZaVjkwYjE5c2FXMXBkRnNIYVFJQUJXa0NBQVE9IiwiZXhwIjpudWxsLCJwdXIiOiJ2YXJpYXRpb24ifX0=--578d6799c87a604ca574298502ba874c9075e929/coding_confidence_vs_competence.png)出處：[為什麼學習寫程式這麼難？](https://www.thinkful.com/blog/why-learning-to-code-is-so-damn-hard/)

Y 軸 Confidence 是指信心指數，X 軸 Competence 是能力指數。

在一開始學習的時候都有所謂的蜜月期，非常開心。我就以網站工程師舉例，通常一開始我們可能會先學 HTML、學 CSS、學切版，因為你都做的出來，這時候應該會覺得「哇！這個蠻簡單的嘛」

但是開始進到 JavaScript 程式之後，不少同學就會「欸？怎麼好像難度突然變高很多？」

我們很多學生，包括我自己以前也是一樣，到了開始寫程式的時候的難度會爬坡一下，在這時期的信心指數就開始往下跌，雖然你感覺你有在學東西，你的能力指數也確實有在增加，可是你的信心指數卻持續下降，開始懷疑人生。

這邊有個名詞叫「絕望沙漠」，而且這段時間有點長，我看到很多新手都在這個階段就放棄了。為什麼？因為在這個階段會發現好像再怎麼學都沒有進步的感覺。或因為過程進步的幅度非常緩慢，結果連帶自信指數開始往下跌。這是新手學習程式的第一關大魔王關卡，真的很多人會在這關放棄。

但這並不一定是你的問題。為什麼？因為以現在的開發工具或框架為了方便讓你很快把東西做出來，會做了適度的抽象甚至過度簡化了，簡化這些流程容易讓學習者可以很快做出成果來，會有進步的幻覺，一開始的時候進步會覺得很 OK，但要開始客製化的時候就發現改不動了。

接下來你得補齊更多的基礎知識才有辦法再進一步，因為在補齊基礎建設的過程不容易感受到自己的進步（或是沒有人跟你說你有在進步），相對的沒成就感，明明在變強但卻變的沒自信了，這是「絕望沙漠」造成的原因。

所以知道這概念之後，只要能夠撐過這段沙漠期，應該就可以繼續往上爬，信心指教跟能力指數都會慢慢隨之增加。只要你不是天生神力、智商 200+，這應該都是個是新手學習程式必須要經歷過的階段，差別只在於這個沙漠期會多久了，這也是為什麼程式難學的原因。

這很正常，我自己也是曾經在沙漠裡懷疑人生，只要能夠撐過去就可以了。問題是要怎麼經過這個沙漠呢，待會我們有一些建議可以跟大家分享。

## 自學 vs 上課

如果要學程式的話，應該要自學還是去上課給老師帶？

其實都好，就看自己個人規劃。以我開培訓班的立場，我一定是跟你說來來來，報名連結在這裡，趕快來這裡上課。但以我個人立場的話，我會建議你可以先從自學開始，真的，因為我自己也是這樣過來的。

### 設定期限與目標

自學很重要的點，就是一定要設定期限跟目標。很多新手學習者沒先做這件事情，就覺得說反正我現在沒有什麼壓力，就慢慢學。沒有設定期限或目標只要遇到長一點的休假或是最近有個遊戲剛出來，學習就很容易中斷，而中斷通常就得再重來一次。

所以自學的時候，你一定要給自己設定一個期限跟目標，甚至可以設定嚴格一點，像是如果沒有做到就怎麼怎麼樣之類的罰則。

### 挑選程式語言

設定完目標之後，再來要選一款程式語言，這個聽起來像廢話，但是如果說去各大論壇問新手要學程式語言該學哪一種，你會得到各式各樣的答案。

有些人會告訴你現在 AI 盛行的時代你應該就要學 Python，有些人會告訴你現在做網站就應該要學 JavaScript，它現在可以前後端通吃，有些比較硬派的會強調你就是應該學 C 語言打好你的基礎。

這些建議每條單獨看都對，但適不適合你？我不知道，我這篇文章也沒有打算告訴你說你應該學什麼，這不是這篇文章的重點。你應該先決定自己想要做什麼東西，例如說你想要做 iPhone 的應用程式，那基本上沒有什麼選擇，就是只能選 Apple 他們家的程式語言；如果說你想要寫 Android 手機應用程式，選擇稍微多一點點了；如果想要做網站，那個選擇就更多了，PHP、Ruby、Python 這些都可以，所以你要先想想看你想要做是什麼，決定方向，程式語言的挑選就不難了。

### 看書、看手冊

選定技術之後，再來就是先翻一下官方網站，這很重要，如果可以的話先跟著官方手冊順一次大概流程。看一下基本的語法，跟著教學做。

你也可以去買一本書來看，如果說假設你覺得逛手冊太無聊，然後書也不知道該怎麼看，因為畢竟程式是需要敲鍵盤的，你可以跟著某些線上課程一起做。雖然說 YouTube 上面有很多教學，但是品質好壞差很多，你也不知道這些人是誰、評價如何。

如果你要挑選線上課程的話，有一個網站叫 [Udemy](https://www.udemy.com/) 是一個蠻好的開始，上面每一門課大概都是10 塊美金左右，然後就挑購買數夠多而且評價數也夠好的，基本上課程的內容都不會差到哪裡去。同時，我會建議先跟著一個講師或一門課程做就好，不要一次看好幾門課，也不要到處看文章、看影片，這年頭不是資訊不足，而是資訊是太多不知道該聽誰的，所以我會建議就是你就先找一門課，然後練完之後你可以再換另外一個講師或另外一門課。在學習過程中跟著同一門課的同一個脈絡，學習效果會好一些。

### 刻意練習

刻意練習的意思是指，假設你想要做的是一個購物車或電商網站，你就要往那個方向刻意去練習寫購物車，用你現在學到的東西去寫一個成品出來。做的很差、很卡關也沒關係，這很正常，就盡量刻意去做這些練習。練的過程你會發現越來越熟練，經常刻意練習比較難、比較複雜的功能，自己的腦袋就會慢慢習慣比較複雜的思考了。

### 練習輸出

學習的過程中，盡量就是有一些產出，也許是筆記，也許是文章。因為上課的時候資訊流是從電腦螢幕或從台上老師那邊流到我們腦袋裡面去，這些東西它會不會留在我們腦袋裡面？不知道。就算可以，它能留多久？只要學習過刻的不夠深，很快就會忘記。

對於把學習的內容刻的深一點，輸出是一件很有幫助的練習。我們自己帶學生的一個做法，我覺得蠻有效，我自己也是這樣訓練我自己，大家不妨試試看。就是我在出作業給同學們寫的時候，一般的作業繳交方式大概就是把檔案丟回來，但我會請同學們說把寫作業的過程錄下來，我想知道同學們是怎麼寫的，包括找答案的過程也是。不只這樣，我還請同學們一邊寫、一邊講解，你們就把我當學生，講解給我聽你為什麼這樣寫，為什麼要寫這一行、為什麼這邊要用這個變數。如果都能順暢的講講出來，代表你真的知道你在做什麼。這個練習很多業界現役的工程師都還不一定做的到，他們會寫，但不一定解釋的出來，因為那一段 code 可能是從網路上 copy 過來就貼在這裡剛好會動而已。

這是個很有效的訓練，大家可以自己練習看看，錄完之後可以再把影片重播一次看看，效果會更好，你可以看看你剛剛講了什麼，自己能不能聽的懂自己講的東西。

## 找老師、找教練

前面介紹的是自學，如果你今天想要去上課的話，同樣還是要多問「為什麼」，問自己為什麼需要去上課？是學不會，還是不確定學的正不正確，還是沒有人盯著就會放鬆？

知道原因之後再去找老師或培訓單位，看看他們的課程、師資，聽一下說明會適不適合自己。

其實這個概念跟為什麼去健身房要找教練一樣，自己練當然可以，但如果你不知道自己這樣練是不是有效，還是會不會受傷，一開始找個教練旁邊指導是很有幫助的，通常專業的教練會依據你的個人的身體狀況、體力等，給你最有效的建議，縮短你的學習時間。

學程式也一樣，如果旁邊有個老師帶著練，這個我想也不用我特別講，大家也知道效果通常會比自學來的好。但還是要提醒大家，先想想自己是不是需要再說，不要只聽信廣告。

## 常見問題

我們做軟體工程師轉職這些年下來，不少來聽說明會的朋友常會問到這些問題...

### Q: 不是本科系畢業可以嗎？

科學、學歷的問題很常被拿出來講，我的學歷可能只有高中畢業沒有很漂亮，有機會嗎？學歷很重要、科系很重要，但它不會決定你能不能當軟體工程師，我在業界看到很多那些所謂的前輩、大神們很多也都不是本科系畢業的。

軟體工程師並不像醫生、律師需要的所謂的國家考試資格，很多人就是真的去上一門課然後就說自己是工程師也有。如果你是資訊本科系，很好，之前在學校學的就剛好學以致用，如果不是其實也不用太擔心，因為科班生的四年所學的東西並沒有到追不上的程度。

### Q: AI 這麼厲害，還要學程式嗎？

這個也是最近我們常被問到的問題，AI 時代了，幹嘛學程式，現在都叫 AI 寫就好啦。是沒有錯啦，但你怎麼知道 AI 寫的程式對不對？如果你今天是個新手學習者，你根本沒能力判斷。

AI 可以是一個非常好的教練，你對它再兇它也不會跟你抱怨，但你也是得學會程式才能判斷它給的資訊到底是不是正確的。AI 很厲害，但以目前（2023 年 10 月）來說，倒還沒有完全真的威脅到軟體工程師的工作。

### Q: 每個人都適合寫程式嗎？

我必須認真的告訴各位，不是，真的不是，不是所有的人都適合寫程式的，我們不會因為想要你趕快來報名就跟你說只要有心每個人都可以當軟體工程師。

有些人是真的不適合，我指的不適合不是說特別笨，我指的是指對寫程式這件事提不起興趣，就是沒有感覺，不知道做這個可以幹嘛。

要怎麼樣知道自己適不適合，有比較簡單而且低成本的檢查方法，就是你可以在 YouTube 上跟一些有在教程式的人跟著做做看，或者是說花一點小錢去 Udemy 買一門課，然後跟著做做看。

每做完一個章節你就問自己，喜不喜歡這種感覺，喜不喜歡無中生有把東西做出來的感覺？如果真的覺得喜歡再說，不喜歡不要勉強，不要因為別人說什麼轉職軟體工程師的收入比較好、比較不會被疫情影響什麼的，你自己做的喜歡、做的開心最重要。

### Q: 大概要學多久？

如果自己學，平常白天有工作只能晚上學習的話大概半年左右可以學到一定的程度。可以的話盡量自己用學到的東西做點跟課程裡不一樣的，不要只會做課程教的東西，這樣效果有限。

如果是參加培訓單位的話，通常快的話三個月，慢的話大概也是半年到一年左右。如果說不知道說這期期間到底有沒有學會或學到什麼程度，我會建議你參加一些社群活動，認識一些工程師，跟他們聊聊，一來可以知道大概知道自己在什麼等級，二來也比較不會孤單。學習這條路一個人走是可以走的比較快，但一群人可以走比較遠。

我們每個禮拜二晚上都會有一個叫[默默會](https://www.facebook.com/rubymokumokukai/)的活動，沒有意外的話會每週二會固定舉辦，地點就在我們的辦公室，在台北市 228 公園旁（台北市衡陽路 7 號 5 樓），不用特別報名，人來就好。

你可以帶著你的問題來參加這個活動，或是來認識一些，或是就坐在裡面發呆也沒關係，不用有壓力，放心，我們不會在現場推銷你任何東西。

學習程式語言是一個挑戰，但也是一個令人滿足的過程。無論你選擇哪一種語言，關鍵是保持耐心，不斷學習和實踐。選擇適合自己的學習方式，你將能夠逐步建立起堅實的程式基礎，並將自己引向成為一名優秀的軟體工程師的道路。

有任何問題，都歡迎來我們每週辦的社群活動，或是我們的[粉絲專頁](https://www.facebook.com/5xruby)跟線上跟我們聊聊，先預祝學習順利 :)

