我為什么對(duì)后端編程情有獨(dú)鐘?
這幾年前端很熱鬧,發(fā)展也很快, Angular, React, Vue ... 等各種各樣的新技術(shù)層出不窮, 并且不斷地?fù)尯蠖说娘埻搿? 比如說(shuō)著名的Model - View -Controller , 原來(lái)前端只負(fù)責(zé)View層,展示數(shù)據(jù),現(xiàn)在前后端分離, 前端把控制層Controller 也給搶走了, 可憐的后端程序猿只剩下RESTful服務(wù)提供的數(shù)據(jù)了, 再加上Node.js趁火打劫,入侵服務(wù)器端, 有木有危機(jī)感?
但我還是對(duì)后端編程情有獨(dú)鐘, 原因很簡(jiǎn)單, 相比GUI編程, 我更喜歡API編程, 有點(diǎn)費(fèi)解? 聽我慢慢道來(lái)。
1 單機(jī)時(shí)代的GUI
最早的時(shí)候我其實(shí)也是挺喜歡GUI編程的, 誰(shuí)愿意只在命令行下折騰呢?
作為“初戀”的C語(yǔ)言,雖然功能強(qiáng)大、效率高, 但是只能在命令行窗口寫點(diǎn)小程序, 很無(wú)趣。
后來(lái)遇到VB, 不由的眼前一亮: 哇塞, 還能這么寫程序! 創(chuàng)建一個(gè)窗體,把各種各樣的控件拖動(dòng)上去, 擺好位置, 設(shè)好屬性,然后雙擊,在onClick方法中寫下代碼就ok了。
號(hào)稱VB殺手的Delphi 也類似, 都是所謂的RAD(Rapid Application Development) 。
當(dāng)時(shí)的控件多如牛毛,上了年紀(jì)的程序員應(yīng)該還記得CSDN出的《程序員大本營(yíng)》, 里邊有張光盤,全是程序猿們開發(fā)的VB控件, 你想發(fā)送郵件, 拖動(dòng)一個(gè)不可見的SMTP控件過(guò)來(lái), 設(shè)定郵箱服務(wù)器和端口, 直接就可以發(fā)信, 非常簡(jiǎn)單。 你想用一個(gè)定時(shí)器功能, 沒問題,那里有個(gè)定時(shí)器控件,可以直接使用 , 這才是真正的組件化開發(fā)。
由于開發(fā)出來(lái)的應(yīng)用只能在PC上, 在Windows上運(yùn)行, 不會(huì)出現(xiàn)如今手機(jī)端各種各樣的適配問題,壟斷在某些時(shí)候也是好處啊。
雖然這些桌面應(yīng)用程序不像Web頁(yè)面那樣美輪美奐, 但對(duì)于我這個(gè)缺乏藝術(shù)細(xì)胞的人來(lái)說(shuō), 這是GUI編程的黃金時(shí)代。
2 Web GUI
好景不長(zhǎng), 技術(shù)變遷很快, Web時(shí)代來(lái)臨了。
于是開始學(xué)HTML, CSS, Javascript, 忙著折騰個(gè)人主頁(yè), 做了沒多久就意識(shí)到, 用HTML產(chǎn)生頁(yè)面布局怎么這么麻煩,當(dāng)時(shí)CSS還不普及 , 頁(yè)面布局全靠一個(gè)表格套一個(gè)表格來(lái)做, 如果沒有Dreamweaver, Frontpage 這樣的軟件幫忙, 這些<tr><td>標(biāo)簽絕對(duì)會(huì)把人淹死。
光有布局還不行,還得弄圖片, 調(diào)顏色, 我在大學(xué)還學(xué)了photoshop , 想著自己設(shè)計(jì)。后來(lái)看到一本書上的例子, 在photoshop中不使用任何外界圖片, 從零開始做出一個(gè)可口可樂易拉罐出來(lái), 那光影效果當(dāng)時(shí)就把我震撼了, 立刻意識(shí)到自己不是搞藝術(shù)的這塊料, 還是老老實(shí)實(shí)的回去寫程序去吧。
個(gè)人主頁(yè)怎么辦? 我就Copy了一個(gè)別人的網(wǎng)站, 改了改,變成了這個(gè)樣子(圖片沒有顯示):
忘了Copy誰(shuí)的網(wǎng)站了, 向原作者表示歉意,當(dāng)時(shí)是學(xué)生,知識(shí)產(chǎn)權(quán)意識(shí)不夠,擱現(xiàn)在肯定得掏錢去買。
現(xiàn)在一般的開發(fā)團(tuán)隊(duì)都配有美工, 可以設(shè)計(jì)界面,設(shè)計(jì)完還能“切圖”,形成漂亮的html+css的靜態(tài)頁(yè)面, 接下來(lái)的問題就是怎么把靜態(tài)的網(wǎng)頁(yè)變成動(dòng)態(tài)的網(wǎng)頁(yè), 這就八仙過(guò)海,各顯神通了。
傳統(tǒng)的方式就是在服務(wù)器端完成, 利用各種各樣的模板技術(shù), 在靜態(tài)頁(yè)面中加上動(dòng)態(tài)內(nèi)容, 直接生成HTML UI元素。
最近流行的就是讓瀏覽器來(lái)負(fù)責(zé), 通過(guò)js 調(diào)用后端API,把數(shù)據(jù)變成HTML UI元素后展示出來(lái)。
不管是那種方式, CSS都是不可或缺的。因?yàn)樗刂屏隧?yè)面的布局結(jié)構(gòu), 又是布局,快逃!
3 Java GUI
上了Java的賊船以后, 也做了一些GUI的工作, 相比于VB/Delphi拖放控件的便捷, 用Java寫界面簡(jiǎn)直就是地獄!
雖然也有圖形化的界面編輯器, 也可以拖放控件, 但是自動(dòng)生成的代碼那叫一個(gè)慘不忍睹。 更悲催的是,稍微手工改動(dòng)一下, 那個(gè)界面編輯器就可能不認(rèn)了。 絕大多數(shù)情況下還是直接寫代碼來(lái)生成界面。 (再次大聲疾呼:不要再Swing和AWT上浪費(fèi)精力,用的極少。 )
這里必須說(shuō)一下Java和VB在界面編程的區(qū)別, Java 的界面全是用代碼來(lái)生成的,就是說(shuō)你需要寫代碼創(chuàng)建一個(gè)按鈕, 寫代碼把這個(gè)按鈕放到什么地方去, 所以即使是GUI程序, 最終的表現(xiàn)形式也只是Java 文件而已。
VB則不同,它專門有個(gè).frm文件, 里邊存儲(chǔ)所有界面控件和布局的信息, 最終也需要把.frm打包發(fā)布。 所以在編輯界面這一點(diǎn), VB和Dephi 是非常方便的。
程序員們這么痛苦, 那些大牛肯定會(huì)來(lái)解救我們的, 比方說(shuō)能不能用XML來(lái)描述界面啊, 在XML中把各個(gè)控件及其布局關(guān)系都給描述好, 由系統(tǒng)讀取,創(chuàng)建界面,就像原來(lái)的.frm文件一樣。 Android 不就是這么干的嗎?
但是XML文件讀起來(lái)也夠痛苦的, 為了靈活性, 這個(gè)XML文件還不能隱藏起來(lái),有時(shí)候還要手工去改, 改完還不容易看到真正的效果, 唉,想想就頭大。
更不用說(shuō)Android的適配問題了, 不同屏幕尺寸,不同的分辨率, 不同的像素密度給程序員帶來(lái)了極大的工作量。
(每個(gè)矩形代表一種設(shè)備)
4 后端編程
啰嗦了這么多, 其實(shí)就想表達(dá)一個(gè)中心思想: 我是有點(diǎn)害怕GUI編程。 而Web 前端和App前端都是在和GUI打交道。
我甚至想,這可能和內(nèi)向的性格有關(guān)系, 擅長(zhǎng)和機(jī)器打交道, 不擅長(zhǎng)和人打交道。 前端需要琢磨用戶的心理、使用習(xí)慣、用戶體驗(yàn), 這不是我的優(yōu)勢(shì)。
在軟件編程領(lǐng)域, 與其費(fèi)力不討好的補(bǔ)上短板, 不如把自己的長(zhǎng)處發(fā)揮到極致。
既然如此,那就呆在后端編程吧, 這里沒有GUI, 只有API。 悄悄地躲在電腦的背后, 給Web前端和App前端提供服務(wù), 讓他們調(diào)用。
有人會(huì)說(shuō): 前端把Controller和View都拿走了, 后端就是個(gè)API的提供者,能折騰啥啊。
別小看后端編程,后端是非常有技術(shù)含量的,像什么高并發(fā)、緩存、負(fù)載均衡、分布式、消息隊(duì)列、安全、搜索、數(shù)據(jù)復(fù)制.... 每個(gè)方向都值得靜下心來(lái)去深挖。
不管前端技術(shù)怎么變化, 作為提供服務(wù)的后端總是要存在的,這是一大優(yōu)勢(shì)。
后端編程還有一個(gè)優(yōu)勢(shì)就是相對(duì)穩(wěn)定, 比起大爆炸的前端,后端技術(shù)的變化要緩慢一些, 心思不會(huì)那么浮躁, 有很多知識(shí)可以慢慢的沉淀。
對(duì)于那些不喜歡做GUI的同學(xué),不妨考慮下后端編程。
【本文為51CTO專欄作者“劉欣”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)coderising獲取授權(quán)】