---
# System prepended metadata

title: 'ch11, ch12'
tags: [約爾趣談軟體]

---

###### tags: `約耳趣談軟體`
# 11. 「每天重新構建」是你的好朋友
### 前言
+ 作者在 1982 年買了一台 IBM-PC，成本大約 1 萬美元，寫了一個 hello world，進行編譯，花了 8 分鐘
+ 後來寫了一個黑白棋程式編譯超久，等待期間都在做雜事
+ 有一天突然橫空出世跑出一個 Turbo Pascal，不到一秒時間就把程式編譯完成
+ 從中悟出 REP loop
    + 讀取、計算、印出 (Read, Eval, Print, REP)
    + 輸入、處理、輸出 (IPO)
    + 編輯、編譯、測試
+ 程式開發就是不斷的「編輯、編譯、測試」，接下來的編譯器開發者也是竭盡所能的想加快這循環
+ 當你進到更大的團隊時，顆粒度變大了，從人變成團隊。
「編輯、編譯、測試」變成了「問題報告、問題修復、重新測試」，但一樣要辦法加快這循環

### 每天重新構建
1. 自動：cron 固定時間編譯
2. 每天：連續構建，但可能卡在程式碼控制
3. 完整：多語言、多作業系統、高低階版本皆須重新構建
### 優點
1. QA 可以取得最新版本，確認程式是否穩定
2. 開發者更有安全感，確保隨時可以出貨 (上 Production)
3. 闖禍的人如果忘記把檔案 commit 上去而造成錯誤，可以提早揭露錯誤
4. 讓市場行銷、測試版客戶網站先試用穩定版本
5. 可以把每天重新構建結果保存起來，配合良好版控找到從哪裡開始錯的
6. 承5，可以了解 QA 回報在哪個版本出問題，以及追蹤到何時修復

+ 有一台專門構建的機器，將每天構件成功結果放到專屬目錄 
  + 放到今天就是 runner, docker image version

### 小提醒
+ 構建過程應有腳本完成，而不是在某個人「腦裡」
    + 放到今天就是 CI/CD script 與 pipeline
+ 發現問題時，直接進去 VM/Pod 裡面改是最糟的，請從源頭程式碼改
+ 編譯器設成最高級別，有警告就停下來
+ 重新構建出問題，先把一切停下出直到問題修復
+ 構建失敗，應立即通知修復，通知可以放錯誤 log
+ 作者團隊中，誰搞壞了就要當構建值日生，直到下一位搞壞的人出現 (現在不需要了)
+ ~~午餐時間是個不錯的構建時間~~
+ ~~如果跨時區...~~

# 12. 堅定除錯、解決問題
### 前言
==Question: 當軟體有問題時（效能問題、改善空間），你會去解決它嗎？==

+ 請確定出問題時你很快就會知道
  + 擷取 error log 的使用者行為並通知
  + 擷取事發現場錯誤畫面及 log 日誌
  + 每一通 support 電話都視為出問題的證據

+ 請確定你可以在經濟上得到回報
  + 把技術支援的成本算到相關事業部門上，事業部門就開始要求前 10 大問題列表
  + 原本會向尋求 support 的客戶收錢，但這不合理 XD
  + support 免費時，若問題太多也會吃掉利潤

+ 搞清楚對你來說那些問題值得全部修好
  + support 成本
  + 解決問題成本
  + 改善後能多賣幾套? 賣貴一點?

## 討論
1. 俗話說：「沒有監控、沒辦法衡量成效的功能都不算上線」，請問你們都用什麼工具或流程去監控、通知及衡量？
2. 「解決問題的成本太高、價值太低，因而放到現在都沒解決」，舉個你印象最深的例子
