文組生轉職前端工程師的一年後

Chengcheng Hsu
Feb 28, 2023

--

Photo by Wahid Sadiq on Unsplash

從去年一月轉職成為工程師也一年多了,是個滿適合紀錄想法的時候,加上剛好前陣子公司有個展望與回顧,就把那時候講的一部分拿來這裡充個版面。

先來個人背景提要:

我是交通管理研究所畢,第一份工作是在電子製造業做物料管理,做了兩年,工作上自評是普普,不會出什麼差錯,也不會有驚人的表現,對那份工作沒有討厭也沒有喜歡,不過我發現到整體環境不能推著我前進,不能讓我快速進步和累積技能,我做的事情其效益也並不大,我只是一個在分工下的齒輪,活得庸庸碌碌的樣子,但始終有些時刻腦中都會冒出「我不會一直待在這個產業,這個公司文化並不適合我」,但在那裡不是說沒學到東西,我熟悉了電子製造產業的運作方式,能曉得依據客戶端、工廠端與上游廠商三方而來的訊息與資料來決策事情是多麽困難的事,解決的方法是最難卻也是最有趣的部分,也知道工作不只是把做事做好,做人也很重要,總之,對那時自己的職涯下兩個版本的註解,第一個比較好聽的是:我是個隨遇而安逆來順受的人,工作來我就做,責任來我就扛,但難聽的解釋是:我根本不曉得我真正想做什麼作為我的職業,從大學到出社會我已經嘗試了多個領域,但我始終找不到特別吸引我的地方,如同一艘迷航的船,找不到適合的港口靠岸。

但值得慶幸的是,我還是有想去找尋熱忱的動力,也想要在人生中多增添一些故事,所以我回溯過往經歷,到底有什麼事情能讓我跳脫這個狀態,看來看去就是來嘗試來當軟體工程師,我也想知道是否這個產業是否適合我,是否我會做得比前一份工作開心,畢竟人生大部分是由工作組成的,若工作上不開心,代表有大部分的人生都是不開心,那很可惜,所以若花職涯前期的百分之五去找想到做的事是個滿值得的投資,但這也會需要考慮到自身、家庭的條件,或是你對薪水的接受程度。

外插我接觸程式的經歷:

研究所因緣際會上了林東盈老師的運輸網路均衡模式這堂課開啟 Python 自學之路,後來也靠著 Python 完成論文的結果,另外,2019 年有到台大有資工訓練班再上了一個月的 Python 基礎,最後雖然順利結業,但我了解離實際能投履歷還是有一段差距,所以就暫緩了一陣子,直到找到此找到程式導師計畫,心得可看《程式導師實驗計畫心得》,因此這些與程式的接觸都促成了轉職的燃料,因此,我要轉職並非是突如其來的決定,是慢慢試過才覺得自己應該要來嘗試的職業。

這一年我開心嗎

這是我會定期問自己的問題,這可能比待遇擁有更好的順位,我想答案是相較前一份工作我是開心的,主要有三個原因:

1. 我做的事情有貢獻 2. 有明顯的自我成長 3. 接觸人的比例降低

貢獻到公司是滿最明顯的改變,以前一份工作來說,我並不會覺得我做的那些報表、簡報有多少人會看,更準確的說不確定那些是不是老闆想看的,坦白說我認為做白工的機率很大,例如:做很久的資料解釋為什麼要做庫存,但可能上頭老闆突然又說不要做了,但我想這是大公司這種多階級的制度下難免會發生的狀況,不過到了 2022 年,我知道我開發的這個頁面確實會有人要看,開發的這個功能確實有人會用,另外,在公司內部的分享我能去表達我最近遇到的困難甚至是我曾遇到什麼 bug,後來怎麼解的,相對的,我也能聽到同事分享他們,學到一些專有名詞,在未來遇到時能更快地抓到關鍵字。第二個,自我成長,在軟體的領域我很清楚的知道我要加強什麼,因為在工作上你總會遇到超出自己能力範圍能解決的事,也因為軟體領域的水夠深,只要你想加強自己,網路永遠是最好的資源。第三個,接觸人的比例降低,我不再有那麼多會議,沒有那麼多電話要接,或是很多是我不知道我在哪,我是誰,我在幹嘛的會議,處理人的事情總是比處理程式有更多的不確定性,擔憂的東西也隨之減少,踏實感也自然提升。

接觸的技能以及收穫

一年內剛好接觸到三個專案,雖然都是前端開發,不過使用的技術也有些微不同。

在外送平台學到 Next.js 的 server side render 的設定,透過 react-slick 來做跑馬燈的效果,透過抓取網頁元素的高度來做錨點定位,在直播的平台透過 webrtc 來串接直播訊號,透過 i18next 來做語言切換,也接觸了 web api 的觸控事件來讓使用者能手勢滑動去切換不同的直播視角,在一個專門為年長者住宿照護的平台接觸 react.js class component,也更熟悉 react saga,某些檔案也會需要寫到 typescript,也有幾個頁面需要以 iframe 的形式匯入到其他網域而去看了 window.postMessage 傳遞參數的方法,然後上傳圖片也是滿複雜的流程,到底是要把圖片上傳到哪,哪些項目刪除後也要連帶刪除圖片,總之就是要實現一套不會出錯的流程,也因為太過於複雜,所以就嘗試寫了技術文件。

我並不覺得我經手的專案很多,或是說用的技術夠深,但在這些專案的背後都是很多的嘗試堆疊起來的,而這些嘗試就能塞滿了每天工作的時間,又或者很多時候為了達到一個小小的效果,會去試很多方法,例如在平板要去偵測是水平和垂直的事件,一開始可能會用 screen orientation,但後來發現 matchMedia 的對各個瀏覽器的支援度會比較好。而最近為了呈現一個很自然的表格欄位釘選的 shadow,一開可能透過 box-shadow 來做,但實際上看起來不夠自然,後來則是利用 css pesudo class 搭配 background + gradient 來做。

我覺得最困難的事

大概可以分為人和開發上難的事,先講人,很多時候溝通還是一門藝術,無論你對客戶的溝通還是對內部,但說是藝術,還是有些基本的溝通技巧可以應用,這些我自己也還在搜集方法,在混亂之中去找尋一些可行的方式,另外,有些時候客戶的資訊其實並不完整,但時辰就已經開跑了,這算是滿不合理,不過也只能慢慢去問,過程中客戶的需求也可能滾動式修正等等,因此,若要透過這樣不確定的資訊來評估開發時間,是算很通靈的事,我相信很多公司都會碰到這樣的問題,也滿值得討論,還有可能工作上可能會碰到自己不熟悉的技術,在開發上一定就會有很多不確定因素,所以在開發時辰上就必須抓的很保守,同時也需要告訴 PM 這樣的狀況,有時候就一定要做中學,而且才初階工程師而已你要我都會?(向小學生學習)。

再講開發上的事,因為與電腦的互動大部分都是一翻兩瞪眼的,不過還是會遇到一些坑,想不到的彩蛋,這就會考驗查資料的能力或是經驗,例如:某個套件怎麼用,是不是他本來就有些使用上的限制,但有時候就是會碰到解不開 bug,或是你覺得這樣寫明明畫面上要呈現那樣,但到了 production 又是不一樣的狀態,或是 iOS 用 chrome 和 safari 是不一樣的狀況,這是開發上難的事情,這些總會佔據滿多開發時間。

這一年的其他想法

身為轉職者,若只是學會框架就出來混口飯吃(現在可能是)現在可能還過得去,但技術是會更替的,就像只會寫 jQuery 的話可能滿難找到工作,又或者十年後 vue 或是 react 還是公司會採用的框架嗎,再來是如果這種協助轉職 bootcamp 氾濫的話,代表會有很多轉職者充斥在市場,粥少僧多,競爭一定是激烈的,所以該如何做出差異化去獲得更好的待遇或是職位,是一個轉職者應該思考的問題,像是我該學不同的技術嗎(學廣),還是我要繼續鑽研現在的技術(學深),現在的我還並沒有答案,但我仍覺得還是必須去補足一些基礎,例如資料結構或是演算法。

在這一年我也在 medium 開始寫一些文章,其中有關於開發的有 14 篇,以及弄一個自己的部落格,目的就是逼迫自己去熟悉、消化並整理那些觀念,好應用在工作上,但加強這些東西的所花費的時間都不會在上班時間內,算是一種不能報加班費的加班,所以雖然做軟體產業有它的優點,但這些額外自我補強的時間就是這些好處帶來的副作用。

還有一點是大多數人覺得很重要的東西 — 待遇,我想薪資以及福利多半還是人們覺得快樂的主要來源,不可否認我也是,但就像我前面說到的這個不會是我現階段最高的考慮順位,現在我希望的是能專注在技術面上的成長,並且應持續的累積,這會是在市場上立足最重要的事,如同這篇《台灣軟體業業界現況詳解、軟體工程師指南》提到的,軟體產業就是你強你上,少有倚老賣老的情況,況且有很多人在轉職後也是能達到年薪百萬的門檻。

總結

很多時候會搞不太清楚自己是太安逸,或是已經把自己逼到極限,應該給自己多些休息時間,或者把這些寫下來會太過於赤裸,但我覺得最坦白的記錄下這一切這才是最真實的,因為以後網路上可能都會充斥著 chatGPT 寫的文章,linkedin 樣式的炫耀文也說不定,另外,我不會說我是喜歡寫程式的,現在是這樣,未來我也會說是這樣,因為如果人會死的這個前提是確定的,那在死前我並不會說我他媽的沒學過那個演算法真的好可惜,而是我未能好好去感受真實的情感,所以寫程式充其量就是一項工具,它能帶我去我想要去的地方,最後,我想一年前轉職的這個決定放到現在來看算是個滿正確的,我是喜歡把自己放到一個一直變動的產業,一個一定要一直學習的環境,就像一個職業籃球員如果想在職業賽場上生存就必須保持競爭力,每天不斷地學習和練習,這是讓自己感受到自己存在的其中一種方式,否則每天做的事情就如同過眼雲煙,感受不到痛苦也覺查不到快樂,總之,期許自己未來一年也能持續保持好心態去做好想做的事。

--

--

Chengcheng Hsu
Chengcheng Hsu

Written by Chengcheng Hsu

Movie, Travel and Story | Software developer | contact me: ychsu.wk@gmail.com

Responses (1)