現在的 Web 開發與幾年前完全不同了,有很多不同的東西可以輕易地把人拒之門外,這也是我們決定製作這個循序漸進指南的原因之一,並讓任何人可以清楚地瞭解他們在 web 開發中扮演的角色。
可以在下面的圖片中找到詳細的路線圖,而我也將在下面的描述中解釋每一個步驟。
在開始之前,雖然我們沒有在下面的路線圖中列出 HTML / CSS 的知識,但建議讀者至少要瞭解一些基本的 HTML / CSS 知識。
Step 1 —— 學習一門語言(Learn a Language)
語言有很多選擇,我已經將它們分成幾類,以便更容易做出決定。對於剛開始進入後端開發的初學者,我建議你選擇任何指令碼語言,因為它們有很多功能,可以讓你快速起步。如果你有一些前端知識,你可能會發現 Node.js 更容易(還有一個很大的就業市場)。
如果你已經是後端開發並瞭解一些指令碼語言,我建議不要選擇其他指令碼語言,而是從「函數式(Functional)」或「多範式(Multiparadigm)」中選擇。例如,如果你已經在使用 PHP 或Node.js,請不要使用 Python 或 Ruby,而應該嘗試使用 Erlang 或 Golang。它一定會協助你延伸思維,並將你的思想帶到新的視野。
Step 2 —— 練習你學到的東西(Practice what you have Learnt)
沒有比實踐更好的學習方式了。一旦你選擇了語言,並且對這些概念有了基本的瞭解,就可以使用它們,盡你所能製作儘可能多的小應用。下面是一些讓你開始的 Idea:
在 bash 中實現一些你自己使用的命令,比如嘗試實現 ls;
編寫一個擷取和儲存 reddit 上 /r/programming 文章的命令,並儲存為 JSON;
編寫一個以 JSON 格式列出目錄結構的命令,例如 jsonify dir-name 返回一個帶有 dir-name 內部結構的 JSON 檔案;
編寫一個讀取從上面的步驟得到的 JSON 的命令,並建立目錄結構;
考慮將每天做的一些任務,並嘗試將其自動化。
Step 3 —— 學習軟體包管理器(Learn Package Manager)
瞭解該語言的基礎知識並製作了一些樣本應用之後,需要瞭解如何使用該語言的軟體包管理器,包管理器可協助在應用程式中使用外部庫,並分發你自己的庫供其他人使用。
如果你選擇了 PHP,你將學習的是 Composer,Node.js 有 NPM 或 Yarn,Python 有 Pip,Ruby 有 RubyGems。無論選擇什麼,請繼續學習如何使用其包管理器。
Step 4 —— 標準和最佳實務 ( Standards and Best Practices)
每種語言都有自己的標準和開發的最佳實務,例如 PHP 有 PHP-FIG 和 PSR,使用 Node.js 有許多不同的社區驅動指南,其他語言也有相同的指導。
Step 5 —— 安全(Security)
請務必閱讀有關安全的最佳實務,閱讀 OWASP 指南並瞭解不同的安全問題以及如何以選擇的語言避免它們。
Step 6 —— 實踐(Practice)
你已經掌握了語言、標準和最佳實務的基礎知識,安全性以及如何使用軟體包管理器。現在開始建立一個包並分發給其他人使用,並確保遵循迄今為止學到的標準和最佳實務。例如,如果您選擇了 PHP,那麼可以在 Packagist 上發布,如果選擇了Node.js,那麼可以在 Npm 上發布,等等。
如果完成了,在 Github 上搜尋一些項目,並在某些項目中提一些 PR。下面是一些 Idea:
重構並實現學到的最佳實務
查看未解決的 issue 並嘗試解決
添加任何附加功能
Step 7 —— 瞭解測試(Learn about Testing)
瞭解如何在應用程式中編寫單元測試和整合測試,另外,瞭解不同的測試術語,如mocks, stubs 等
Step 8 —— 練習(Practical)
為目前為止所做的實際任務編寫單元測試,尤其是步驟 6 中所做的練習。還要學習和計算編寫的測試的覆蓋率。
Step 9 —— 瞭解關聯式資料庫(Learn about the Relational Databases)
瞭解如何將資料儲存在關聯式資料庫中。在選擇要學習的工具之前,請先瞭解不同的資料庫術語,例如鍵,索引,正常化,元組等。
這裡有幾個選項,但如果你學習一個,其的應該也是相當容易去學。你想學習的應該是 MySQL,MariaDB 和 PostgreSQL。可以選擇 MySQL。
Step 10 —— Practical Time
現在是時候把學到的東西拿來用了,使用迄今為止學到的所有內容建立一個簡單的應用程式。選擇任何一個 idea,可以是建立一個簡單的部落格,並實現其中的以下功能:
使用者帳戶 —— 註冊和登入
註冊使用者可以建立部落格文章
使用者應該能夠查看他建立的所有部落格文章
使用者應該能夠刪除他們的部落格文章
確保使用者只能看到他的個人部落格文章(而不能看其他人的)
編寫單元/整合測試
應該為查詢應用索引,分析查詢以確保索引有作用。
Step 11 —— 學習架構( Learn a Framework)
根據選擇的項目和語言,可能需要也可能不需要架構。每種語言都有幾個不同的選項,繼續看看選擇的語言有哪些選項可供選擇,然後選擇一個。
如果選擇了 PHP,我會建議使用 Laravel 或 Symfony 以及微架構(Lumen 或 Slim),如果你選擇 Node.js,有幾種不同的選擇,但突出的是 Express.js。
Step 12 —— Practical Time
將 step10 中建立的應用程式轉換為使用選擇的架構,還要確保移植包括測試在內的所有內容。
Step 13 —— 學習 NoSQL 資料庫(Learn a NoSQL Database)
首先瞭解它們是什麼,它們與關聯式資料庫有什麼不同以及為什麼需要它們。 有幾種不同的選擇,稍微研究下看看,並比較它們的特點和差異。 可以選擇的一些常用選項有 MongoDB,Cassandra,RethinkDB 和 Couchbase,如果必須選擇一個,請使用 MongoDB。
Step 14 —— 緩衝(Caching)
瞭解如何在應用程式中實現應用程式級緩衝,瞭解如何使用 Redis 或 Memcached,並在 step 12 中建立的應用程式中使用緩衝。
Step 15 —— 建立 RESTful API(Creating RESTful APIs)
瞭解 REST 並學習如何製作 RESTful API,在 Roy Fielding 的文章中閱讀關於 REST 的部分,如果他們說 REST 只適用於 HTTP API,那麼確保你能夠與他人爭論。
Step 16 —— 瞭解不同的認證方法(Learn about Different Auth Methods)
瞭解不同的認證和認證方法,你應該知道他們是什麼,有什麼不同以及什麼時候使用偏好。
OAuth — Open Authentication
Basic Authentication
Token Authentication
JWT — JSON Web Tokens
OpenID
Step 17 —— 訊息代理(Message Brokers)
瞭解訊息代理並瞭解何時以及為何使用它們。同樣有多種選擇,但突出的是 RabbitMQ 和Kafka,如果你想選擇一個的話,可以先從 RabbitMQ 開始。
Step 18 —— 搜尋引擎(Search Engines)
隨著應用程式的增長,關聯式資料庫或 NoSQL 資料庫的簡單查詢不能夠滿足要求,而不得不求助於搜尋引擎。
Step 19 —— 瞭解如何使用Docker( Learn how to use Docker)
無論是在複製與生產環境相同的環境,保持作業系統清潔或加快編碼、測試或部署,Docker 可以在開發過程中大大方便工作,學習如何使用 Docker。
Step 20 —— Web 服務器知識(Knowledge of Web Servers)
如果你已經走到這麼遠了,你可能已經在前面的步驟中使用了伺服器,這一步主要是找出不同Web 服務器之間的差異,瞭解限制和不同的可用配置選項,以及如何最好地利用這些限制編寫應用程式。
Step 21 —— 瞭解如何使用Web Scoket(Learn how to use Web Sockets)
雖然不是必需的,但在工具帶中有這些知識是有益的,學習如何使用 web-sockets 編寫即時Web 應用程式並使用它建立一些應用程式範例。可以在上面製作的部落格應用程式中使用它來實現部落格文章列表中的即時更新。
Step 22 —— 學習 GraphQL(Learn GraphQL)
學習如何使用 GraphQL 製作 API,瞭解它與 REST 的不同之處,以及它為什麼被稱為 REST 2.0。
Step 23 —— 看看圖資料庫(Look into Graph Databases)
圖模型代表了一種非常靈活的處理資料關係的方式,圖資料庫為其提供了快速高效的儲存、檢索和查詢方式,學習如何使用 Neo4j 或 OrientDB。
Step 24 —— 繼續探索(Keep Exploring)
一旦你開始學習和練習,你一定會遇到我們在這個路線圖中沒有涉及的東西,只要保持開放的心態和對新事物的渴望就好。
關鍵是要儘可能多地練習,起初你可能會覺得你並沒有抓住任何東西,但這是正常的,隨著時間的推移,你會覺得越來越好。
這裡推薦一個大資料學習交流群:806025609,群裡都是學大資料開發的,如果你正在學習大資料 ,歡迎你加入,群內還會不定期分享乾貨(只有大資料軟體開發相關的),進群即可擷取一份免費大資料學習資料~