蒼時弦也
蒼時弦也
資深軟體工程師
發表於

轉職工程師:要學什麼才好?

上一篇文章輸在起跑點已經稍微討論過心態上的問題,所以馬上就是要怎麼開始的問題。

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

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

要快又要好

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

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

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

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

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

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

寫程式的朋友

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

出問題有人問

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

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

沒有朋友就找一個!

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

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

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

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

補習班

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

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

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

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

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

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

不過選擇補習班跟打遊戲比起來,還是有好處的。那就是老師,像是我目前的公司五倍紅寶石或是六角學院SkillTree 等等,應該都屬於我知道裡面風評不錯的的幾間補習班。

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

像是在五倍龍哥KuroAmos 幾位講師有時候在公司就能碰到,我也有上過課都是不錯的。另外六角的話像是廖洧杰也是在前端社群很活躍的大大,另外 SkillTree 給我印象深刻的則是 91 哥的敏捷開發課程(雖然我聽的是研討會版本,但是收穫很多)

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

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

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

看書

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

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

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

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

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

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

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

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

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

小結

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

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

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

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

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

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