首先什么是前端開發(fā)?
簡(jiǎn)單來說,前端開發(fā)就是開發(fā)網(wǎng)頁上的“內(nèi)容展示”,和與用戶的交互;
這里的“內(nèi)容展示”:指的是你在網(wǎng)頁上能看到的,圖片文字、視頻、數(shù)字等信息。
那么與用戶的交互指的就是,用戶在頁面上通過點(diǎn)擊按鈕、輸入文字等動(dòng)作對(duì)網(wǎng)站提供數(shù)據(jù)輸入,然后前端對(duì)用戶的輸入進(jìn)行響應(yīng)。
比如更新頁面上的內(nèi)容,舉一個(gè)更具體的例子就是,如果你在我的文章下面進(jìn)行評(píng)論,那么頁面對(duì)你評(píng)論這個(gè)動(dòng)作就會(huì)做出響應(yīng),比如會(huì)在后臺(tái)數(shù)據(jù)庫里面,把我的評(píng)論量加一。
并且在頁面上顯示文章評(píng)論后的數(shù)量等,如下圖。
前端開發(fā)用到的基礎(chǔ)技術(shù)就是 html、css 和 javascript,分別用來控制網(wǎng)頁里面的內(nèi)容、視覺效果和用戶交互。
下面分別簡(jiǎn)單介紹一下。
html 并不是一門編程語言,他是一種用來定義結(jié)構(gòu)化數(shù)據(jù)的標(biāo)記語言,你在瀏覽器上看到的網(wǎng)頁,其實(shí)就對(duì)應(yīng)一個(gè) html 文件,這個(gè)文件里裝的就是 html 代碼,而瀏覽器的職責(zé)之一,就是通過你輸入的網(wǎng)址,從網(wǎng)站上下載對(duì)應(yīng)的 html 代碼,并且把代碼渲染成你肉眼看到的樣子。
那么,前端工程師的工作內(nèi)容之一,就是編寫 html代碼,或者使用一些技術(shù)來為頁面動(dòng)態(tài)的生成 html 代碼,任何一個(gè)網(wǎng)頁,你都可以通過瀏覽器的開發(fā)者工具,看到他對(duì)應(yīng)的 html 代碼。
如果你仔細(xì)查看一段 html 代碼,你會(huì)發(fā)現(xiàn)他其實(shí)就是由一堆各種類型的尖括號(hào)標(biāo)簽組合嵌套而成的,比如某視頻在 youtube 頁面上,視頻的標(biāo)題,對(duì)應(yīng)于代碼里面一個(gè)title類型的標(biāo)簽,那視頻的播放器就對(duì)應(yīng)于一個(gè)video類型的標(biāo)簽;其頭像圖片,對(duì)應(yīng)于一個(gè)嵌套在超鏈接標(biāo)簽里的 image 標(biāo)簽;而評(píng)論里的文字又對(duì)應(yīng)于一個(gè) yt formatted-string 類型的標(biāo)簽,這里的 yt 應(yīng)該只帶的是youtube,那么這個(gè)標(biāo)簽,應(yīng)該就是 youtube 自定義的標(biāo)簽,然后 css 的代碼,則是用來指定每個(gè) html 的標(biāo)簽,以什么樣的外觀和風(fēng)格來展示,比如長(zhǎng)寬、位置、顏色居中還是分散字體顯示屬性等等。
css的代碼也是被瀏覽器讀入,并且渲染成你肉眼所看到的效果,有時(shí)候pm會(huì)想把頁面里面一個(gè)按鈕的大小和顏色進(jìn)行微調(diào),而這個(gè)微調(diào)就是由前端工程師去改動(dòng);這個(gè)按鈕對(duì)應(yīng)的 css代碼來實(shí)現(xiàn)的,前端開發(fā)中真正編程的部分是javascript,網(wǎng)頁如何與用戶交互,如何與后端交互,都是通過 javascript 的代碼實(shí)現(xiàn)的,就像html代碼和 css代碼是被瀏覽器執(zhí)行一樣,頁面里面的 javascript 代碼也是交給瀏覽器來執(zhí)行。
這里插一句,javascrip與java并沒有什么關(guān)系,兩者之間的特性差的很遠(yuǎn),這就好比是印度跟印度尼西亞差的很遠(yuǎn),熊貓跟小熊貓差的很遠(yuǎn),雷峰和雷峰塔差的很遠(yuǎn)。
說回正題,大家在寫程序的時(shí)候,不管用什么語言,通常都不會(huì)重復(fù)的造輪子,而是會(huì)調(diào)用該語言現(xiàn)成的 library來實(shí)現(xiàn)一些常見的功能,讓開發(fā)過程更加高效。
對(duì)于前端javascript的開發(fā),react是目前比較流行的library,也是我在工作中,做前端的時(shí)候會(huì)用到的。react這個(gè)library,不僅可以用來實(shí)現(xiàn)與用戶的交互邏輯和事件響應(yīng),事實(shí)上頁面上幾乎全部的 html 代碼,都可以通過 react來生成,這種在瀏覽器端生成 html代碼進(jìn)行渲染的方式,叫做 client-side rendering,與之相反的就是 service-side rendering,也就是頁面完整的 html代碼,是全部由網(wǎng)站的前端服務(wù)器生成好了之后,再發(fā)給瀏覽器的。
這里提到了前端服務(wù)器,就順便說一下,前端服務(wù)器的邏輯,可以通過任何編程語言來實(shí)現(xiàn),比如 java、javascript、php 甚至是Scheme,只要服務(wù)器的行為遵守 http 的協(xié)議就可以了,client-side rendering和 silver-side rendering兩種方式各有優(yōu)缺點(diǎn),因此前段工程是在開發(fā)網(wǎng)頁的時(shí)候,需要結(jié)合實(shí)際情況,選擇最合適的頁面渲染方式;
除了 react,另外一種比較流行的 javascript library就是vue,在國內(nèi)用的比較多,如果你去查看 b 站的html代碼,你會(huì)發(fā)現(xiàn) b 站的前端也用到了vue。
以上介紹的這些,就是前端開發(fā)的一些常規(guī)技術(shù),html、瀏覽器和前端服務(wù)器的工作原理,一般會(huì)在學(xué)校里面的《計(jì)算機(jī)網(wǎng)絡(luò)》課里面介紹,css、javascript、react就主要靠自學(xué)了。
javascript和react學(xué)習(xí)課程感興趣的可以去看《javascript高級(jí)教程》哦!
講完了前端,現(xiàn)在來講講后端。
什么是后端開發(fā)呢?
相當(dāng)一部分的后端開發(fā)工作,就是開發(fā)數(shù)據(jù)訪問服務(wù),使得前端可以通過調(diào)用后端的服務(wù),來對(duì)數(shù)據(jù)進(jìn)行增刪查改,也就是大家經(jīng)常聽到的 curd,從而實(shí)現(xiàn)前端對(duì)用戶的請(qǐng)求響應(yīng)。
比如你在一個(gè)大型網(wǎng)站注冊(cè)的時(shí)候,這個(gè)網(wǎng)站的前端就會(huì)調(diào)用他的后端,把你的用戶信息寫入數(shù)據(jù)庫。一個(gè)后端服務(wù)其實(shí)不局限于只被前端調(diào)用,他還可以被 mobile app 調(diào)用,還可以被其他的后端服務(wù)調(diào)用。
類比一下,前端往往需要通過調(diào)用后端服務(wù),來完成對(duì)用戶的請(qǐng)求響應(yīng),而后端服務(wù)往往需要通過查詢數(shù)據(jù)庫。
來完成對(duì)前端請(qǐng)求的響應(yīng),從這個(gè)類比你可以看出,前端和后端的共性,都是通過調(diào)用一個(gè)比自己靠后的服務(wù),來對(duì)前方客戶的請(qǐng)求進(jìn)行響應(yīng),后端工程師的工作范疇很廣,幾個(gè)比較常見的就是,設(shè)計(jì)后端服務(wù)的api,設(shè)計(jì)后端服務(wù)的架構(gòu)圖,設(shè)計(jì)后端服務(wù)的數(shù)據(jù)庫且代碼實(shí)現(xiàn)后端服務(wù)的業(yè)務(wù)邏輯,同時(shí)你還需要保證你設(shè)計(jì)的后端服務(wù),highly available,也就是訪問量很大的時(shí)候仍然不宕機(jī),并且對(duì)客戶請(qǐng)求的響應(yīng)時(shí)間很短,或者說吞吐量高,單位時(shí)間內(nèi)能處理的請(qǐng)求數(shù)量多。
如果要從頭搭建一個(gè)新的后端服務(wù),那么整個(gè)過程需要進(jìn)行大量的系統(tǒng)設(shè)計(jì),也就是后端工程師面試的時(shí)候,會(huì)考到了System Design,做System Design非常考察平時(shí)知識(shí)的積累。
那么后端工程師平時(shí)一般需要與哪些技術(shù)和工具打交道呢?
首先就是后端服務(wù)器了,和前端服務(wù)器一樣,后端服務(wù)器也可以由幾乎任何一種編程語言實(shí)現(xiàn),只要能把正確的數(shù)據(jù),返回給調(diào)用者就可以了。
主流的編程語言,也有各自流行的 Web Framework,也就是現(xiàn)成的輪子,來幫助大家站在框架的肩膀上,快速的實(shí)現(xiàn)一個(gè)后端服務(wù),比如基于 PHP的 Web Framework有thinkphp和laravel(插一句“PHP是世界上最好的語言”),基于 javascript 有 express,基于 java 的 Web Framework有Spring Boot 和 Drop wizard,以及基于python有flask這幾個(gè)Web Framework,每一個(gè)都有大廠在使用,不同的公司具體選擇哪種框架,一定程度上,是看創(chuàng)始的程序員們最喜歡哪種語言,哪種框架用的最6,還有一些后端服務(wù)的框架,可以支持你用多種編程語言來開發(fā),而不是綁在一門特定的語言上。
說了這么多的語言和框架,如果你想去某個(gè)公司做后端開發(fā),一定需要對(duì)他們使用的語言和框架很熟練嗎?
一般來講不會(huì),我找工作的時(shí)候看到崗位描述,里面有我不會(huì)的語言和框架,也無所謂,照樣投,對(duì)公司來說你會(huì)其中一部分就夠了,很多東西都是在工作里面學(xué)的,而且事實(shí)上,兩周內(nèi)上手一門新的編程語言,是一名職業(yè)程序員的基本素養(yǎng),除了開發(fā)和維護(hù)后端服務(wù)器,后端工程師還會(huì)花大量的時(shí)間,在數(shù)據(jù)庫上,不管是為你的后端服務(wù)創(chuàng)建數(shù)據(jù)庫,還是為數(shù)據(jù)庫的性能調(diào)優(yōu)或者是分析里面的數(shù)據(jù)。
目前最常用到的數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫,比如在工業(yè)界被廣泛使用的MySQL和PostgreSQL。
如何設(shè)計(jì)一個(gè)關(guān)系型數(shù)據(jù)庫,如何使用SQL query來訪問數(shù)據(jù),以及如何依靠 index 來為數(shù)據(jù)查詢加速,這些知識(shí)點(diǎn),在學(xué)校的數(shù)據(jù)庫課程里面也會(huì)介紹的,然而學(xué)校數(shù)據(jù)庫課程里面介紹的比較少,但是近年來用的又越來越多的是非關(guān)系型的數(shù)據(jù)庫,也就是大家常說的No-SQL數(shù)據(jù)庫。
比如基于JSON文檔的MongoDB,比如基于LSM tree 的LevelDB,這些數(shù)據(jù)庫在某些特定的情況下,可能會(huì)比關(guān)系型數(shù)據(jù)庫更適合你的業(yè)務(wù)需求,
大家一般也是在工作中去學(xué)習(xí)他的原理和特性,數(shù)據(jù)庫往往是一個(gè)后端系統(tǒng)里面的性能瓶頸,也就是最慢的一環(huán),因此后端工程師在進(jìn)行系統(tǒng)設(shè)計(jì)的時(shí)候,會(huì)用很多辦法來使得后端的性能,比如響應(yīng)的時(shí)間,盡量的少被數(shù)據(jù)庫拖后腿,比如使用MemCached這種緩存系統(tǒng),來加速讀取數(shù)據(jù)的速度,比如用Kafaka把數(shù)據(jù)寫入異步化,提升后端寫數(shù)據(jù)的性能,后端開發(fā)就大致介紹到這里。
后端開發(fā)里的其他重要環(huán)節(jié),比如性能監(jiān)視,比如 DevOps 這里就略過不講啦!
下面來講講全棧,全棧就是全干,要能夠自己構(gòu)建和部署一個(gè)完整的,可以工作的Web App,能夠獨(dú)立編寫前端,后端代碼能夠配置服務(wù)器,還能夠設(shè)計(jì)數(shù)據(jù)庫。
我參加工作以來前端和后端都做,大概80%時(shí)間都是在做后端,對(duì)于要找程序員工作的你,有很多小伙伴問我,前端和后端哪個(gè)的發(fā)展前景好轉(zhuǎn),專業(yè)選哪個(gè)比較容易入行,或者女孩子適合做哪個(gè)?這里我推薦大家看看這篇文章《零基礎(chǔ)學(xué)編程應(yīng)該從哪入手?推薦2021年適合學(xué)習(xí)的編程語言》
選前端還是后端區(qū)別只在于使用的技術(shù)和考慮的方面不同,前端主要考慮用戶體驗(yàn),后端主要考慮底層業(yè)務(wù)邏輯,平臺(tái)穩(wěn)定和性能,最主要是看你喜歡做什么,你是喜歡做用戶看得見的部分,還是去考慮用戶看不見的部分呢?
很多人覺得女生審美好適合做前端,可是公司里面有統(tǒng)一的界面規(guī)格,做什么都直接調(diào)用,library 里面現(xiàn)存的 component,按鈕字體邊框長(zhǎng)啥樣,內(nèi)容排序都不是我決定是 pm 和 ui設(shè)計(jì)師決定,我的審美也肯定沒有設(shè)計(jì)師專業(yè)。
最后即使你選擇了某一個(gè)方向,你在工作中也會(huì)實(shí)際了解到其他是做什么的,自己喜歡什么想做什么,如果你想轉(zhuǎn)前端或者是后端,可以看看組里公司里有沒有機(jī)會(huì),也可以自學(xué)尋找其他的機(jī)會(huì),你之前的工作經(jīng)驗(yàn)不會(huì)白費(fèi),公司也總是喜歡技能比較多的員工嘛!
全棧程序員崗位比較多,可能是因?yàn)榧夹g(shù)比較全面,花一份工資請(qǐng)會(huì)兩個(gè)崗位技術(shù)的人,對(duì)于求職者來講,全棧程序員有幾年工作經(jīng)驗(yàn)的會(huì)高的更多,所以大家基本上都沖著全棧程序員去了,工作后再根據(jù)個(gè)人興趣和擅長(zhǎng)的領(lǐng)域,慢慢發(fā)展成主前端,主后端全站或者是管理。
以上就是程序員前端、后端、全棧是什么意思的詳細(xì)內(nèi)容!