---
title: "轉職工程師：要學什麼才好？"
date: 2018-10-02T00:00:00+08:00
publishDate: 2018-10-02T23:26:53+08:00
lastmod: 2022-01-17T14:20:52+08:00
tags: ["心得","程式","Ruby"]
permalink: "https://blog.aotoki.me/posts/2018/10/02/Become-a-programmer-how-to-start/"
language: "zh-tw"
---


上一篇文章[輸在起跑點](https://blog.aotoki.me/posts/2018/09/25/Become-a-programmer-lose-at-the-starting-line/)已經稍微討論過心態上的問題，所以馬上就是要怎麼開始的問題。

大部分的人不論之前有沒有經驗，一定會冒出「要學什麼語言？」「某某語言很熱門是不是應該去學？」之類的問題。

很多時候，我認為這不是真正的問題。

<!--more-->

## 要快又要好

現在很多電腦補習班、或是一些線上課程的廣告，其實會誤導大家「三個月轉職」這種聽起來從學會寫程式到當工程是是一件很容易的事情。

認真想想，這種類型的課程到底教會了什麼？如果其他類型的工作都沒辦法這麼輕鬆，那麼為什麼寫程式就可以呢？

如果是以找工作為目的，程式相關的技能雖然重要，但是很明顯的搞錯了重點。

**有優秀的能力雖然很重要，但是有沒有潛力也會是另一個基準**

以我自身的經驗，寫程式的「入門門檻」確實很低，除非你連打字都不會。
但是作為一個工程師，從「入門」到「有實戰能力」到「獨當一面」就不是這麼簡單的問題。

所以要先面對現實，看你想要的是「學得快」還是「學的好」兩者幾乎無法並存

## 寫程式的朋友

如果不知道該學什麼，其實很簡單。如果你有一個會寫程式的朋友，學跟他一樣的。

**出問題有人問**

這是最效率的學法，飆車太快朋友會阻止你。進度太慢朋友會幫你！替代方案就是去上課，好的老師會負責擔任前面提到的朋友的任務。

如果剛出社會，以電腦補習班的學費來說覺得是一個負擔。那就選一個最近的社群活動參加吧！雖然對台北地區的人比較方便（其他縣市比較難找）但是你馬上就能找到適合的人幫助你。

**沒有朋友就找一個！**

也許你會覺得自己害羞內向不好相處，不過我想很多人都覺得自己是這樣，但是稍微試著聊天也許會發意外的合得來。

> 我平常也都蠻怕跟陌生人聊天的，但是參加社群聚會總是會有人拉你去聊天，那就可以慢慢展開話題了！

如果身邊沒有會寫程式的朋友，又對 Ruby 或者前端、React Native 之類的有興趣，可以來[默默會](https://www.facebook.com/rubymokumokukai/)看看，現在的狀況是一片混亂，但是想要找人問問題的話我想我們大多都有辦法跟你聊（太專業就是我們跟你學習摟！）

> 不知道要找誰也可以說要來找我，不過目前我會花大概一小時教人之後才出來，有時候可能要等我一下。

## 補習班

當你決定要選擇補習班的時候，就要有心理準備。補習班基本上就是一個以「快」為目的的地方，所以上課基本上會以最有效率的方式來做教學。

在這種情況下，基礎就不一定會好。但是「學得快」這件事情本身不是一個問題，不如說我反而很推薦想要學新東西或者第一次入門的人用這種方法。

**如果開發新產品是每個人很有經驗的，那他一點也不新，而且可能也不賺錢**

如果你有一個想法想要實現，或者想要找到一份工作。這個方法是很有效的，因為你有能力「製作」一小部分的部件，這就足夠了。

就像打遊戲一樣，有人會在意**第一次就玩得很好**這件事情嗎？並不會，所以有些人會透過「熟練」和「分析」去讓自己更熟悉這個遊戲。

以大多數課程都是一個月到三個月左右，其實也就 32 ~ 96 個小時來看，一款遊戲破完第一輪獎盃一半都拿不到，這樣你會覺得學寫程式有這麼容易嗎？玩遊戲都沒這麼容易了！

不過選擇補習班跟打遊戲比起來，還是有好處的。那就是老師，像是我目前的公司[五倍紅寶石](https://5xruby.tw/)或是[六角學院](https://www.hexschool.com/)和 [SkillTree](https://skilltree.my/) 等等，應該都屬於我知道裡面風評不錯的的幾間補習班。

不過比起這些，其實我還是比較推薦去跟「上課的老師」在一些社群活動中接觸看看，才知道適不適合。

像是在五倍[龍哥](https://kaochenlong.com/)、[Kuro](https://kuro.tw/)、[Amos](https://csscoke.com/) 幾位講師有時候在公司就能碰到，我也有上過課都是不錯的。另外六角的話像是廖洧杰也是在前端社群很活躍的大大，另外 SkillTree 給我印象深刻的則是 [91 哥](https://dotblogs.com.tw/hatelove)的敏捷開發課程（雖然我聽的是研討會版本，但是收穫很多）

我會推薦去找講師交流看看，是因為即使像我「很熟悉寫程式」也不代表可以「好好教人」以擔任 Rails Girls 三次教練我的經驗，我到第三次才比較能好好引導學員，而且定的目標（作業）太不合理之類的，也會引響被教學者最後在學習上的態度。

所以也許你適合寫程式，但不一定適合「教別人學寫程式」如果能跟講師交流過，其實你很快就會知道講師適不適合教自己。

> 另外補習班的成功案例看看就好，很多時候去參加課程的不一定會是新手，因為廣告看起來似乎可以學到很厲害的技能，但是實際上對某部分已經有一定基礎的人是過於簡單的，他們在課堂上的作品很容易就被拿來當廣告。至於誇大的程度，就要看各家補習班的做法了⋯⋯

## 看書

如果想「學的好」那就無法避免的用看書的方式自學，但是這是一種非常沒有效率的學法。如果你不擅長整理、實驗這類型的技能，我還是推薦選擇直接上線上課程或者補習班，因為看書的資訊密度比課程來高的很多，所以你要會整理。

而且一個「書」的市場影響可以獲取的資源，入門通常會選擇熟悉的語言（像是中文）來讀，但是中文書技術類的市場不大，所以其實會慢慢發現「重複性高」跟「無法深入」所以自學就會遇到門檻。

這是因為這種初階入門書是大多數人比較會買的類型，太困難或者太複雜就會變成即使出書了也很難賣掉。

但是從這一大堆知識中磨練出來的歸納整理和實驗的技巧，就會變成非常扎實的技能。

**學程式的精髓不在學會那個語言，而是了解使用的方式**

舉個例子，我以前自學在看這些書的時候。我通常「不會照著書做」我會邊參考邊改出「我認為適合」的功能，然後執行看看。

如果成功了，就表示我的理解沒有問題，也學會了變化的應用。如果失敗了，就慢慢調整到接近書上的狀況，然後看看錯的地方是哪裡。

這種技巧其實某方面來說也叫做 DEBUG 常用的方式之一，至少在自學上我錯的次數應該是遠高於平均值，所以我找 BUG 的速度可能也相對快了一些吧 XD

> 不過不是第一次學就要這樣做，剛開始學的時候還是先完全模仿一次之後再來改看看，加深印象跟嘗試理解。

## 小結

好像差點把後面要分段講的東西講掉一些了，不過這篇主要想跟大家說明幾個概念。

1. 學什麼比較好其實不重要，重要的是起步的時候要有人可以幫你
2. 想要很快學好是不可能的，但是基礎是可以慢慢補回來的（下一篇會討論）
3. 學的方法有很多種，要看適不適合自己
4. 要記得慎選老師，有時候名師不一定是適合自己的老師
5. 學程式其實不是在學程式

很多人的「學程式的第一步」其實沒有想像中的重要，而重要的其實是在學的過程中學到的「分析」和「統整」的能力。

所以第一個語言大多不是問題，我也是從 PHP 轉到 Ruby 為主，但其實我也嘗試學過 C / C++ / C# / Golang / Lua / Java / JavaScript / TypeScript 等等（太多不列了⋯⋯）

但是我敢說我用的「熟練」的大概只有 PHP / Ruby / JavaScript 吧！不過如果要換工作，上述的語言我都有辦法寫，也有把握在一個月內慢慢調整到能夠有足夠的生產力在這個語言上。

之後也會提到學程式的幾種面向「語法」「特性」「架構」等等，我們其實都以為學會「語法」就好了，但是有考慮過「特性」跟後面的「架構」嗎？特性會限制架構的發展之類的，就會讓我們發現不同案例下總是會有「最適合」的語言，或者「看起來怎樣都很適合」的語言（通常是個坑⋯⋯）

