身為一名軟體工程師,身邊常常會有很多想學程式的朋友來詢問各式各樣的問題,本文我會列出一些我最常聽到的問題,並提供個人淺見予您參考,希望能幫助到有心想踏入這個行業的人,在踏入之前能有進一步的了解。本文主要是憑藉著我自己在業界多年的觀察及個人觀點所提出的論述,如果與您的想法不同,也歡迎大家一起提出討論。

聽說工程師都很爆肝?

軟體工程師有很爆肝職缺,也有很輕鬆的職缺,我覺得這還是要看您所在的行業別。現在幾乎各行各業都有軟體工程師的職缺,如果您是在傳產單純維護公司網站,通常是不會爆肝,但薪資也相對較低。會爆肝的大概都是科技業的工程師,工時長,薪資高,大概做個 10 年就能退休了。我自己是很少加班,通常都是寫程式寫到忘我了,忘記下班。

學完後,工作好找嗎?薪資滿意嗎?

如果不要求薪資的話,我認為是非常好找,就像我上述說的,現在很多產業都有軟體工程師的職缺,即便是傳統產業,只要有資訊室,或多或少都需要會寫程式的人,尤其網頁開發的職缺真的非常多。

至於薪資的部分,軟體工程師的薪資行情範圍很廣,含金量高的程式語言也有低薪,含金量低的程式語言也有高薪,這主要是取決於您的能力及您所在的行業別。在台灣,不管薪資再怎麼低,如果您能力還行的話,我覺得要找到 4 萬以上的職缺,應該不會太困難。

但我非常不建議您根據薪資高低來決定要學習哪一種程式語言,尤其當您又不是本科生,也沒有豐富的學經歷,更不應該如此。通常薪資高的工作,對於學經歷的要求也會更嚴苛,不會只需要寫程式而已。舉個例子,Python 薪資通常不差,但 Python 主要是應用在數據分析及機器學習領域,這表示您還要具備這方面的領域知識,才比較容易找到高薪的職缺,這明顯也不是一件簡單就能學會的技能。

還有,如果您學習程式語言是為了求職,那千萬不要學習太冷門的程式語言,您可能會遇到學會了,卻找不到職缺的窘境。但如果您是因為興趣才學的,那學什麼程式語言就都沒差了。

非本科系,也能順利找到軟體開發工作嗎?

在沒有經驗沒有作品的狀況下,本科生在找工作上確實是比較有優勢,尤其是越高薪的工作,對學經歷的要求也會越高,所以我才不建議初學者直接挑選含金量高的程式語言去學習,因為您的競爭對手條件也會更好,倒不是因為您程式能力比較差,而是可能剛好就輸在學經歷。

聽到這邊也不用太沮喪,我身邊就有非常多非本科生非頂大學歷,順利轉職軟體工程師的例子。我會建議,初學者在學習階段就開始累積作品,盡量多接觸一些不同類型的系統。如果可以的話,我更建議在找工作前,找個朋友一起合作接個案件,努力把它完成,並且正式上線使用。一方面可以賺點收入,另一方面是我覺得有正式上線的作品,在面試上才會比較加分,如果只是做一些小功能展示的話,面試官通常都沒啥感覺,也不太會追問技術細節。

非本科生,真的能學好程式語言嗎?

這答案絕對是肯定的,直接 Google 搜尋「文組工程師」,就能發現很多成功轉職的例子。本科生對於一些基礎知識可能會比非本科生更扎實,但如果您對這個領域具有濃厚的興趣,這些東西久了您自然而然也會接觸到,也絕對可以學到很精通。

我身邊就有蠻多非本科生順利轉職成為軟體工程師的例子,而我自己雖然是資管系畢業,但程式開發的技能大多都是自學的。能不能學得好興趣真的很重要,絕大部分厲害的工程師都是自學的,很少是因為學校學完或補習班學完就很厲害了,倒不是說去這些機構學沒有用,而是您學完後,如果沒有興趣,就停止學習了,那您肯定不會變成實力堅強的工程師。

軟體工程師需要讀到研究所嗎?

我覺得是有加分,有時間金錢的話,會建議去讀,但非必要。很多人都說寫程式實務經驗比學歷更重要,我也是這麼認為。但您要先確定您的實務經驗是有用的經驗,如果您在接案公司上班,就算您開發了 100 個同性質的系統,您覺得會有加分嗎?我認為有用的經驗有兩種,一種是接觸過很多不同類型的系統,另一種是單一類型的系統做得非常深入。

讀研究所,通常會幫教授做計畫,也比較有機會接觸到不一樣的軟體系統。此外,讀完研究所通常撰寫文件能力也會比別人好一些,很多軟體開發的職缺都需要具備撰寫文件能力。且如果您是零經驗,本科生研究所的學歷,對找工作還是相當有幫助的。

學習程式語言英文重要嗎?

還是蠻重要的,至少要看得懂英文。不管學習哪一門程式語言,絕對需要翻閱官方說明文件,但這些文件並不一定有提供中文翻譯。此外,當您寫程式遇到問題時,常常需要上網找答案,必要的話也會到 StackOverflow 網站發問,這些都需要具備一定程度的英文能力。雖然現在有 Google 翻譯可以使用,但還是會建議看得懂的話,直接看原文。

還記得我在大學讀書時,Unity 還沒有現在這麼流行,我們使用了很冷門的 Java 3D API 來做專題,當時中文幾乎找不到任何相關資料,連英文資料也很少,反而日文資料還比較多一點,那時真的做得很痛苦。所以真心建議不要一開始就學習太冷門的程式語言,遇到問題也找不到答案。

AI 都能寫程式了,軟體工程師是否會被 AI 取代呢?

雖然我覺得短時間不可能直接取代軟體工程師,但現在科技進步神速,AI 自動寫程式還真的有可能會發生。事實上目前也已經有類似的產品了,最有名的大概就是 GitHub Copilot,它可以讓開發人員使用文字敘述,AI 就自動補全程式碼。目前 AI 自動寫程式大多作為輔助開發使用,要一整套系統全部都由 AI 完成,短時間應該是不太可能的事情。且目前作為輔助開發,就存在相當多的問題,例如品質低下問題,有研究指出,用 AI 產生的程式碼更容易產生 Bug,也有公司明文規定,不能在公司專案使用 AI 產生的程式碼,程式碼版權問題亦存在許多爭議,似乎 AI 自動寫程式還有一段很長的路要走。

公司都喜歡年輕的工程師,會不會面臨中年失業?

我不認為老了就沒辦法寫程式了,只要一直持續學習新的技術,絕對還是能從事軟體開發工作。只是市場上還是偏愛年輕的工程師,這可能有諸多原因造成的,例如年紀大有家庭,在相同能力的狀況下,可能會期望更高的待遇。

年齡歧視肯定存在於軟體開發行業,尤其是科技業,如果您已經 35 ~ 40 歲左右了,可能漸漸沒有優勢了,如果技術能力還沒有隨著年齡提升的話,處境恐怕只會更加艱難。在公司如果您沒有往上升遷,也可能隨時面臨被淘汰的命運,但往上升意味著您已經無法單純的寫程式就好,取而代之的可能是管理上的工作。但我相信一定有人跟我一樣,只是單純非常熱愛寫程式,就是想寫程式而已,並不想做其他管理的工作。

這個問題,我並沒有辦法給出一個客觀的答案,畢竟我尚未到達這個年紀,也還未面臨這樣的問題,但我可以提供一些想法給您參考:

  • 從業的時候,就應該好好累積人脈,如果您的能力受到認可,人家又認識您,年齡就不會是問題了。
  • 讀研究所,畢業後從事學術研究工作,學術研究一般都可以做到退休,不過這個難度很高。
  • 有資金的話,可以考慮成立公司成為全職承包商,不過您可能會變成業務,再聘用工程師進行開發,開公司業務千萬要自己親自參與,不要全部給員工做。
  • 如果覺得成立公司難度太高,也可以成立個人工作室,找一兩家公司合作,案源穩定的話,收入也還不錯,也能單純寫程式就好。
  • 更穩的話,可以做一份輕鬆的正職工作,兼職做軟體開發。

成為好的軟體工程師需要具備什麼特質?

最重要的還是要有興趣,這點真的非常重要,在學習過程中或未來開發上肯定會經常碰壁,如果沒有興趣支撐的話,很容易就會放棄了。除了興趣之外,還有一些特質我認為也很重要:

懂得欣賞別人的作品
看到別人的作品,會自然而然地去思考,如果是我,我會怎麼做?就算覺得對方寫得很爛,也要有想法怎麼優化。
遇到問題時習慣先自己想辦法
有些人遇到問題時,都還沒有自己找過資料,也沒有思考過,就急著問答案,這樣是很難學好程式的。
喜歡與人分享
願意跟其他工程師分享討論技術上的問題,切記您靠自己能接觸到能學到的是很有限的,透過與人分享,自己也可以學到很多東西。
自我學習的能力
這一點,我覺得跟興趣一樣重要,整個工程師的職業生涯,有太多東西需要不斷地學習,可以說是不可能學得完。

簡單來說,好的軟體工程師需要具備精益求精的精神,並且熱愛這份工作,類似日本的「職人精神」。寫程式很常同一個功能這樣寫也可以,那樣寫也可以,但您要願意榨乾自己腦袋,只為做出完美的作品,而不是功能有做出來就好。

我已經會寫程式,但不知道是否可以勝任軟體開發工作?

這點算是我很常聽到的問題,我自己剛出社會時,也有相同的疑問,我在大學就讀期間就已經在寫程式接案賺外快了,但出社會真的要找軟體開發的工作,還是不免會有這樣的自我懷疑。為此,我還去 XX 補習班,跟他們說明我的狀況,希望可以來上一些進階的課程,哪知道他們只想推銷我一份 10 幾萬的全餐課程。後來我就決定不去補習,直接投入職場,在不要求高薪的狀況下,先進入這個行業再說,就一路走到現在了。

我覺得這應該是因為普遍都認為寫程式是很專業的工作,再加上受到電影的影響,覺得寫程式就是要像駭客一樣厲害,是菁英份子在做的工作。如果您又不是很會讀書的人,下意識一定產生我真的可以勝任這份工作的疑問。以過來人的經驗,我可以很負責任的跟您說,您想太多了。不可否認,真的存在像電影演的駭客那麼厲害的工程師,但市場上更多的是實力普通的工程師,厲害與不厲害能力上可能會差到 10 倍以上。因此我的建議是,直接去面試吧,如果真的沒信心的話,就先不要要求高薪,先找有前輩帶領的職缺,等建立自信後,再來挑戰高薪的職缺。

這麼多程式語言,我該如何挑選?

我相信這是絕大部分初學者的疑問,您應該很常聽到有人說現在什麼程式語言最流行,什麼程式語言即將被取代等說法。我會建議您一開始千萬不要跟風追流行,切記您能解決什麼問題才是最重要的,使用什麼程式語言並非優先考量,假設您要架設個人部落格,使用 PHP 需花 3 天,使用 Python 需花 2 週,這樣 PHP 明顯是一個好的選擇。

學程式並不是大家都想去科技業領高薪,有些人注重生活品質,單純想開發自己有興趣的東西。我會建議您先選擇好您感興趣的領域,或者您未來想從事什麼行業,再來挑選要學習的程式語言。如果您想開發 iOS APP,您可以挑 Swift,如果您想開發 Android APP,您可以挑 Java 或 Kotlin,如果您只是想接案賺外快,PHP 絕對是接案神器。但千萬不要挑太冷門的程式語言,除了工作難找之外,當您遇到問題時,也比較不容易在網路上找到答案。

當您決定好要學的程式語言之後,請持之以恆把它學完,學完後,要學其他語言再去學。相信我,一路上一定會有人跟您說:「現在還在學 PHP,現在大家都在學 Python,Google 都在用 Python」,過陣子又會有人跟您說:「Python 落伍了啦,AI 權威說深度學習需要更靈活的程式語言,寫 Go 吧」,又過一陣子又會有人跟您說:「Go 太少人在寫了,現在都流行寫 JavaScript」。千萬不要理會這些噪音,這些噪音我從大學到現在從來沒有停過,如果因為別人說了什麼,就換一個程式語言學習的話,那您永遠只會是初學者。

初學者需要花多久的時間才能學會呢?

這個問題因人而異,我認識的朋友從沒概念到有辦法自主開發,平均都花 3~4 個月,不過都是全職在學並且有人帶領,不是邊工作邊兼職學習。但有心要學的話,我會建議短時間內頻繁密集的練習,培養寫程式的思路。

已經決定好要學習的程式語言,但我要如何開始?

如果您是完全零經驗的初學者,相信市場上的教學書或者網路上的教學文,對於您來說就像無字天書一樣,完全不懂在寫啥。我會建議您找個會的人來教您,最好是 1 對 1 教學或小班教學,有問題才能隨時詢問。

此外,我認為學習一門程式語言可以分為以下三個階段:

學習語法
主要學習這個程式語言要怎麼寫,如果您之前學過其他程式語言的話,這個階段通常不會花費太多時間,我會建議至少買 1 本書回來研讀。
學習生態
所謂的生態就是指這個程式語言常用的框架、套件或作法,單純學會語法可能可以寫出一些簡單的程式,但絕對不足以勝任軟體開發工作。在這個階段建議可以直接上網找教學文,但您可能會面臨不知道怎麼下關鍵字找資料,所以還是需要一個會的人來輔助您,至少給您一些關鍵字,您才有辦法自己回去學習。
實務應用
最後,就是學習實務上大家都是如何做的。這部分很難從書中就能學到,可以多上網找資料,通常都會有工程師分享,再來就是多認識一些工程師,多與他們聊天,大部分的工程師都是很樂意分享的,相信可以學到很多東西。

其他建議

我認為軟體開發在市場上,通常是作為輔助角色,必須依附在某個領域或解決某些問題才會產生價值。 不像傳統製造業,生產的產品本身就具備基本價值,就算賣不掉,低價銷售還是會有人買單。 但軟體系統不是這樣,如果您的系統解決不了任何問題,就算多低價也不會有人買單,它就是一堆英文字而已。 所以我會建議,當您已經學會開發系統了,盡可能的多接觸不同行業不同類型的系統。

如果可以的話,建議多學幾種其他程式語言,不同程式語言有不同的專長,多學一點,您能開發的系統類型也會更廣。 而且我認為如果您已經學會一種程式語言,要再學習另外一種程式語言,對您來說應該不會太難。 還有一定要多做 Side Project,可以的話,也經營一下自己的 github,這些在找工作都是很加分的,也是實力的證明。

最後,再提醒大家一下,程式語言是一個解決問題的工具,身為軟體工程師最重要的是您能解決什麼問題,而不是您會寫什麼程式語言。