2018年,如何成爲現代化的後端開發者

file
現在的網站開發與幾年前的徹底不同了; 如今有不少讓網站開發者感到困惑的東西。 這是咱們決定作路線圖指南  step by step visual guides demonstrating the bigger picture 的緣由之一,並讓每一個人清楚的知道應該在網站開發中處於何種角色。

一週之前, 咱們發表了一篇文章 Modern Frontend Developer in 2018 ,咱們承諾了爲後端和DevOps發佈最新的路線圖。如今履行承諾, 這篇文章是關於現代後端開發者的。 若是你尚未查看前端開發者路線圖的話,去看一下吧。前端

以前的後端路線圖只是一個純粹的技術推薦,沒有明確的方向和應該遵循的順序。因此咱們像前端路線圖那樣從新繪製了它,讓它能夠一步一步的引導以給你一個更好的建議。laravel

咱們如今在爲 DevOps 努力繪製路線圖,並有但願在下週發佈。屆時,咱們也將會發布一篇與之相關的文章, 在這裏 link to the repository 你能夠查看最新的更新狀況。git

言歸正傳,讓咱們開始吧。你能夠在下圖中看到詳細的路線圖,同時我也將在後面的描述中解釋每一步。github

file

中文圖片來自 developer-roadmap-chinese 讓咱們把它分解一下並在下面的部分對每一步進行解釋。數據庫

在咱們開始以前, 儘管咱們沒有把 HTML/CSS 的相關知識列在路線圖上面,可是建議你至少了解一點而且知道怎麼編寫一些基本的 HTML/CSS。編程

第 1 步:學習一門語言

當咱們談到語言時,你會有無數種選擇。爲了方便你作決定,我把它們分紅幾類。對於剛開始進入後端開發的初學者,我建議你隨便選一門腳本語言去學,它們都有大量的需求,也能讓你很快地成長。若是你已經有了前端開發的一些知識,你可能會發現 Node.js 會比較容易,再加上它有很大的就業市場。json

若是你已經開始作後端開發的工做而且已經掌握了一門腳本語言,我建議你不要去再學習一門新的語言了,而是挑選「功能(Functional)」和「多範例(Multiparadigm)」的一些內容去學。舉個例子,若是你已經在用 PHP 或者 Node.js 開發了,不須要再學 Python 或者 Ruby,而是去嘗試 Erlang 或者 Golang。這必定會幫助你擴展思惟、開闊眼界。後端

第 2 步:練習你所學

沒有比練習更好的學習方式了。當你學習了你的語言而且對它的概念有了最基本的理解時,請把它們應用到實踐。要作儘量多的小應用。下面只是一些能讓你開始的想法:緩存

  • 實現你在 bash 中運行的一些命令。例如,嘗試去實現 ls 的功能。
  • 寫一個命令,從 /r/programming 獲取 reddit posts 並用 JSON 文件的格式保存。
  • 寫一個命令,用 JSON 格式表示一個目錄的結構。例如,jsonify dir-name 可以給你一個帶有 dir-name 內部結構的 JSON 文件。
  • 寫一個命令,可以讀取上面步驟的 JSON 文件,而且建立這樣的目錄結構。
  • 考慮一些你天天作的事情,而且嘗試讓它們自動完成。

第 3 步:學習包管理器

一旦你已經有了語言基礎,而且作過了一些示例程序,那麼你就該爲選擇的語言學習使用包管理器。包管理器能夠幫助你在你的應用中使用外部的庫或者發佈你本身的庫以供他人使用。安全

若是你選擇了 PHP,你就必須學習 Composer。Node.js 則有 NPM,Python 有 Pip,以及 Ruby 有 RubyGems。不管你選擇了哪種語言,都應該進一步學習如何使用它的包管理器。

第 4 步:標準和最佳實踐

每一門語言都有本身的標準和最佳實踐。爲你選擇的語言學習它們。好比 PHP 有 PHP-FIG 和 PSR 規範, Node.js 則有不少不一樣的社區驅動指南,其餘語言也是如此。

第 5 步:安全

務必閱讀安全方面的最佳作法。閱讀 OWASP 指南,瞭解不一樣的安全問題並在您選擇的語言中規避它們。

第 6 步:練習

如今你已經知道了語言基礎、標準和最佳實踐、安全以及怎麼使用包管理器。如今開始建立一個包併發布給他人使用,而後確認遵循了你目前學習到的標準和最佳實踐。例如,若是選擇了 PHP,你能夠把它發佈到 Packagist 上;若是選擇了 Node.js,你能夠把它發佈到 NPM Registry 上,等等。

若是你已經作完了這些,請在 Github 上搜索一些項目併發起 Pull 請求。對此的一些想法,有:

  • 重構並實現你學到的最佳實踐
  • 研究公開的 Issues 並嘗試解決
  • 添加其餘的附加功能

第 7 步:學習測試

有幾種用來測試的不一樣測試類型。瞭解這些類型各自的意圖。但如今先學習如何編寫單元測試和集成測試。此外,瞭解不一樣的測試術語,好比 Mocks,Stubs 等等。

第 8 步:實踐

至於實踐, 請繼續編寫你已經完成任務的單元測試,尤爲是在第 6 步中所作的練習。

還要學習和計算你所寫測試的覆蓋率。

第 9 步:學習關係型數據庫

學習如何將你的數據持久化到數據庫。在你選擇要學習的工具以前,先理解一些數據庫的術語,好比說鍵,索引,範式,元組等等。

數據庫在這裏有一些選擇。若是你學會了一個數據庫,其餘的數據庫也學起來比較容易。你想學習的數據庫有 MySQL,MariaDB (大部分相同而且是 MySQL 數據庫的一個分支),PostgreSQL 。你能夠選擇 MySQL 開始學習。

第 10 步:實戰的時間

是時候把你目前所學的一切,去實際中應用了。

建立一個簡單的應用程序,把你目前所學的知識都用到這個應用裏面去。能夠選擇任何想法去實現,也可能就是建立一個 blog 去實現下面提到的功能點

  • 用戶帳號管理--- 註冊和登錄
  • 已經註冊的用戶能夠發表博客
  • 用戶能夠瀏覽本身發佈的全部博客
  • 用戶能夠刪除本身的博客
  • 確保用戶只可以看到本身我的的博客並且不能看到其餘人的
  • 編寫應用程序的單元/集成測試
  • 你應該爲一些查詢數據添加索引。分析查詢語句確保有用到索引。

第 11 步:學習一款框架

根據你選擇的項目和語言,你可能須要一款框架。每一門語言對此都有幾個不一樣的選擇,繼續來看你所選擇的語言有哪些可選的框架,而後從中挑選一個。

若是你選擇了 PHP,那麼我建議你使用 Laravel 或者 Symfony 以及微框架 Lumen 或 Slim。若是你選擇了 Node.js,將會有幾個不一樣的選擇,但比較好的是 Express.js。

第 12 步:練習時間

爲了實現這一步,請用你選擇的框架對你在第 10 步完成的應用進行重構。並確認移植了一切內容,包括測試。

第 13 步:學習一款 NoSQL 型數據庫

首先要理解它們是什麼,它們與關係型數據庫有什麼不一樣,以及爲何須要它們。這裏有幾個不一樣的選擇,研究看看它們的特色和差別。一些常見的選擇是 MongoDB,Cassandra,RethinkDB 和 Couchbase。若是你必須選擇一個,請從 MongoDB 開始。

第 14 步:緩存

學習在你的應用程序中實現應用級緩存。瞭解怎樣使用 Redis 或 Memcached 並對你在第 12 步中構建的應用實現緩存。

第 15 步:建立 RESTful API

瞭解 REST 和學習如何建立 RESTful API,請務必從 Roy Fielding 的原始文章中閱讀 REST 相關部分。而後能夠確認,若是有人說 REST 只是 HTTP API,你將可以與他們爭論。

第 16 步 : 學習不一樣的認證方法

學習不一樣的認證和受權方法,你應該知道他們的不一樣和優劣,何時更適合用什麼方式去實現。

  • OAuth  ---  開發認證
  • HTTP Basic 認證
  • Token 認證
  • JWT --- JSON Web Tokens 認證
  • OpenID

第 17 步:消息訂閱發佈系統

理解各類消息訂閱發佈系統,知道何時什麼場景適合用什麼技術,如今有不少種技術能夠選擇,最突出的是 RabbitMQ 和 Kafka,你能夠先開始學習 RabbitMQ 或者 Kafka。

第 18 步 : 搜索引擎

隨着應用程序的增加,對關係數據庫或者 NoSQL 數據庫簡單的查詢已經沒法知足你的需求,因此你不得不求助於搜索引擎。對於搜索引擎咱們有不少種不一樣的選擇,而且每一種都有它本身的特性。

第 19 步  :學習如何使用 Docker

Docker能夠極大的促進你的開發,不管是複製與生產環境相同的環境,保持操做系統的整潔仍是加快編碼、測試或部署的速度。我將把 「 它將如何幫助我 」 的答案留給大家去搜索。在這一步中,繼續學習和如何使用 Docker。

第 20 步:Web 服務器知識

若是你已經學到了這裏,你可能已經在前面的步驟中使用過服務器了 。這一步的主要任務是找出不一樣 Web 服務器之間的差別,瞭解服務器的一些限制以及不一樣的服務器的可用配置,最後最大限度的利用這些限制去編程。

第 21 步:學習如何使用 Web Sockets

Web Socket 不是必需要掌握的,在你的知識庫中有這些知識,對你來講是頗有好處的。學習如何使用 Web-sockets 編寫實時 Web 應用程序並使用它建立一些示例應用程序。你能夠用在 blog 的應用程序中,實現 blog文章列表的實時更新。

第 22 步:學習 GraphQL

學習如何利用 GraphQL 建立 API 。理解 REST 和 GraphQL 的不一樣,以及爲何 GraphQL 被稱做 REST 2.0 。

第 23 步:研究 圖形數據庫

圖模型表明了一個很是靈活的處理數據關係的方式, 而且圖形數據庫爲它提供了快速高效的存儲,恢復和查詢 。 去學習一下怎麼使用 Neo4j 或者 OrientDB 吧。

第 24 步: 持續探索

一旦你開始了學習和練習,你必然的會遇到一些不在路線圖裏面的事物。不過只要對學習新事物保持一個開放的心態和積極的興趣就好。

記住,關鍵是盡你所能的去練習。剛開始會看起來很嚇人,你可能會以爲對全部東西都不理解,可是這是正常的,隨着時間的推移,你會感受好一點的。

就這樣, 這篇文章到這就結束了。 你能夠在 twitter 和我作朋友,或者經過郵件 email和我聯繫。固然也別忘了去 watch the repository 查看將來的一些更新。 請繼續關注!

轉自 PHP / Laravel 開發者社區 laravel-china.org/topics/1339…

相關文章
相關標籤/搜索