後端程式設計師都做些什麼?

2021-03-02 碼農翻身

這個問題來自於QQ網友,一句兩句說不清楚,索性寫個文章。

我剛開始做Web開發的時候,根本沒有前端,後端之說。

原因很簡單,那個時候伺服器端的代碼就是一切:接受瀏覽器的請求,實現業務邏輯,訪問資料庫,用JSP生成HTML,然後發送給瀏覽器。

即使後來Javascript在瀏覽器中添加了一些AJAX的效果,那也是錦上添花,絕對不敢造次。因為頁面的HTML主要還是用所謂「套模板」的方式生成:美工生成HTML模板,程式設計師用JSP,Veloctiy,FreeMaker等技術把動態的內容添加上去,僅此而已。

那個時候最流行的圖是這個樣子:

在最初的J2EE體系中,這個表示層可不僅僅是瀏覽器中運行的頁面,還包括Java寫的桌面端,只是Java在桌面端太不爭氣, 沒有發展起來。

每個程式設計師都是所謂「全棧」工程師,不僅要搞定HTML, JavaScript, CSS,還要實現業務邏輯,編寫訪問資料庫的代碼。等到部署的時候,就把所有的代碼打成一個WAR包,往Tomcat指定的目錄一扔,測試一下沒問題,收工回家!

不差錢的公司會把程序部署到Weblogic,Websphere這樣的應用伺服器中,還會用上高大上的EJB。

雖然看起來生活「簡單」又「愜意」,但實際上也需要實現那些多變的、不講邏輯的業務需求,苦逼的本質並沒有改變。

隨著大家對瀏覽器頁面的視覺和交互要求越來越高,「套模板」的方式漸漸無法滿足要求,這個所謂的表示層慢慢地遷移到瀏覽器當中去了,一大批像Angular, ReactJS之類的框架崛起,前後端分離了!

後端的工程師只負責提供接口和數據,專注於業務邏輯的實現,前端取到數據後在瀏覽器中展示,各司其職。

像Java這樣的語言很適合去實現複雜的業務邏輯,尤其是一些MIS系統,行業軟體如稅務、電力、菸草、金融,通信等等。  所以剝離表示層,只做後端挺合適的。 

但是如果僅僅是實現業務邏輯,那後端也不會需要這麼多技術了,搞定SSH/SSM就行了。 

網際網路,尤其是移動網際網路開始興起以後,海量的用戶呼嘯而來,一個單機部署的小小War包肯定是撐不住了,必須得做分布式。 

原來的單個Tomcat得變成Tomcat的集群,前邊弄個Web伺服器做請求的負載均衡,不僅如此,還得考慮狀態問題,session的一致性。

(老劉註:參見文章《小白科普:分布式和集群》)

業務越來越複雜,我們不得不把某些業務放到一個機器(或集群)上,把另外一部分業務放到另外一個機器(或集群)上,雖然系統的計算能力,處理能力大大增強,但是這些系統之間的通信就變成了頭疼的問題,消息隊列(MQ),RPC框架(如Dubbo)應運而生,為了提高通信效率,各種序列化的工具(如Protobuf)也爭先空後地問世。

單個資料庫也撐不住了,那就做資料庫的讀寫分離,如果還不行,就做分庫和分表,把原有的資料庫垂直地切一切,或者水平地切一切, 但不管怎麼切,都會讓應用程式的訪問非常麻煩,因為數據要跨庫做Join/排序,還需要事務,為了解決這個問題,又有各種各樣「數據訪問中間件」的工具和產品誕生。

為了最大程度地提高性能,緩存肯定少不了,可以在本機做緩存(如Ehcache),也可以做分布式緩存(如Redis),如何搞數據分片,數據遷移,失效轉移,這又是一個超級大的主題了。

網際網路用戶喜歡上傳圖片和文件,還得搞一個分布式的文件系統(如FastDFS),要求高可用,高可靠。

數據量大了,搜索的需求就自然而然地浮出水面,你得弄一個支持全文索引的搜尋引擎(如Elasticsearch ,Solr)出來。

林子大了,什麼鳥都有,必須得考慮安全,數據的加密/解密,籤名、證書,防止SQL注入,XSS/CSRF等各種攻擊。

前面提到了這麼多的系統,還都是分布式的,每次上線,運維的同學說:把這麼多系統協調好,把老子都累死了。

得把持續集成做好,能自動化地部署,自動化測試(其實前端也是如此),後來出現了一個革命化的技術docker, 能夠讓開發、測試、生成環境保持一致,系統原來只是在環境(如Ngnix, JVM,Tomcat,MySQL等)上部署代碼,現在把代碼和環境一併打包, 運維的工作一下子就簡化了。

公司自己購買伺服器比較貴,維護也很麻煩,又難於彈性地增長,那就搞點虛擬的伺服器吧,硬碟、內存都可以動態擴展(反正是虛擬的), 訪問量大的時候多用點,沒啥訪問量了就釋放一點,按需分配,很方便,這就是雲計算的一個場景。

隨著時間的推移,各個公司和系統收集的數據越來越多,都堆成一座大山了,難道就放在那裡白白地浪費硬碟空間嗎?

有人就驚奇地發現,咦,我們利用這些數據搞點事情啊, 比如把數據好好分析一下,預測一下這個用戶的購買/閱讀/瀏覽習慣,給他推薦一點東西嘛。

可是這麼多數據,用傳統的方式計算好幾天甚至好幾個月才能出個結果,到時候黃花菜都涼了,所以也得利用分布式的技術,想辦法把計算分到各個計算機去,然後再把計算結果收回來, 時勢造英雄,Hadoop及其生態系統就應運而生了。

之前聽說過一個大前端的概念,把移動端和網頁端都歸結為「前端」,我這裡造個詞「大後端」,把那些用戶直接接觸不到的、發生在伺服器端的都歸結進來。

現在無論是前端還是後端,技術領域多如牛毛,都嚴重地細分了,所以我認為真正的全棧工程師根本不存在,因為一個人精力有限,不可能搞定這麼多技術領域,太難了

培訓機構所說的「全棧」,我認為就是前後端還在拉拉扯扯,藕斷絲連,沒有徹底分離的時候的「全棧」工程師。

那麼問題來了, 後端這麼多東西,我該怎麼學?

之前寫過一篇文章叫做《上天還是入地》,說了學習的廣度和深度,在這裡也是相通的。

往深度挖掘,可以成為某個技術領域的專家,如搜索方面的專家、安全方面的專家,分布式文件的專家等等,不管是哪個領域,重點都不是學會使用某個工具和框架, 而是保證你可以自己的知識和技術去搞定這個領域的頂尖問題。

往廣度發展,各個技術領域都要了解,對於某種需求,能夠選取合適的軟體和技術架構來實現它,把需求轉化成合適的技術組件,讓這些組件以合適的方式連接、部署、運行,這也需要持續地學習和不斷的經驗積累。

最後,以一張漫畫來結束吧!

(完)

相關焦點

  • [只推薦一位]一名叫大蕉的程式設計師,後端大數據大神
    今天,漁歌為大家推薦一位在 BAT 任職的一個大數據後端開發大神 : 大蕉 。個人公眾號是 一名叫大蕉的程式設計師。
  • 年薪30W+的數字後端工程師都在做什麼?
    數字後端設計處於數字IC設計流程的後端,屬於數字IC設計類崗位的一種。在IC設計中,數字後端所佔的人數比重一直是最多的,而且隨著晶片規模不斷加大,後端工程師需要的人數將會越來越多。數字後端工程師是將門級網錶轉換成標準的GDS文件,又稱為設計實現或物理設計。前端保證功能正確,後端保證晶片的實現正確。
  • 如此沙雕的代碼注釋,原來程式設計師都是段子手
    某站後端代碼被「開源」,同時刷遍全網的,還有代碼裡的那些神注釋。我們這才知道,原來程式設計師個個都是段子手;這麼多年來,我們也走過了他們的無數套路.首先,產品經理,是永遠永遠吐槽不完的!網友的評論也非常扎心,說看這些代碼就像在閱讀程式設計師的日記,每一頁都寫滿了對產品經理的恨。然後,也要發出直擊靈魂的質問:你是尊貴的付費大會員嗎?
  • 說英語對程式設計師很重要的,都是些什麼人?
    很多打算進入或者已經進入程式設計師這個圈子的同學可能都有這麼一個疑問,就是作為程式設計師,英語到底有沒有用?
  • Python能做什麼?Python開發者都是什麼職位?Python程式設計師調查報告來了!
    在這一節,我們想找出人們使用Python的目的,他們用Python做哪些方面的開發工作,以及他們如何組合使用這些場景。你主要用Python做哪方面的事情?你把Python主要用在什麼領域?Python用戶經常把Python用於多個用途,在多選題「你用Python做什麼」這個問題下,用戶平均每個人選擇了3.9個選項。而Python涉及的領域在這幾年都還是比較穩定的。
  • 西班牙人手機上網都做些什麼?
    愛實戰的人都關注了這裡
  • 程式設計師都用什麼軟體做筆記?
    開發網站、移動APP或桌面應用程式都是艱巨的任務,良好的記筆記技能是保持組織有序、克服壓力、絕望和倦怠的關鍵。但是大多數筆記應用的設計並不是以程式設計師作為受眾目標,這些軟體可能會讓使用者用起來很難受,甚至完全放棄這些工具。這就是為什麼總結這些最好的筆記工具。快來看看——你一定會愛上它們的,同樣歡迎在留言區評論你最喜愛的筆記軟體!1.
  • 什麼是前端,什麼是後端?
    前端開發和後端開發都是幹什麼的?有哪些區別?
  • Web前端 VS Web後端
    — 想從事軟體業的畢業生們大多要從基礎的程式設計師做起。相較於其他的職位,Web軟體開發工程師是一個技術要求較高、前景較好的工作。Web軟體開發工程師可以分為Web前端和後端開發。那什麼是Web前端,什麼是Web後端呢?
  • 寫給後端程式設計師的 HTTP 緩存原理介紹
    (點擊上方公眾號,可快速關注)來源:程式設計師趙鑫 ,www.cnblogs.com/xinzhao/p/5099807
  • 給你講個笑話:我是做遊戲的程式設計師
    比如你們是做網際網路的,你們是做CEO的,你們是做投資人的,不知道你們的行業到底是不是笑話,總之我要給大家講個笑話,畢竟我是做遊戲「程序猿」的。程式設計師又名「程序猿」,是一種非常需要保護的瀕危物種,一般分為兩類,程序設計猿與程序編碼猿,但是兩者的界限並不清楚,都可以進行開發、維護。
  • 做為一個程式設計師,你都見過什麼有趣的電腦病毒?
    提起電腦病毒,小夥伴你最先想到的是什麼?
  • 關於 AMP,Webnovel 都做了些什麼?
    引言AMP 是什麼?
  • 後端程式設計師的 VUE 超簡單入門筆記
    這樣早期文章        現在的各種開源項目中使用 Vue 的越來越多了,作為一個後端程式設計師不會點Vue 也都玩不轉了。        什麼是 漸進式 框架,這裡我們引用官網的原文來看,原文如下:Vue (讀音 /vjuː/,類似於 view) 是一套用於構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易於上手,還便於與第三方庫或既有項目整合。
  • 程式設計師做副業:賣鞋月入5萬,玩抖音買「大奔」
    信息化時代,市場對程式設計師的需求只增不減,程式設計師群體所具備的編程技能又有一定門檻,因此,程式設計師憑藉自身的技術優勢到底能開展什麼副業,也是個討論度頗高的話題。「我們就是做一些工具,方便他了解哪些能買。然後他告訴我們要買什麼,大家就開衝。如果沒有工具的話,就需要一整天守在電腦前刷網頁。」「我們買的鞋子基本就只有我們在搶,要是進來的人多了,我們就涼涼了,所以選品是最關鍵的。」對於這項賣鞋生意,林健認為自己作為程式設計師其實並沒有太大優勢,難度還是在選品。「我們這幾個人,現在也就是多勞多得,擦鞋最費時間了。」
  • 後端工程師,必須掌握的核心底層原理是什麼?丨極客時間
    為了讓更多人掌握軟體開發領域的「第一性原理」,我和極客時間合作了《後端技術基礎詳解》專欄,希望可以幫你構建一套完整的後端技術知識體系,讓你學以致用。身為技術人,我的經驗挺豐富的,我開發過 ERP,寫過防火牆,做過網站架構,搞過資料庫,帶過團隊,創過業,也寫過書,其中《大型網站技術架構:核心原理與案例分析》被一些高校選為了計算機類專業教材。我在極客時間的第一個專欄《從零開始學大數據》,現在已經有近 1 萬 5 人一起學習了。這次,希望為大家詳解後端技術。看我的經歷,很多人都以為我是計算機科班出身。
  • 廣大程式設計師千萬不要做外包
    一般的僱主公司規模都比較大,項目比較多,人事招聘程序繁瑣。 1. 項目很急。 一般這些公司的入職手續非常繁瑣,如果通過正常途徑招聘一個員工的時間大概需要1周的時間,而這1周對於項目是比較關鍵的時間。所以就找外包公司,找到一個有經驗的程式設計師來做,這樣做既可以保證質量,有可以跟上進度。 2. 想節約成本。
  • 程式設計師有錢了都幹什麼?買豪宅,玩跑車,上太空!| 濤滔不絕
    這一切的背後都是因為有一批人——程式設計師,他們一行行敲下的代碼成就了如今百花齊放的計算機領域。那麼,你是否會好奇,程式設計師這個群體的背後有哪些趣事呢?由 CSDN 創始人&董事長蔣濤主講的視頻欄目《濤滔不絕》正是從這一角度出發,講述有關程式設計師的故事。目前第一期已經開播,點擊下方小程序,讓我們一起來看看都有哪些精彩軼事與觀點吧!
  • 我很喜歡玩遊戲,那麼我就適合做遊戲程式設計師嗎?
    相信現在在看文章的你也玩遊戲,雖然愛玩的程度不同,但是至少都是感興趣的,當然你也知道,手遊行業利潤高,遊戲程式設計師自然也吃香,能一邊賺錢一邊玩遊戲,豈不是人生一大幸事呢?其實當年我也是這麼想的。為成為遊戲程式設計師而讀研大學的時候學的專業和計算機不太沾邊,對學的東西不太感興趣,每天的生活就是上課開黑打遊戲,在大學的男生宿舍裡,這樣的情況確實也比較普遍。
  • 菜雞程式設計師是如何寫代碼的?
    每個程式設計師都要歷經從菜雞到大牛過程蛻變胡過程。當初大家起點都差不多,工作多年後,有些人依然停留在菜雞,有些人卻已成為大牛,所有的事情,都是一點一滴習慣養成。讓我們看看菜雞程式設計師是如何寫代碼的?有可能找到你當初的影子,甚至是現在的影子。