我的專長技能
- 具備兼顧_程式設計_、可測試性、可維護性、_安全性_與_可操作性_的設計觀點。
- 了解缺少何種知識會造成何種系統問題。
把事情做對
盡可能簡單地說,一個應用系統由以下三個重要的技能面向組成:
- 知道如何讓設計符合規格、協定、框架等要求(JSON Schema、HTTP、SpringFramework)。
- 知道如何測試程式碼(從單元測試到可維護的整合測試)。
- 知道如何以最佳實務使用資料庫(以最少索引達成可接受的效能;以最低成本確保正確交易)。
微服務/Saga 模式/事件溯源開發
- 程式語言:
- Java(超過 10 年):SpringBoot、Spring WebFlux/WebMVC、SpringSecurity、SpringData(JPA/Hibernate、Cassandra)、Reactive Programming(Reactor)、BeanValidation、AspectJ、CGLib、SLF4j、LogBack
- GoLang(5 年):Gin、GORM、Go-Resty
- 後設程式設計:
- 具備 PEG(Parsing Expression Grammar)經驗
- 程式設計典範:
- 熟悉 Reactor(Reactive Programming 框架)
- 部署:
- Kubernetes(GCP)、Minikube,4 年經驗
- 語言工具:
- 測試:
- Java:JUnit(Jupiter)、JMockit
- GoLang:Ginkgo、Gomega
- Minikube:供個人或開發團隊的共用環境使用
- Parser generator:
- Java:ANTLR
- GoLang:pointlander/peg
- 佇列:RabbitMQ、Kafka
- 輕量標記語言:
- Markdown、AsciiDoc、Creole(主要由 Trac 使用)
進階語言運用
- Java heap 診斷:擅長 Java heap dump 分析。
- SQL 效能調校:了解如何預先最佳化 SQL 效能。
其他程式語言
Perl(15 年前)、TypeScript(近期用於 nvim/vim 外掛)、lua(近期用於 nvim)
vimscript(使用 VIM 已有 20 年,近期轉用 NVIM)
fish(因調整終端機開發環境而使用)、bash(至少 15 年)
架構
- 具備 reactive programming 經驗。
- 擅長 IoC/DI 模式。
- 擅長領域驅動設計(domain-driven design)。
- 擅長面向切面程式設計/宣告式程式設計。
- 擅長測試驅動設計。
- 擅長事件溯源/離線交易/Saga 模式設計。
系統重構
基於 TDD 原則,擅長重構/簡化既有系統。
- 具備將單體系統重構為微服務的經驗。
- 擅長在重構時透過測試驅動,維持可靠的軟體品質。
資料庫設計/效能調校與演進
具備 NoSQL 資料庫經驗:Cassandra、MongoDB
- 擅長 schema/index 的預先最佳化設計。
- 擅長查詢最佳化。
- 擅長資料庫演進(Liquibase、CassandraMigrate)。
CI/CD
- 具備現代 CI/CD(GitLab CI、GitHub Actions)經驗。
- 具備 Docker/Kubernetes/Kustomize 經驗。
雲端
- 具備 AWS(EC2、ElastiCache、RDS、ECS)經驗。
- 具備 GCP(SQL、GKE、Logging、Monitoring)經驗。
知識系統
擅長使用 Trac/撰寫 AsciiDoc。