企業(內部)培訓


1. 功能需求

工程師如何挖掘領域技術需求,並轉化為架構。

  • 分析與理解架構需求是否重視 Concurrency ? Latency ? Throughput ?
  • 分析與理解架構需求如何受限 CPU ? Memory ? Storage/IO ? Bandwidth ?
  • 分析與理解架構需求數據場景 OLTP ? OLAP ? Big Data ?
  • 其它。

以上皆會可能影響程式語言、函式庫、網頁框架、資料庫及人員的選用。

2. 非功能需求

2-1. 法律遵循。

  • 為何工程師需要瞭解法律?法律如何影響軟體架構?
  • 創業家 / CTO / 架構架構師必須懂的軟體相關法律。
  • 接案 / 外包工程師必須懂的軟體相關法律。
  • 其它。

2-2. 安全性。

  • 你真的瞭解 Cookie 和 Session 嗎?一個很多資深工程師自以為懂的問題。
  • Prepared statement 真能有效防止 SQL injection 嗎?
  • XSS / CSRF 是什麼?如何有效防止類似的攻擊?
  • 你真的瞭解各種 DDoS 的攻擊嗎?如何有效防範?給軟體架構的省思為何?
  • 透視網頁常見安全風險:一趟用戶註冊 / 登入流程可能引發的安全之旅。
  • 其它。

2-3. 維護性。

  • 分析與理解 KISS / YAGNI / SOLID / DRY,並探討可能引發的副作用。
  • Defensive Programming 不如 Offensive Programming 嗎?探討那些未思考之處。
  • 程式碼註解要或不要?不要好嗎?要的話,準則為何?
  • API 設計準則,什麼是好的 API?
  • Pair programming 的優點與缺點。
  • Code review 的優點與缺點。
  • 其它。

2-4. 可用性。

  • 如何在軟體設計層面設計出高可用性?
  • 如何在軟體架構層面設計出高可用性?
  • 其它。

2-5. 擴展性。

  • 每個軟體工程師必須懂的分布式理論。
  • 如何在軟體設計層面設計出擴展性?
  • 如何在軟體架構層面設計出擴展性?
  • 其它。

2-6. 效能。

  • 分析與理解常見的效能 trade-off,你該用什麼交換。
  • 每個軟體工程師必須懂的 Concurrency 與 Parallelism。
  • 每個軟體工程師必須懂的 Garbage Collection。
  • 簡單幾招讓你快速深入理解 C / C++ / Rust / Python / PHP / Ruby / Java / Scala / Golang / Erlang / C# 底層差異。
  • 如何增進程式效能?
  • 如何增進作業系統效能?Linux 作業系統如何對應不同場景的最佳化。
  • 資料庫效能增進方法?資料庫設計如何對應不同場景的最佳化。
  • 其它。

2-7. 敏捷。

  • 分析與理解 Scrum / Kanban,並探討常見的失敗原因。
  • 組織真的適合敏捷嗎?很多敏捷團隊成員不了解系統邊界,或以為敏捷不需要文件,而這通常是危險警號。
  • 其它。

3. 約束

  • 如何分析與理解時間與預算約束。
  • 如何分析與理解技術約束。平台、程式語言、框架與法律等。
  • 如何分析與理解組織約束。
  • 其它。

4. 原則

  • Coding Style 該如何定?
  • 架構如何分層?資料庫不夠快時,加上 Cache 層真的好嗎?
  • 其它。