不知道科技業的大家有沒有遇過這種同事,履歷打開一堆社群經歷,下班後到處演講、開直播教人怎麼寫 Clean Code、怎麼做敏捷開發。結果在公司裡,他自己開出來的 PR 簡直像是一坨大便。變數亂命名、邏輯大雜燴,連基本的 Unit Test 都懶得寫。你退他 PR,他還會用那種高高在上的語氣跟你說「你不懂,這叫 Pragmatic,這是為了快速交付」。這就像那些在網路上開課教人做台指期當沖的老師,滿嘴 K 線結構、支撐壓力,結果實單跑下去全部被抬出廠。網紅工程師也是一樣,講滿嘴幹話,寫不出半行能用的 Code。
阿姨以前在某某新創就來過這麼一尊「大神」。大神在社群上呼風喚雨,來公司第一天就對著我們這群老工程師 指指點點,嫌我們的 CI 跑太慢、嫌我們的架構太老舊。
結果大神自己接了一個金流 API 串接的 Feature。寫了一星期發 PR,我看了一眼差點發瘋,所有的商業邏輯全部塞在 Controller 裡面,超過八百行沒有任何拆分,裡面還混了一堆 Hardcode 的 Magic Number。
QA 請他補測試,大神在 Slack 裡面直接回:「這個邏輯很直觀,不需要寫測試浪費時間,可以直接 Merge 嗎?我等一下還要準備晚上的 Podcast 錄音。」
這種人仗著自己的「社群光環」,吃定了那些不敢得罪他的 Junior,每次 PR 都能靠著刷臉拿到 LGTM 。把產線當成自己過水刷經歷,透支整個團隊的技術信任。
面對這種自帶光環的技術網紅,跟他爭論是沒有用的,他可以用一萬種話術把你繞暈。對付這種人只能用「絕對客觀的機器檢驗」,也就是品質閘門(Quality Gate),程式碼的品質不是你嘴巴說了算,是靜態分析工具說了算。
強制導入 SonarQube / Code Climate 阻斷機制:
在 CI 裡面把 Quality Gate 設為 Hard Fail。只要這個 PR 讓整體覆蓋率下降哪怕 0.1%,或者是新增的 Code 有 A 級以上的 Code Smell,Merge 按鈕直接不能按。
嚴格的複雜度限制(Cyclomatic Complexity):
大神不是愛寫八百行的 Controller 嗎?我們在 Linter 裡面直接規定,任何 Function 的圈複雜度超過 10,直接噴 Error。
name: SonarQube Quality Gate
on: [pull_request]
jobs:
sonar_scan:
runs-on: ubuntu-latest
steps:
- name: 執行程式碼品質掃描
run: mvn sonar:sonar -Dsonar.qualitygate.wait=true
# 只要 Quality Gate 沒過,這一步會直接拋出 exit code 1,Pipeline 直接炸掉