又到了一年的尾聲了,年初回顧了去年的點點滴滴,趁著今年還有一點點時間,也應該好好來整理一下自己做了哪些事。

要把 2019 年我做的事總結成一句話的話,就是:

逐漸往合理的架構去改善,好讓接下來要做的事更快更容易。

當然我想這件事本來就是程式開發基本中的基本,只不過相較於其它技術上我比較著重這部份,所以就被我選做今年的總結了。

2019 年做了什麼

還是先粗略地列一下自己今年做了哪些事:

  • 完善並發佈一起聽的監控後台。
  • 某 Web 應用程式改版 (因為還沒完成,所以暫時不能公開是什麼。)
  • 開發上面 Web 應用程式新版本所需要的 Web API ,同時也提供給其它 Web 服務使用。
  • 重新學習前端開發。
  • 編寫團隊用的開發文件。
  • 寫了幾篇簡報,整理一些開發經驗和個人學習筆記。
  • 只讀了幾本經典技術書籍,但非技術性質的書倒是看了不少。
  • 破關了幾款遊戲。

今年有什麼體悟?

在程式開發上的觀念大致就是那些老生常談的東西,今年在開發上也脫離不了它們。不過還是重點地整理一下一些體悟,也當做自我的成長紀錄。

架構好對需求的反應就快

老實說我自己再怎麼練寫 code 的速度,節省下來的時間也沒有比我把架構做好所節省的時間來得多。當然這不是說寫 code 的速度不重要,只不過前題是在面對產品需求時,應該是去思考:

先看清楚路該怎麼走比較省時,而不是一開始就想怎麼跑比較快。

我自己在程式架構的設計上大致上著重幾個點:

  • 易於理解:架構不是設計來給自己自嗨的,而是要讓同事也能清楚它的脈絡。
  • 易於開發:當架構的抽象化夠明確時,很多時候我只需要添加測試和新類別,就可以很快滿足需求。
  • 善用特性:儘可能從程式語言的特性來設計架構,除了要好開發之外,更要避免無謂的效能浪費。

架構簡單才好改動

早期在設計架構時,我們總是會把很多狀況考慮進來;結果在不斷地添加條件後,整個架構就變得越來越臃腫。但事實證明,這些考量並沒有那麼必要,而且還大大地削弱了後續架構的可調整性。

因此後來我在設計架構時一直把握這個原則:

除非需求很明確地一定要做,否則不要對系統做出過多的假設。

從這個原則裡,我延伸出幾個重點:

  • 先針對最關鍵的核心問題去設計,讓架構圍繞在產品的核心去往外延展,最後找到最合理而且簡單的設計。
  • 不要一開始就試著套用設計模式,而是去發掘這個架構可以靠向哪個模式,或根本不適用任何模式。
  • 將分解架構成模組並逐一抽象化;抽象化是避免對模組有太多假設,同時也定義出每個模組的職責與邊界。

Code Review 就是改善的機會

雖然在設計架構時我會跟一起合作專案的同事用白板畫圖討論,但實際的程式碼寫出來出後,可能就跟當初想像的不太一樣了。所以在我設計好程式架構,且自己試著在上面開發新功能後,一定都會請同事幫忙 code review ;在 code review 的過程中,同事就會給我非常多架構如何改善的建議。

針對架構的 code review ,大致上有以下方向:

  • 實作共識:每個人對語言特性的掌握不一定相同,因此可以從程式碼來確認大家對架構如何實作是否有正確的共識。
  • 需求導向:有時候達成目的的架構不會只有一種形式,所以請對需求已經有類似經驗的同事 code review 時就可以找到符合需求的形式。
  • 發現缺點:有時實作時似乎沒什麼問題的架構,當 code review 某些點後才發現會有預想之外的狀況。這時候就要迅速調整思維,重新討論出架構在面臨需求時的缺點。

簡報分享

雖然沒有公開的演講,但為了不讓自己做簡報的能力退化,今年我還是生出幾個可以分享的簡報。

專案改版紀錄:我們的鳳凰專案

今年花了一點時間把自己在某個舊專案改版的過程記錄下來,因為要碰到這類專案的機會雖然很多,但真正能成功的卻很少,原因在於政治因素的干擾以及沒有處理好過渡時期的轉換。

前端開發基礎: Vue.js 入門

這份簡報其實是很早 Vue.js 1 的時候做的,不過因為今年有前端專案的需求,因此特地將它改成了 Vue.js 2 的版本。

個人能力學習: Compiler 入門筆記

在資訊領域打滾這麼久,老實說我還是覺得自己比不上那些科班出身的人;像是編譯器這種很基礎的知識,我一直沒能理解得很深入。為了內部分享時不再吃老本,花了一點時間把這方面的基礎從頭學了一遍;這才發現其實有很多平常看到的工具,它們的背後都是運用到裡面的原理。

總結

今年雖然是跨過不惑之年,但老實說過得有點迷惘,也沒什麼心情參與社群的活動;休閒時間大多花在閱讀上面,吸收一些跟技術無關的知識。生活並不是那麼精采,但平淡是福。

然後我還是要感謝我的同事們,如果沒有他們的智慧與溝通能力,我想有很多事情我自己是很難順利且漂亮地處理掉。

2020 年似乎會有很多變化,希望自己也能夠繼續平常心去面對。