後端成長之路:從菜鳥到架構

有不少初學者問到,我想學習後端,但是又不知道該怎麼學,所以我決定把這幾年的經驗和經歷整理成一篇文章,分析後端的路該怎麼走,先說明下面僅僅是個人心得,也許與外面的理論有所不同。(文章最後面會附上學習路線地圖和一些自己看過的書籍)

後端初接觸

後端首先需要學習的是html,css和js,也許你會問做網頁不是前端做的事情嗎?答案是對於真實開發環境後端很多時候還兼顧了前端這個角色,對於架構來說優化不僅僅要考慮後端還需要考慮前端。

要學到什麼樣的程度才可以學下一樣技能呢?我的建議是能夠搭建起一個簡單的頁面,最重要的是學會dom操作和ajax。

語言選擇

我相信過來人或者正在入門的人都碰到過這個世紀難題,如果你是初學者我建議您使用java。這裡並不是說我喜歡java才推薦你們用java入門,而是java的思想對我們以後開發有很不錯的啟發。當你學會一種語言的基本語法就可以到下一步了(僅僅是語法,任意語言)。

hello world!

沒錯,這個時候,你得讓瀏覽器可以看到hello world! 為了實現這個小目標,我們就需要根據語言配置不同的執行環境。由於入門,我建議可以使用一些整合的一鍵配置環境軟體,例如php可以用phpstudy,java看看教程,下載一個tomcat然後跟eclipse整合就好,而python或則ruby則使用一個輕量級的web框架,copy一下官網提供的hello world!例子即可。

高階一些的hello world

這個階段,你需要實現的是通過瀏覽器輸入不同的網址,你可以輸出不同的內容。然後要弄明白什麼是get引數,什麼是post引數。然後要實現根據不同get引數或者post引數輸出不同內容。因為後端研發從根本上來說就是處理這些不同輸入,輸出特定的內容回去而已,所以這一步,最關鍵。

資料庫

為什麼我們要用資料庫呢?以一個新聞網站為例,它要儲存新聞資料,還得儲存使用者資訊,也要儲存評論資訊。也許你會問用檔案儲存就好了,為何還要學習資料庫這麼龐大的東西呢?首先,我們來看一下什麼是資料庫,我們可以把資料庫每一個table看成excel的sheet,每一個db就是一個excel檔案。而sql語句就是一條條指令,可以幫我們操作裡面的資料,可以節省我們大量的操作。開始學習資料庫的時候,我建議學習mysql。

模板引擎

一項技術的出現,往往在於解決了一些開發難題。在沒有模板引擎之前,我們得使用字串拼接方式,弄成html字串,但是這種方式很容易出錯的。而模板引擎無需字串拼接,並且可以處理字串轉義問題,並且模板整合,模板引用等功能,可以使程式碼可以重用,大大提高了開發效率,工程也更容易維護。

MVC框架

首先,我們得明白為什麼要用框架?假如是第一次接觸,我相信第一感受是用了框架加重自己的開發負擔。然後框架存在必然有自己的合理性,我們來看看框架有什麼優點。

1. 框架提供了大量的方法封裝,我們可以直接呼叫來解決業務問題,這可以大大提高開發效率。

2. 框架能夠幫我們分層編寫程式碼,能夠在後期更好的維護我們的專案。

3. 做一些安全防護,處理一些常見的攻擊。

所以對於各種語言,大家可以選擇一個對應的框架來學習。那麼我們應該如何挑選一個框架呢?

1. 多人用的(最起碼使用過程中遇到問題,都能找到人問)

2. 文件詳細的(文件不詳細,怎麼去學習呢?)

3. 簡單的(未來的趨勢估計都是往輕量級框架走的)

Linux與應用部署

開發用window沒什麼問題,但是我們做的應用絕大部分是要放在linux系統來對外提供伺服器,所以不懂linux的操作是不行的,並且伺服器為了儘可能節省資源,都是不使用介面的,所以我們要學好大量的linux命令。

伺服器環境我們一般就不會用外面的通用的一鍵安裝環境,往往需要優化的。所以基本的軟體安裝和配置需要學會,特別是近年來很火的docker,越來越多都是基於docker來部署的啦。

快取

快取可是處理高併發的萬能藥,每當你寫的功能慢的時候,基本上你都可以通過快取來大大提高網站效能。實現快取的方法很簡單,但是一當在併發下和海量資料面前一切都不容易,還得上分散式叢集這些。

http協議

如果上面的你都接觸了,恭喜您普通開發估計是沒問題了,如果你說很多需求還是做不出,沒關係,其實你只是缺乏開發經驗而已,只要多寫多請教,你就會發現,其實後端研發也沒什麼難度。這個時候,如果我們想往高階研發工程師方向走,一些底層的高階的東西我們得學會。

瀏覽器與伺服器通過http協議互動,其實就是相互之間傳遞一串特定格式的字串。get引數,post引數,url,和cookie等資訊其實都包含在這字串裡面。我們平時雖然沒有怎麼碰到這些底層的東西,其實是框架和tomcat這種軟體幫我們處理了。

就像平時一個重定向,其實就在header裡面有一句Location: XXX。而我們平時宣告返回的是html還是json其實是headers有一句Content-Type:XXX,一切神奇的功能其實僅僅是一段特定的字串而已,所以http協議怎麼可以不研究呢。

nosql

非關係型資料庫有很多,例如memcached,redis,mongodb,coundb等。這些東西都有自己的適用場景,合理利用可以加快開發效率,對提高應用效能有很大的幫助的。

訊息中介軟體

這種技術的出現是為了解耦,當我們業務過於龐大的時候,就會相應的拆分成幾個小系統,系統之間的通訊往往是通過http協議呼叫和基於訊息中介軟體。通過http協議有一個弊端,就是某個系統一旦修改了地址,那麼就必須修改呼叫該服務的系統。如果通過訊息中介軟體呼叫,那麼應用如何遷移,也不會影響到別的系統。

一點點話

你跟所謂的大牛差距在哪裡呢?我的看法是差距僅僅在於專案經驗。也許你會說後端怎麼需要學習這麼多東西,並且年年都有新的技術出現怎麼學呢?其實對於一種新技術,我們主要是要弄明白我們為什麼要用這種技術,因為存在即合理,新技術的出現必然有自己的原因,所以新技術不一定要追求,但是底層建議要理解。然後什麼海量資料和高併發下系統優化,一個原則,找到效能瓶頸並解決它而已。

附錄

路線圖

書單(下面僅僅是一些個人以前看過的書籍,並不是推薦要看,個人建議看看哪種講解核心的書籍,怎麼製作比怎麼用更總要)

LINUX作業系統(第2版)

LINUX指令範例速查手冊

JSP & SERVLET學習筆記

STRUTS 2.X權威指南(第3版)

HTML 5從入門到精通

JAVA入門經典(第6版)

看透Spring MVC:原始碼分析與實踐

大型分散式網站架構設計與實踐

Docker 容器與容器雲

Python Cookbook(第3版)中文版

Go語言程式設計

MongoDB大資料處理權威指南(第2版)

NoSQL資料庫技術實戰

構建高可用Linux伺服器(第3版)

大型網站技術架構 核心原理與案例分析

Linux運維之道

高效能MySQL(第3版)

Java核心技術 卷I

Java核心技術 卷II