我是這篇文的原po,
之前受到版上(科技版、軟體工程師版)與許多網路上前輩們的資訊的幫助,
因此默默許願要是成功上岸就把自己的準備過程與心得記錄下來希望可以給想轉職軟/韌體工程師且有相似背景的學弟妹們些微的幫助,
若是是本科EECS的大神們應該可以上一頁了XD。
------背景:
本身背景是114醫工112生醫電資所,
雖然研究所是在電資院底下,
但因為大學並沒有修習任何程式課程,
且研究所也沒有好好規劃課程因此畢業時python不熟、C++不會且缺乏許多CS基本學科知識(真想回去打自己一拳叫以前的自己好好讀書),
因此才會將標題定為非本科從0開始的求職心得。
------求職結果:
群聯Phison DV&FW offer get
威聯通Qnap 軟體工程師 無聲卡
訊連CyberLink 多媒體研發工程師 offer get
群暉Synology Product developer offer get
------準備過程:
1. 確認自己想走的路
雖然我面試職缺範圍極廣,
軟體與韌體甚至於數位IC驗證工程師都有進行面試,
看似多了許多選擇,
但也因此花了過多的時間準備走了許多的遠路,
因此會建議先決定轉職的方向再好好下苦功補足不齊的知識,
可以使用developer roadmap或查詢網路上眾多的職涯介紹心得等等來幫助探明自身想走的路。2. 進行準備
若是還在學一定要去選相關課程!!!
課程會是像面試官證明你有相關基礎技能最方便也最可信的方式,
且通常課程都會叫全面且較有系統吸收速度會快許多,
而若是像我一樣畢業後才發現慘了要找不到工作的就只能硬著頭皮用自己找得到的資源想辦法補齊不足的知識了,
補的時候會建議實作相關小程式來證明自己。
作業系統:
對於軟體工程師與硬體工程師而言OS都是最最最重要的一個基礎科目,
我自己是利用清大周志遠教授的作業系統OCW來讀這個部分,
但缺點就是沒辦法寫作業:或是有聽說羅習五教授的作業系統也十分不錯:而若是時間充分則建議可以好好讀一下恐龍本會更為詳細!
最常見的考題就是thread, process, mutex等等ch.3~ch.8之間的內容。
程式語言:
這不管是軟體還是韌體工程師想必都是必備的XD,
我會建議優先學習C++,
對於韌體來說C++是必備的語言,
對於C++語言特徵像是volatile、static、extern、inline、macro等等都需要了解。
而軟體職缺則8成都接受使用C++作為面試時的語言,
但對於語言特徵就不是那麼的重視不太需要特別花時間學,
python則雖然寫起來開心方便快速但可以投遞的職缺會較為被限制,
且pointer、dynamic array vs static array等等較基礎的概念較不明顯,
因此我個人認為學習C++對於程式語言的概念會較為完整。
資料結構與演算法(刷題):
一樣可以在校內上課請先上,
這部分蠻重要的,
我是旁聽台大陳和麟教授的演算法(應該直接修課的),
最基本的知識如
資料結構array, linked-list, stack, queue, hash table
演算法六大sort
等等都要熟練掌握到可以自己手刻。
除了這些基礎外通常還會用Leetcode來練習面試時可能會有的白板題,
軟體與韌體對於白板題的重視部分有點不同,
韌體較重視bit operation,
而軟體則更注重DP、BFS、DFS等等,
因此在練習Leetcode時可以根據想走的路對不同的主題進行重點加強,
除此之外韌體大部分刷easy的題目即可,
而軟體若是目標是年薪1m以上的公司則會建議要刷到medium,
目標可以訂為20分鐘刷完一題,
且刷完會建議還是去看一下大神的solution並學習各種不同的解題方式,
盡力達到最佳解,
而若是要體驗有面試的緊張感十分建議打leetcode假日的contest,
就算題刷得很少也沒關係,
會進步比較快。
物件導向程式語言:
若是要往韌體發展則可以忽略這一部分XD,
但若是想往軟體發展甚至是IC驗證的話則OOP的概念蠻重要的,
會建議要融會貫通,
這部分我學得比較分散是網路上資源東找一塊西找一塊拼湊起來,
所以沒有適合的資源提供,
但建議學完一定要寫個小東西確保自己真的了解。
其餘有時間十分建議補起來的科目:
計算機組織: CSEE都必修的學科,學了之後對於電腦內部程式運作會更清晰
韌體:
嵌入式系統: 若是想往韌體發展的則有嵌入式系統的知識會是大大的加分
C: 雖然C++已經足夠應付大部分韌體面試,但C在韌體十分常用,有堅實C的知識會加分
軟體:
計網概: 考的機率沒那麼大但也算較為重要的學科
其他就視職缺內容細分,例如backend就需要學Django、Flask、SQL有的沒的,AI 則是ML/DL,或是韌體視職缺通訊原理也會十分重要
3. Side project:
韌體部分做個嵌入式side project肯定十分加分,
對於軟體而言side project對於非本科求職甚至可以說是必須的,
是個證明自身有程式能力並且真的有熱誠的方式,
但因為軟體領域實在太廣,
要做哪種類型project需要視個人想投遞的職缺決定,
但不論做哪種都需要對自己的side project十分熟悉,
例如為何使用這種框架?為何使用這種演算法?是否有可優化的部分等等,
絕對不要拿別人的project來用會很容易被拆穿反而被扣分。
4. 心理建設:
非本科又想往軟韌體工程師走肯定有很多東西要補,
在準備的過程肯定會感到疲累,
甚至在面試時也會因為非本科少許多機會,
收無聲卡是家常便飯,
甚至連沒聽過的小公司、電子五哥都不找我QQ,
要找到工作真的是需要機緣,
因此自己真的要放寬心,
天助自助者,
只要把自己可以做到的盡力去做其他就放輕鬆,
不然很容易撐不下去。
5. 面試小技巧:
-自信: 非本科因為知道自己缺乏許多基礎知識因此沒自信是必然的,但有點規模的公司願意找你面試通常都代表你的學經歷是合格的,且可以接受一張白紙進公司後再培養的,因此不要妄自菲薄,你是夠好的,沒自信反而會錯失可以好好表現的機會
-自我行銷: 同樣非本科要上岸衣錠比較難,面試官也會用較不一樣的角度審視你,在基礎知識比不上本科的情況下就必須好好表現自己其餘部分,例如溝通能力、邏輯性、學習性等等,要盡量突出自身優點
-展現熱情: 這邊指的熱情也可以說是積極性,例如在面試時肯定會被問到自己不會的,那可以誠實跟面試官說自己不會,並且反問面試官答案進行學習展現自己是對於該領域有熱情的
-好好提題: 面試時都會有QA的部分,這時候可以問工作內容、技術甚至是部門風氣等等,展現自身對於該職缺的興趣,因此主管在介紹部門的時候一定要好好聽XD
-與面試官交流: 算是以上幾點的綜合體,與面試官交流是展現自己最好的方式,因此較算你的個性沉默寡言在面試時也盡量多與面試官溝通,不然沒有本科的學經歷又沒辦法好好展現自己當然沒辦法贏過其他應徵者
6. 面試完的反省:
非本科在面試時一定會遇到沒學過沒遇過的部分,
因此每次面試完一定要把面試中失誤或回答不出的部分計起來確保下次面試不會重蹈覆轍,
通常面試個三家大概就把不熟的部分補得差不多了,
因此會有人建議找小公司當作面試練習,
但我認為作為面試練習的公司也不能太小,
因為小公司與大公司重視的不同,
面試內容可能也大相逕庭,
例如面試群暉前我已經有訊連的面試經驗,
表現得就會比較好,
但Qnap因為面試內容跟群暉差太多了反而沒有什麼幫助。
------非常有用資源:
一個非本科前輩的求職心得,我基本上都是看這篇來準備:CS50,啟蒙我的程式學習之旅:面試整理,韌體面試必看:作業系統筆記:ChatGPT: 認真很好用,我模擬面試、學習程式全部都有用到
NeetCode,刷LC可以先從這開始:資料結構,基礎資料結構這網站都有也蠻仔細的:同樣一個前輩的轉職心得,這真的是大神:準備工作面試(C語言)分享:我拿到Google Offer的刷題方法,完全不藏私大公開:
------個人心得:
非本科找工作真的好難,
從畢業到找到工作大概待業了3個半月,
每天起床就是看課不然就是刷題寫side project都沒假日可言,
然後非本科找軟體又沒有什麼人脈沒什麼機會內推,
我只有四個面試是因為一大堆投的履歷都被無聲了QQ
資料也都只能查網路上的,
非常心累,
而且充滿迷茫不確定自己到底找不找得到工作,
現在終於可以比較放鬆的學習了,
希望我的這篇可以稍稍幫助到未來跟我差不多背景的學弟妹,
感謝網路上提供各種各樣資訊的前輩們!
最後附上LC人權圖證明這三個月我多認真XD