后端開(kāi)發(fā)人員的所需的技術(shù)路線圖,看看哪些模塊你還缺失?

歡迎關(guān)注文章系列 ,關(guān)注我
《提升能力,漲薪可待》
《面試知識(shí),工作可待》
《實(shí)戰(zhàn)演練,拒絕996》
也歡迎關(guān)注我的公 眾 號(hào):Ccww筆記,原創(chuàng)內(nèi)容第一時(shí)間推送?。?br> 如果此文對(duì)你有幫助、喜歡的話,那就點(diǎn)個(gè)贊唄,點(diǎn)個(gè)關(guān)注唄!

現(xiàn)在的 Web 開(kāi)發(fā)與幾年前完全不同了,有很多不同的東西可以輕易地把人拒之門外,這也是我們決定制作這個(gè)循序漸進(jìn)指南的原因之一,并讓任何人可以清楚地了解他們?cè)?web 開(kāi)發(fā)中扮演的角色。

可以在下面的圖片中找到詳細(xì)的路線圖,而我也將在下面的描述中解釋每一個(gè)步驟。

在開(kāi)始之前,雖然我們沒(méi)有在下面的路線圖中列出 HTML / CSS 的知識(shí),但建議讀者至少要了解一些基本的 HTML / CSS 知識(shí)。

image

Step 1 —— 學(xué)習(xí)一門語(yǔ)言(Learn a Language)

語(yǔ)言有很多選擇,我已經(jīng)將它們分成幾類,以便更容易做出決定。對(duì)于剛開(kāi)始進(jìn)入后端開(kāi)發(fā)的初學(xué)者,我建議你選擇任何腳本語(yǔ)言,因?yàn)樗鼈冇泻芏喙δ?,可以讓你快速起步。如果你有一些前端知識(shí),你可能會(huì)發(fā)現(xiàn) Node.js 更容易(還有一個(gè)很大的就業(yè)市場(chǎng))。

如果你已經(jīng)是后端開(kāi)發(fā)并了解一些腳本語(yǔ)言,我建議不要選擇其他腳本語(yǔ)言,而是從「函數(shù)式(Functional)」或「多范式(Multiparadigm)」中選擇。例如,如果你已經(jīng)在使用 PHP 或Node.js,請(qǐng)不要使用 Python 或 Ruby,而應(yīng)該嘗試使用 Erlang 或 Golang。它一定會(huì)幫助你延伸思維,并將你的思想帶到新的視野。

Step 2 —— 練習(xí)你學(xué)到的東西(Practice what you have Learnt)

沒(méi)有比實(shí)踐更好的學(xué)習(xí)方式了。一旦你選擇了語(yǔ)言,并且對(duì)這些概念有了基本的了解,就可以使用它們,盡你所能制作盡可能多的小應(yīng)用。下面是一些讓你開(kāi)始的 Idea:

  • 在 bash 中實(shí)現(xiàn)一些你自己使用的命令,比如嘗試實(shí)現(xiàn) ls;
  • 編寫(xiě)一個(gè)獲取和保存 reddit 上 /r/programming 文章的命令,并保存為 JSON;
  • 編寫(xiě)一個(gè)以 JSON 格式列出目錄結(jié)構(gòu)的命令,例如 jsonify dir-name 返回一個(gè)帶有 dir-name 內(nèi)部結(jié)構(gòu)的 JSON 文件;
  • 編寫(xiě)一個(gè)讀取從上面的步驟得到的 JSON 的命令,并創(chuàng)建目錄結(jié)構(gòu);
  • 考慮將每天做的一些任務(wù),并嘗試將其自動(dòng)化。

Step 3 —— 學(xué)習(xí)軟件包管理器(Learn Package Manager)

了解該語(yǔ)言的基礎(chǔ)知識(shí)并制作了一些示例應(yīng)用之后,需要了解如何使用該語(yǔ)言的軟件包管理器,包管理器可幫助在應(yīng)用程序中使用外部庫(kù),并分發(fā)你自己的庫(kù)供其他人使用。

如果你選擇了 PHP,你將學(xué)習(xí)的是 Composer,Node.js 有 NPM 或 Yarn,Python 有 Pip,Ruby 有 RubyGems。無(wú)論選擇什么,請(qǐng)繼續(xù)學(xué)習(xí)如何使用其包管理器。

Step 4 —— 標(biāo)準(zhǔn)和最佳實(shí)踐 (?Standards and Best Practices)

每種語(yǔ)言都有自己的標(biāo)準(zhǔn)和開(kāi)發(fā)的最佳實(shí)踐,例如 PHP 有 PHP-FIG 和 PSR,使用 Node.js 有許多不同的社區(qū)驅(qū)動(dòng)指南,其他語(yǔ)言也有相同的指導(dǎo)。

Step 5 —— 安全(Security)

請(qǐng)務(wù)必閱讀有關(guān)安全的最佳實(shí)踐,閱讀 OWASP 指南并了解不同的安全問(wèn)題以及如何以選擇的語(yǔ)言避免它們。

Step 6 —— 實(shí)踐(Practice)

你已經(jīng)掌握了語(yǔ)言、標(biāo)準(zhǔn)和最佳實(shí)踐的基礎(chǔ)知識(shí),安全性以及如何使用軟件包管理器。現(xiàn)在開(kāi)始創(chuàng)建一個(gè)包并分發(fā)給其他人使用,并確保遵循迄今為止學(xué)到的標(biāo)準(zhǔn)和最佳實(shí)踐。例如,如果您選擇了 PHP,那么可以在 Packagist 上發(fā)布,如果選擇了Node.js,那么可以在 Npm 上發(fā)布,等等。

如果完成了,在 Github 上搜索一些項(xiàng)目,并在某些項(xiàng)目中提一些 PR。下面是一些 Idea:

  • 重構(gòu)并實(shí)現(xiàn)學(xué)到的最佳實(shí)踐
  • 查看未解決的 issue 并嘗試解決
  • 添加任何附加功能

Step 7 —— 了解測(cè)試(Learn about Testing)

了解如何在應(yīng)用程序中編寫(xiě)單元測(cè)試和集成測(cè)試,另外,了解不同的測(cè)試術(shù)語(yǔ),如mocks, stubs 等

Step 8 —— 練習(xí)(Practical)

為目前為止所做的實(shí)際任務(wù)編寫(xiě)單元測(cè)試,尤其是步驟 6 中所做的練習(xí)。還要學(xué)習(xí)和計(jì)算編寫(xiě)的測(cè)試的覆蓋率。

Step 9 —— 了解關(guān)系數(shù)據(jù)庫(kù)(Learn about the Relational Databases)

了解如何將數(shù)據(jù)保存在關(guān)系數(shù)據(jù)庫(kù)中。在選擇要學(xué)習(xí)的工具之前,請(qǐng)先了解不同的數(shù)據(jù)庫(kù)術(shù)語(yǔ),例如鍵,索引,規(guī)范化,元組等。

這里有幾個(gè)選項(xiàng),但如果你學(xué)習(xí)一個(gè),其的應(yīng)該也是相當(dāng)容易去學(xué)。你想學(xué)習(xí)的應(yīng)該是 MySQL,MariaDB 和 PostgreSQL??梢赃x擇 MySQL。

Step 10 —— Practical Time

現(xiàn)在是時(shí)候把學(xué)到的東西拿來(lái)用了,使用迄今為止學(xué)到的所有內(nèi)容創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序。選擇任何一個(gè) idea,可以是創(chuàng)建一個(gè)簡(jiǎn)單的博客,并實(shí)現(xiàn)其中的以下功能:

  • 用戶帳戶 —— 注冊(cè)和登錄
  • 注冊(cè)用戶可以創(chuàng)建博客文章
  • 用戶應(yīng)該能夠查看他創(chuàng)建的所有博客文章
  • 用戶應(yīng)該能夠刪除他們的博客文章
  • 確保用戶只能看到他的個(gè)人博客文章(而不能看其他人的)
  • 編寫(xiě)單元/集成測(cè)試
  • 應(yīng)該為查詢應(yīng)用索引,分析查詢以確保索引有作用。

Step 11 —— 學(xué)習(xí)框架(?Learn a Framework)

根據(jù)選擇的項(xiàng)目和語(yǔ)言,可能需要也可能不需要框架。每種語(yǔ)言都有幾個(gè)不同的選項(xiàng),繼續(xù)看看選擇的語(yǔ)言有哪些選項(xiàng)可供選擇,然后選擇一個(gè)。

如果選擇了Java,我會(huì)建議使用 spring或 spring boot以及spring cloud微架構(gòu),如果你選擇 Node.js,有幾種不同的選擇,但突出的是 Express.js。

Step 12 —— ?Practical Time

將 step10 中創(chuàng)建的應(yīng)用程序轉(zhuǎn)換為使用選擇的框架,還要確保移植包括測(cè)試在內(nèi)的所有內(nèi)容。

Step 13 —— 學(xué)習(xí) NoSQL 數(shù)據(jù)庫(kù)(Learn a NoSQL Database)

首先了解它們是什么,它們與關(guān)系數(shù)據(jù)庫(kù)有什么不同以及為什么需要它們。 有幾種不同的選擇,稍微研究下看看,并比較它們的特點(diǎn)和差異。 可以選擇的一些常用選項(xiàng)有 MongoDB,Redis,Cassandra,RethinkDB 和 Couchbase,如果必須選擇一個(gè),請(qǐng)使用 MongoDB。

Step 14 —— 緩存(Caching)

了解如何在應(yīng)用程序中實(shí)現(xiàn)應(yīng)用程序級(jí)緩存,了解如何使用 Redis 或 Memcached,并在 step 12 中創(chuàng)建的應(yīng)用程序中使用緩存。

Step 15 —— 創(chuàng)建 RESTful API(Creating RESTful APIs)

了解 REST 并學(xué)習(xí)如何制作 RESTful API,在 Roy Fielding 的文章中閱讀關(guān)于 REST 的部分,如果他們說(shuō) REST 只適用于 HTTP API,那么確保你能夠與他人爭(zhēng)論。

Step 16? —— 了解不同的認(rèn)證方法(Learn about Different Auth Methods)

了解不同的認(rèn)證和認(rèn)證方法,你應(yīng)該知道他們是什么,有什么不同以及什么時(shí)候使用偏好。

  • OAuth?—?Open Authentication
  • Basic Authentication
  • Token Authentication
  • JWT?—?JSON Web Tokens
  • OpenID

Step 17? ——? 消息代理(Message Brokers)

了解消息代理并了解何時(shí)以及為何使用它們。同樣有多種選擇,但突出的是 RabbitMQ 和Kafka,如果你想選擇一個(gè)的話,可以先從 RabbitMQ 開(kāi)始。

Step 18 —— 搜索引擎(Search Engines)

隨著應(yīng)用程序的增長(zhǎng),關(guān)系數(shù)據(jù)庫(kù)或 NoSQL 數(shù)據(jù)庫(kù)的簡(jiǎn)單查詢不能夠滿足要求,而不得不求助于搜索引擎。

Step 19?—— 了解如何使用Docker(?Learn how to use Docker)

無(wú)論是在復(fù)制與生產(chǎn)環(huán)境相同的環(huán)境,保持操作系統(tǒng)清潔或加快編碼、測(cè)試或部署,Docker 可以在開(kāi)發(fā)過(guò)程中大大方便工作,學(xué)習(xí)如何使用 Docker。

Step 20?—— Web 服務(wù)器知識(shí)(Knowledge of Web Servers)

如果你已經(jīng)走到這么遠(yuǎn)了,你可能已經(jīng)在前面的步驟中使用了服務(wù)器,這一步主要是找出不同Web 服務(wù)器之間的差異,了解限制和不同的可用配置選項(xiàng),以及如何最好地利用這些限制編寫(xiě)應(yīng)用程序。

Step 21?—— 了解如何使用Web Scoket(Learn how to use Web Sockets)

雖然不是必需的,但在工具帶中有這些知識(shí)是有益的,學(xué)習(xí)如何使用 web-sockets 編寫(xiě)實(shí)時(shí)Web 應(yīng)用程序并使用它創(chuàng)建一些示例應(yīng)用程序??梢栽谏厦嬷谱鞯牟┛蛻?yīng)用程序中使用它來(lái)實(shí)現(xiàn)博客文章列表中的實(shí)時(shí)更新。

Step 22?—— 學(xué)習(xí) GraphQL(Learn GraphQL)

學(xué)習(xí)如何使用 GraphQL 制作 API,了解它與 REST 的不同之處,以及它為什么被稱為 REST 2.0。

Step 23?—— 看看圖數(shù)據(jù)庫(kù)(Look into Graph Databases)

圖模型代表了一種非常靈活的處理數(shù)據(jù)關(guān)系的方式,圖數(shù)據(jù)庫(kù)為其提供了快速高效的存儲(chǔ)、檢索和查詢方式,學(xué)習(xí)如何使用 Neo4j 或 OrientDB。

Step 24?—— 分布式系統(tǒng)(distributed system)

分布式系統(tǒng)包括:分布式數(shù)據(jù)存儲(chǔ)、分布式計(jì)算、分布式文件系統(tǒng)、分布式消息、分布式應(yīng)用、分布式分類帳

Step 25?—— Kubernetes8以及Service Mesh

Kubernetes的服務(wù)發(fā)現(xiàn)是通過(guò)Service來(lái)實(shí)現(xiàn)的,服務(wù)之間的轉(zhuǎn)發(fā)是通過(guò)kube-proxy下發(fā)iptables規(guī)則來(lái)實(shí)現(xiàn)的,這個(gè)只能實(shí)現(xiàn)最基本的服務(wù)發(fā)現(xiàn)和轉(zhuǎn)發(fā)能力,不能滿足高并發(fā)應(yīng)用下的高級(jí)的服務(wù)特性,比較SpringCloud和Dubbo有一定的差距,于是Service Mesh誕生了,他期望講熔斷,限流,降級(jí)等特性,從應(yīng)用層,下沉到基礎(chǔ)設(shè)施層去實(shí)現(xiàn),從而使得Kubernetes和容器全面接管微服務(wù)。

Step 26?—— 繼續(xù)探索(Keep Exploring)

一旦你開(kāi)始學(xué)習(xí)和練習(xí),你一定會(huì)遇到我們?cè)谶@個(gè)路線圖中沒(méi)有涉及的東西,只要保持開(kāi)放的心態(tài)和對(duì)新事物的渴望就好。

關(guān)鍵是要盡可能多地練習(xí),起初你可能會(huì)覺(jué)得你并沒(méi)有抓住任何東西,但這是正常的,隨著時(shí)間的推移,你會(huì)覺(jué)得越來(lái)越好。

文章鏈接:[https://zhuanlan.zhihu.com/p/35620194]
歡迎關(guān)注我的公 眾 號(hào):Ccww筆記,原創(chuàng)內(nèi)容第一時(shí)間推送!!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 現(xiàn)在的 Web 開(kāi)發(fā)與幾年前完全不同了,有很多不同的東西可以輕易地把人拒之門外,這也是我們決定制作這個(gè)循序漸進(jìn)指南...
    Alukar閱讀 416評(píng)論 0 5
  • 簡(jiǎn)評(píng):之前,后端開(kāi)發(fā)路線圖僅僅是一個(gè)技術(shù)推薦,且沒(méi)有明確的方向指明應(yīng)該遵循的順序,這份重新制作的指南將會(huì)給你一個(gè)更...
    極小光閱讀 5,550評(píng)論 4 149
  • 開(kāi)啟青秀山之旅 青秀山不僅有白云山的壯美,還另有一份秀麗。 由于氣候適宜,滿山青翠,滿坡花開(kāi),山頂更是讓人流連忘返...
    清水之湄閱讀 296評(píng)論 2 3
  • 去中心化省去了中間環(huán)節(jié),讓信息流通更簡(jiǎn)潔順暢,更安全。 但這種形式也會(huì)存在沒(méi)有中間管制導(dǎo)致市場(chǎng)的混亂。 目前很多中...
    423429d90f38閱讀 243評(píng)論 0 0
  • 正在看這篇文章的你,有沒(méi)有浮現(xiàn)過(guò)這樣一個(gè)念頭:拋開(kāi)工作,離開(kāi)快節(jié)奏的城市生活,花上比較長(zhǎng)的一段時(shí)間好好的出去看一看...
    一捆女孩閱讀 434評(píng)論 2 2

友情鏈接更多精彩內(nèi)容