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