進度條

後端工程師(Back end Developer)是什麼?成為後端需要學習什麼技術?很難嗎?

前端與後端差別在哪?如何選擇?為何後端工程師也要學習基礎「前端」技術?

作者: 進度條編輯群 更新日期:

前面我們介紹過什麼是「前端」工程師,那接下來就要講什麼是「後端」工程師(Back-end developer)了。

 

 

"後端工程師"英文為 Back-end developer,直接翻譯為後端"開發者"。Back-end 因為常用的關係,也很常被寫成 Backend。

 

當然,我相信很多人進來只是想要很快的對「前端」與「後端」的區分有個概念,所以先來盡量簡短的敘說他們的差異。

 

 

前端就是在你的電腦上運算的程式,為 HTML / CSS / JavaScript,因為在你的電腦上運算,所以你有權限改變他的運算邏輯。

 

後端就是在遠端伺服器上運算的程式,一般使用者無法影響。為任何程式語言都可以,主要目的是產生前端程式。後端主流的程式語言包含但不限於 PHP、Ruby、Node.js、Java、Python、C#、Go...等。

 

 

至於常聽到的一些後端名詞通常是框架,他們是由前面提到的這些語言寫的。

Laravel -> PHP 製作

WordPress -> PHP 製作 

Ruby on Rails -> Ruby 製作

Django -> Python 製作

Microsoft .Net 系列 -> C# 製作

Spring -> Java 製作

Express -> Node.js 製作

...還有很多,未來還會有更多,列不完。

 

 

 

 

架設網站沒有一定要用後端框架,只是現在的網站功能實在是太多太複雜,但又有一至性。每個網站都要有會員系統、要前端資源打包、後端要能當 API Server。至於跟資料庫溝通、程式分層、MVC架構、函式庫抽象化、單元測試等其實也需要大量的程式去運作,這些是為了程式架構的程式,跟使用者操作的功能沒有直接關係。所以與其每個工程師都自己撰寫大量自己的程式邏輯,使用開源可免費商用且流行的框架,在管理專案上面會方便非常多。

 

 

此外以老闆的角度來看,剛創業的老闆的惡夢可能是程式做不出來沒有產品,但已經有起步的公司的老闆的惡夢是「公司系統只有他懂」的工程師離職。本來躺著數錢立刻變成躺著虧錢,運轉順暢的公司就此倒閉也不是沒聽說過。而且無論他任職多久,他只需要說聲「要追求自我」,一個月後就可以走人了。所以有標準化開發的框架即使不是工程上最佳的解決方案,也可能是對公司最安全的方案之一。即使重要工程師離職一樣會痛,但不至於完全沒救。

 

 

而對於要入門後端的新手而言,有標準化開發方式的框架在學習上也會比較容易上手,並且相對會有成就感很多。

 

 

 

 

 

至於入門難度難度。

 

前端因為程式會直接變成畫面,所以在入門的時候比較簡單。後端則一定會碰到大量的終端機與作業系統理論。但是對於美感不足的人是一種解脫,因為基本上網站的視覺與使用者體驗不是由後端工程師決定。

 

前端相關現在也分割很細,很多純前端工程師也是只需要處理程式碼,不需要處理視覺設計。但是因為工作性質還是要照著設計稿完成,有美感還是滿吃香的。後端通常就是討論架構,以及系統的穩定。此外有些功能因為安全性的關係,必須要藏在後端後面。只要關係安全性,就沒有初學者能幫上忙的地方。

 

以同樣是工程的建築來表示的話,後端比較像是地基和整體結構,前端偏向裝潢。地基不穩的話,裝潢再漂亮都很危險。但是地基與結構穩,裝潢不漂亮,就還比較有救。因此新手的工作大多偏向基礎前端,後端新手開發者即使入職通常也是做偏向前端的全端工作(新手一開始都是打雜居多)。

 

 

既然簡單的介紹了,那想必大家想要看更細節的說明吧!!!

接下來就開始更詳細的介紹。

 

 

首先,我們要先有共識,電腦可以藉由「程式」運算出結果。對於不會程式的人,看起來就是打一些英文語法與特定的結構就可以執行神奇的事情。無論是前端還是後端,寫的程式都是在電腦上面運行

 

 

第二個共識,「網路連線」是溝通的概念,至少要有兩台電腦之間互相溝通才能構成「網路連線」。就像你玩網路遊戲,打怪掉寶都是存在「伺服器」之中。只要遊戲伺服器掛掉,哪怕你是 20萬組成的頂級電腦,你也是沒辦法玩。但是伺服器只要有連線的正常運作,拿零元手機都有可能可以玩遊戲,當然更多時候是手機規格太差,跑不動遊戲。

(手機也是電腦的一種,只是大小長相不一樣而已)

 

 

 

 

有這兩個共識,接下來就可以介紹「前端」和「後端」了。

 

 

基本上我們提到「前端 front-end」和「後端 back-end」就是在講「網路」應用,所以「前端」與「後端」工程師都可以算是【網路工程師】的分支。

 

 

網路除了有前端(front-end) 與後端(back-end)的區分外,還有客戶端(Client-side)與伺服器端(Server-side) 的區分。「前端」是「客戶端」的一部分,而「後端」幾乎與「伺服器端」是同義詞,所以我們需要從「客戶端」與「伺服器端」開始講解。

 

 

網路的目的就是兩台電腦的溝通,所以有人發送要求,有人回答。可以想成有人扮演顧客的角色,有人扮演老闆的角色。

 

 

顧客通常需要先提出要求,老闆則會回答。

顧客付錢,老闆交出商品。

顧客錢不夠,老闆禁止顧客進入趕他出去(有點偏激的老闆)。

 

 

老闆如果關店,那顧客也沒能做什麼活動。

就像伺服器如果關機,那顧客也沒辦法玩遊戲。

 

 

顧客就是客戶端(Client-side),他可以向老闆發送各種稀奇古怪的訊息,客戶端可以是手機、筆電...。要在手機上發送訊息,就必須是手機上面的程式。所以這裡說的「顧客」指的就是手機上的那一個「程式」。我們稱為 Client-side Application - 顧客端應用程式。這隻程式他可以是你手機、筆電上任何程式,比方說 Chrome 瀏覽器、Facebook APP、銀行的APP...等,需要網路連線才能使用,WIFI / 行動網路斷掉就不能使用的 APP 都是。

 

 

老闆就是伺服器端(Server-side),他接受到訊息後需要反應,反應就是運算,運算需要程式。那老闆位於哪裡呢?老闆位於遠端伺服器電腦裡面。伺服器基本上就是專門用作於網路應用的「特化型」電腦主機,還是電腦。所以老闆就是伺服器電腦上運作的程式,跟你用來訪問的那台手機、筆電沒有關係。我們稱為 Server-side Application,伺服器端應用程式。我們不會看到他們,除非你跑去該公司的機房才有點機會(如果他們沒把程式放上雲端主機的話)。

 

 

所以「Server-side 伺服器端」程式就是你無法直接點開來使用的應用程式,他是在遠方的電腦伺服器裡面。「後端」工程師的工作簡單來說就是開發「伺服器端」的應用程式。

 

所以我們討論的總共有兩台電腦,一台假設是你手上的裝置(手機或筆電),另外一台是遠端的伺服器主機。你的裝置上有瀏覽器,伺服器上有伺服器「後端」程式。

 

所以後端工程師開發的是哪一段程式應該很容易看出來了吧?

 

 

 

這邊要注意的是,我們沒有說客戶端(Client-side)與伺服器端(Server-side) 的溝通一定要用 HTML 網路通訊協定 (Protocol) 。其實只要有相似的行為,都可以稱之為 Client-side 與 Server-side。不過因為 HTML 通訊協定是當前最流行的。因此"通常"我們會反射性地在聽到 Client-side 與 Server-side 相關的對話時,認為正在討論 HTML 相關的議題 - 也就是在討論「網站」。

 

 

 

狹義的「前端」,我們會認為指的是「網站」上面的網頁。如果要瀏覽網站,無論你用的是哪個裝置,手機、平板、筆電、其他裝置,都必須要有「瀏覽器」才可以正確完整的呈現網站的全貌。瀏覽器的英文叫做 Browser,他是特定用途的一個軟體。他可以接受程式語法,並且轉換成畫面。當然,並不是所有程式語法他都能接受。要稱作是瀏覽器,就必須要至少能接受 HTML, CSS, JavaScript,且能正確執行轉換成畫面。所以網站本質上就是 HTML / CSS / JavaScript 的檔案集合組成。

 

 

 

 

 

HTML / CSS /JavaScript 本質上就是文字。只要我們有學習過程式撰寫,無論你今天寫的是 PHP / Ruby / Python / Java ... 第一個語法通常就是教印出 "Hello World" 怎麼寫。"Hello World" 就是文字,既然你寫的出 "Hello World",那印一個 HTML Tag "<div></div>"也不是問題。

 

 

所以後端在一開始的功能,就是產生前端,前端的工作是包含在後端裡面。例如利用 PHP 產生出 HTML 文字。所以其實只要能印出文字,任何方式都可以撰寫後端,所以每個程式語言都可以當做後端程式。不過如果是靜態的網站,你可以先寫好 HTML 檔案,這樣就不需要用程式語言動態產生網站了。

 

 

不過隨著我們對網站的要求越來越多,例如我們有使用者的概念。我們需要讓不同的人在訪問「同」一個網頁的時候可以看到「不同」的內容,所以需要動態產生網頁。當使用者帶著不同的資訊訪問網站時,伺服器接收到資料,依靠預寫好的程式語法產生出 HTML 返回結果。所以所謂的「動態網頁」並不是指很酷炫的前端設計動畫,其實指的就是有後端的網站。

 

所以為什麽學後端需要先學基本的前端,如果你看不懂基本的前端,那你也不知道要怎麼產生他。

 


 

 

至於前端詳細的內容,我們在介紹什麼是前端的文章就已經講很多了,簡單來說是跟現代的複雜應用方式有關。

 

後端可以選擇不處理完所有的資料,只回傳「半成品」到使用者的瀏覽器程式裡面,讓瀏覽器去運算,以此增加彈性或是降低伺服器運算效能消耗。至於瀏覽器要怎麼運算、要怎麼處理這些半成品也是要經由程式 (JavaScript) 去控制。也就是說「前端」工程師就是寫給「瀏覽器」使用的程式,最後程式是在使用者的裝置上執行的。

 

 

此外,現在的話因為前端的畫面很豐富,所以後端工程師很多已經不處理畫面設定,由前端工程師製作靜態版本後,再由後端工程師轉換成由後端程式語言產生。此外,考慮到開發彈性,很多公司已經轉換到前後端「完全分離」的架構,也就是說後端伺服器完全不處理 HTML / CSS / JavaScript 的部分,直接往前端送「純資料」。這樣的後端因為沒有跟網站畫面強綁定,所以也可以同時跟手機 APP 溝通,不需要額外對手機應用程式做處理。

 

 

 

 

 

如果以前面提到的老闆與顧客的關係來說,前端的概念就有點像是,老闆給你的商品其實還沒有「組合」。你(顧客端電腦) 必須要依靠老闆給你的說明書(JavaScript 程式碼),去組裝商品(資料)。才能產生最後的結果。

 

老闆當然也可以先組裝好再給你,但是這樣老闆就很忙,如果 1000 個訪客都要老闆裝好在出貨,老闆就沒辦法做其他事情了,或是要多雇幾個員工才可以處理。另外,組裝的過程也可能才是目的,就像裝模型一樣,組裝也很好玩。前端 JavaScript 執行的動畫很多時候沒有實質上的程式影響,但是對與使用者來說很吸睛。

 

 

 

直到這邊我們大概就區分開了前端和後端。不過成為後端工程師只需要學會框架嗎?

 

不,要會的可多了!

 

 

前面我們提到,一開始網站就是靜態的,所以其實我們可以先寫好。例如我們可以用 .html 檔來製作整個網站。

 

網路傳輸是資料傳輸,所以如果我們要把 html 檔傳給其他電腦,會需要 File open 檔案開啟與 File read 檔案讀取這兩個動作,這兩個動作通常是由作業系統 (Windows, MacOS, Linux 等)所提供。之後還要再搭配同樣由作業系統提供的「網路傳輸」功能,把資料傳出去。因此我們需要先寫一支程式來管理這些動作。 這隻程式就叫做 Web Server 網頁伺服器"程式"(WIKI)。

 

Web Server 程式除了處理檔案外,他們還必須要處理 Process 程序 (WIKI)。因為每個網路連線都必須要獨立,不然你在處理銀行轉帳結果別人可以看到你的帳密不就遭了?每個連線都由單獨的 Process 處理是一個好方式,會有獨立的 Memory 空間。但是這樣又會有資源分配的問題,很多資源其實還是可以共用的。畢竟現在的大型商業網站,都是同時有個上千使用者,上萬連線。如果每個連線都站 20mb RAM的使用空間,那 1000個連線就是 20GB RAM同時的佔用。因此 Web Server Process 的管理是一門重要的學問。(常見以 Worker 管理稱之)

 

 

 

Web Server 是可以自己寫的,事實上我們的線上課程「Linux雲端伺服器,用AWS 暸解 Apache 與 Nginx」就有包含「利用自製 Web Service 架設簡易網站」章節。

 

不過該章節目的主要還是講述原理居多,一般情況我們還是會推薦使用 Nginx 或 Apache 比較好,他們非常擅長處理網路連線與檔案的部分,是市占率最高的 Web Server,經過時間的歷練,絕對比初出茅廬的你寫的好太多,大多數的網站都會使用其中之一。

 

Web Server 雖然可以處理靜態網站與 Process,但不適合製作應用程式,因為應用程式都高度客製化。Web Server 在這段的處理上為它留了一個接口,Apache 是用自己的 mod (外掛程式)實現,而 Nginx 常見的是用 FCGI (WIKI) 的方式。當訪客流量到 Nginx 或 Apache 的時候,他們會利用這個接口轉傳送到你的應用程式裡面,你的應用程式處理完後再利用同樣的接口回傳回去。像通訊協定 (Protocol) 一般的邏輯。 

 

所以通常所謂的網站部署,其實就是在後端部署 Web Server 和你寫的應用程式,並且把兩個連起來,並且加上應用程式所需的其他部分,例如資料庫。

 

雖說 Nginx 與 Apache 是大多數情況推薦的選擇,不過很多商業用途確實可以藉由自己撰寫 Web Server 來達到更佳的效能。所以資深的後端工程師其中的一個分支工作就是撰寫客製化的 Web Server。但這算是專業領域,所以並不是所有的資深工程師都需要會。大多數的後端工程師只要有能力調整 Nginx 或 Apache 的設定即可。如果對這有興趣的話,高併發(High Concurrency) 是關鍵字,可以研究看看。

(不過這只有一定規模的網站才有機會碰到。大多數網站其實離這樣的流量還非常遠)

 

 

一般的網站連線會是這樣:

 

前端(Browser) <-> 伺服器程式(Web Server) <->  你的應用程式(Laravel, Ruby on rails 等) <-> 資料庫(MySQL, PostgreSQL)

 

所以接下來要講的就是資料庫的部分了。

 

但是因為資料庫其實我們已經有專門的文章在介紹,所以這邊就簡單的介紹一下後端工程師為何要處理資料庫。

 

 

 

本篇前面有提到說「動態網站」,就是在同一頁中,依據不同的訪問來源回應不同的內容,這中間其實牽涉到比對這件事情。例如必須要先身份驗證後才會放行,那驗證的人必須先獲得驗證的方式與比對的條件,這些都會需要先存起來備用。

 

要存的東西一多,管理、讀寫就會複雜起來,需要專屬的程式去管理,而那就是資料庫。不過資料庫並不管資料怎麼被使用,資料庫基本上只管資料的正確性。至於這些資料要用來生產什麼,那就是應用程式的工作了。

(當然你丟「垃圾」進資料庫,資料庫也會保證「垃圾」的完整,但「垃圾」不會因此變有用。)

 

就像前面一樣,資料庫雖然屬於後端的一環,但是進階的話也是可以切分出獨立的工作。很多公司是有「資料庫管理員 DBA 」這個工作的 (WIKI),既然是一個專門處理資料庫的職位,是必須需要比後端更專精的資料庫知識。在擁有巨型資料庫的產業是很重要的職位。

 

不過以現代的框架與開發方式,加上 ORM 系統的盛行,中小型架構通常會直接讓後端工程師去管理資料庫。所以懂資料庫是後端工程師必備的能力之一。

 

 

 

再繼續探討下去就會有更多的技能與程式出現,不過其實高階工作就是把每一個細節做得更好,當你要做更好的時候就會有更專精的工具會出現。這時候要組合這些工具就會有更多的細節要處理。例如幾天網站速度要快,常見的解決方式就是用 Cache 處理,不過 Cache 住資訊就不會改,會有同步的問題,所以在特定的情況需要清除。但是清除快取就會增加系統的負荷,這中間的拿捏調整就是需要工程師設計的地方。

 

進階探討下去本文就寫不完了,所以下面再放幾個延伸閱讀,並且有更多的議題藏在我們的課程與文章裡面,有興趣可以看看喔!

 

 

 

如果對後端有興趣,可以參考我們的程式線上課程喔!

Laravel 後端 PHP 架站,API Server 與訂閱軟體全攻略

 

Linux 雲端伺服器,用 AWS 暸解 Apache 與 Nginx

 

從零開始的SQL語法與資料庫設計 - 以MySQL來攻略

 

 

如果是完全的初學者,可以考慮我們的初學課程組合,除了 Laravel 以外,還包含基礎前端課程(HTML CSS JavaScript)。

前端基礎 + 後端 Laravel 課程完整課程

 

如果想要一次到位,並且拿到更優惠的價格,可以考慮包含 Linux Nginx Apache AWS MySQL 這些課程的組合:

Laravel 後端架站完整組合

 


最後,如果你喜歡我們的文章,別忘了到我們的FB粉絲團按讚喔!!

Small logo

進度條編輯群

進度條編輯團隊