之前工作參與的專案規模不大,或是能切分出互不影響的功能,讓每個人各自負責,所以程式功能只要顧好自己的部份就好。在進入大公司後,專案規模變大,開發勢必得要多人一起進行。然而一人開發與多人開發的情景完全不同,大公司專案專注的面向也不一樣,理所當然,就面臨了不少價值觀的衝擊。

ideal-vs-reality

程式風格混亂

起初專案並沒有明確規範程式風格,也沒有進行 code review,造成專案中充斥著不同的程式風格。然而專案為了方便維護程式碼,即使那個是不好的風格,還是被要求跟著該功能既有的程式風格撰寫程式。

剛加入專案那時,一直苦惱縮排到底是用 tab 還是 space,一行 200 字元的程式碼要不要幫忙換行,或是巢狀階層多到可以打波動拳了,要不要拆出函式等。起先在加新功能的時候,我會順手改掉原本程式碼中不好的風格。但後來被阻止了,原因是如果該功能出錯,會找最後一個改動的人負責任。直到這個問題變成技術債之後,專案才開始重視程式風格,慢慢明確規範程式寫法。想想如果當初在修改前,先跟主管提出程式風格的問題的話,應該可以提前重視這個問題。

choose-between-tab-and-space 程式碼風格不一致讓人無所適從

在多人開發專案中,能有統一的程式風格相當重要,即使那個功能不是自己開發的,也能快速理解功用。另外現今編輯器可以設定程式風格的檢查,包含強制換行、變數命名格式、縮排、行尾空白等。更嚴格一點還可以搭配 git hook,只要不合規範,就不能推上去。

功能先有最重要

因為專案的性質,需要定期推出新功能,因此功能能否即時上線是最重要的,程式碼寫得好不好並不重視。加上能開發的時間不足,為了追趕時程,也為了不影響既有的功能,只能省略架構設計,直接參考既有的程式碼撰寫,或甚至直接複製一份出來改,最慘的是連驗證的時間都不足。雖然功能即時上線了,但品質卻脆弱不堪。

用這個方式開發的後果就是增加後續維護的難度。同一個功能被複製了好幾份,修了其中一份的 bug 後,才發現其他地方還有相同的 bug。或是要更新某個功能時,得要找出所有複製出來的功能一併修改。為了追趕一個又一個的上線時程,這樣的技術債只會越堆越高。現在省下來的時間,後來就加倍還回去了。

lot-of-bug-because-of-no-time 趕時間開發的功能最後帶來解不完的 bug

理想的開發模式是先規劃好功能需要哪些元件,元件之間要如何互動,再去撰寫程式碼。如果是在既有功能上製作,則要再加上理解原本架構的部份。然而要能執行這樣的開發模式,除了得有足夠的開發時間,更重要的是要有健康的專案架構。但現實是專案過了好幾手之後,功能相互交雜,牽一髮而動全身。為了避免擴大麻煩,繞過原本的功能去做新功能反而是最保險的作法。

重構永遠是最後選項

開發新功能時,原有的架構不敷需求的話,就一定需要重構,然而對上線的功能來說「能動的就不要動」,要重構就得要冒著既有功能壞掉的風險。當開發與驗證時間不足的時候,想要重構也無能為力,就會出現前面所說的,只能繞路或是擱置問題。

只是當技術債累積到不得不面對的程度,就還是得進行重構。在參與專案的期間負責過兩次大型重構,當時各花兩個月在上面:一次是因為某個底層功能太複雜,以致於影響執行效能;另一次是幾個重要機制被複製了數次,為了讓即將開發的新功能也能使用那些機制,與後續方便維護,把它們整理出來,作為共用功能。

code-debt 技術債終究是要還的

無論重構規模的大小,只要有重構就得驗證所有相關的功能是否正常。重構前先確認影響的範圍,如果影響範圍太大,就得思考拆分重構的規模,一次只重構一部分。好處是容易掌握需要驗證的功能,出 bug 時容易找到出問題的地方。另外重構時,通常專案也在開發,能儘早把重構後的功能合併回專案的話,也能避免該功能仍然以舊方法開發,造成還要再度重構。

還是有收穫

不過參與大公司的專案可以體驗到單人專案無法體驗的事情,其中之一是可以跟其它程式交流。當不知道功能如何設計比較好時,就可以詢問其它程式的意見,往往會得到不錯的想法。另外 code review 也是很適合交換意見的時候,除了可以分享自己的做法與建議之外,也可以看到其它人的思維,做為未來寫程式時的參考。

另外一個就是可以訓練溝通能力。在多人專案中,當遇到不是自己做的功能,就得要詢問當初做或比較熟那個功能的人。雖然可以靠自己閱讀程式碼來理解,但如果先問相關的程式碼與執行流程,反而更能快速上手,也更能專注在要實作的功能上。反之亦然,其它人也會來問自己做的功能,能夠清楚地解釋自己的程式碼,也是很實用的能力。

conversation 能學習跟其它人溝通是最大的收獲

除了跟程式討論之外,也會時常跟不同部門的人討論。對方詢問問題時,得先釐清真正想問的內容,最好是能將自己理解的問題內容講給對方聽,確認理解的是不是一樣的。另一方面,也盡量以對方能理解的方式講解。否則很常雞同鴨講,最後搞得雙方都很混亂。

生於憂患

總覺得在體驗過什麼是不好的之後,才知道什麼是好的。在這段時間中,確實是挺煎熬的過程,但也是在這樣環境中才開始思考為什麼這樣的情況是不好的,以及如何改善這樣的情況。如果能帶到下一個可以發揮的環境的話,會是很好的養份。

標籤:

分類:

更新時間: