# 「自學程式現場」非本科系有辦法學程式嗎？

> 非本科系的學習者是否能夠成功學習程式？雖然本科生在理論與基礎上有一定優勢，但實際上，自學者透過線上課程或培訓班，同樣能夠掌握程式技能。本文說明了本科背景對於程式學習的影響，以及非本科生如何在職場中脫穎而出。

Published: 2021-09-19
URL: https://kaochenlong.com/does-cs-background-matter

---

「我不是本科系的，有辦法學寫程式嗎？」

「不是資訊相關科系，是不是之後會學不好或是發展有限？」

講的好像本科系畢業就一定會寫程式一樣...

首先，沒有人是所謂的「本科系」，就算是那些所謂的本科生，大多也是上了大學之後才開始的，在這之前也是非本科生（還是有人從一出生就開始打鍵盤的？）

大家一樣都是半路出家，差的就是四年的大學教育的距離。所以，是不是本科系對寫程式來說重要嗎？怕各位沒耐心往下看，先講結論：

&gt; 重要，但這跟有沒有辦法學會程式以及將來的發展沒直接關係。

&lt;!-- more --&gt;

同樣為避免討論失焦，我這裡定義「本科」指的是指資工系或資管系畢業，學校是不是頂大沒關係。雖然我覺得資管系不太算，不過我一開始的程式就是資管系的朋友教我的（而且還教我 FreeBSD 怎麼用），多少有沾到一點邊就一起算吧。

有些職業的確是需要本科系沒錯，像是醫生或律師，而且除了科系外，還得參加國家考試取得證照，像我雖然是營養系畢業，但我沒有通過國考的話也不能執業。但就以學習程式來說，不需要是本科系畢業，自己買書或線上課程或是參加幾個月的培訓班拼一下，加上現在網路資源很多，有關鍵字就能找到一票答案，要轉職當工程師好像沒那麼難？

是啊，沒很難，沒也沒那麼簡單。而且，本科生還是相對有優勢。

## 本科生的優勢

我先假設每位本科學生在學校的時候都有認真乖乖上課，該交的作業都有交，畢業專題也不是只有負責跑腿影印或買雞排奶茶而已。本科生因為在學校有完整的知識體系的訓練，像是計算機概論、演算法、作業系統等，所以在面對問題時，特別是沒遇過的問題，本科生的反應通常比較快，或是知道該用什麼關鍵字去找答案，而且就算學習新技術也會比一般的素人來得快。

相對的，非本科生不論是透過自學或是培訓班，因為時間通常很短，在有限的時間內光是學完程式語法或框架就差不多飽了，所以對基礎的認知有限，甚至很多時候就只是會用套件或框架的「套件仔」，遇到沒遇過的問題，很容易就不知道該怎麼辦，我想這也是同樣都是工程師，但非本科出身自學或培訓班出來的新手工程師就容易處在鄙視鏈的底層，就覺得你們這種半路出家的就是不行。

大部份的公司在面試人的時候，如果遇到差不多資歷的面試者，公司為了避免踩雷的風險，大多會選擇相關科系的學生，這是事實。

所以本科生在找工作的時候就一定比較佔優勢嗎？這倒也未必。大學教育的目的與培訓班或職業訓練所不同，大學教育是打地基，速度雖然慢但穩固，而大部份的自學者或培訓班，從一開始的目標就是轉職就業，所以學習的內容跟方向都針對「就業需求」，看看業界什麼比較紅或是公司需要什麼就學什麼，而且這些技術很多時候本科生在學校也都沒教過。

別的不說，就拿我自己比較熟悉的版本控制工具 Git 來說，這已經是目前業界幾乎首選的版控工具，但我知道很多學校並沒有教，不少畢業的同學也是畢業之後要找工作才開始學的。

另外，我們也都讀過大學，也知道大學生活是怎麼一回事，上課會乖乖去點名就不錯了，有認真上課、交作業的應該是少數了，所以我想一個班上真正的戰力大概就是前 1/3 的同學吧。其它過的比較自由自在生活的同學，大學四年畢業後真的能寫程式的可能沒有想像中的多。

所以，本科生的起跑線雖然比較前面，但我認為沒有到追不上的情況，就算真的是非常非常認真的學生，需要追的距離也就是 4 年的努力而已，而且這還是很努力的學生才需要追 4 年。

## 不務正業其實也沒那麼糟

我記得我老爸（還是老媽？忘了）跟我講過「你如果要做資訊相關工作的話，那你讀大學不就浪費了嗎？」

學以致用很棒，但有多少人一開始大學科系選的就是自己喜歡的？當年我可是差點沒學校讀的，營養系本來就不是我的興趣，我幾乎每科營養學相關的課都被當過一輪，我就是助教眼裡不愛讀書的小孩。沒辦法，我就沒興趣啊，所以我大學快畢業前有不少時間都是在籃球場打球，課堂只有點名的時候才會出現。

直到大四那年，第一次接觸到網路，雖然只是龜速的撥接上網，但發現網路真的好有趣，所以就開始做自己的個人網站，放一些現在看起來沒什麼營養的資訊到免費空間，覺得這樣好有成就感。後來的故事大家就知道了，就是開始學 Photoshop 特效，後來因此進到學校電算中心開始跟老師學寫程式。

其實不務正業也沒什麼問題，本來就沒什麼工作叫做「正業」，能夠做自己喜歡的工作就是一件很幸福的事。

而且，非本科系也有好處，像是如果現在要我做一個營養評估系統，相同的技術背景下，我應該可以做的比一般的工程師好一些。或是有法律背景的工程師，在某些做法律相關的網站服務的時候應該也更有概念，專有名詞也比較看的懂。

## 補強基礎

在我大概寫了一年程式之後，我覺得自己的基礎很空虛，常常遇到比較複雜的問題只能硬幹，雖然寫的出來，但我也知道那寫的並不好。所以後來我自己就跑去報名台大辦的推廣教育課程，報名了資料結構跟演算法的課程，在台上講課的是一位台大的博士生，很厲害，但我課程幾乎聽不懂跟不上，我以為我已經會寫程式了，原來還差這麼遠...

幾年之後，我記得是 2012 年，當時我在業界也工作不少年了，但我還是覺得自己程式邏輯有點弱，剛好看到一個叫做 [FLOLAC](https://flolac.iis.sinica.edu.tw/) 的暑期程式研習營就去報名了。想說我都寫這麼些年程式了應該可以輾壓同學，結果完全不是這麼一回事，去才發現邏輯跟我想的完全不一樣，那些符號我好多都看不懂，老師上課講的我也只能勉強跟上，但坐附近的同學一個一個都聽的很開心...

那時候心裡的想法是：

&gt; 哇，這世界好多強者！

後來我才知道那些聽的很開心的人的確都是業界的大大沒錯。

我說這些故事的原因，只是要跟大家說，非本科系的確技術底子比較弱沒錯，但拿到工程師的門票開始工作後，會慢慢的知道哪裡不足，這時候也會認識比較多業界的朋友，知道該去哪邊加強自己不足的地方，也知道怎麼挑選自己所需的課程。

一開始弱不是弱，不知道自己的弱點或是不思長進或是才是真正的問題。

## 所以，科系重要嗎？

再補一次結論：

&gt; 重要，但這跟有沒有辦法學會程式以及發展沒直接關係。

有些單位在招聘的時候的確看科系或學歷，也許就這樣被刷掉那也沒辦法。但能不能學好程式，限制通常都不是你的科系，而是你的學習能力跟態度。關於將來的發展，天賦決定你的成就的下限，但努力才是決定上限可以撐到什麼程度。

心態正確加上努力學習，要拿到新手工程師的入場券不算太難。先拿到門票，然後慢慢變厲害。拿到門票後，就算工作上只是寫 CRUD（資料的新增、讀取、修改及刪除的基本操作），也要額外花心思理解這些工具背後的原理。你可以不會做輪子，但至少要知道輪子怎麼做出來的，以及那些技術用到的關鍵字，不然連要 Google 找答案不知道怎麼找。

最後，不管是不是科班生，自學能力都很重要。本科生的起跑線比較前面，但就如前面說的，這個距離並不是追不上的，我認識很多目前仍在業界的大大也都非本科系出身，憑藉著興趣跟努力同樣可以可以在職場發光發熱，而且還可能比很多本科生還亮、還要熱。

我知道想要轉職的人不少，想要快速轉職，參加培訓班就是一個比較簡單的管道，因為他們可以就像考前衝刺班一樣，讓你在短時間內餵給你業界所需的技能，甚至教你怎麼寫履歷、舉辦快速面試或媒合職缺，達到成功轉職的目的。不過參加培訓班的同學如果轉職的企圖心不夠強烈或是學習能力不足的話，很可能會跟不上上課的進度。每天掉一點點進度，最後就會掉好大一點，最後看到同學一個一個都找到工作但自己還在待轉區練等，慢慢的就會想放棄了。這個學習以及心路歷程又可以是另外一篇文章了。

...to be continued ✌️


