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