[架構師的修練] #1, 刻意練習 - 打好基礎
問題與答案 (FAQ)
Q&A 類別 A: 概念理解類
A-Q1: 什麼是軟體工程中的「刻意練習」?
- A簡: 有目標、有回饋、可重複的實作循環;用最小題目反覆練到可解釋、可教人、可優化。
- A詳: 刻意練習是指針對特定能力,設計可測量的練習題目,設定明確評估指標,進行多次迭代,持續獲得回饋與修正的過程。它避免漫無目的的「多做就會」迷思,要求你把問題轉為可驗證的代碼與指標,從正確性到效率逐步提升;並在過程中抽象化、找理論極限、與同儕互評,以建立可轉移的能力。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q9, B-Q1, C-Q1
A-Q2: 為什麼打好基礎對架構師特別重要?
- A簡: 基礎決定學習上限與決策品質;能跨技術迭代、連結知識、做正確取捨。
- A詳: 架構師經常面對多領域決策與長期演進。語言與框架快速替換,唯有資料結構、演算法、作業系統、網路、併行等基礎不會過時。具備基礎能看懂設計原理而非僅會操作;評估成本、風險與延展性時才有依據。當工具換代,基礎讓你快速遷移、建立抽象模型並連結不同知識,支撐高品質決策。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q14, B-Q11, B-Q14
A-Q3: 什麼是「把點連成線」的學習?
- A簡: 點是技能,線是原理與脈絡。連結使技能能遷移、組合、創造價值。
- A詳: 單一技能(點)易被替代;當你理解點與點間的關係、共通抽象與原理(線),便能在新情境快速重組解法。連結依賴足夠的知識深度(能抽象)與廣度(跨域知識圖譜)。實作上,從需求抽象出問題模型,映射到已知原理,再用熟悉技術驗證,形成學以致用的閉環。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q14, A-Q10, C-Q5
A-Q4: 為何「Learn how to learn」是關鍵能力?
- A簡: 自主學習讓成長不受外部資源綁定;學得快、判得準、練得深。
- A詳: 環境與導師不可控,技術更替快速。學會自學包括:識別知識缺口、搜尋關鍵詞、評估資訊可信度、快速搭建練習環境、設定指標驗證、反思抽象化。此能力讓你在無指導時也能前進,將限制從外在轉為自我驅動,是長期職涯能持續疊代的核心。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q1, C-Q1, D-Q1
A-Q5: 軟體「研發」與「代工」的差異?
- A簡: 研發重洞察與解決方案創造;代工重按單實作與交付。
- A詳: 代工聚焦把規格做出來、交付達標;研發需定義問題、找關鍵指標、驗證假設、設計與演進架構、平衡風險與成本。研發角色要能連結需求、技術與商業目標,主動創造解法與路線圖。刻意練習與基礎知識是從代工轉研發的槓桿。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q1, B-Q8, D-Q6
A-Q6: 40+ 工程師應具備哪些不可取代能力?
- A簡: 決策與抽象、跨域連結、風險控管、帶動迭代與影響力。
- A詳: 單純「寫更快」易被人力擴張取代。不可取代包含:系統抽象與邊界設計、跨團隊協作與治理、技術趨勢判讀與決策、以 SLO 管理服務、DevOps 文化落地、把管理觀念轉化為系統機制、培養人才。這些需要長期沉澱與刻意布局。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q8, B-Q16, D-Q9
A-Q7: 什麼是「無知的無知」?
- A簡: 連自己不知道什麼都不知道;無法正確提問或搜尋。
- A詳: 無知分層次:知道、知道自己不知道、不知道自己不知道。後者是最危險,因為無從覺察缺口。化解方式:擴充基礎知識、建立知識圖譜、從問題逆推至學科基礎、把問題轉為代碼與指標獲得回饋,逐步從「不會問」轉為「會問對問題」。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q14, C-Q5, D-Q1
A-Q8: 為何要長期投入「重要但不緊急」?
- A簡: 它們決定未來競爭力;需要提早、固定投入累積資本。
- A詳: 長期價值如基礎學習、抽象能力、社群連結、健康、工具鏈投資,短期不會爆炸但長期缺席會付出高昂代價。以固定時段、可衡量目標與迭代檢視,讓這類事項穩定前進,避免臨時抱佛腳的結構性風險。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q8, D-Q10, B-Q22
A-Q9: 什麼是 MVP,為何練習需要它?
- A簡: 最小可行產品,用最少成本驗證假設與取回饋。
- A詳: MVP是以最小功能集合快速驗證價值或技術可行性的方式。在練習中,MVP讓你聚焦核心風險,用熟悉的一套全端工具鏈實作出端到端雛形,快速拿到正確性與效能指標,避免因工具不熟而阻礙驗證,縮短從想法到證據的距離。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q4, B-Q18, A-Q1
A-Q10: 什麼是「抽象化」,核心價值是什麼?
- A簡: 去除非關鍵細節,保留本質結構,利於重用與決策。
- A詳: 抽象化將具體實作背後的共通結構提煉出來,形成可組合的模型或介面。好抽象可隔離變化、擴充容易、溝通精準、幫助邊界切割與技術決策。它是把點連線的必要條件,也是從代碼層提升到系統與組織層面的橋梁。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q4, B-Q15, C-Q5
A-Q11: 什麼是「知識地圖」?為何架構師需要?
- A簡: 將領域概念與關係系統化,標示基礎、依賴與邊界。
- A詳: 知識地圖把技術、原理、工具、決策因素以節點與連結呈現,顯示依賴、替代、風險與能力缺口。架構師用它做技術評估、風險管理、招募培訓與路線規劃。在未知領域判斷不確定性與研究順序尤為關鍵。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q14, C-Q8, D-Q6
A-Q12: 實務能力分級(LV0–LV4)代表什麼?
- A簡: 從不具備到能教人與獨立改善;LV3起才算精通。
- A詳: LV0不具能力;LV1知其然;LV2能獨立操作;LV3能教人、建立方法;LV4能持續改善與創新。建議以LV3為精通門檻:能講清楚、示範、回答反例,並在不同場景遷移應用。評估時用可觀察行為與輸出成果作為證據。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q1, D-Q5, A-Q1
A-Q13: 為何自我驅動的練習比外訓更關鍵?
- A簡: 可控、連續、貼近問題;形成長期複利與可轉移能力。
- A詳: 外訓提供起點但難以貼身解決你的真問題。自我驅動可快速把工作痛點拆成可練習題、設定指標與回饋機制,迭代到可用解;並在不同專案複用。當自學成為習慣,學習速度與深度將不再受限於資源安排。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q5, D-Q1, B-Q1
A-Q14: 架構師應優先掌握哪些CS基礎?
- A簡: 資料結構、演算法、作業系統、網路、併行、資料庫。
- A詳: 這些基礎支撐你判斷複雜度、資源爭用、IO瓶頸、併發安全、索引與查詢等核心議題。學習時連結到語言執行模型、JIT/VM、記憶體模型,並用小實驗驗證推論,使理論與實作互相校準。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q11, B-Q5, C-Q3
A-Q15: 什麼是 OOP?價值為何?
- A簡: 以抽象、封裝、繼承、多型建模,隔離變化、促進重用。
- A詳: OOP用類與物件描繪領域抽象,透過封裝隱藏實作細節;繼承與多型提供擴充與替換彈性。它有助於設計可維護的邊界、實作策略與模板模式、驅動ORM映射,並在微服務設計時提供良好語彙與聚合概念。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q11, B-Q12, A-Q10
A-Q16: 什麼是 OODB?與 NoSQL 的關係?
- A簡: 物件導向資料庫概念影響了今日文件/鍵值NoSQL設計。
- A詳: OODB嘗試直接以物件模型持久化,處理關聯、繼承、查詢與版本等議題。現代NoSQL(如文件型)以JSON/XML存物件序列化,延續了OODB的思想,但在分散式與模式靈活度上實務化。理解OODB有助於正確做物件-資料儲存設計取捨。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q12, B-Q13, A-Q17
A-Q17: ORM 與 OODB 有何差異?
- A簡: ORM做物件-關聯映射;OODB企圖原生持久化物件模型。
- A詳: ORM在關聯式DB上以策略(表繼承等)映射物件結構,擅長結構化查詢與事務一致;OODB則以物件為一等公民,減少阻抗失衡,但在查詢、分散式與工具成熟度上有挑戰。選擇取決於查詢模式、演進頻率與一致性需求。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q12, A-Q16, D-Q6
A-Q18: 什麼是 COM?曾扮演的角色?
- A簡: Windows 的二進位元件模型,實現跨語言/進程重用。
- A詳: COM定義二進位介面與生命週期(IUnknown等),讓C/C++/VB等跨語言、跨進程重用元件。它影響了後續的互通與插件機制;透過CCW可讓.NET元件以COM呈現,協助漸進遷移。理解它強化你對跨界邊界的感知與設計。
- 難度: 中級
- 學習階段: 進階
- 關聯概念: B-Q10, C-Q9, A-Q10
A-Q19: COM 如何支持跨語言互通?
- A簡: 以穩定二進位介面、參考計數與代理封送實現互通。
- A詳: COM以interface vtable約定二進位相容;以AddRef/Release管理生命週期;以代理/存根跨進程封送呼叫。語言編譯器產生對應包裝層,確保語義一致。這些機制形成清晰邊界,支撐大型系統插件化與遷移策略。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: B-Q10, C-Q9, B-Q9
A-Q20: DevOps 與管理的關係是什麼?
- A簡: DevOps是管理哲學落地到技術流程的實踐與治理。
- A詳: DevOps不只工具,強調跨職能協作、快速回饋、可重複與可觀測。將責任切分為Code/Infra/Config,對齊團隊邊界與目標管理;以CI/CD縮短交付迴圈、以SLO治理可靠性與錯誤預算。它本質是管理方法在工程上的具體化。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q8, B-Q16, D-Q7
A-Q21: 什麼是 SLO?為何重要?
- A簡: 服務層級目標,以可量測指標對齊可靠性承諾。
- A詳: SLO由SLI(量測指標)與目標值組成,反映用戶關心的可靠性(可用性、延遲、正確性)。結合錯誤預算,形成交付與穩定的平衡機制,將「績效考核」轉譯到系統層,驅動優先級決策與風險管理。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q16, C-Q7, D-Q8
A-Q22: 什麼是訊息佇列(Message Queue)的核心價值?
- A簡: 解耦生產與消費、平滑流量、支援非同步與彈性擴展。
- A詳: MQ以交換器/佇列緩衝需求,讓生產者不需等待消費結果,提升整體吞吐;透過多消費者實現平行處理與回壓控制;支援重試、死信處理、路由策略。適合處理批次、後台任務、事件驅動整合。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q6, B-Q19, C-Q2
A-Q23: 什麼是「生產者—消費者」模式?
- A簡: 以佇列協調產出與處理速率,避免阻塞與過載。
- A詳: 生產者將工作放入佇列,消費者按能力取出處理。可調整消費者數(水平擴展)與每次抓取量(QoS)以達穩態流量;配合ACK與重試提高可靠性。是實作非同步、削峰填谷的常見基礎模式。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q7, B-Q19, C-Q2
A-Q24: 什麼是「管線(Pipeline)處理」?
- A簡: 將任務拆步驟串接,步驟內平行化,端到端增吞吐降延遲。
- A詳: 管線把複合任務拆成多階段,階段間以緩衝連接。每階段可獨立擴展以匹配瓶頸;設計指標如TTFT、TTLT評估整體效果。適合影像處理、資料清洗、批次運算等長鏈任務。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q20, C-Q3, D-Q4
A-Q25: 為何用 Side Project 作為練習載具?
- A簡: 低風險、高迭代、自己當客戶;技術驗證與作品積累。
- A詳: 正式專案容錯低,Side Project可快速試錯與對比解。以部落格、工具、服務為練習場,串接版控、CI、部署、監控,真實體驗全流程。逐步搬家演進(如到GitHub Pages)即是長期練習的軌跡。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q6, C-Q1, D-Q2
A-Q26: 何謂「一套能端到端」的工具基線?
- A簡: 至少精通一套全端堆疊,能快速驗證與交付MVP。
- A詳: 選一套你熟悉的語言/框架/DB/佈署工具,從前端到後端到部署能單兵完成。目的是縮短從想法到可用成果的時間,避免陷在學新工具;當驗證通過,再評估是否替換特定組件以優化。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q4, B-Q18, D-Q2
A-Q27: 為何要思考「理論極限」?
- A簡: 明確天花板,判斷是否接近最優,避免徒勞優化。
- A詳: 在持續優化前,先用模型估算最佳可能(如Amdahl/瓶頸容量)。有了上限,才能評估現況差距與投資報酬。也可指引調整方向:加速最慢階段、調配併發、改變架構而非微調。避免無效耗損。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q5, C-Q3, D-Q4
A-Q28: 什麼是TTFT、TTLT等評估指標?
- A簡: 首筆完成時間、末筆完成時間、平均時間衡量體驗與吞吐。
- A詳: TTFT衡量最早回應、影響感知延遲;TTLT反映整體處理完畢時間;平均時間描述集中趨勢。搭配分佈或P95更準確。用於比較不同實作或調參,客觀判定效益。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q3, C-Q3, D-Q4
Q&A 類別 B: 技術原理類
B-Q1: 刻意練習的技術循環如何運作?
- A簡: 問題代碼化→設定指標→抽象重構→推導上限→同儕回饋。
- A詳: 原理說明: 將模糊問題最小化並轉成可測試代碼,建立自動化回饋。關鍵步驟: 1) 定義POC與測試數據;2) 設計TTFT/TTLT等SLI;3) 用TDD守護重構與抽象化;4) 以模型推算理論上限;5) PR/讀書會互評。核心組件: 測試框架、計時與統計模組、可插拔策略抽象、觀測與報表工具。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q1, C-Q1, A-Q28
B-Q2: 如何將問題「代碼化」並建立可重現環境?
- A簡: 用最小可重現案例與固定輸入,搭起自動測試基架。
- A詳: 原理說明: 把需求切成最小核心路徑,排除外部雜訊。步驟: 1) 固定隨機種子/輸入資料;2) 以命令列參數/設定檔控制變數;3) 建立單元/整合測試;4) CI執行重現。核心組件: 測試資料夾、測試Runner、配置Loader。確保每次改動都能得到一致回饋。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q5, A-Q1, A-Q28
B-Q3: 指標設計的機制是什麼?(以TTFT/TTLT為例)
- A簡: 對齊體驗與效率,以統計分佈衡量端到端行為。
- A詳: 原理說明: 指標應對應用戶價值與系統瓶頸。步驟: 1) 定義場景(如1000任務);2) 蒐集首筆、末筆、平均與P95;3) 可視化對比不同策略;4) 設閾值作為通關標準。核心組件: 計時器、中介層量測器、結果匯總器、圖表與報表。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q28, C-Q3, A-Q27
B-Q4: 抽象化與TDD如何協同保障重構?
- A簡: TDD鎖定行為契約,抽象化分離變化,安全迭代。
- A詳: 原理說明: 測試先行定義API/行為;抽象接口隔離策略與依賴。步驟: 1) 紅-綠-重構;2) 提煉介面/策略;3) 以DI注入替換實作;4) 確保測試覆蓋關鍵分支。核心組件: 測試框架、Mock/Stubs、IOC容器、策略/模板模式。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q10, C-Q5, D-Q4
B-Q5: 如何由模型推導「理論極限」?
- A簡: 建模各階段容量與佔比,套用瓶頸理論估算上限。
- A詳: 原理說明: 用流水線/併發模型建立各階段服務率,評估最大吞吐與最小延遲;類比Amdahl定理,非並行部份限制總加速比。步驟: 1) 測量單步容量;2) 找最慢階段;3) 模擬擴展曲線;4) 設定停止準則。核心組件: 基準程序、統計工具、簡易排隊模型。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: A-Q27, C-Q3, D-Q4
B-Q6: RabbitMQ 架構如何運作?(Exchange/Queue)
- A簡: 生產者送到Exchange,依綁定鍵路由到Queue,消費者取用。
- A詳: 原理說明: Exchange類型fanout/direct/topic決定路由行為;Queue持有訊息;綁定表述匹配規則。步驟: 1) 宣告Exchange/Queue;2) 綁定;3) 發布訊息;4) 消費ACK。核心組件: Channel、RoutingKey、Binding、Ack/Nack、DLX(死信)。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q22, A-Q23, C-Q2
B-Q7: 生產者—消費者流程細節是什麼?
- A簡: 流程涵蓋發佈、流控、消費、ACK、重試與回壓。
- A詳: 原理說明: 用BasicQos控制prefetch避免過載;消費者處理完送ACK;失敗Nack重投或入死信。步驟: 1) 設定prefetch;2) 顯式ACK;3) 處理重試與DLQ;4) 水平擴展消費者。核心組件: Prefetch、AckMode、DLQ、重試策略。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: C-Q2, D-Q3, A-Q23
B-Q8: Code/Infra/Config 三分的技術架構如何設計?
- A簡: 責任分離:程式碼、基礎設施、環境設定各自版本化與治理。
- A詳: 原理說明: 用Git分Repo或資料夾分治;Infra即程式(IAC)管理環境;Config描述部署拓撲/連線/旗標。步驟: 1) 明確邊界與責任;2) 建立CI/CD管線;3) 環境差異以Config驅動;4) 權限與審計。核心組件: Git、IAC工具、密鑰管理、部署編排器。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q20, C-Q7, D-Q7
B-Q9: ASP 與 ASP.NET 並存與Session互通的概念?
- A簡: 以COM包裝核心邏輯,舊新共存,透過共享存儲或橋接互通。
- A詳: 原理說明: 將業務核心封裝為COM,ASP/ASP.NET共用;Session可透過外部存儲(DB/State Server)或票證機制共享。步驟: 1) 辨識可重用核心;2) 提供COM/CCW介面;3) 配置共用Session;4) 分階段切頁面。核心組件: COM/CCW、會話狀態存儲、相容層。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: A-Q18, C-Q9, D-Q6
B-Q10: COM Callable Wrapper(CCW)如何工作?
- A簡: 將.NET物件曝光為COM介面,處理呼叫轉換與生命週期。
- A詳: 原理說明: CCW生成COM可見vtable,管理參考計數,封送參數型別並處理例外;使舊環境可調用新邏輯。步驟: 1) 標記事件/介面可見;2) 註冊組件;3) 客戶端以COM呼叫。核心組件: Regasm、GUID、InterfaceType、引用計數。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: A-Q19, C-Q9, B-Q9
B-Q11: OOP 原則如何支撐架構決策?
- A簡: 以邊界與介面抽象,隔離變化,降耦合,便於替換擴展。
- A詳: 原理說明: 單一職責/開閉/依賴反轉等實踐形成穩定抽象;策略與模板模式讓變化點可插拔。步驟: 1) 辨識不變與變化;2) 定義介面;3) 以DI組裝;4) 用測試鎖定契約。核心組件: 介面、策略、工廠、DI容器、契約測試。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q15, A-Q10, C-Q4
B-Q12: ORM 映射策略的原理與取捨?
- A簡: 表繼承/類繼承等策略權衡正規化、查詢效能與靈活度。
- A詳: 原理說明: Table-per-Hierarchy/Type/Concrete各有空間與查詢代價。步驟: 1) 分析查詢模式;2) 選策略;3) 設索引與關聯;4) 寫遷移腳本。核心組件: 映射設定、遷移工具、查詢分析器。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q17, A-Q16, D-Q6
B-Q13: XML DB 與 RDB 的選擇依據?
- A簡: 視資料結構穩定性、查詢型態、演進頻率與生態選擇。
- A詳: 原理說明: 結構多變、以文件為單位且少跨文件查詢偏向XML/文件DB;需要關聯查詢與強一致偏向RDB。步驟: 1) 梳理存取模式;2) 評估演進;3) 建模與索引;4) 災備與備援。核心組件: 文件結構、索引、查詢語言、遷移策略。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q16, D-Q6, C-Q4
B-Q14: 如何構建個人的「知識地圖」?
- A簡: 以基礎為根、主題為枝,標依賴、替代與能力缺口。
- A詳: 原理說明: 自頂向下(主題→構件)與自底向上(實驗→原理)結合。步驟: 1) 列出主題與必備基礎;2) 標註依賴與風險;3) 反向演繹至學科根基;4) 以練習驗證連結。核心組件: 心智圖、連結筆記、實驗記錄、路線圖。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q11, A-Q7, C-Q8
B-Q15: 團隊組織如何影響微服務邊界?
- A簡: Conways Law:組織溝通結構映射到系統邊界。
- A詳: 原理說明: 將業務能力與團隊責任對齊,服務邊界自然清晰;跨團隊耦合會反映在介面複雜。步驟: 1) 梳理業務能力;2) 對齊責任;3) 定義SLO與介面;4) 建治理機制。核心組件: 能力地圖、介面契約、SLO治理、版本策略。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: A-Q20, D-Q6, C-Q7
B-Q16: SLO 治理機制如何設計?
- A簡: 定義SLI→設定SLO→錯誤預算→執行與回顧。
- A詳: 原理說明: 以用戶旅程推導SLI(可用、延遲);設定可達SLO;計算錯誤預算驅動發版節奏與風險;週期性回顧。步驟: 1) 選SLI;2) 設SLO與預算;3) 監控告警;4) 決策與調整。核心組件: 監控堆疊、告警平台、變更紀錄、事後檢討。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q21, D-Q8, C-Q7
B-Q17: Daily Build/CI 的作用與流程?
- A簡: 每日整合編譯測試,提高回饋頻率、降低整合風險。
- A詳: 原理說明: 小步快跑與自動回饋。步驟: 1) 版本控制分支策略;2) 自動建置與測試;3) 靜態檢查;4) 報表與失敗阻擋。核心組件: CI伺服器、測試套件、檢查器、工件儲存。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q1, C-Q1, D-Q7
B-Q18: 最小化全端工具鏈如何選擇?
- A簡: 以熟悉優先,覆蓋端到端,能快速交付與量測。
- A詳: 原理說明: 工具是手段,先選你熟而穩定的一套。步驟: 1) 選語言/框架/DB/部署;2) 打通本地到雲端;3) 建測試/監控;4) 範本化。核心組件: 範本專案、腳手架、腳本、監控儀表。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q26, C-Q4, D-Q2
B-Q19: MQ 回壓與彈性伸縮機制怎麼做?
- A簡: 控制prefetch與併發數量,根據佇列深度自動伸縮。
- A詳: 原理說明: 回壓避免積壓放大與雪崩。步驟: 1) 設prefetch限制;2) 動態併發調整;3) 以佇列深度/處理速率為伸縮信號;4) 保護上游。核心組件: 自動伸縮器、指標蒐集、限流器、熔斷器。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: D-Q3, C-Q2, A-Q23
B-Q20: 平行管線的併發控制原理?
- A簡: 階段內平行、階段間串接,容量匹配瓶頸對齊。
- A詳: 原理說明: 以工作佇列連接階段;每階段有固定工人數。步驟: 1) 分解階段;2) 量測每階段服務率;3) 配置併發與緩衝;4) 動態調參。核心組件: Channel/Queue、Worker池、節流、監控儀表。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: A-Q24, C-Q3, D-Q4
B-Q21: 部落格演進(自架→平台→靜態)的技術考量?
- A簡: 從控制力到成本與專注度的平衡,技術實驗場。
- A詳: 原理說明: 早期自架驗證RBAC/ORM;轉至成熟平台減維運;再到靜態站+版控專注內容與流程化。步驟: 1) 需求排序;2) 平衡維運/成本;3) 遷移與導流;4) 自動化。核心組件: CMS/靜態產生器、CI、CDN、DNS。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q6, A-Q25, D-Q2
B-Q22: 如何安排「重要不緊急」學習?
- A簡: 固定時段、明確主題、可量測里程碑、週期檢視。
- A詳: 原理說明: 行為設計學,用制度保證長期事情被完成。步驟: 1) 每週固定時段;2) 設定主題與成果物;3) 量測(文章、PR、Demo);4) 檢視與下輪規劃。核心組件: 行事曆、任務板、OKR/習慣追蹤、復盤筆記。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q8, C-Q8, D-Q10
B-Q23: 如何用職缺反推學習藍圖?
- A簡: 拆職能→評估LV等級→擬補差路線→設練習專案。
- A詳: 原理說明: 以市場需求導向學習投資。步驟: 1) 整理要求技能;2) 以LV0–4自評;3) 選高影響力差距;4) 設定練習題與驗收。核心組件: 職缺矩陣、LV評表、練習清單、進度看板。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: C-Q8, A-Q12, D-Q5
B-Q24: 管理KPI如何映射到系統SLO?
- A簡: 從商業價值推導用戶體驗,再落到可量測SLI/SLO。
- A詳: 原理說明: 將「準時、穩定」等抽象績效轉換為延遲、可用性等SLI;設定SLO並配錯誤預算,形成技術與商業對齊機制。步驟: 1) 梳理價值鏈;2) 定義用戶價值;3) 設SLI/SLO;4) 迭代調整。核心組件: 監控平台、商業儀表、回顧流程。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q21, D-Q8, C-Q7
Q&A 類別 C: 實作應用類(10題)
C-Q1: 如何建立個人的刻意練習循環?
- A簡: 選題→最小POC→指標→迭代→分享回饋;每週固定節奏。
- A詳: 具體步驟: 1) 選一痛點(如批次任務慢);2) 建最小POC專案與測試數據;3) 寫單元測試與計時器,量TTFT/TTLT;4) 每次僅改一處再比對;5) 寫成文章或PR請同儕審。程式片段: 使用計時器與固定測試資料。注意: 控制變因、保留基準版、記錄每次變更與結果。最佳實踐: 自動化、版本化、可重現。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q1, A-Q12, A-Q28
C-Q2: 如何用C#實作最小RabbitMQ生產/消費?
- A簡: 建連線→宣告Exchange/Queue→Publish→Consume+ACK。
- A詳: 步驟: 1) 安裝客戶端套件;2) 宣告exchange=direct、queue並綁定key;3) 發布BasicPublish;4) 消費BasicConsume,手動Ack;5) 設prefetch=1控制回壓。關鍵程式: 建立IConnection/IModel、BasicQos(0,1,false)。注意: 持久化(durable、persistent)、錯誤重試與DLQ。最佳實踐: 以佇列深度與處理速率調整消費者數。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q6, B-Q7, B-Q19
C-Q3: 如何為管線任務設計與量測TTFT/TTLT?
- A簡: 固定N任務,記錄首/末完成時間,對比不同併發。
- A詳: 步驟: 1) 產生固定數據(如1000工作);2) 建三階段管線(讀取/處理/輸出);3) 每階段可配置並行度;4) 計時首筆與末筆完成;5) 記錄分佈與P95。程式碼: 在各階段起訖打點;注意: 排除I/O偏差、暖機、GC影響。最佳實踐: 先正確再優化,對比多組參數與策略。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q28, B-Q20, A-Q27
C-Q4: 如何快速打造端到端MVP驗證想法?
- A簡: 以熟悉堆疊建最小路徑:API+DB+前端+部署+監控。
- A詳: 步驟: 1) 選熟悉框架與DB;2) 建CRUD API與一頁式前端;3) 加入登入/簡易RBAC;4) 容器化與雲上部署;5) 加健康檢查與日誌。關鍵設定: 環境用設定檔切換;注意: 不追新、先驗證價值。最佳實踐: 模版化腳手架,10倍縮短構建時間。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q9, B-Q18, A-Q26
C-Q5: 如何把專案難題轉成可練習的最小案例?
- A簡: 抽離核心路徑、固定輸入、移除外部依賴、做自動化測試。
- A詳: 步驟: 1) 明確狀況(如某函式瓶頸);2) 匯出最小資料集;3) 建獨立專案復現;4) 加測試與指標;5) 探索不同解法。程式: 用介面與假件替代外部系統。注意: 與生產同等語義;最佳實踐: 解法回饋到主專案,沉澱為工具或範本。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q2, B-Q4, D-Q4
C-Q6: 如何用GitHub Pages建立可練習的技術部落格?
- A簡: 選靜態產生器→版控→CI部署→Markdown寫作→量化節奏。
- A詳: 步驟: 1) 建Repo;2) 選Jekyll/Hugo;3) 設GitHub Actions自動部署;4) 用Markdown撰寫技術筆記;5) 設寫作與發佈節奏。設定: gh-pages分支、CNAME;注意: 圖與樣式壓縮、SEO;最佳實踐: 每篇對應一個練習題與程式碼。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q21, A-Q25, B-Q22
C-Q7: 如何定義並導入一個服務的SLO?
- A簡: 選SLI→設SLO與錯誤預算→布監控告警→執行治理。
- A詳: 步驟: 1) 選用戶旅程SLI(可用/延遲);2) 設SLO值(如99.9%)與錯誤預算;3) 建監控與告警閾值;4) 將預算與發版節奏綁定;5) 週期回顧。注意: 以週期衡量,避免日短視;最佳實踐: 儀表板透明化、事後檢討制度化。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q16, A-Q21, D-Q8
C-Q8: 如何用職缺拆解學習路線並排入行事曆?
- A簡: 職能矩陣→LV自評→練習清單→週預留→月復盤。
- A詳: 步驟: 1) 抽取職缺技能;2) 以LV0–4自評;3) 為LV<3列練習題與成果物;4) 每週固定時段;5) 每月復盤調整。產出: 練習Repo、文章、Demo。注意: 聚焦少而精;最佳實踐: 結合OKR與同儕回饋。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q23, B-Q22, A-Q12
C-Q9: 如何以COM/CCW漸進遷移ASP到ASP.NET?
- A簡: 核心邏輯封裝COM,ASP/ASP.NET共用;階段性換頁。
- A詳: 步驟: 1) 抽取業務核心為.NET類庫;2) 以CCW曝光為COM;3) ASP呼叫COM;4) 新頁面用ASP.NET;5) 共享Session/認證;6) 逐頁替換。設定: Regasm註冊、GUID穩定。注意: 例外/型別封送;最佳實踐: 建統一介面契約與回歸測試。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: B-Q9, B-Q10, A-Q18
C-Q10: 如何設計團隊PR型練習Kata工作坊?
- A簡: 出題與資料→模板Repo→提交PR→評審指標→群體回饋。
- A詳: 步驟: 1) 主題(如管線優化);2) 建最小模板含測試與指標;3) 參與者Fork實作,提PR;4) 以TTFT/TTLT、可讀性、抽象度評審;5) 交流會分享。注意: 控制變因一致;最佳實踐: 榜單與心得沉澱,形成知識庫。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q1, A-Q3, D-Q5
Q&A 類別 D: 問題解決類(10題)
D-Q1: 自學卡關、不知道接下來學什麼怎麼辦?
- A簡: 建立知識圖譜與LV自評,從職缺反推差距並設練習題。
- A詳: 症狀: 目標模糊、搜尋無效、無回饋。原因: 無知的無知、缺指標與練習框架。解法: 1) 用職缺建技能矩陣;2) LV0–4自評差距;3) 每項設最小POC與指標;4) 週期執行與分享;5) 同儕回饋。預防: 固定「重要不緊急」時段與復盤。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: A-Q7, B-Q23, C-Q1
D-Q2: 在生產上嘗試新技術導致事故,如何補救?
- A簡: 先回退穩定版本;改在Side Project/灰度環境驗證再上。
- A詳: 症狀: 緊急回溯、未知行為。原因: 驗證不足、風險評估缺失。解法: 1) 立即回退/隔離;2) 事後檢討記錄風險;3) 建灰度/金絲雀部署;4) Side Project實驗;5) 漸進遷移計劃。預防: 發版守則、SLO護欄、變更審查。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q25, B-Q18, B-Q16
D-Q3: RabbitMQ 佇列積壓,處理延遲升高怎麼辦?
- A簡: 量測瓶頸、調整prefetch與併發、增消費者、設DLQ與重試。
- A詳: 症狀: 佇列深度上升、處理延遲變長。原因: 消費者被阻塞、無回壓、失敗重投風暴。解法: 1) 設prefetch小值;2) 增加消費者或資源;3) 將重試外移與DLQ;4) 熔斷/限流上游。預防: 指標告警、自動伸縮、壞訊息隔離。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q7, B-Q19, C-Q2
D-Q4: 平行管線沒有變快,反而更慢?
- A簡: 找瓶頸階段、調配併發與緩衝、減同步開銷、校準指標。
- A詳: 症狀: CPU/IO利用率不均、TTLT升高。原因: 非並行段過大、鎖競爭、上下文切換、緩衝不當。解法: 1) 量每階段服務率;2) 對齊容量與緩衝;3) 減少共享狀態;4) 校準TTFT/TTLT量測。預防: 先推理上限再擴並行;持續監控。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: B-Q5, B-Q20, C-Q3
D-Q5: 只會操作不會抽象,知識難以遷移?
- A簡: 用TDD固化行為、提煉介面、跨情境重用並教會他人。
- A詳: 症狀: 換框架就歸零。原因: 沒有抽象化與契約思維。解法: 1) 用測試定義契約;2) 提煉策略/介面;3) 用不同實作驗證;4) 分享教學達到LV3。預防: 練習中強制抽象層、記錄設計理由。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q4, A-Q12, C-Q10
D-Q6: 微服務邊界錯誤導致溝通成本高?
- A簡: 回到業務能力與團隊責任重劃邊界,契約化並設SLO。
- A詳: 症狀: 跨服務耦合、改動牽動多隊。原因: 邊界未對齊組織/能力。解法: 1) 梳理業務能力;2) 對齊團隊責任;3) 契約與版本策略;4) SLO治理。預防: 設計前先做組織映射與治理機制。
- 難度: 高級
- 學習階段: 進階
- 關聯概念: B-Q15, B-Q12, B-Q13
D-Q7: 導入DevOps混亂,誰管什麼不清楚?
- A簡: 明確Code/Infra/Config邊界,設管線與權限與審計。
- A詳: 症狀: 重複定義、責任不清。原因: 缺邊界與流程治理。解法: 1) 三分責任;2) 建CI/CD標準;3) 權限最小化;4) 指標與回顧。預防: 文件化與審計,入職培訓。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q8, B-Q17, C-Q1
D-Q8: SLO老是達不到,團隊疲於救火?
- A簡: 檢視SLI與SLO合理性、錯誤預算治理、專注最大影響因子。
- A詳: 症狀: 告警疲勞、頻繁回退。原因: 目標不合理、變更無治理、監控不準。解法: 1) 用用戶旅程重選SLI;2) 重設SLO與預算;3) 變更管制與金絲雀;4) 改善前幾大故障根因。預防: 週期回顧與學習清單。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: B-Q16, C-Q7, B-Q24
D-Q9: 覺得自己被「多人擴張」取代,如何突圍?
- A簡: 從「更快寫」轉向「更好解」,打造不可替代組合。
- A詳: 症狀: 價值被工時對比。原因: 僅提供輸出量。解法: 1) 提升決策與抽象;2) 建跨域連結(管理×工程);3) 養成SLO/DevOps治理能力;4) 帶動團隊練習提升整體產出。預防: 長期投入重要不緊急、建立作品集。
- 難度: 中級
- 學習階段: 核心
- 關聯概念: A-Q6, B-Q22, C-Q10
D-Q10: 刻意練習易疲乏,如何可持續?
- A簡: 節奏化、可視化進度、同儕支持、小勝利正回饋。
- A詳: 症狀: 三分鐘熱度。原因: 目標過大、缺回饋與社群。解法: 1) 每週固定時段;2) 小目標可交付;3) 量化指標與榜單;4) 夥伴互相檢視;5) 定期回顧慶祝。預防: 選高動機主題,避免多線分心。
- 難度: 初級
- 學習階段: 基礎
- 關聯概念: B-Q22, C-Q10, A-Q8
學習路徑索引
- 初學者:建議先學習哪 15 題
- A-Q1: 什麼是軟體工程中的「刻意練習」?
- A-Q2: 為什麼打好基礎對架構師特別重要?
- A-Q3: 什麼是「把點連成線」的學習?
- A-Q8: 為何要長期投入「重要但不緊急」?
- A-Q9: 什麼是 MVP,為何練習需要它?
- A-Q12: 實務能力分級(LV0–LV4)代表什麼?
- A-Q15: 什麼是 OOP?價值為何?
- A-Q22: 什麼是訊息佇列(Message Queue)的核心價值?
- A-Q23: 什麼是「生產者—消費者」模式?
- A-Q28: 什麼是TTFT、TTLT等評估指標?
- B-Q17: Daily Build/CI 的作用與流程?
- C-Q1: 如何建立個人的刻意練習循環?
- C-Q4: 如何快速打造端到端MVP驗證想法?
- C-Q6: 如何用GitHub Pages建立可練習的技術部落格?
- D-Q1: 自學卡關、不知道接下來學什麼怎麼辦?
- 中級者:建議學習哪 20 題
- A-Q10: 什麼是「抽象化」,核心價值是什麼?
- A-Q11: 什麼是「知識地圖」?為何架構師需要?
- A-Q14: 架構師應優先掌握哪些CS基礎?
- A-Q16: 什麼是 OODB?與 NoSQL 的關係?
- A-Q17: ORM 與 OODB 有何差異?
- A-Q20: DevOps 與管理的關係是什麼?
- A-Q21: 什麼是 SLO?為何重要?
- A-Q24: 什麼是「管線(Pipeline)處理」?
- A-Q26: 何謂「一套能端到端」的工具基線?
- A-Q27: 為何要思考「理論極限」?
- B-Q1: 刻意練習的技術循環如何運作?
- B-Q3: 指標設計的機制是什麼?(以TTFT/TTLT為例)
- B-Q4: 抽象化與TDD如何協同保障重構?
- B-Q6: RabbitMQ 架構如何運作?(Exchange/Queue)
- B-Q8: Code/Infra/Config 三分的技術架構如何設計?
- B-Q16: SLO 治理機制如何設計?
- B-Q18: 最小化全端工具鏈如何選擇?
- C-Q2: 如何用C#實作最小RabbitMQ生產/消費?
- C-Q3: 如何為管線任務設計與量測TTFT/TTLT?
- D-Q7: 導入DevOps混亂,誰管什麼不清楚?
- 高級者:建議關注哪 15 題
- A-Q6: 40+ 工程師應具備哪些不可取代能力?
- A-Q18: 什麼是 COM?曾扮演的角色?
- A-Q19: COM 如何支持跨語言互通?
- B-Q5: 如何由模型推導「理論極限」?
- B-Q9: ASP 與 ASP.NET 並存與Session互通的概念?
- B-Q10: COM Callable Wrapper(CCW)如何工作?
- B-Q12: ORM 映射策略的原理與取捨?
- B-Q13: XML DB 與 RDB 的選擇依據?
- B-Q15: 團隊組織如何影響微服務邊界?
- B-Q19: MQ 回壓與彈性伸縮機制怎麼做?
- B-Q20: 平行管線的併發控制原理?
- B-Q24: 管理KPI如何映射到系統SLO?
- C-Q9: 如何以COM/CCW漸進遷移ASP到ASP.NET?
- D-Q4: 平行管線沒有變快,反而更慢?
- D-Q8: SLO老是達不到,團隊疲於救火?