轉職軟體工程師該學哪種程式語言? 2019程式語言推薦

轉職軟體工程師該學哪種程式語言? 2019程式語言推薦

文章最後更新時間 2019年 10月 14日

轉職軟體工程師之前遇到的第一個選擇,就是該學哪種程式語言。

在我剛退伍開始學程式時,我也因為這個問題迷惘一陣子,尤其對轉職者而言,很怕學了程式語言卻找不到工作,那段時間都是天天看網路上有什麼新技術或是哪個工作職缺最多,然而在選擇程式語言之前,你得先問自己這個問題:

你是為了什麼學習程式語言?

學程式語言總得有個目標的,例如我最初是想接觸遊戲設計,所以我當時應該要建議自己去學 C、C++ 或是 C#,然而正是因為網路上針對轉職軟體工程師的建議資訊不多,PTT 版上當時鼓吹著與其轉職倒不如去轉考資工研究所,所以我在接觸到巨匠的 Java 就業班廣告之後就被忽悠進去了 Orz。

以上為題外話,重點是:「請以自己的目的選擇程式語言。」

所以在這裡提供幾個程式工作的語言學習方向:

 

網頁畫面通常指的是網頁前端的部分,這個工作基本上至少需要 3 個語言:HTML 、 CSS 、 JavaScript,如果是在以前前端負荷比較沒那麼吃重的年代,除了上述 3 種以外還得學習後端程式語言如 PHP 、 JSP 等,然而現在前後端分離觀念興盛,只想寫畫面的話學習上述 3 種即可達到基本的網頁前端設計。

需要注意的是,前端工程師可能需要部份美工,有少許 Photoshop 或 Sketch 的技能會更好,但是對於美感較差 ( EX:筆者我 ) 的人來說,建議前端也可以做分工 => 分成美工組及前端程式架構組,美工組負責提供畫面及排版建議,程式架構組負責使用美工組提供的畫面及串接網頁後端程式碼。

 

HTML

嚴格的說 html 並非程式語言,通常被稱為標籤或標記語言,因為它沒有程式語言該有的邏輯或流程控制等功能,而是透過標記去定義網頁上的元素是什麼,為網頁中的 ⌈骨架⌋ ,例如下面一段文字:

其中的 form、input、button 為標籤名稱,代表表單、輸入框及按紐, value=”test” type=”text” 及 type=”button” 分別代表 input 標籤及 button 標籤的屬性,每個標籤的屬性都不太一樣。

<form action="#">
    <input value="test" type="text"/>
    <button type="button">submit</button>
</form>

在網頁上呈現出來會是下面這樣子:

其中的 form、input、button 為標籤名稱,代表表單、輸入框及按紐, value=”test” type=”text” 及 type=”button” 分別代表 input 標籤及 button 標籤的屬性,每個標籤的屬性都不太一樣。

 

CSS

CSS 也不是程式語言,是一個對介面外觀設定的語言,通常用 <style> 標籤去寫 CSS 語言,例如下面我設定了 input 標籤的字體大小為 35 pixel 及粗體。

<style>
input{
    font-size:35px;
    font-weight:bold;
}
</style>
<form action="#">
    <input value="test" type="text"/>
    <button type="button">submit</button>
</form>

結果呈現:

 

Javascript

Javascript 就是唯一的前端程式語言了,更久以前還有其他的程式語言,不過目前只剩 Javascript 獨大,用 <script> 標籤去寫。 Javascript 的功能非常多,可以對畫面做動作,或是直接做一些計算,例如下面一個簡單的加法程式:

<script>
function add_fun(){
    var a_item = parseInt(document.getElementById("a_item").value);
    var b_item = parseInt(document.getElementById("b_item").value);
    document.getElementById("ans").innerHTML = a_item + b_item;
}
</script>
+  

 

小結

上面三種便是前端必學的語言,HTML 為骨幹,CSS 為外觀樣式,JavaScript 為動作,新手可以只透過這三種語言寫出外觀作品,基本上面試就有錄取的機會了。

然而只會以上 3 種語言,要追求高薪還是有難度的,上面列出的 3 種皆為前端必學的程式語言,但事實上前端遠遠不止這些。例如 JavaScript 可以操作 html 的物件,但是每次語法都得用 document.getElement… 這種又臭又長的語法,這種不方便性孕育出了 JQuery,一個在抓取 html 物件非常方便的 framework。

例如我想抓取 input 標籤的物件,JQuery 語法只要使用 $(“input”) 即可,使對於 HTML 物件的抓取方便許多。

其他還有針對 CSS 而衍生出來的 SASS,建立在 JQuery 上的前端美化工具包 Bootstrap ( 它真的幫了我很多忙 ),以及建立在 JavaScript 的前端主流框架:Vue、React、Angular ,都是前端可以學習的方向,不過新手建議先把 HTML、CSS、JavaScript 學好即可。

個人會推薦先使用線上的免費資源如 solo learn 、 codecademy 接觸看看前端、也可以使用 w3schools 學習前端的資源,如果下定決心要鑽研前端,我會推薦 六角學院 的前端課程。

 

我想寫網頁後端

網頁後端的程式語言不像前端就只有一個 JavaScript,後端幾乎所有聽過的程式語言都能寫:PHP、Java、C#、Python、Go、node.js、Ruby…

這也是我不推薦新手馬上接觸後端語言的原因,因為會有選擇困難症 ( 我自己就是…)。

但總會有幾種語言是專門為了網頁後端而生的,這也就是後端的首選:PHP

在網頁後端的部分 PHP 的職缺最多,語言特性能夠很簡單的達成熱部屬 ( 當然其他語言也能,但是 PHP 相對直接),正因為它的便利性,PHP 的網站佔了全球的 75% 以上 ( 來源取自w3techs統計 )。知名的 facebook、快速架站軟體 wordpress 也是使用 PHP 作為網頁伺服器。

但有沒有別的選擇?

PHP是為了網頁而生的程式語言,但在網頁之外,似乎沒有其他非常突出的地方。

  • java 好處是可以無痛切去寫 android 手機 app,也可以寫網站
  • C# 可以使用 asp.net 去寫網站,可以寫 Unity 遊戲,可以用 xamarin 寫 ios + android 雙平台 app
  • node.js 可以利用前後端都是 JavaScript 的特性達到統一語言開發的便利性,一套 JavaScript 通吃
  • python 可以利用 django 或 flask 等 framework 去開發 web,同時使用 python 本身的好處:科學運算及分析,在有一些學術網站需要上傳資料去做分析時會有很大的好處,不需要再用 socket 去串接其他不同種的語言
  • 還有其他程式語言(例如 golang…),這邊就不再放上去了

如果你寫程式只想專注於網頁後端上,PHP 絕對是首選沒話說,建議多加一個 laravel 框架去做強制的 mvc 管理,甚至公司有幫忙負責前端的話可以完整地分割前後端達到技術專精,PHP 還是可以有著一定高度的。

PHP 開發網頁優缺點比較:

優點 快速開發,語法簡單直接、易學,搭上 laravel 可以規劃出分工更明確的程式碼,職缺多,以 php 在104搜尋就有 2 千多個職缺
缺點 除了網頁後端開發,比較不會有人拿php去寫其他程式,工作內容通常會局限在網頁後端

那其他語言在網頁後端的情況呢?

Java 的 jsp 跟 C# 的 asp.net 總是狗咬狗一嘴毛,畢竟是兩個互相借鑑的程式語言,很多地方都長得一模一樣,PHP 永遠像個老大哥在看他們兩位在打架,但不代表他們沒有需求。

由於 jsp 始於1998年,當時 php 還沒出生,在當時有許多企業採用了 j2ee ( java 企業版 ) 的 jsp,導致現在還是有非常多企業、大公司需要 jsp 的技術工作,以及許多公家機關和學校單位都採用 jsp。

asp.net 雖然是在 2002 年之後出世,但因為微軟這間大公司的名號下,許多企業也採用了 asp 作為企業用網頁後端,而現在比較多在用 asp.net 也是大公司跟公家、學術單位。

但是 Java 及 C# 相較於 php 也有一項好處,java 及 C# 為編譯語言,在編譯過後,執行速度會比 php 快上許多,不過現在 php7 引擎升級到 Zend Engine 3,速度上的差異或許有在縮減。

另外 Python 的 django 或 flask 及 node.js 我就暫且不提,畢竟在台灣的職缺實在太少,對新手想求職可能比較不適合。

 

手機APP工程師

現在手機端的選擇除了原生開發,漸漸地有其他開發方式也浮出水面,但是原生開發仍是首選。

 

原生開發

原生的話 Android 即為 Java 或把 Java 再包一層的 kotlin,ios 即為 swift 及 objective-c。

  • 原生開發的優點:因為是原生開發,對於底層的掌控會比較方便,app 的執行速度相較於非原生開發方式快,加上目前其他的非原生開發方式最麻煩的便是有時找不到問題出錯在哪,討論度及解決方法還沒有多到比原生多的情況下,除非只是要做一個很簡單的 app,否則還是建議用原生。
  • 原生開發的缺點:要學兩套很麻煩,學習花費時間多,開發時間多 ( 但通常薪水較高 )
  • 非原生的開發方式優點:一次搞定雙平台,事半功倍,花費時間少
  • 非原生的開發方式缺點:有些對於雙平台的優化或文檔還沒支援得很完整 ( react native 的 android 端 ),畢竟兩個本來就是不一樣系統,有些 api 在 android有提供,ios 不見的有,反之亦然,薪水不一定高,非原生開發方式在app 執行速度上通常會較原生慢。

 

但有沒有比較建議的非原生開發方式?

react native (RN)

很多人會推薦 react native(RN),我沒用過所以不方便建議學不學 RN,但是學之前建議查一下目前開發程度是否對 android 端方便一些,我之前就是因為有查到 react native 在 android 端是有些問題所以沒學習 RN。

 

ionic

我所學的 ionic 目前版本已來到 4 版,已經沒有限制畫面必須要使用 angular 來開發,可以使用純前端或是用其他擅長的框架來寫。

以上的 RN及 ionic 皆是用 Html + Css + JavaScript 開發,相較於原生開發在記憶體及打包後的容量都會占用的比較大,所以在對記憶體吃重的 app 還是建議用原生開發比較好。

 

xamarin

C# 的 xamarin 我沒有使用過,目前不多談,不過有學過 C# 的網友們可以去測試一下這個工具好不好用。

 

flutter

最後一個是新玩意兒,也是我最近頗有興趣的東西,就是 google 的 flutter,使用google 自己的 dart 語言開發的,穩定版本1.0.0於2018年12月4日釋出,是目前最新的雙平台技術,但是因為採用一個大部分人都沒使用過的程式語言的關係,估計學習曲線相較於其他程式語言會稍微高一些,dart 的泛用度目前也很少,可以持續關注他的發展。

 

總結

以上便是目前對新手想踏入程式領域的幾個職務介紹及語言推薦,其實還有很多其他程式相關職務,例如資料分析師工程師、AI工程師、物聯網相關工程師等,但是這些職位的職缺較少,且通常會對學經歷有所要求,不太建議新手直接針對這幾個職缺去學習,因為會比較難就業,除非補習班有相關的就業管道那就另當別論了。

 

在看過以上這些,我仍然不知道怎麼選擇程式語言怎麼辦?

其實有看完我的文章應該可以觀察到,有一種語言的重複率非常高,那便是 JavaScript ,在獨佔前端的同時也將魔爪伸入後端及手機端,後端可以使用 node.js 撰寫、手機端可以使用 ionic 及 react native 撰寫雙平台 App,是個一舉數得的程式語言,如果真的不知道該學什麼程式語言, JavaScript 是個不錯的選擇。

有興趣的可以查查 mean stack,其中包含 m = mongodb (一個動態資料庫,可以將資料設計成 json 格式,與 JavaScript 相容性高 )、e = Express ( 基於 node.js 的網頁後端開發框架 )、a = Angular、n = node.js ( 網頁後端開發語言 )

mean stack 可以只透過 JavaScript 程式語言做到前端工程師、後端工程師、DBA 等工作,對將來或許會接觸後端工程師的人很有幫助的。

 

如果我只是想寫程式語言,但不是為了求職的話,我該學哪種比較容易上手?

有些人可能只是想了解寫程式的感覺而不是為了求職,那我會建議學習 Python ,Python 語法簡單易學且有豐富的函示庫,並且在目前的大數據分析、網路爬蟲、AI人工智慧領域很吃香,又可以寫網頁後端程式,是非常適合新手初次學習的語言。

以上提到的程式語言我幾乎都有實際撰寫或學習過,這個部落格之後也會提供更詳細的程式語言學習攻略,想知道如何學習程式語言的話歡迎訂閱我!

在將來也會繼續更新這篇文章,盡可能充實我對程式語言的涉略!

喜歡這篇文章歡迎在下方幫我按5個Like,讓我獲得一些回饋來支持我寫出更多好文章,如果有問題或是對文章有建議歡迎聯絡我喔 : )

訂閱我的文章

如果喜歡我的文章,歡迎留下信箱,發佈新文章時就會通知您!

發表迴響