軟體工程師有什麼分類?該學什麼呢?用什麼方式學習?用什麼工具與環境實現?
大概是我猜想跟我當時連前後端是什麼都不甚明瞭的人,會在一開始所帶著的疑問
因此,我今天試圖整理一些我在選擇上的評估與目前想法
當我問電資學院的朋友要怎麼選擇
他們就會說:「看你想做什麼呀?」
我:(充滿問號無法提取任何關鍵字
對於完全不熟悉這個領域的人,的確很難透過這個問句去幫助自己
就像別人請教我應該如何學習心理學時,在詢問目的時,仍然會給予十分生活化的舉例
更何況,軟體工程的分野,通常不是一般人可以直接從字面感受
在我自己的觀察與經驗中,大概會是一串從上而下判斷式
if 你的目標明確:
return 你要的語言
if 你跟我一樣迷惘:
if 願意投入大量心力且想打好基礎:
return C or C++
elif 想快速上手程式,未必在意背後深入資訊:
return python
elif 想要相對入門,容易產出視覺化產品(網頁):
return JS
elif 對常見的產品開發有興趣,願意投入大量心力學習負責的判斷邏輯:
return Java
..................
當然,我的認識有限,語言也非常繁複,而我所理解的選擇,仍然不脫:
以我自己為例:
心理學的訓練對資料分析熟稔,本來就學過R,若要往時下流行的資料科學去走,python已經漸漸成為標配
但我的臭脾氣是:要學就要學的深,而且想知道整個世界的運作
python顯然有其限制,光計算時間跟空間複雜度就必須一直往回翻文件,又沒有太多規矩跟要求,無法讓有心在這個領域長遠發展的人,初期建立深入的概念與良好的寫作習慣(縮排、該寫括號、型別、順序、變數作用區域等等)
盤點以前學習python很快忘光的狀態,學習C++真的對我後續轉職非常受用
以前中學資訊課學習經驗不佳,但我知道自己邏輯很好,只是需要一個學習框架
大概幾乎每個人對於轉專業新手,都會建議初期先從實體課建立信心
扎實的學校課程很寶貴,若像是台大資訊系統訓練班也是很品質穩定的實體課
我自己的經驗是:
在畢業前最後一年,為了試驗自己的興趣與天賦,我同時選擇三門不同領域的課程:
雖然切換不同語言真的很累,每週都有寫不完的作業,但深刻感受到我明顯的喜好差異:
相信很多人都說過類似的話,但還是有一些迷思覺得要多做side project才有求職潛力
我自己經驗有限,卻覺得課堂專案有時比自己胡亂找題目,更容易有深度
對資訊領域仍不清楚的人,很難找到一個明確的目標,網頁、app相對好找題目實作,資料分析頗困難,費了很多時間找不到有價值的議題,連假設都難建立,更別說應該收集的資料是否方便取得,或有驗證意義
充其量,專案只是入場票,無論是上課還是side project,愈有機會可以跟業主合作、有實際商業需求與價值、資源容易取得,都比一群菜鳥胡亂拼湊來的好(而且面試時通常會很尷尬)
我個人從在學到實習的策略是:
透過上述機會,我都有機會愈貼近真實商業需求,甚至拿到公司內部資料
雖然因為保密條款有些細節不能在求職透露,卻能幫助自己評估未來求職方向,也可能因為這些經驗被有需求的公司親睞
實習的幫助應該放諸四海皆準,尤其工程從做中學,更需要透過實習累積
我自己蠻幸運,在學校附近找到QA intern的機會,雖然跟研發無直接相關,卻能成為踏入該領域的敲門磚,現今資本有限的中小公司,QA缺幾乎都是主打「非工程背景轉職」名號,在這供需互惠的機緣下,確實是轉職者在信心不足且需探索的情況下,蠻不錯的選擇
以我自己經驗為例:
比起專案,實習所學習與累積的內容即是真實需求,具備明確目標、完整的問題情境與使用者
比起號稱培養即戰力的超貴課程,公司隨時有資深的前輩能夠詢問,比老師跟助教給予更多彈性與機會,期待的成長速度也更快
寫在最後:
雖然我現在仍沒有非常明朗的理解,經手項目也跟當初在學不太一樣,仍可以深刻驗證:「路沒有白走」
資料庫的訓練使我能更理解後端運作、掌握產品開發的脈絡與可能出錯得細節
C++的基礎使我學習更為快速且能融會貫通
QA有很多繁瑣使我厭倦得細節,卻因此更能虧得產品開發全貌
總結今天相對結構彈性的分享:
我的理解或許粗淺,很歡迎交流分享自己的想法~
背景介紹
曾經以為自己會成為一名臨床心理師,但過動地先走組織策略,也經手UIUX專案,醫院走一遭後,接受扎實管理顧問訓練,並從數據行銷中感受自己對 data-driven 與 big data 的熱忱,便一路愈來愈 hardcore,大量暴露於產品開發的各種技能,期待未來整合所長,在資訊產業中,有策略的創新足以兼顧企業與使用者價值之產品。