我的 2020 年記
- 5 minutes read - 2467 words前言
毫無理由的起了個大早,於是就決定展開這個想了很久的計畫:在每一年的生日記錄下自己在過去這一年的學習和成長。
有時候我們悶著頭一直走,卻不知道自己是不是走在正確的路上,我想除了留作紀錄以外,也當做是一個回頭檢視自己的機會。
工作
一直到今天為止,疫情先是在全世界肆虐,然後又開始延燒到台灣,在寫這篇文章的此時,已經是遠端工作的第十三天了。
2020 年初,我在台北的第一份工作慢慢步入軌道,參與了公司多個產品的開發,包含 web 和 app 的後端、內部人員使用的後台,同時也重構相對老舊的原生 PHP
自建框架,和以 Laravel
從無到有搭建出一個產品的經驗。
算是很全面的接觸到了各式各樣後端開發需要的技能樹,同時補足了原本對原生 PHP
不夠熟悉的短板,也很幸運的遇到願意帶人的前輩,總體來說,這一年成長蠻多的,硬要說缺點的話,就是沒能接觸到最核心的產品,相當可惜,那本來是我選擇進入這間公司的原因之一。
雖然我慢慢步入軌道,但公司營運上卻慢慢離開軌道,一直到 2020 年底離開公司時,軟體專案除了外包給我的以外,幾乎全部都收掉了。其實也是一個有趣的經驗,能看著一間公司從興盛到衰敗,應該是人生中難得的體驗(我希望是)。
花了約兩個月的時間投履歷及面試,最後以約 25% 左右的年薪漲幅,在 2021 年初加入了新公司,相比前公司來說,開發更嚴謹、制度更明確、同時技術也更深入,這是我之所以放棄其他更好的 offer 而選擇來這裡的原因,希望我明年寫年紀回頭看時,仍然會認為此時的決定是正確的。
開源
一直不敢說自己真正參與到開源社群的貢獻,頂多就是做一些小打小鬧的專案,可以看得出來一直到 2021 年初,在新公司穩定下來後才有比較穩定的輸出,同時 2020 年時也拿到了 Arctic Code Vault Contributor
的 Github 徽章,沒想到被放到北極的竟然是年輕時用來練習的專案,我深深地為自己浪費膠卷空間而感到愧疚。
MusicStreamingBot
在約三月時和朋友一起開發一個跟音樂相關的 Discord bot,目前還是一個半成品,我主要負責 infra 的部分,用 docker-compose
簡單建立了一組 NodeJS
、PostgreSQL
、Go
的容器群,並且用 Shell Script
來控制,算是實踐在新公司前兩個月中學到的東西。
除了技術上的溝通以外,專案進度的掌握,以及下班後或假日還要克服惰性持續開發才是最困難的挑戰,希望可以慢慢把這個專案成型。
Laravel doc
另外則是在近期的一個工作坊中認識一位持續在翻譯台灣 Laravel
文件的前輩,後續聊了一陣之後,認為自己應該也可以撥出一點時間來參與翻譯,雖然蠻習慣看英文文件,但每次看到中國翻譯的完善度就覺得有點不是滋味。
結果沒想到後來國內疫情爆發,公司開始全遠端,整個作息和行程表被打亂,導致我一直到前陣子才又重拾這件事的進度。
首先是先開發一個小工具,並推上 Packagist,還趁這個機會寫了一篇開發 Composer 套件的部落格,套件功能主要是對 Laravel-taiwan 的名詞對照表 做簡單的名詞翻譯轉換,本意是希望能夠讓大家在翻譯時能夠減少糾結名詞翻譯的時間,但名詞翻譯需要考慮到 context,所以最後的結果才會是這種格式呈現。
雖然是簡單的小工具,但我也希望他不只用在台灣文件的翻譯上,而是只要有對應的名詞對照表就可以做各種語言的翻譯,所以在架構上做了相對應的設計:
但以這種程度的簡單專案,應該是很難推廣出去啦,目前還是當做自己的翻譯輔助道具,希望接下來可以穩定輸出翻譯了。
Laravel Conference
以線上聽眾的身份參加了 LaravelConf Taiwan 2020,為此也寫了一篇心得文,可惜這次的講題主軸是尚未接觸過的 Serverless,只能算開開眼界了。
技術
PHP
我如果要選一個程式語言當做 native language 的話,無疑就是 PHP
了。
目前幾份工作都是以 PHP
為主,從一開始的只會用 Laravel
東拼西湊,到現在可以用 Laravel
開發完整的產品、寫原生 PHP
腳本或 package、或是短時間上手其他 PHP
框架,基本上已經可以自稱是一個合格的 PHP Developer 了,但要成為一個優秀的 PHP Developer,則還有很長的路要走。
接下來應該會朝著兩個方向精進,第一是再更深入理解 PHP
底層運行的相關知識,另一個是繼續累積 Laravel
的使用經驗和原始碼的理解。
Go
如果說 PHP
是母語的話,那 Go
就是我的第二語言了。
一開始會接觸是因為某個產品需要一隻快速的爬蟲,但 PHP
想實現併發的門檻比較高,所以我們就把目光轉到 Go
身上,過了一開始強型別語言的陣痛期之後,我很快的又進入另一個多線程溝通的陣痛期驚訝於這個語言的精煉和強大,而且我認為 Go
對我來說會是一把開啟更廣闊世界的鑰匙。
但目前並沒有用 Go
做出什麼值得拿來說嘴的專案,預計 MusicStreamingBot 的 web 介面會用 gin (Go
的 web 框架) 來完成,打算在自己擅長的 web 領域先熟悉這個語言,另外就是拿來刷題了,下方的演算法部分會有更詳細的說明。
Infrastructure
這一部分其實蠻有趣的,在前公司時用的還是比較傳統的方式,在作業系統上實際運行如 Nginx 等 web server,然後由 SE 或後端來做相關的調校,自己則是在下班後花時間理解容器化相關的知識。到了新公司之後直接在實戰中快速進步,雖然進階的如 k8s
或是一些 infra as code 的工具還沒有機會深入了解,但基礎的 docker
已經在小型專案裡面堪用了。
CI/CD 目前並不能稱得上熟悉,但在幾經嘗試之後,這個部落格目前已經串接 Travis CI,在推上 Github repo 後做自動部署了。
用過 docker
之後真的就回不去了,但也不能說第一份工作的伺服器經驗調校就毫無價值,在腦子裡面有伺服器如何運行的過程還是很重要的,我一直認為這些知識會在工程師的腦中建立一個世界,這個世界越完整的工程師就越強大。
演算法
說到演算法大家都明白就是刷題,本來自己對刷題這件事一直都是有點排斥的,但後來轉個念當作訓練邏輯的工具其實也挺好的,而且不得不承認,目前高階軟體公司在招聘人才時用的還是這一套。
一直還沒有機會定下心來認真刷題,但受到一些朋友的影響,已經開始慢慢把心思往上面放了,目前用的語言是 Go
,還在緩慢的進展中,希望明年時已經把這個部分準備充足了。
展望
在全球疫情稍微穩定的情況下,國內反而確診四起,每天悶在住處裡面,面對的都是電腦螢幕,難免有種身在時代浪潮中載浮載沈的無力感。
回首過去,除去一開始在大學資訊處擔任助理,進入軟體業已經兩年有餘,歷經多個專案後離開第一間公司,再到現在的這間新公司,我一直在掙扎著離開舒適圈,卻又不知道自己走的路是否正確,也時常深陷這種徬徨帶來的危機感。
希望未來做的每一個決定都能無愧己心。