簡評:以前,後端開發路線圖僅僅是一個技術推薦,且沒有明確的方向指明應該遵循的順序,這份從新制做的指南將會給你一個更好的方向。前端
如今的 Web 開發與幾年前徹底不一樣了,有不少不一樣的東西能夠輕易地把人拒之門外,這也是咱們決定製做這個按部就班指南的緣由之一,並讓任何人能夠清楚地瞭解他們在 web 開發中扮演的角色。web
能夠在下面的圖片中找到詳細的路線圖,而我也將在下面的描述中解釋每個步驟。sql
在開始以前,雖然咱們沒有在下面的路線圖中列出 HTML / CSS 的知識,但建議讀者至少要了解一些基本的 HTML / CSS 知識。docker
語言有不少選擇,我已經將它們分紅幾類,以便更容易作出決定。對於剛開始進入後端開發的初學者,我建議你選擇任何腳本語言,由於它們有不少功能,可讓你快速起步。若是你有一些前端知識,你可能會發現 Node.js 更容易(還有一個很大的就業市場)。數據庫
若是你已是後端開發並瞭解一些腳本語言,我建議不要選擇其餘腳本語言,而是從「函數式(Functional)」或「多範式(Multiparadigm)」中選擇。例如,若是你已經在使用 PHP 或Node.js,請不要使用 Python 或 Ruby,而應該嘗試使用 Erlang 或 Golang。它必定會幫助你延伸思惟,並將你的思想帶到新的視野。json
沒有比實踐更好的學習方式了。一旦你選擇了語言,而且對這些概念有了基本的瞭解,就可使用它們,盡你所能製做儘量多的小應用。下面是一些讓你開始的 Idea:後端
/r/programming
文章的命令,並保存爲 JSON;瞭解該語言的基礎知識並製做了一些示例應用以後,須要瞭解如何使用該語言的軟件包管理器,包管理器可幫助在應用程序中使用外部庫,並分發你本身的庫供其餘人使用。api
若是你選擇了 PHP,你將學習的是 Composer,Node.js 有 NPM 或 Yarn,Python 有 Pip,Ruby 有 RubyGems。不管選擇什麼,請繼續學習如何使用其包管理器。緩存
每種語言都有本身的標準和開發的最佳實踐,例如 PHP 有 PHP-FIG 和 PSR,使用 Node.js 有許多不一樣的社區驅動指南,其餘語言也有相同的指導。安全
請務必閱讀有關安全的最佳實踐,閱讀 OWASP 指南並瞭解不一樣的安全問題以及如何以選擇的語言避免它們。
你已經掌握了語言、標準和最佳實踐的基礎知識,安全性以及如何使用軟件包管理器。如今開始建立一個包並分發給其餘人使用,並確保遵循迄今爲止學到的標準和最佳實踐。例如,若是您選擇了 PHP,那麼能夠在 Packagist 上發佈,若是選擇了Node.js,那麼能夠在 Npm 上發佈,等等。
若是完成了,在 Github 上搜索一些項目,並在某些項目中提一些 PR。下面是一些 Idea:
瞭解如何在應用程序中編寫單元測試和集成測試,另外,瞭解不一樣的測試術語,如mocks
, stubs
等
爲目前爲止所作的實際任務編寫單元測試,尤爲是步驟 6 中所作的練習。還要學習和計算編寫的測試的覆蓋率。
瞭解如何將數據保存在關係數據庫中。在選擇要學習的工具以前,請先了解不一樣的數據庫術語,例如鍵,索引,規範化,元組等。
這裏有幾個選項,但若是你學習一個,其的應該也是至關容易去學。你想學習的應該是 MySQL,MariaDB 和 PostgreSQL。能夠選擇 MySQL。
如今是時候把學到的東西拿來用了,使用迄今爲止學到的全部內容建立一個簡單的應用程序。選擇任何一個 idea,能夠是建立一個簡單的博客,並實現其中的如下功能:
根據選擇的項目和語言,可能須要也可能不須要框架。每種語言都有幾個不一樣的選項,繼續看看選擇的語言有哪些選項可供選擇,而後選擇一個。
若是選擇了 PHP,我會建議使用 Laravel 或 Symfony 以及微架構(Lumen 或 Slim),若是你選擇 Node.js,有幾種不一樣的選擇,但突出的是 Express.js。
將 step10 中建立的應用程序轉換爲使用選擇的框架,還要確保移植包括測試在內的全部內容。
首先了解它們是什麼,它們與關係數據庫有什麼不一樣以及爲何須要它們。 有幾種不一樣的選擇,稍微研究下看看,並比較它們的特色和差別。 能夠選擇的一些經常使用選項有 MongoDB,Cassandra,RethinkDB 和 Couchbase,若是必須選擇一個,請使用 MongoDB。
瞭解如何在應用程序中實現應用程序級緩存,瞭解如何使用 Redis 或 Memcached,並在 step 12 中建立的應用程序中使用緩存。
瞭解 REST 並學習如何製做 RESTful API,在 Roy Fielding 的文章中閱讀關於 REST 的部分,若是他們說 REST 只適用於 HTTP API,那麼確保你可以與他人爭論。
瞭解不一樣的認證和認證方法,你應該知道他們是什麼,有什麼不一樣以及何時使用偏好。
瞭解消息代理並瞭解什麼時候以及爲什麼使用它們。一樣有多種選擇,但突出的是 RabbitMQ 和Kafka,若是你想選擇一個的話,能夠先從 RabbitMQ 開始。
隨着應用程序的增加,關係數據庫或 NoSQL 數據庫的簡單查詢不可以知足要求,而不得不求助於搜索引擎。
不管是在複製與生產環境相同的環境,保持操做系統清潔或加快編碼、測試或部署,Docker 能夠在開發過程當中大大方便工做,學習如何使用 Docker。
若是你已經走到這麼遠了,你可能已經在前面的步驟中使用了服務器,這一步主要是找出不一樣Web 服務器之間的差別,瞭解限制和不一樣的可用配置選項,以及如何最好地利用這些限制編寫應用程序。
雖然不是必需的,但在工具帶中有這些知識是有益的,學習如何使用 web-sockets 編寫實時Web 應用程序並使用它建立一些示例應用程序。能夠在上面製做的博客應用程序中使用它來實現博客文章列表中的實時更新。
學習如何使用 GraphQL 製做 API,瞭解它與 REST 的不一樣之處,以及它爲何被稱爲 REST 2.0。
圖模型表明了一種很是靈活的處理數據關係的方式,圖數據庫爲其提供了快速高效的存儲、檢索和查詢方式,學習如何使用 Neo4j 或 OrientDB。
一旦你開始學習和練習,你必定會遇到咱們在這個路線圖中沒有涉及的東西,只要保持開放的心態和對新事物的渴望就好。
關鍵是要儘量多地練習,起初你可能會以爲你並無抓住任何東西,但這是正常的,隨着時間的推移,你會以爲愈來愈好。
原文:https://medium.com/tech-tajawal/modern-backend-developer-in-2018-6b3f7b5f8b9
譯文:https://zhuanlan.zhihu.com/p/35620194