2022/08/13

轉職工程師 :: 從放棄當工程師,到在英國就職的軟體工程師之路 (2)

達成整主管的成就



找工作 - 放棄當工程師去應徵文書


在新創公司那時候除了平日常常加班到凌晨 12 點、1 點外,星期六、日也可能被叫去加班,有次還掛急診又回來繼續加班;
沒有學習到新事物和解決問題的能力,一直重複搬磚的行為,天天被業務壓得喘不過氣來,對自己未來一點幫助都沒有
另一個 team 更可憐,尾牙喝酒後去卡拉 OK 唱歌,唱到凌晨五點被公司 call 回去修 bug。

我不想要生活品質不好、但薪水高的生活,寧願薪水低一點卻可以準時上下班,那時候反省時覺得是不是自己不適合當工程師,辭職後曾經跑去應徵文書。

但當時面試文書時,面試官了解我心路歷程和我在公司做的事情後,苦口婆心勸我繼續當工程師,覺得放棄很可惜。

而我也感謝當時那個面試官拒絕我,因為讓我後來有機會進大公司,讓我理解到原來也是有可以兼顧生活品質和薪水的公司。


--
那時候也了解到當主管 / PM / 客戶提出的需求或時限,你評估過後覺得不可行、執行上有困難、花費很多時間但效益不高、時間太趕等等。

不需要勉強自己一定要達成對方的要求,然後加班或用自己時間去趕出來,有第一次就會有第二次,然後就會有第三第四五六次,有可能最後趕出來還是不是對方要的,卻花了很多自己的時間。

把為什麼不可行的原因、疑慮的點和對方討論、說明,
如果對方還是不接受,常常要你加班或用自主時間做出來,請快逃。


--
中間調養身體期間一邊接外包,從設計、前端到後端全包。

本來轉職前端是因為自己很喜歡設計出來的網站實際呈現在自己面前,
實作出各種很炫的視覺畫面,所以那時候跑去碰 three.js、Canvas、PixiJS 等,
但是認知到幾乎大部份公司其實都用不到。

有考慮過不如去接案公司,但據待過的同事說接案公司可能接新案子會依照需求會寫新畫面,但能用模板就會用模板,所以可能也沒辦法符合我的需求;也慢慢知道如果有這樣的憧憬,還不如寫 side project 更自由。

後來除了自己對後端、DevOps 有興趣外,也是覺得只從前端單一面向考量功能性不夠全面,不少公司希望前端工程師也要會後端;
所以其實我一直沒有設限自己於哪個領域,後來也很慶幸我沒有排斥學後端。





在台灣大公司 - 制度完善、同事主管樂於分享


第三間剛進去就剛好又遇到官網改版,一樣照樣前後端都寫,但比較有機會碰到市場上常用到的技術。

使用 docker 建環境、學 cron job、寫 unit test、pin sever 找錯、code review,更會使用 dev tool 下斷點、手機偵錯、看套件的 source code;要串 7-11、全家、郵局等的 API,有機會碰到大流量使用者的網站;或是有跟某些知名 3C 公司合作的活動,而且還要處理金流,所以在寫程式時要更謹慎。

有好幾個除了工作上願意嘗試各種新技術的同事,比如他們會組隊去參加黑客松、嘗試引入 DDD 到專案開發上、在討論過後用 React、Go 寫某個 task,有學習到新資訊會做 PPT 約個會議分享給大家,不像前公司可能只有我一個人在寫技術文件。

還有我們在跑 scrum 估 story points 時,每次去會議室老會忘記帶卡片,同事就用 React + redux 寫了一個出點數的 PWA;受他影響更大,我就一直在思考不論是在工作上或是生活上,有什麼事情是可以用程式做到更好的。


--
那時候也才學到,自己解決問題的能力和尋求別人幫助的能力是個需要拿捏的中庸之道。

自己解決問題的能力
當你剛到公司時,也許還不熟悉流程時,你可以觀察其他同事 / 找公司內文件來看;
程式上有很多基本的下 console、查 stackoverflow 等的方式幫助自己,可以善加利用,減少問別人一些重複或網路上就查得到的問題

尋求別人幫助的能力
你可能會不想麻煩別人,想要自己可以獨立解決問題,這也許在做自己的 project 時可行,但在公司時有時限問題,不能一直卡住沒有進度,所以給自己一個時間區間,比如卡住一兩小時後向其他人求助。

在尋求別人幫助時,要怎麼發問可以在最短時間清楚表達自己的意思 : 
  • 你遇到問題是什麼? 
  • 有沒有 error message? 有的話上面顯示是什麼錯誤?
  • 你做了什麼嘗試但是還是沒解決? 

而那時候在公司做的有 :

官網改版
- 翻新舊官網程式
- 參與研討會 & 公司安排的課程


那時候我也主動做很多事 : 

- 自動撈資料 & 整理格式 & 寄信的 cron job
有段時間常常 sales 跟 PM 要資料 > PM 找工程師 > 工程師撈資料貼在 excel 上回傳給 PM > PM 過濾整理資料後回傳給 sales,
如此重複幾次之後,我實在覺得很浪費時間,受不了寫一支程式,按一個鍵撈完資料,整理成 PM 要的格式,自動寄信給 PM 和 sales。


- 降低前端打包時間
因為打包時間實在太久,
像辦法比如最小化 the search scope、或是在 babel-loader 設定 cacheDirectory ,
因為 webpack 是 single thread 用 happypack, thread-loader, etc multiple threads 同時跑等等、
把打包時間降低一半以上。


- Working flow 改進
那時候是每兩個星期就一個 sprint,
但常常遇到規劃好的 tasks 沒做完,
利用 gitlab-extension 去整理和計算好用於每次的反應會議上,
後來的統計和圖表還被拿去主管和上級回報用。


- 寫 side project 計算上下班時間
因為我們是彈性上下班,如果 10 : 00 上班就 19 : 00 下班,
但系統上不會顯示,如果是 09 : 32 之類上班還要換算覺得麻煩 (我就懶),
所以寫一個 google extension 去抓系統資料計算上下班,時間一到就打卡下班!


寫 side project 喝水提醒工具
有同事太常坐在座位上都不喝水,
所以就寫了個 google extension 去提醒他喝水



--
後來一些可以討論的資深工程師離職時,
同部門的其他工程師沒有意願就技術這方面深入討論
那時候我就常常喊無聊想換工作、想用更多新技術,
但畢竟這公司工作環境、同事都不錯,
所以我嘗試跟別的部門的同事討論、跟前同事們討論,
可以還是比不上有同部門的同事可以討論來得好。

公司能讓你用有競爭力的技術、
有組織性的公司不會讓你工作到 burn out、
能跟自己同等級或是跟資深的工程師討論或分享資訊、
提供進修機會真的是很重要。




準備去英國前 - 一到日都在準備


從德國回來發現自己還是想出國工作,
後來一邊在準備出國一邊上 glassdoor, linkedIn 等網站蒐集國外職缺資訊,
對照自己還缺少什麼技術,白天上班晚上就學缺少的技術如 React、Redux 等等,
狂寫 side projects,把 github 說明全部整理成英文版且要包含詳細的 readMe,
把自己寫的開源推到 NPM 上,順便得到免費使用 PhpStorm 的 license

另外還有從設計、前端到後端,寫個簡單版履歷網站展示自己的作品,
再另外寫一個互動型的履歷網站。

報名線上英文課、利用走路到公司的時間、等電梯時間等時間自言自語問問題自己回答、和同事工作時,在心裡嘗試用英文回答、把身邊的物品全部轉成用英文形容等。

還有整理技術題問題集 (HTML, CSS, JavaScript, React, security issues, website performance)

找工作時在面試過程中不斷確認自己還缺少什麼,
比如當時沒查到其實他們很重視 TDD,
學 React 學一學發現大家開始逐漸不用 class components,
改用 functional components + hooks,就又開始學新的。

大概就是來英國前一年的日常生活,因為知道自己不足的太多,所以才更拼命。


--
英國面試方式真的和台灣很不一樣,不但要先 initial phone call 確認你至少可以溝通,非常喜歡 coding interview,還會有 behavior question interview,看情況會有 system design interview,所以加起來零零總總可以到五面之多。

有大概半年時間就是陷在投履歷 > 面試 > 被拒絕的循環裡,履歷應該有投 200, 300 封以上吧,拿到面試邀請大概 30, 40,真的有進面試流程的大概 20, 30;同時還有一邊跑去打工,因為錢快燒完了。

相關心路分享因為太長,所以可以看這篇 瘋了才會在疫情封城的時候跑到英國找工程師工作




英國公司就職 - 第一和唯一的工程師


好不容易找到工作,因為我是公司的第一和唯一的工程師。
所以開頭最難的是如何和不懂技術的同事們溝通,為什麼這個功能實作需要這麼多時間、為什麼這個功能我不建議做、這個功能在技術上會有什麼困難等等。

我那時是提議首先在開發前有個 meeting,確保所有需求都釐清清楚後才開始實作。

而因為工程師之間很習慣用技術名詞討論,但當要解釋給非技術人員時要能把複雜的概念描述成對方可以聽得懂的,如果丟出一堆名詞看起來很厲害,但對方還是沒辦法理解時,其實對於專案進行也沒有幫助。

在這間公司特別辛苦,是因為我需要一個人撐起全部,
但也是從此時開始讀 system design, data structure 和 algorithm,在用如 JS sort function 時知道背後的實作是什麼。


- 開發 & 維護 & 優化網站
公司在多個國家有分部,那時主要是和俄羅斯、中國部門還有多明尼加政府合作,刀過開發和網站化 SEO 分數到幾乎 100, accessibility 和 best practice 近乎 90 (by web.dev and pageSpeed),分數從 E 到 A (by GTmatrix)。


- 與外包廠商合作中國網站
當初簽合約的時候是不清楚技術的人去談的,所以簽訂內容和督促都有蠻大問題,
我臨時加進去就要從合約開始重新看一遍,
然後在外包廠商又在推卸責任時指出問題,不然他們又要騙不懂技術的同事,
還有要監督網站的開發進度和效能。


用 docker build 開發環境
引入 vision control 
引入 react, redux, hooks 和 typescript
因為是第一個工程師,那所有環境都要自己建立,
開始知道不是一定新技術最好,
而是開始思考在抉擇上,用什麼技術可以解決問題,
而不是現在最新技術是什麼我一定要引進來用,因為那不會是公司重視的地方。

雖然身為工程師會想嘗試各種新技術,但這就很看公司文化,比如上層願不願意讓你嘗試,
除非你可以提出有利的證明,引入這個技術可以增加公司多少利益,不然想玩新技術還是自己回家玩比較快,當然或是你也可以跳到有在使用特定技術的公司。


架 server
因為本來官網背後只有一個 server,那個 server 又不是很穩定常常掛掉,
這時候開始有機會碰到 system design,研究過後建立 master-slave system。

開始深刻的體會到網路上用中文到處查資料,比不上看原文官方資料 10 分鐘。
其實我本來遇到不熟的資訊時,都還是一律先看中文,因為會想說都已經不熟了,再看原文解釋不就更看不懂? 所以當遇到有人推我沒接觸過的領域的原文書時,我會排斥直接看。

就這樣過了幾年,盡管我早就聽說過了要看原文、要看官方文件,但我都放在心上沒去實行。

直到某次解 bug 鬼打牆很久我才真心體會,網路上查資料查半天,真的比不上好好看官方文件;而且中文資料的錯誤率好高,有時候是因為有些詞要翻成中文就不是很貼切,而且看別人翻譯的文章又會跟本來的文件多隔了一層,就好像傳話遊戲傳越多人中間越會有資料遺失或缺漏。


和主管約每周 one on one 
主管如果沒有跟你約每個星期 one on one meeting,可以主動跟主管約,定期拿到 feedback。

平常就可以準備一個記事,記錄說 1:1 想討論的事情,免得之後想討論都忘記了;但不是報告最近自己做了什麼事,平常負責的項目和進度就應該透明化讓全部人知道。

可以問比如說 
"我想要在下次評等升職,你覺得我還欠缺什麼能力? 我還可以朝向哪個方向努力"
"有沒有什麼事我應該要做但沒做,或是什麼事情可以做得更好"
"團隊發展我覺得可以朝向 xxx 去解決 ooo 問題"

才不會面臨升職壓力時或是要求加薪時,
主管才說其實他覺得你還欠缺什麼能力,也可以當作定期檢視自己。


面試官
第一次用英文當面試官,感覺自己比對方還緊張,
然後還要出 assignment,思考說出什樣的題目才會測試到想要的人才。


帶新人
第一次用英文帶新人也是很特別,
而且這個新人還沒畢業,還是個非常容易慌亂的一個人,
常常要用遠端視訊的方式幫她解問題。


寫 side project 自動打卡
因為疫情的關係,所以都在家工作,但我覺得這樣還要打卡實在有點微妙,
所以就寫爬蟲去爬打卡系統,然後把 server 架在 AWS 上,
每天亂數跑時間自動打上下班的卡。


--

沒有留言:

張貼留言