前言

面試作品集&面試心得

以我來說,我主要放了兩個作品,分別是個人專案和協作專案,會把這兩個專案當成主要的作品集展示對我來說想呈現的東西不同,以下我分別簡單說明

個人專案

所以常常看到網路上很多前輩建議不要直接把課程中的作業當成作品集,我想並非完全不行,只是必須從這個你也許很得意的作業中硬擠一些故事出來回答,可能會相對比較沒有內容(先不論有經驗的人一聽就知道在畫虎爛,自己講起來也會心虛吧😆),也就造成無法在面試官眼中脫穎而出。

所以我會建議可以針對你想放在履歷上的作業,加入自己的一些想法,例如你覺得原本寫的code太亂or太老,可以利用最新的語法重構並整理;或是你覺得UI不夠漂亮使用者體驗不夠細緻,重新刻一個自己喜歡的加入一些自己的小巧思又或者是在專案中加入一些你最近覺得很酷的新技術或新功能,這些都是能讓你在面試時幫自己加分的地方。

協作專案

我將協作專案放入履歷的目的是希望除了能告訴面試官我有協作經驗,更多的是希望面試官針對協作專案問我問題,因為這些問題的方向通常都是比較可以預期,而我也有很多經驗和故事可以回答(不是要回答的多浮誇或多動聽,而是我建議盡量真實,因為繼續追問時你才會與面試官行成一個很好的會話),當然這些回答可以找人練習過,以不至於給人感覺都像是在抱怨隊友或是呈現整個作品都是自己的功勞的模樣。

以我來說,因為參加AlphaCamp而有經歷到協作專案(對細節有興趣的人可以看我前言提到的那篇),雖然當時其中一個隊友因為工作的關係,幾乎無法參與專案進行,導致最後成品可能跟預期中的完美有些落差。但事後來看,也是因為這樣的經驗反而更貼近實際工作上的狀況(人手不足、工作量大等等的狀況),更能引起面試官好奇並往下追問。而最常被問到的問題大部份都不是專案的產品內容,而是著重在合作上面,例如如何進行分工、你負責/貢獻的部分為何、協作方式為何(例如運用GitHub、Slack等等)、專案如何管理、如何進行溝通、是否有遇到合作上的困難和如何解決困難等等問題(所以沒遇到合作上的困難反而不一定是好事,因為沒東西可以回答😅),這些是沒經歷過真的唬爛不出來的東西(起碼我不行😆)。所以若在找工作時有時間,建議自學的讀者可以試著找看看朋友或是勇敢到網路社群找人組隊等等方法一起協作個專案體驗看看,不管合作的過程中順利與否,只要你能好好處理每次的溝通和合作而不是放棄或擺爛,都是一個可以讓你在面試中轉換成很棒故事的經驗並且可以很好的展現自己。

後記

工作後的小小小心得

而相較於工作前和工作後,感受到和自己在做專案上最大的差別在於寫code時,需要考慮到維護性和易讀性(雖然我在工作前覺得能做出功能最重要,其他都是一塊小蛋糕,但我才發現好像不是這麼一回事😅),另外就是需要與QA、後端和UI/UX設計師等等其他專業合作,必須要一直溝通以確保產出是有效的,不然我覺得若是悶著頭照著自己以為的方式做,會很容易要重做。

會看到這裡想必你也是在考慮轉職或是正在轉職的路上(或是我的朋友?),之後過一段時間,等有比較多工作上的心得再獨立一篇分享給大家,預祝各位讀者轉職&面試順利囉😎

前言

  1. 轉職起源(包含簡述背景、轉職原因等等)
  2. 轉職路上(包含學習資源、心路歷程等等)
  3. 面試準備(包含履歷撰寫、求職策略和offer抉擇)

轉職起源

活下去,沒錯,要能夠轉職,首先要先評估自己是否能在轉職的階段能否活下去,很現實的一面就是是否有其他收入來源?是否有足夠的存款?以我自身為例,我在學習的第一階段,是採工作之餘的方式進行,一方面能確認自己是否有興趣,另一方面是還有穩定的收入會讓自己安心不少;而第二階段要花更多時間深入學習時,我是辭職專心學習,但學習的同時,我還是讓自己保有固定收入,我自己是靠接家教、本科系顧問的收入、和一點點投資作為收入來源,我認為這樣不僅讓我爭取到更多的學習時間,也讓自己在學習階段安心不少;若是沒有辦法有固定收入的人,也看過一些建議,像是可以設定目標一年內轉職,衡量看看自己的存款是否能分配出來供自己一年內保證可以活下去,有這樣的規劃,學習起來會更踏實。

動力,我覺得自己是個目標導向的人(知道自己是什麼樣的人也滿重要的),只要有目標我就會很有動力,所以我會先設定一個長期目標,和不斷更新的短期目標,若以轉職為例,我自己的長期目標是設定成功轉職成目標領域的工程師,而短期目標其實很隨性,例如完成一個應用程式、完成當周作業、完成一個專案或是小到完成一題演算法等等。至於我設定轉職成軟體工程師的原因,主要是嚮往不管在哪裡只要有一台電腦就可以工作,另外就是我把coding視作一個工具,能夠提供我未來更多可能性的工具。以上是能夠一直支持我自己轉職的動力來源,那你的呢?我認為原因不用很複雜或很偉大,但要能一直持續學習到轉職,必須對你來說是很強力也很真實的來源。

即便以上在初期都確立好了,如果你不去做,還是什麼都不會發生。但我這意思不是說做了就一定會成功或不做就一定不好,即使你真的做了還是有可能在中途歷經懷疑自己、焦慮不安、懶惰甚至是放棄,但是唯有做了,你才知道會發生什麼,也才有可能可以享受那達成目標的一刻帶來的喜悅。套一句呱吉分享過一句我很喜歡的話「人生沒有一條路是白走的」,至於路要怎麼走則是由你決定。

轉職路上

好的學習資源,我學習時喜歡先看大綱,所以我需要先有個地圖,我才會大概知道我為什麼要走這條路,要往哪裡去。所以在主要的學習資源上,我選擇一個有架構性的學習平台AlphaCamp(以下簡稱AC),搭配google搜尋、官方文件和youtube影片等等。要選擇這類型的學習平台作為初期主要的資源,可以先分析自己適不適合,例如我當初會考量主要為課程花費、主動摸索的能力、線上課程的模式等等,而吸引我的點包括平台主辦人的特質、課程有系統性的編排、各類學習資訊的提供、學習社群等等。另外也提供讀者不同的學習路徑,我一位強者朋友,他是利用3~4個月,直接找個專案模仿並搭配前端框架的官方文件做出一個電商平台專案然後轉職成功。所以重要的是你還是要先多了解自己是什麼樣的人。

一起學習的夥伴/前輩,我分析了自己以往有成功的經驗,其中一環我認為重要的因素是有一起學習的夥伴和前輩,夥伴除了可以互相討論、互相鼓勵和良性競爭外,最重要的是在學習路上常常會有自我懷疑的時候,但當你發現跟你一起學習的人也遇到同樣問題,你比較不會產生無意義的不安感;而前輩則是可以不論在技術上或是職涯上給予經驗分享,我自己就是很幸運能藉由AC的平台認識不少優秀又熱心的前輩,可以參考他們平常是如何學習才這麼優秀,讓自己有一個方向。

適度休息,我覺得自己要持續保持動力,達成短期目標後有適當的休息(又或者說是小獎勵)相當重要,例如好不容易完成一個小專案,可以安排一趟旅遊、做一些自己喜歡的事情,這樣接下來繼續奮鬥也會保持著動力,形成一個正向循環。畢竟我覺得再怎麼喜歡、再怎麼有興趣的事物都會有困難或是不適應的一面,所以完成一個目標,我通常都會給自己一點小小的鼓勵。

轉職試煉-面試

心態建立

打造履歷

技術考題

求職策略

順帶一提,我自己能應徵上理想的工作,第一步就是在一般平台上投遞(包含104、官網、cakeresume、yourator等等)都沒回音後,不死心,再去linkedIn看該公司的成員是不是有我認識/共同認識的人,被已讀不回,還是不死心,再透過共同認識的AC前輩(真的要非常感謝這位前輩),終於連繫到一位該公司裡面的成員(和這位素昧平生的成員),於是透過這位成員成功讓自己的履歷被閱讀並且終於得到面試的機會,當然面試過程中遇到的很多挑戰又是另一個故事了。

Offer拿取/抉擇

而在offer抉擇上,我自己覺得就像是在做投資,你可以把自己覺得重要的幾點列出後一一比較分析,但不可能有100%賺錢的投資,而且資金有限,所以最後一步只能選擇一間最看好的項目試單了。我目標會放在公司在做什麼產品、跟什麼樣的團隊工作以及自己是否能夠從中成長並且將技能帶著走,所以我自己看重的點是團隊氛圍(包含學習氣氛、團隊合作、主管員工間的互動等等)、公司產品是什麼和未來發展性,當然如果都差不多的話(不過通常心裡都一定會有一間特別喜歡)也可以比較最實際的薪水囉!以上這些都是在面試中可以略知一二的,所以面試過程中除了公司在選你這個人以外,你也要記得觀察公司。我印象很深刻是有一間公司在面試結束時,問了我“我們公司的面試和其他間公司的面試給你的感覺如何?你覺得哪裡好或是哪裡不好?”

後記

現在等著我的就是新的一輪挑戰和目標設定啦!工作之後有覺得什麼值得的會在和各位分享,也許未來還會有二次轉職(盡量先不要,有點累🤣),不過只要是自己選擇的路,都要記得相信自己,最後再分享一句我很喜歡的話

“Everything Happens for the Best.”。

感謝

前言

專案介紹

DEMO

前端Github / 後端Github

測試用使用者和 UserStory可參考GitHub Readme

專案發想

  • 本身也有遠端教學及解題的經驗。
  • 市面上較少專為數理打造的線上教學/解題平台。

專案目標

  • 讓學生使用者以付費發問數理相關問題並獲得即時解答
  • 讓老師使用者可以透過在線解題後得到費用

專案技術

  • 後端:Node.js + express
  • 資料庫:MySQL
  • 部署:前端(GitHub Page)、後端(Heroku)
  • 其他技術:Socket.IO / mocha test / nyc coverage / travis CI/CD / 藍新金流API / RWD / RestfulAPI / Passport (JWT)

專案截圖

前言

Q1 履歷作品集是如何準備?

Q2 面試的部分有什麼技巧可以分享?

面試前:投遞面試履歷時建議要做適當的客製化,針對想去的公司做研究,例如公司規模、產品狀況、工作團隊的挑戰以及未來願景等等,這能有效提供在面試時與面試官做良好的互動。

面試時:在面試過程中,在自己比較熟悉的部分試著找與面試官有共鳴的部分,可藉由從一開始面試官的問題,先給出一個比較架構性的答案,慢慢透過討論去了解面試官內心想聽到的答案,再抽絲剝繭,讓自己的回答慢慢具體化。

面試後:針對在面試過程中遇到不會或是回答不順的題目,回家後會先紀錄整理,並試著針對這個問題再做一次表達直到滿意為止。

另外前輩也分享,其實在不斷面試過程中,除了熟悉與面試官對答和技術考題外,也能慢慢了解自己的需求,進而認識自己。

Q3 當初如何挑選公司?

Q4 平常是如何在軟體領域中精進自己?

Q5 菜鳥剛進公司時任務如何安排?

致謝

前言

在此專案之前,有曾經以Socket.IO技術在全端的架構下打造公開及私人聊天室,於是在此專案建立了基本功能後,便想試著加入Socket.io技術來處理這個即時性的需求,至於Socket.io到底是什麼技術以及如何應用在這樣架構下的專案中,我會在接下來的文章中介紹我於研究整理後對自己應用的經驗做簡單分享,就讓我們繼續看下去吧。

什麼是Socket.IO?

從應用角度我認為Socket.IO可以簡單區分成兩個部分,發送事件以及監聽事件,屬於事件驅動的一種技術,如下面提供簡單的Code範例,當前端頁面登入時發送(emit)一個名為”greetingFromClient”的事件並帶有”Hello Backend”字串的資料至後端,後端監聽(on)到此事件後即可將收到的資料(msg)打印(console.log)出,並發送一個名為”greetingFromServer”的事件至前端,前端監聽到事件後及觸發並打印出”Hello,Frontend!”,用這個技術是不是很簡單就讓前後端實現零距離的打招呼呢😆

//前端
socket.emit("greetingFromClient","Hello, Backend!")
//後端
socket.on("greetingFromClient",function (msg) {
console.log(msg) //Hello, Backend!
socket.emit("greetingFromServer","Hello,Frontend!")
})
//前端
socket.on("greetingFromServer",function (msg) {
console.log(msg) //Hello,Frontend!
})

到這裡應該已經有點感覺,Socket.IO就是不斷的透過事件的傳遞來完成溝通,以此基本概念下在應用上就可以很多元,例如監聽客戶端/伺服器端上下線事件、按按鍵事件觸發和上傳照片事件觸發等等。

而除了基本的廣播事件傳遞外,相信更多時候是需要將特定資料傳送至特定的客戶端,以此專案來說,當然希望當某老師解完某學生的問題時,能夠只有即時通知該學生,而並非所有連線中的客戶端;另外也同樣希望只有老師身份的人可以收到學生新貼出問題的通知。此時就可以利用一些Socket.IO提供的方法來達成,參考socket-cheatsheet.js整理了一些自己在專案中常用的語法。其中room的方法即是我在此專案用來區分身份的好幫手,此語法可以幫助我讓特定身份的人加入指定room,並在傳送特定訊息時,只傳送到該room裡,讓我順利呈現想要的樣子🙆🏼。

socket.emit('msg', "Hello"); //sending to sender-client onlysocket.broadcast.emit('msg', "Hello"); //sending to all clients except sendersocket.broadcast.to('game').emit('message', 'Hello'); //sending to all clients in 'game' room(channel) except sendersocket.to('game').emit('msg', 'Hello'); //sending to sender client, only if they are in 'game' room(channel)socket.broadcast.to(socketid).emit('msg', 'Hello'); //sending to individual socketidio.emit('msg', "Hello"); //sending to all clients, include senderio.in('game').emit('msg', 'Hello'); //sending to all clients in 'game' room(channel), include sendersocket.on(); //event listener, can be called on client to execute on server

打到這裡才發現已經打了不少,考量到文章的的易讀性及段落性,我就在這裡先git commit了😆。簡單認識Socket.IO後,接下來就是實際應用在專案中,包含引入前後端的套件、前置作業以及邏輯如何實現等等,我會在下一篇文章繼續分享。

前言

遇到的問題

要討論這個問題就要先了解Bootstrap實作Modal方法的原理,這也說到了一個解法 — jQuery!

方法1 — jQuery

  1. jQuery直接對 DOM 操作 (太過頻繁會造成消耗效能非常大)
  2. jQuery可能會破壞DOM與 Vue.js 的綁定
  3. 兩者操作的觀念不同 (jQuery 直接去動「網頁上的元素」,而 Vue.js 通常只會和資料有所互動)

備註:最後因為我整個專案用到jQuery的方法很少,所以先用此法改善,但未來我可能會用以下其他提到的方法改進。

前言

原理

“存取兩個變數,讓這兩個變數不斷根據條件變動後做比較。“

用這方法常常最直接的優點就是省去了兩層迴圈的時間複雜度,然而,指針的設計也是 …

前言

常用技巧

位元運算子法 (Bitwise operator)

前言

學習歷程

學習的路程共分三學期(新制):

第一學期屬於入門摸索階段,主要是讓沒有碰過程式的人也可以開始動手熟悉寫程式是怎麼一回事,課程中會學習一些基本的HTML/CSS/JavaScript,個人認為教材內容和實作難易度對新手很友善,也會有一些小小成品讓自己產生成就感進而想繼續往下摸索,詳細內容可以看我之前寫的這篇(轉職-我的第一堂Coding課)。

第二學期屬於熟悉程式語言階段,主要是針對JS這個語言做更深入的了解以及方方面面運用的介紹,包含現在常運用的RWD概念、我到現在都還很愛用的Bootstrap框架、DOM操作和API串接等等,這學期我個人認為是大補帖,很多觀念我到現在都常常翻來複習,像是Function的運作、DOM的原理還有瀏覽器渲染流程等等(這些觀念也常常被業界拿來當面試問題)。整體而言這學期搭配實作的成果讓我對寫程式信心度大幅提升,有興趣細看的朋友可以看這篇(學習前端語言-Javascript)。

第2–3學期(新舊制轉換)屬於後端熟悉階段,主要是繼續利用JS語言建立後端能力,在Node.js環境搭配express框架下學習,並使用一些業界常見的資料庫和雲端部署實作成品,這階段已經是全端且頗具樣子的成品。我必須得說,就是這個階段開始把我好不容易建立起來的信心又慢慢消磨掉了😆,不過也是這個階段讓我知道這個領域真的學海無涯,隨時要保持著一顆謙虛且持續學習的心態才能走得長遠,因為軟體技術更新的速度(包含版本、工具及框架等等)相比其他領域相對要快許多,詳情可以看這篇(我的全端工程師之旅)。

第3學期屬於培養軟體工程師階段,主要是利用業界常見的開發架構以及協作工具完成具規模的成品,在這個階段感觸最深的如實際體驗到與夥伴git協作的強大(幾個學期用的git的深度和次數遠不如這學期)、如何有效的撰寫API文件才能與前端溝通、如何進行API測試、各種登入登出機制的認證原理、關連式資料庫的使用(MySQL)、認識基本的金流串接、認識CI/CD的流程以及線上即時聊天的實作技術等等,這個階段介紹的每樣東西若要深入了解感覺都是無底洞,彷彿在告訴學生們這就是軟體工程師的日常!對這個階段詳情有興趣的可以參考這篇(初探協作專案的全端工程師)。

總結

感謝AlphaCamp

前言

協作專案 — Simple Twitter

協作專案分工 (GitHub)

Harry Lu

1992, 學習科技|研究投資|環境工程技師|成功大學環境工程學系|台灣大學環境工程研究所|水處理行業工作兩年半|想要用科技打造自己的企業,過自己想過的生活。

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store