「Full Stack Developer 理論上要有能力在新/現有 Application 內實踐一個完整的 Vertical Implementation。」— Gap
Full Stack 究竟要識幾多嘢?
Software Development 內,要做一個完整個 Vertical Implementation 至少已經有四個大知識範疇 (Stack),包括
- Frontend Development
- Backend Development
- DevOps
- Cyber Security
每個大範疇內亦有極多小範疇,小範疇例如
- Asynchronous Programming
- Software Architectures
- Concurrent Programming
- Performance Profiling
- Testing
- Performance Testing
- Database
- Logging
- Infrastructure as Code
- Container
- Networking
- High Availability
- Authorization
- Authentication
- Key Management
- ...海量小範疇
在每個小範疇內都有經驗及實行質素高低之分。
所以當一個完全沒有 Software Development 概念嘅人,知道小明四大 Stack 都「做過」,在無辦法得知小明每個 Stack 的成熟程度前提下,自自然然就會稱小明為 Full Stack Developer。
咁係因為小明真係可以一個人搞掂哂所有嘢
如果每個 Full Stack Developer 都在各方面達至專業程度,這個本來不是一個問題。但當大家都對 Full Stack Developer 抱有過大期望,而現實上大部份情況都發生「與期望不乎」嘅時候,等同攬炒哂所有 Full Stack Developer。
我覺得若要每個 Stack 都要達到專業程度,假設學習知識嘅進度正常持續增長下,我認為每一個 Stack 最低消費要 10000 小時學習及實踐,4 個 Stack 至少要 40000 小時,但基於知識有相輔相成的關係可以學得快啲,要成為 Professional Full Stack 最低限度都要花上 30000 小時。
以下是一個 Full Stack Developer 的理想與現實的「經驗」之分。
不理想的 Full Stack Developer
剛剛上完 3 個月 Full-time Full Stack Developer Course 然後自居 Full Stack Developer,只能夠做到以下程度
-
識寫 React + Nodejs + MongoDB HelloWorld 程度的 CRUD Application
-
人肉 Deploy 個 CRUD Application 上 AWS
-
Configure AWS DNS + Load Balancer + HTTPS
理想的 Full Stack Developer
每個 Stack 都確切地做過一段時間,然後有能力兼且有效率地做到以下 Vertical Implemenation:
-
由建立 Web/iOS/Android/Hybrid Frontend 開始
-
再同時建立加駁通 Backend RESTful API/GraphQL/gRPC Application Server 以及連接其它 Backend Service
-
兼且兩邊都正確有效率地 Configure 埋 Cache、Database、Message Queue、Scheduled Task、Logging、Linting、Dependencies Scanning
-
之後 Frontend + Backend 每邊都做埋 Automated UI / Functional Test
-
然後 Frontend + Backend 都做好一個 Well-Tuned Dockerfile (Containerization) 俾 CI/CD
-
建立一個 CI(Continuous Integration) Server,行 Test Case 出 Test Report,做齊整個 Application 的 GitOps
-
喺 On-Premise Server 人肉 Configure 好 Kubernetes 或者用 Teraform 寫好要邊啲 Managed Service ,一鍵起好整個 Cloud Infrastructure
-
然後設定好一套 CD(Continuous Deployment) ,落 Tag 或者 Merge PR 會自動上不同 Isolated Environment 例如 SIT / UAT / Prod
-
駁通一啲 Debugging/Monitoring Tools,例如整套Backend Logging Architecture、Frontend Logging / Exception Tracing Tools
-
寫一個 Performance Testing 測試 Application 的穩定性,在不同環境下例如 Stress Test、Load Test、Smoke Test 的 Performance Report
-
Code Review 整個 Application 內 Frontend / Backend / DevOps 相關啲 Pull Request,大量地阻擋一啲 Security / Performance / Styles Consistency 問題 Merge 入 master branch
就係咁樣,可以一個人完成整個的 Vertical Implementation。
Full Stack Pros & Cons
Pros
- 減低 Communication overhead / errors - 由於能夠實淺 Vertical Implmentation,只需要有 Vertical Communication 就可以,我認為 Horizontal Communication 至少比起 Vertical Communication 多一個 Order of Magnitude,而人與人溝通要冇甩漏,就要花為時不短嘅時間落去做溝通,溝通包括 Draft Requirement、Code Review、Merge Conflict 等等⋯⋯
- 減少大部份未知因素 - 因為了解每個 Stack 有機會卡關的功能,相對地有效估算及安排時間
- 能設計出「Dev Ergonomic」的系統架構 - 因為了解每個 Stack 的限制及最佳做法,設計系統架構時可以一併完整地考慮,簡易地加速各個 Stack 的 Productivity
- 易走位 - Full Stack Developer 理論上有能力成為任何一個 Stack 的戰力,當 Project 十萬火急不容許 Vertical Implementation 時,隨時換不同位置作出貢獻。
Cons
- 難請 - 因為大部份 IT 公司的環境,從來都唔可能出到 Full Stack Developer;事關在公司在利益主導下,當一位同事好熟悉其中一個 Stack,其實亦代表,好難有空間用同一個人工俾你由零開始學習去做另一個 Stack。
- 難評估 - 要判斷一個 Full Stack Developer 的能力,除非本身已經有 Full Stack Developer Lead,否則要奢侈地集合幾方面的專才同時 Interview 才能判斷一個 Full Stack Developer 的能力。
- 難發生 Vertical Implementation - 基於難請的原因,公司要減低「依賴一個人」風險就不可能發生 Vertical Implementation,因為好難請到人頂替一個 Full Stack Developer 正在做的 Vertical Implementation。
Junior Full Stack Developer?
我認為「Full Stack」本身就代表具有多方面知識,唔存在 Junior Full Stack,應該用「Full Stack Development Trainee」去形容未達標準嘅人。
情況有如 Manager,唔會有人用「Junior XXX Manager」去請一個未做到 XXX Manager 責任嘅人去做,只會係 Management Trainee 跟 Manager 學嘢。
👋 Hi, I am also a Full Stack Development Trainee. (About 70% Progress?)
閱讀更多 - Full Stack Developer Roadmap