# BQ ## 自我介紹 各位面試官好,我是劉冠廷,畢業於中山大學金融創新產業碩士專班,藉由財務接觸資料科學,再從資料科學決定踏入軟體工程師的職涯。 由於嚮往親手打造方便易用的數位產品,也希望藉由科技的力量對社會有所幫助,所以決定以前端工程,作做為我的起點 在 2022 的 下半年,我加入火箭隊培訓營進行全職學習,在教練引導之下,規劃學習目標,成為獨當一面的工程師。 在最後的結訓專案中,我和另一位夥伴,選定以電子名片作為核心主題,這個專案有完整的名片編輯器,以及方便的名片管理功能,使用 React、Redux 還有 Next.js 進行前端開發,其中也涵蓋貴司的職務需求 同時我也兼任了後端開發的角色,使用 Express.js 和 MongoDB,開發共 39 支 API 身為具備後端知識的前端工程師,我認為自己能換位思考,在考慮可行性、合理性之下,與後端夥伴溝通協作,再加上先前有擔任過數據分析師的經驗,對於資料處理跟分析過程,具備一定的掌握度,這些跨領域的思維,都是對跨部門合作非常有幫助的 最後,在個性方面,我喜歡學習新知、分享知識,除了架設自己的技術部落格,也曾在火箭隊進行短講,我認為自己適合組織扁平、快速迭代的公司,希望和同事互助合作、一起成長 希望可以成為 以沛的一份子 謝謝 ## 自介一分版 您好,我是劉冠廷,畢業於中山大學金融創新產業碩士專班,由於嚮往親手打造方便易用的數位產品,也希望藉由科技的力量對社會有所幫助,所以決定從資料科學轉換到前端工程師的職涯。 在 2022 的 下半年,我加入火箭隊培訓營進行全職學習,在最後的結訓專案中,我和另一位夥伴選定以電子名片作為核心主題,使用 React、Redux 還有 Next.js 進行前端開發,同時我也兼任了後端開發的角色,使用 Express.js 和 MongoDB,開發共 39 支 API 身為具備後端知識的前端工程師,我認為自己能換位思考,在考慮可行性、合理性之下,與後端夥伴溝通協作,再加上先前有擔任過數據分析師的經驗,對於資料處理跟模型建置,具備一定的掌握度,這些跨領域的思維,都是對跨部門合作非常有幫助的 最後,在個性方面,我喜歡學習新知、分享知識,除了架設自己的技術部落格,也曾在火箭隊進行短講,我認為自己適合組織扁平、快速迭代的公司,希望和同事互助合作、一起成長 ## 為什麼想從資料科學轉職前端工程師? 資料科學是一門很有趣的領域,需要集結統計學和程式的能力,將資料挖掘出 insight,那時候在公司的業務上有使用 Python 的地圖套件,畫出銀行分行在地圖上的分布,還有一些重要地標,比如說科學園區、競行分佈,來看哪裡適合設立新分行,那時就覺得能做出前端互動的功能是一件很酷的事 所以從那時起,下班閒暇的時候,我開始從 udemy 自學 web 開發,發現自己真正喜歡的是,實際親手打造一個功能或是產品,再加上軟體工程師的領域,風氣比較多元自由,很適合我的理想,於是在兩年期滿決定加入火箭隊培訓營全職學習 經歷過培訓營跟結訓專題,我更加確定自己想要走這一條路,因為除了感受到自己一直在成長之外,實際做出一個功能或產品,也讓我感到十分有成就感 ## 你不打算繼續做資料科學了嗎? 目前還是以深入前端跟web開發為主,經歷過培訓營跟結訓專題,我更加確定自己想要走這一條路,因為除了感受到自己一直在成長之外,實際做出一個功能或產品,也讓我感到十分有成就感 但資料科學方面的知識,還是對我很受用,例如統計學的知識,在人生各個情境的決策上面,都能以機率跟風險的角度進行思考,擔任數據分析師期間,養成對資料處理的敏感度,在軟體工程的職涯也有一定幫助 ## 你為什麼想加入我們? 因為我自己有數據分析的背景,再加上也有後端 node.js 的知識,覺得和貴司的向性跟 tech stack 十分契合,希望可以貢獻自己跨領域經驗的價值 再來是嚮往彈性自由、又可以快速成長的公司,所以想加入以沛 ## 你覺得你的優缺點是什麼 ### 優點 : 熱愛學習,喜歡分享 學習新技術,都是為了解決某些痛點 一開始學原生 js,覺得直接更改 DOM 會很難維護,邏輯也不連貫,學了 react 後,發現這種資料驅動畫面的思路真是新天地 再來寫原生 css 的時候,常常煩惱命名要怎麼取,tailwind 就能以原子化 css 的概念解決這個痛點,團隊協作也能達到統一 所以我很喜歡這種一步一步練功成長、破關的感覺 接著,我喜歡分享,因為我認為,如果我自己的努力,可以幫助一些人,甚至是一大群人解決他們的問題,節省他們的時間,這是一件很酷又很棒的一件事情 所以我有一個技術部落格,撰寫技術文章,除了可以幫助別人之外,也可以藉由這個過程更鞏固自己的知識 ### 缺點 : 一開始就會想一步做到位、過早最佳化 一開始在學習程式的時候,容易把 scope 開得太大,會想要一步就做完美 例如一開始在學 css 的時候,其實切版還不是那麼熟,就開始研究 css 設計模式,結果到後來也很少用到 或是一開始學後端的時候,就想把架構拆得很齊全 但是我逐漸發現,這樣容易讓我停在構想與計畫階段,而不去實際實踐 後來我的哲學是,先求有,再求好,一開始可以先構想好重要的架構,但不要規劃過多,在實踐的就會從經驗慢慢理解怎麼優化 ## 你克服過最大的困難是什麼 那時候在銀行擔任資料分析師,剛到職的時候,對很多資料庫的架構十分不熟悉,銀行的資料庫又十分龐大、又有許多業務邏輯,又迫於時程又不熟悉,所以有時資料嚴謹性不是很好,常常會有疏漏或是錯誤的地方,那時業務單位有一些小抱怨,我很怕這樣會打壞我們分析單位的名聲,被人覺得我們的資料很不可靠,所以當時滿緊繃的 我的解決辦法是,建立自己的知識體系,把常用的資料撈取邏輯全部分門別類整理好,例如:想撈換匯相關資料、想撈理財產品新申購金額,就建立許多示範程式碼筆記,這樣慢慢去統整起來, SQL 開發時程快了很多 再來就是依照不同任務去建立 SOP check list 例如製作定期報表有哪些前置動作,幫業務端撈取數據的時候有哪些絕對要特別留意的地方,有這個check list 都讓我及時發現許多錯誤 ## 過去專案所遇到的問題?如何解決 主要是碰到時程限制和技術卡關的取捨 對於每個功能,我們都會有很多理想的想像, 但現實上,我們很難做到技術一步到位,又要時程來得及 首先,時程限制,我們可以先去制定優先順序 1. 這個是不是核心功能? 2. 這個功能如果沒有完成,會不會嚴重影響其他地方? 我覺得只要符合這兩個條件,就非常值得花心力好好解決,排在優先,例如我們這次專案為例: 1. 要怎麼把編輯器套件,介接在 react 上? 2. 要怎麼把 Next.js 跟 redux 作結合? 3. 最後的程式碼,怎麼佈署上線? 這些功能像是專案的基礎建設,會牽一髮動全身,我們就會將最大的心力放在這裡,行有餘力再來完善其他功能 再來,是技術碰到卡關該如何透過一些決策過程,來循序解決 例如我們前端網站的佈署,是採用一個叫 Vercel 的服務,因為 Vercel 本身就是 Next.js 的開發團隊,所以當然做為首選 但是當初在本地端 build 完之後都沒有問題,但是佈署的時候發生錯誤 我們碰到兩個連環問題 1. 名片編輯器所使用的套件,跟 Vercel 向性不太好,這個問題很多人碰到,在 github issue 有詳細的討論,看著裡面討論不斷反覆嘗試,先初步解決了 2. 接著馬上碰到第二個問題,編輯器所使用的套件,底層程式碼太過於龐大,超出了佈署服務的程式碼容量限制 - 作了研究發現並且看 vercel 官方文件發現,而這個限制,是佈署環境底層 AWS Lambda 本身的限制 - 不能透過加購升級方案來解決 - 總而言之,就是訂死那,花錢也沒用 這是我們就有兩個決策 1. 套件瘦身 2. 換一個佈署服務試試看 兩個都可行,但是我們需要分析這些替代方案有哪些優缺點 1. 套件瘦身 - 優點:套件的容量問題是所有佈署問題的最後一塊拼圖,若這個解決了,其他都沒問題 - 缺點:可能根本沒有瘦身空間,或是瘦身後,原程式需要大幅重構 1. 換一個佈署服務試試看 - 優點:其他佈署服務是以 docker 化處理,比較沒有其他限制 - 缺點:換一個佈署服務,又衍生其他非預期錯誤 在時程考量下,我們的決策是,先以套件瘦身優先,因為這是最後一里路,並以更換佈署服務當做備案 所幸,在 github 搜尋了許多 issue 才發現,有人做出原套件的瘦身版,而且架構跟程式一模一樣都可以直接沿用,後來就解決這個佈署問題了 但是,有一點很重要的是,在後來時程充裕的時候,我們也去嘗試在其他服務佈署,發現也行得通,後續碰到這個問題也能有更多的解決方案了 1. 若時間足夠,對必要的相關底層技術知識進行研究,有時其他問題會迎刃而解 2. 思考有沒有替代方案,替代方案之前有什麼優缺點,哪個比較符合現行狀況 3. 先選擇最具可行性的進行研究,在時間充裕時可以去研究備案,增加自己的手牌 4. 在社群發問,尋求方向上的解答,或許有不同的火花 ## 你覺得你在團隊裡大多扮演什麼樣的角色 經過結訓專案的過程,我覺得自己在團隊也具備設計架構與規劃的能力 我的夥伴專注在最核心也最複雜的功能,名片編輯器,而我則是負責後端、 Next.js 、redux 的規劃與研究,所以需要以比較全面的觀點來思考一個產品,例如 1. 這個專案需要的功能有哪些?該開什麼 API? 2. 後端的資料庫,要怎麼設計比較適合功能開發? 3. 再來就是技術選行的問題: 4. 為什麼要選用 redux 而非 useReducer ? 1. 因為 redux 可以把多個獨立的reducer 合併在一起,並且可以使用 thunk 來進行 非同步請求,不論是結構的清晰度,還是協作的方便性,都很不錯 5. 為什麼要選用 next.js ? 1. 因為這個 side project 有為每個名片制定公開入口網頁,顯示名片跟個人資訊,這個時候用 next.js 的 ssr 渲染,會有利於 seo ![[Pasted image 20230104210833.png]] 總之,我們可以擁抱新技術,但每個技術導入並不是為了新潮,而是為了解決問題 ## 跟後端是什麼配合,或是用什麼方式溝通的 因為在這次專案當中,我也兼任後端的角色,當然身為前端工程師的我,能夠以前端的角度來思考,如何配合畫面和需求,開發出方便的 API 在專案初期,我們團隊根據 wireframe ,模擬使用者的流程,先把 api route 跟功能,以 notion 列表出來,再來思考 schema 如何設計,預想好前端可能會需要什麼 response,我認為如果前端工程師如果具備這樣的知識基礎,跟後端協作會更加順暢 其實在前後端分離的基礎下,雙方只要對 RESTful API 的串接達成一致的共識, 把 model 跟 controller 等內部商業邏輯運算交給後端,前端專心處理後端回傳的資料,渲染成正確的畫面,就能協作無礙 我們一開始有使用 swagger ,但是一開始採用的 jsDoc 寫法會超級多行註解,後來為了後端程式碼的簡潔性拿掉了,採用共同 postman 的 workspace 進行對焦 ## 除了目前學的框架之外,未來還有想研究什麼嗎 TypeScript、測試 (繼續接下一個回答) ## 平常會怎麼精進自己的能力? 轉職的初期會覺得知識焦慮,畢竟前端有太多新技術不斷冒出來,覺得學也學不完,逐漸領悟到,學一個新技術不是為了學而學,而是為了解決問題或是某些痛點而去學: 例如: 1. 需要配合 CI/CD、或是將環境佈署在雲端,可能需要懂 docker 的知識 2. 希望對 react props 或是 state 有格式和資料型態的規範,所以需要 TypeScript + Zod 所以一開始我會先思考為何需要這個技術、這個技術能解決什麼,使用的情境有多少,再來決定研究的深度,我的學習管道主要有三個 1. 線上影片:前端是一個分享風氣十分旺盛的領域,youtube 上有很多人講得很好,udemy 上也有很棒的課程作為參考,我覺得有一些操作性或是展示性比較強的知識,甚至是邏輯比較網狀、非線性的,就特別以線上影片學習,例如 css 屬性跟動畫,這種就特別需要實際操作給你看 2. 官方文件:其實現在官方文件都寫得十分不錯,如果用心一點的,還會特別帶到需要注意的觀念,例如我一開始學 React 就是跟著官方 react doc beta 跟著學的,裡面講到 render 的觀念也會特別著墨,不過官方文件幾乎是最正確,但資訊最繁複,想要追根究底知道詳細參數跟用法,看文件的能力還是很重要 3. 社群、與人交流:有一些核心觀念的問題,總是要與人討論才有激盪的火花,例如一開始我不是很瞭解 next.js 的 Hydrate 到底是什麼,也以為 next 的 sever 處理階段只存在 getServerProps,透過跟學長姊討論才發現,next page 第一次的渲染都預設會是 server 處理,最後才 Hydrate 交還 client 端,回復完整互動功能,懂了這個以後,後面很多坑都迎面而解 ## 你在未來 3~5 年有什麼樣的職涯規劃 第三年 - 從情景挑選最適合的工具 - 乾淨俐落的程式碼 - 學習廣泛核心知識,資料結構、演算法 - 注重資安、網頁效能等議題 第五年 - 技術內化到自己平常的開發習慣裡,達到信手捻來的境界 - 拆解問題、獨立思考與商業思維,理解每個功能跟需求要解決的問題究竟是什麼 - 有能力帶領一個小型團隊 3~5 人,藉由分享與交流,讓團隊成長 - 能規劃出整體專案流程架構 ## 你進入公司後會想學到什麼? 1. 學習進行大型的團隊程式協作、產品團隊的開發流程,例如敏捷開發 2. 前端同時需要和後端還有設計協作,學習更好的溝通技巧 3. React 寫法其實很自由,想在這裡看看實務上怎麼往 best pratice 或 clean code 前進 4. 學習如何寫測試,讓程式可靠度更好 ## 火箭隊是怎麼運作的 我覺得火箭隊是一個很棒的地方,教練不是一直上課,直接把所有知識丟給我們,而是引導我們設定目標,達到自己希望的高度 一開始會從切版開始練習,有很多的作業,並且要在期限內繳交作業 有些夥伴很厲害會提早交,這就激勵我們其他人想要更努力跟上他的腳步,這種良性競爭很棒 這些作業通常是,要切出一個完整的 Landing Page,或用 react 作一個 todolist,甚至是一個小型的 agoda,所以在過程中,我們必須不斷自己找出解法,並且和周圍的人進行討論,自主解決問題的能力從這裡開始培養 而在最終兩個月的專案,可以說是最重要的環節了,我們從題目發想、wireframe 制訂、時程規劃、實際開發,都要自己一手包辦,所以這是很珍貴的經驗。 ## 你怎麼處理主管的交辦的任務 如果在不了解方向、時程、人力的狀態下直接開工,有很大的機率最後的成果與主管心中的答案不符,所以在收到任務時,我會先確認自己的思路是否與主管一致,跟主管討論,對焦彼此的共識 ## 意見衝突如何處置 發生衝突的時候,我會先放鬆全身,不要讓自己那麼緊繃,讓自己跟緊張還有怒氣保持距離,這樣能冷靜處理問題 再來就是專心聆聽,對方的需求、跟在意的事情是什麼,耐著性子好好溝通,如果兩方都隨著情緒起舞,更不能解決問題 ## 可以談談你先前工作經驗負責什麼嗎? 大部分的時間是和業務單位對齊需求和欄位,撰寫 SQL 整合複雜的 table,提供他們需要的資料 但同時間,我們也需要去 開發跟維護定期報表,每個人手上也要負責維護 data mart,這是比較 summary 性質的 table,會給分析單位其他同仁使用 再來,因應技術的創新,我們也需要去建立一些機器學習的模型 優點就是,很多數據領域的工作都會碰到,簡直像是一條龍,缺點就是比較沒辦法 deep in 給出 insight 但我喜歡很喜歡技術的部分,從那時起就有努力嘗試用很多不一樣的作法來突破 - 例如當時候把每個客戶的帳戶總額,弄成像股票折線圖的資料格式進行分群,會發現有穩定上升、穩定下降、資金大進大出、靜止,這幾種形式十分有趣 - 這時候就可以搭配行銷活動名單,以此作為輔助條件進行輔助篩選 - 這個困難點在於,有一百多萬個客戶,再加上每一筆客戶可能又有好幾千筆資料,資料整理起來很繁複
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up