文章內容主要取材 Roadmap to becoming a web developer in 2019 ,結合個人經驗撰寫分析和總結。

作者 Kamran Ahmed 繪製了詳細的 Web 開發者技術路線圖,標識 Web 開發者在技術學習和成長過程中可能遇到或需要掌握的知識和技能。

作者提到,製作這份路線圖的目標是給讀者關於 Web 開發有一個整體且清晰的認識,尤其是當讀者感覺到困惑不知道接下來學習什麼。

但不鼓勵讀者挑著時髦和時尚的項目或技術進行學習。作為讀者,應該提升自己的認識,什麼工具在什麼場景下最適合,並不是最流行最時髦的技術對當前工作就是最佳的。

路線圖由簡至難,層層遞進。

本文適合於各個層次的 Web 開發者。

如果你是學生剛剛入門 Web 開發,能夠依據路線圖概覽技術路線的全貌;如果你已是熟練的 Web 開發者,也可以依據技術路線圖盤點自己的知識體系是否完善,及時填補遺漏的技能。

路線導航

  • Web 開發者的三個方向
  • 基礎技能
  • 前端開發者之路
  • 後端開發者之路
  • 技術運維者之路

Web 開發者的三個方向

進入2019年,Web 開發的技術方向可以劃分為三類:前端開發後端開發技術運維

在路線圖中方框顏色的含義:

- 黃色:推薦學習;

- 橙色:可以考慮掌握的可選擴展技能。

基礎技能

作為 Web 開發者,無論選擇哪條線路,都有一些技能點是必須掌握的:

  • Git 代碼版本管理與控制工具
  • Basic Terminal Usage 基本的終端命令使用
  • Data Structures & Algorithms 數據結構與演算法
  • SOLID,KISS, YANGI 一些設計原則和理念
  • GitHub 全球最大的面向開源及私有軟體項目的託管平台
  • Licenses 版權許可證
  • Semantic Versioning 版本語義編號
  • SSH 遠程連接協議及工具
  • HTTP/HTTPS and APIs Web開發中常用的通信協議和方式
  • Design Patterns 設計模式,指導編程的方法論
  • Character Encoding 字元編碼

這些基礎技能主要可以為分以下三類:

第一類是 常用工具,包括git命令的使用、基礎終端命令的使用、如何快速建立遠程連接等,都是日常工作中會遇到的。在沒有熟練掌握這些工具前,動作的緩慢可能會將編程效率拉低許多,但一旦熟練掌握,就能非常自然並嫻熟地使用它們提升工作效率。

第二類是 指導思想, 它不是能夠被清晰描述的,也不是一朝一夕能完全掌握的,卻潛移默化地影響著編程過程中的每一個行為。對於數據結構與演算法、設計原則和設計模式的使用,也需要結合當前業務場景進行具體的判斷。

第三類是 通用常識,指在 Web 開發過程中應該知曉的一些基本內容。對於這些概念,首先有一個簡單的了解,之後在編程經歷會反覆遇到的並不斷加深對其認識。比如對於字元編碼,多數國內 Web 開發人員都曾遇到 UTF-8GBK 編碼不一致導致內容顯示亂碼的情況;而進行到應用發布及版本控制時,自然會遇到並思考版權許可證和設定版本號相關的問題。

前端開發者的路線

前端開發的技術更新迭代速度很快。基於最基礎的 HTML+CSS+JavaScript ,衍生出許多關聯的技術和知識,前端開發者可以參考如下路徑逐步學習。

這張圖十分龐大,感興趣的讀者可以逐項分析並標識出自己掌握的部分及尚未掌握的部分,為後續的學習提供指導方向。

結合個人粗淺的前端開發經驗,簡單地總結學習如下:

  • 基礎的 HTML+CSS+JavaScript 語言
  • 依賴包管理器 npm、yarn
  • css樣式框架 Bootstrap、Bluma等
  • css預處理器、體系
  • 生成工具 ESLint、Gulp、Webpack等
  • 前端框架 三大主流框架 React、Vue、AngularJS
  • 測試方法 單元測試、集成測試、功能測試等
  • 進階功能 類型檢查,服務端渲染,靜態頁面生成等、WebAssembly
  • 目標應用 漸進式網頁應用,桌面應用、移動應用等

在上述過程中,每一項的學習都不是一蹴而就的,每一項都有很深的技術可以挖掘和學習。

對於基礎的 HTML+CSS+JavaScript,在掌握其基本語法的情況下,可以嘗試理解一些更加深刻的理論知識和通用工具,比如學習DOM操作的原理可以在優化複雜頁面渲染時有所幫助;

掌握包管理器的基本使用方式,是與其它開發者交流的必備技能,通常開源前端項目下載源碼後的第一個操作都是執行 npm intall 命令;

學習掌握一些css樣式框架,能夠幫助快速構建頁面,減少重複工具,直接使用前人的優秀成果。除了圖中列舉的 Bootstrap 和 Bulma 等框架,國內常用的框架還有 Element UI 、 iView 和 Ant Design 等。

生成工具的核心思想是自動化,幫助程序員自動完成代碼規範檢查、編譯代碼壓縮等流程,比如 Grunt 是一種任務運行器,可以通過添加腳本自定義配置代碼編譯生成過程中的任務,減少前端開發過程中重複的操作。

對於前端框架,不可避免要提及 React 、Vue 和 AngularJS 三大主流框架。三者各有優劣,對於前端開發者而言,通常要精通使用其中一種框架。在此前提下,可以對其餘框架稍微學習一些,以了解和學習其中不同/相同的設計思考和理念。

在一個項目中,測試是非常重要的組成部分。在規範的項目開發過程中,撰寫測試所花費的時間很可能多於實際功能的開發時間,但這是值得的。學習測試的基本概念以及一些測試工具的使用方式,在項目協作開發過程中將大有裨益。

對於剩餘的css預處理器和體系、進階功能及不同的目標應用,可依據實際需要進行學習。

對於上述路線圖中的內容,多數開發者可能僅了解或熟練掌握其中一部分內容,這並不是嚴重的問題。術業有專攻,作者列舉了一幅詳盡的前端開發路線圖,是為了概覽所有存在的知識點和技能。對於希望不斷提升自我的前端開發者而言,腦海中有這樣一張路線圖,不僅可以指導制定明確的學習計劃,更可以查缺補漏,根據實際情況及時填補自己當前不夠的技能樹。

後端開發者的路線

對於後端開發者而言,儘管技術更新速度略低於前端開發,但所需要掌握的知識點卻更廣闊、龐雜,上至基礎語言和框架,下至資料庫、緩存、伺服器搭建。

這張圖的內容非常詳盡,可以簡單總結如下:

  • 選擇一項語言 腳本語言/函數式語言/其它語言
  • 基礎的語言使用 PHP/Python/Java/...
  • 依賴包管理器 Composer/Pip/Maven
  • 掌握最佳的標準實踐方法
  • 製作並發布一個包或庫
  • 測試方法
  • 資料庫的學習和使用
  • 框架的學習和實踐
  • 緩存技術
  • 創建 RESTful API
  • 身份認證和驗證的方法
  • 消息隊列
  • 搜索引擎
  • 使用容器
  • Web 伺服器的相關知識
  • Web Sockets
  • 一些新技術 GraphQL,Graph Databases,……

可以看出,後端開發者所需要掌握的知識內容也是相當廣闊的,但後端開發者並不需要完全掌握圖中的所有知識體系和內容,才可以開始實踐後端開發。

作為後端開發的基礎,掌握一門語言及其對應的依賴包管理器和框架,是非常重要的。比如我個人習慣使用 PHP 語言,那麼使用的基礎技術棧是:

PHP(編程語言)

Composer(依賴包工具) Laravel (框架) MySQL(資料庫) PHPUnit(單元測試工具) Reids(緩存)

Nginx (Web伺服器)

至少這幾項知識的熟練掌握和使用,才能夠搭建並完成一個基礎的 RESTful API介面。

在此基礎上,可以根據需要進行各個知識點的學習和攻克。通過學習一些實踐標準(如PSR的概念)及依賴包的使用/製作/發布方式,可以幫助撰寫更規範的代碼;學習資料庫及緩存的知識,可以在持久化存儲及性能提升方面有所突破;身份認證、消息隊列和搜索引擎的使用可能與實際的業務場景相關;使用容器則可以幫助更方便地移植、發布自己的應用。

後端知識龐大而有序,職責分明,每個環節有不同的選項可供選擇。

要想成為一名優秀的後端工程師,如何平衡技能水平的深度和廣度或許是一個很糾結的問題。

技術運維者的路線

DevOps 這個概念可能對於許多人比較陌生,一般來說在外企工作的朋友也許會比較熟悉。

DevOps(Development和Operations的組合詞)是一組過程、方法與系統的統稱,用於促進開發(應用程序/軟體工程)、技術運營和質量保障(QA)部門之間的溝通、協作與整合。

它可以視為一種重視「軟體開發人員(Dev)」和「IT運維技術人員(Ops)」之間溝通合作的文化和思想。透過自動化「軟體交付」和「架構變更」的流程,來使得構建、測試、發布軟體能夠更加地快捷、頻繁和可靠。隨著軟體行業的發展,人們更加清晰地認識到:為了按時交付軟體產品和服務,開發和運營工作必須緊密合作。

上述路線圖可以簡單總結如下:

  • 選擇語言
  • 不同的操作系統
  • 學習管理伺服器 Linux、Unix、Windows
  • 在命令行下生存
  • 網路和安全
  • 搭建 Web 伺服器並各種相關運維技術
  • 基礎設施建設
  • 持續集成、自動部署工具
  • 監控
  • 雲服務提供

可以看到,技術運維所需要掌握的知識點與後端開發有很大一部分是重合的。這意味著技術運維並不是傳統意義上簡單的「執行、維修、管理」操作,而需要具備全局的眼光和戰略思想,確保當前軟體應用的平穩、高效運行。

技術運維最基礎的工具是運維的環境,即伺服器。在選擇特定的操作系統類型後,需要在命令行下逐步搭建出可靠、易用的運行環境,同時兼備安全性。比如在搭建一個 Web 伺服器時,不同於後端人員關注的代碼實現邏輯,技術運維人員更加側重於如何搭建及管理,其中可能需要使用到反向/正向代理、緩存伺服器、負載均衡、防火牆等知識技能,確保 Web 伺服器的正常運行。

在此基礎上,掌握持續集成和自動部署工具的使用,在團隊協作開發過程中對於整體項目進度的把控是及有幫助的。尤其是在微服務架構中,各種服務之間的依賴關係相當緊密,如果沒有持續集成和自動部署的控制,很可能出現底層服務崩潰影響到關聯項目開發停滯的情況。

對於技術運維人員而言,重要的是確保開發與部署的流程簡潔、方便,線上的服務高效、穩定,為 Web 應用的使用者提供最佳的用戶體驗。現在國內互聯網行業中的技術運維人員受到的關注暫時不夠,在一些小型創業公司中,簡單的技術運維工作通常是由後端開發者兼任的。

相信隨著技術的演進和行業和發展,技術運維人員的作用將會逐漸被重視起來,技術運維也將逐漸成為一個獨立、重要的職位存在。

總結

本篇文章是作者學習 Kamran Ahmed 的路線圖的心得及感受,感覺非常適合。

在學習任何領域的知識之前,如果具備這種全局視角概覽知識點和技術學習路線,對於此後的學習和提升是非常有幫助的。

對於筆者而言,目前選擇的方向更偏向於後端開發,發現路線圖中還有大半部分是自己所不了解的,頓時感覺有點心慌,趕緊抓緊時間學習去了。


參考資料:

kamranahmedse/developer-roadmap?

github.com圖標
推薦閱讀:

相关文章