天天看點

Web技術發展史

Web技術發展史

Web開發指的是網頁系統開發,每次在浏覽器中輸入網址時,總會先輸入www,這裡其實是World Wide Web的簡稱,現在也簡稱Web,中文譯為網際網路。

Web設計初衷是一個靜态資訊資源釋出媒介,通過超文本标記語言(HTML)描述資訊資源,通過統一資源辨別符(URI)定位資訊資源,通過超文本轉移協定(HTTP)請求資訊資源。HTML、URL和HTTP三個規範構成了Web的核心體系結構,是支撐着Web運作的基石。

Web技術發展史

這樣說太過專業化了,用簡單的話說,打個比方:假設有100台計算機,這100台計算機可以分布在世界任何一個地方,無所謂。如果我想讓這100台計算機互相通信,怎麼辦。那把這100台計算機用光纖互相連接配接起來吧,組成一個網路。

到這還不行,這隻是硬體上連接配接起來了,通信是可以通信了,但計算機們都不知道對方發的消息是什麼意思,而且尋址也是一個問題。這時就需要一個通信協定了,然後TCP/IP就誕生了。有了這個協定後,100台計算機算是真正可以發送消息了,而Web就是建立在這個基礎上的。

再設想一下,現在1号計算機想擷取99号計算機上磁盤上的一張圖檔,怎麼辦?這時URI就誕生了,URI作為統一資源辨別符,專做這個事情。那麼拿到資源後怎麼展示就是HTML做的事情了,而計算機通信的協定就是通過HTTP協定了(HTTP協定是基于TCP協定的一個上層協定)。

是以,大家開發的Web應用本質上就是将伺服器中的資源提供的網際網路中,成為Web這個全球超大規模分布式系統中的一部分。下面我就來扒一扒Web開發經曆過哪些階段。

1. 靜态網頁時代

1994年,網景公司(Netscape)釋出了Navigator浏覽器0.9版。這是曆史上第一個比較成熟的網絡浏覽器,轟動一時。但是,這個版本的浏覽器隻能用來浏覽,不具備與通路者互動的能力。最初在浏覽器中主要展現的是靜态文本或圖像資訊,即将網頁的HTML代碼編寫好,然後将他放在伺服器上通過浏覽器通路這個靜态的HTML檔案。

這個時期的技術處于較為原始階段,沒有Javascript,沒有CSS的年代,寫出的HTML給人的感覺就是一些文字堆砌在一起,沒有美感,也不存在動态互動。隻有GIF圖檔第一次為HTML頁面引入了動态元素。那時的網頁大緻長這個樣子

Web技術發展史

此時的網景公司(Netscape)也苦于浏覽器沒有動态效果,是以急需一種腳本語言,後來網景公司開發出了一門新語言javascript,有了Javascript後使用者就具備了與浏覽器互動的能力。但是頁面的畫風太醜,一直被人們吐槽,是以大概在同時期又誕生了另一名語言CSS,專門負責定義HTML的标簽樣式。

1994年,W3C組織(World WideWeb Consortium)成立,CSS的創作成員全部成為了W3C的工作小組并且全力以赴負責研發CSS标準,層疊樣式表的開發終于走上正軌,有越來越多的成員參與其中。Javascript與CSS兩大前端語言誕生後,靜态頁面也可以像桌面應用程式那樣美觀和動态互動了,下面是蘋果公司早期的首頁

Web技術發展史

那時Web的工作原理也相對簡單,就是浏覽器請求伺服器的靜态HTML檔案,然後伺服器将靜态檔案傳回給浏覽器渲染成文本展示,其工作流程大緻如下圖

Web技術發展史

2. 動态内容CGI時代

随着業務發展,人們已經不僅僅滿足于通路放在Web伺服器上的靜态檔案,比如你想讓通路者看到有多少其他通路者通路了這個網站,或者想讓客戶去填寫這樣一個表單,包含有姓名和郵件位址,要實作這樣的功能,意味着用戶端與服務端要進行資料互動,而且服務端還需要把使用者資料永久的儲存起來,這些功能是靜态頁面無法實作的。

于是1993年CGI(Common Gateway Interface)出現了,Web上的動态資訊服務開始蓬勃興起。CGI定義了Web伺服器與外部應用程式之間的通信接口标準,是以Web伺服器可以通過CGI執行外部程式,讓外部程式根據Web請求内容生成動态的内容。

Perl因為跨作業系統和易于修改的特性成為CGI的主要編寫語言。當然,CGI可以用任何支援标準輸入輸出和環境變量的語言編寫,比如Shell腳本,C/C++語言,隻要符合接口标準即可。

比如用C語言編寫CGI程式,把希望傳回的HTML内容通過printf輸出就可以發送給Web伺服器,進而傳回給使用者。CGI應用程式運作在浏覽器可以請求的伺服器系統上,此時Web開發的架構大緻如下圖

Web技術發展史

由于CGI執行時需要使用伺服器CPU時間和記憶體。如果有成千上萬的這種程式同時運作,會對伺服器系統提出極高的要求。你要慎重考慮這個問題,以防止伺服器系統崩潰。當時組織CGI/Perl這樣的腳本代碼太混亂了。

CGI伸縮性不是太好(經常是為每個請求配置設定一個新的程序),也不太安全(直接使用檔案系統或者環境變量),同時也沒提供一種結構化的方式去構造動态應用程式。如果一個CGI腳本可以在每台計算機上做同樣的事情;編寫腳本就會變的很容易。

不幸的是,CGI腳本依賴于伺服器的作業系統,是以,對于非UNIX伺服器來說,Prl(UNIX下編寫腳本的一個常用工具)腳本毫無用處。這也是開發人員最痛苦的事情,這意味着同一個應用服務,需要根據不同的作業系統各自開發一套。是以,你必須定制安裝你的CGI腳本。這也是後來基于 JVM 平台的語言流行的主要因素。

3. 模闆引擎時代

(1)PHP/ASP時代

盡管CGI解決了網頁動态資料的問題,但它的弊端也是越來越明顯,依賴于作業系統,移植性差,HTML代碼與服務端代碼雜糅在一起不便于維護。為了處理更複雜的應用,人們在想能不能把HTML傳回中固定的部分存起來(我們稱之為模版),把動态的部分标記出來, Web請求處理的時候,程式先擷取動态資料,再把模版讀入進來,把動态資料填充進去,形成最終傳回。

舉個例子,你通過頁面搜尋框搜尋一個關鍵詞,請求到達Web伺服器,背景從資料庫或是檔案裡拿到資料,然後把這些資料填充到傳回結果的HTML模版中,傳回給浏覽器。

但是這件事情自己來做顯然太繁瑣而且是重複勞動,于是1994年的時候,PHP誕生了,PHP可以把程式(動态内容)嵌入到HTML(模版)中去執行,不僅能更好的組織Web應用的内容,而且執行效率比CGI還更高。

之後96年出現的ASP上也都可以看成是一種支援某種腳本語言程式設計,ASP使用VB語言的模版引擎。更重要的是,模闆引擎的出現使得HTML代碼和服務端代碼分離開來,使得開發流程更加規範,邏輯更加清晰。而CSS允許開發者用外聯的樣式表來取代難以維護的内嵌樣式,而不需要逐個去修改HTML元素,這讓HTML頁面更加容易建立和維護。

此時,有了這些腳本語言,搭配上後端的資料庫技術,Web更是開始大殺四方了,像電子商務這樣的應用系統也可以通過Web技術來建構。Web已經從一個靜态資源分享媒介真正變為了一個分布式的計算平台了。

反過來看,你也應該知道,不是隻有當今這些流行腳本語言可以寫Web應用,C語言一樣可以做這件事情。通過C語言來擷取資料和渲染Web頁面的例子在追求極緻通路速度的網際網路公司是非常常見的,但是腳本語言在開發效率上更勝一籌。

(2)JSP/SERVLET時代

Servlet是一個優秀的Web技術規範,Servlet 看起來像是通常的 Java 程式。Servlet 導入特定的屬于 Java Servlet API 的包。因為是對象位元組碼,可動态地從網絡加載,可以說 Servlet 對 Server 就如同 Applet對 Client 一樣,但是,由于 Servlet 運作于 Server 中,它們并不需要一個圖形使用者界面。從這個角度講,Servlet 也被稱為 FacelessObject。

由于前後端互動的問題,sun公司又釋出了JSP,JSP全稱是Java Server Pages,它和Servlet技術一樣,都是sun公司定義的一種用于開發動态web資源的技術。JSP最大的特點在于,寫jsp就像在寫html,但它相比html而言,html隻能為使用者提供靜态資料,而Jsp技術允許在頁面中嵌套java代碼,為使用者提供動态資料。它的出現一改以前java開發人員需要在Servlet中自己将html代碼 out.write 傳回給前端的工作方式,而是直接在jsp中編寫html代碼,極大的友善了開發人員的使用。這時已經初見前端分離的雛形了。

jsp出現後,美工可以把頁面原型圖畫好,再交給前端工程師按照原型圖将靜态頁面寫出來,待靜态頁面寫好後,再交給java開發工程師把html代碼複制到jsp中,這時隻需要把後端處理的值填到對應的jsp中即可。對于一個系統開發,人員可以明确分工,前端後端開發部分可以同時進行。這個時期後端架構圖大緻如下

Web技術發展史

4. JavaEE時代

Web開始廣泛用于建構大型應用時,在分布式、安全性、事務性等方面的要求催生了J2EE(現在已更名為Java EE)平台在1999年的誕生,從那時開始為企業應用提供支撐平台的各種應用伺服器也開始大行其道。Java Servlet、Java Server Pages (JSP)和Enterprise Java Bean (EJB )是Java EE中的核心規範,Servlet和JSP是運作在伺服器端的Web元件。

2000年随之而來的.net平台,其ASP.net構件化的Web開發方式以及Visual Stidio.net開發環境的強大支援,大大降低了開發企業應用的複雜度。ASP.Net第一次讓程式員可以像拖拽元件來建立Windows Form程式那樣來元件化地建立Web頁面,Java平台後來出現的JSF也承襲了這一思想。兩大平台在互相競争和模仿中不斷向前發展。

EJB運作在伺服器端的業務元件,是一種分布式元件技術J2EE裡,除了Servlet外另一個重量級的規範就是EJB。EJB設計的來源是Corba技術,分布式對象技術在EJB規範中有完整的展現。

Rod在著作中對EJB規範粗重龐大難用提出各種質疑,尤其是針對其強制分布的要求。我的觀念是分布式支援沒有錯,現在EJB規範中對于Local和Remote的劃分定義是正确的。開發人員應該一開始就需要了解接口粒度的劃分,本地和遠端接口是不同的。

對于一般的小型應用,Servlet和EJB容器都在一個虛拟機中,本地接口是合理的,但對于大型企業應用和網際網路級别應用,勢必需要服務的遠端劃分和調用。是以早期的EJB,可以說一方面設計不完備,另一方面又過度設計。

但EJB自從3以後完全脫胎換骨,成為設計良好的規範。大家有沒有想過所謂企業應用和普通應用之間最大的差别是什麼?我認為是使用者數量級别的差異,導緻前端設計方式,軟體體系,背景資料庫,緩存技術應用,有不同的設計理念和方式。

用更技術化來說,就是可擴充性,高可用性,容災能力以及資料的一緻性。實際上這樣的思維方式很好,因為企業應用追求的是穩定,是以在架構設計時一是要求效率,二是面向失敗程式設計,即開發時首先不是想正常情況下應該怎麼樣,而是把是以有能異常的情況都考慮在裡面,并為異常情況做好解決措施。從軟體層面考慮,一個企業應用軟體可能使用者數并不太多,就企業中百來号人,但前背景的互動是長時間,多次會話互動的。

JSF技術其實是借鑒了微軟ASP.net,它們繼承了傳統IDE快速開發的思路,希望通過拖拽連接配接可以快速開發一個應用。頁面上的元件,對應背景伺服器的業務元件,在得到伺服器請求之後,元件需要做一系列動作來完成解析,校驗,模型重建,業務方法調用,頁面渲染等步驟,這些必然有個較長的過程。

複雜性,效率,和其他技術的融合,JSF技術從誕生起就被質疑不斷,而且面對每個明星技術,都有些格格不入,比如Ajax出現了,而JSF要求的Post方式還需要重刷頁面。但JSF一直在改進,越來越科學完善。如今,配合CDI,JSF是企業應用開發的首選技術之一,大家可以研究一下Oracle的應用産品和ADF開發架構。

Web技術發展史

5. Web層架構百花齊放

後端技術逐漸規範穩定後,為了提高工作效率避免重複造輪子。Web技術的發展開始了一段架構橫飛的年代,各種輔助Web開發的技術架構層出不窮。雖然腳本語言大大提高了應用開發效率,但是試想一個複雜的大型Web應用,涉及到的Web頁面多種多樣,同時還管理着大量的背景資料,是以我們需要在架構層面上解決維護性和擴充性等問題。

這個時候,MVC的概念被引入到Web開發中來了。2004年出現的Struts就是當時非常流行的Java Web開發的MVC架構。MVC早在1978年就作為Smalltalk的一種設計模式被提出來了,應用到Web應用上,模型Model用于封裝與業務邏輯相關的資料和資料處理方法,視圖View是資料的HTML展現,控制器Controller負責響應請求,協調Model和View。Model,View和Controller的分開,是一種典型的關注點分離的思想,不僅使得代碼複用性群組織性更好,使得Web應用的配置性和靈活性更好。這是Spring MVC的示意圖,典型的MVC架構。

Web技術發展史

MVC的架構不僅僅是後端代碼分層結構,由于各個層次互相解耦,是以使用者可以根據業務場景合理選擇各個層次的架構。例如View層可以使用jsp,thymeleaf。Model層可以使用mybatis,hibernate。Controller層可以使用Spring,Struts等等。也正是MVC的架構,使得各式各樣的架構層出不窮。

6. CSS,Jacascript

上面主要說了後端web技術的演變,随着後端技術的發展前端技術也在日新月異,如今前端網頁開發與莽荒時代的靜态網頁相比,不僅有各種各樣的UI架構,更是參考了後端技術,在前端也實作MVC的架構。下面就來看一看前端技術的演變。

首先就是CSS和JS的誕生。javacript的誕生還有一段故事,前面說到網景公司開發的浏覽器隻能展示靜态頁面,是以網景公司想在浏覽器端嵌入一種語言或是腳本,使得使用者可以和浏覽器做一些動态互動,進而提升使用者的體驗。

當時網景公司有兩個方案:一個是采用現有的語言,如Perl、Python、Tcl、Scheme等等,允許它們直接嵌入網頁;另一個是發明一種全新的語言。高層對于兩個方案一時難以決定,就在這時,發生了另外一件大事:1995年Sun公司将Oak語言改名為Java,正式向市場推出。

Sun公司大肆宣傳,許諾這種語言可以”一次編寫,到處運作”,它看上去很可能成為未來的主宰。網景公司動了心,決定與Sun公司結成聯盟。它不僅允許Java程式以applet(小程式)的形式,直接在浏覽器中運作;甚至還考慮直接将Java作為腳本語言嵌入網頁,隻是因為這樣會使HTML網頁過于複雜,後來才不得不放棄。

此時,34歲的系統程式員Brendan Eich登場了。1995年4月,網景公司錄用了他。公司決定指派他作為新語言的開發者,并要求這個語言必須與java足夠相似,但比java簡單。但是,他對Java一點興趣也沒有。

為了應付公司安排的任務,他隻用10天時間就把Javascript設計出來了。(ps:與大神的差距,别人10天開發出一門語言,我10天能完全上手一門新技術就不錯了:)由于設計時間太短,語言的一些細節考慮得不夠嚴謹,導緻後來很長一段時間,Javascript寫出來的程式混亂不堪。誰也想不到如今世界排名前5五的Javascript竟是在10天内被開發出來的。

随着HTML的成長,為了滿足頁面設計者的要求,HTML添加了很多顯示功能。但是随着這些功能的增加,HTML變的越來越雜亂,而且HTML頁面也越來越臃腫。于是CSS便誕生了。1994年哈坤·利提出了CSS的最初建議。而當時伯特·波斯正在設計一個名為Argo的浏覽器,于是他們決定一起設計CSS。其實當時在網際網路界已經有過一些統一樣式表語言的建議了,但CSS是第一個含有“層疊”豐意的樣式表語言。

層疊樣式表(英文全稱:Cascading Style Sheets)是一種用來表現HTML(标準通用标記語言的一個應用)或XML(标準通用标記語言的一個子集)等檔案樣式的計算機語言。CSS不僅可以靜态地修飾網頁,還可以配合各種腳本語言動态地對網頁各元素進行格式化。CSS 能夠對網頁中元素位置的排版進行像素級精确控制,支援幾乎所有的字型字号樣式,擁有對網頁對象和模型樣式編輯的能力。

7. 浏覽器的魔術:AJAX

JavaScript最終被送出到歐洲計算機制造商協會(ECMA),做為中立的ECMA開始了标準化腳本語言之路,并将其命名為ECMAScript。JavaScript可以響應浏覽器端的使用者事件,檢測表單的正确性,動态修改DOM結構,是以可以減少與伺服器端的通信開銷,并且做出很酷的頁面動态效果。2005年出現的AJAX這個概念使得JavaScript再次大放異彩。AJAX即“Asynchronous Javascript And XML”(異步的JavaScript和XML技術)。

Ajax 不是一種新的程式設計語言,而是一種用于建立更好更快以及互動性更強的Web應用程式的技術。AJAX是一種已有技術的mashup,多種技術組合在一起形成了其特色和優勢,早在1998年就已經開始有人使用。

Google在地圖和Gmail等産品中對這項技術的深入應用,以及AJAX這個吸引眼球的名字的提出,使其正式站在了聚光燈下,開始吸引無數人的目光。我們知道Web應用中使用者送出表單時就向Web伺服器發送一個請求,伺服器接收并處理傳來的表單,并傳回一個新的網頁。

而前後兩個頁面中的往往大部分HTML代碼是一樣的,每次都傳回整個頁面内容是一種帶寬資源的浪費。而AJAX應用僅向伺服器發送并取回必須的資料,并在用戶端采用JavaScript處理來自伺服器響應,更新頁面的局部資訊。使用Ajax的最大優點,就是能在不更新整個頁面的前提下維護資料。這使得Web應用程式更為迅捷地回應使用者動作,并避免了在網絡上發送那些沒有改變的資訊。

對應用Ajax最主要的批評就是,它可能破壞浏覽器的後退與加入收藏書簽功能。在動态更新頁面的情況下,使用者無法回到前一個頁面狀态,這是因為浏覽器僅能記下曆史記錄中的靜态頁面。

一個被完整讀入的頁面與一個已經被動态修改過的頁面之間的可能差别非常微妙;使用者通常都希望單擊後退按鈕,就能夠取消他們的前一次操作,但是在Ajax應用程式中,卻無法這樣做。

不過開發者已想出了種種辦法來解決這個問題。AJAX的出現,催生諸如EXTJS、EASYUI等一些基于JS的前端架構。大大提高了前端頁面的開發效率。

Web技術發展史

8. 前端MVC:Angular/React/Vue

這種模式下,前後端的分工非常清晰,前後端的關鍵協作點是 Ajax 接口,規定好互動接口後,前後端工程師就可以根據約定,分頭開工,開發環境中通過Mock等方式進行測試,同時在特定時間節點進行前後端內建測試。

但是,随着業務功能的愈發複雜,這種模式本質上和JSP時代的Web開發并無本質差別,隻不過是将複雜的業務邏輯從JSP檔案轉移到了JavaScript檔案中而已。現在,對于一個前端功能、互動複雜的業務,大量的邏輯處理使得javascript的代碼量激增。很自然地,像服務端從JSP向MVC架構轉換的過程一樣,前端開發也出現了大量的MVC架構。

通過MVC架構又衍生出了許多其它的架構,統稱MV* ,最常見的是MVP與MVVM。總的來說,MV* 架構的提出是為了解決前端開發的複雜度,提供一套規則組織代碼、分層,通過合理的組織和分層,前端的代碼職責明确、清晰,便于開發與測試。目前比較優秀的前端MVC架構就是Angular.js,Vue.js和React.js。被尊為前端三大架構,下面分别介紹一下這幾個架構。

(1)REACT

React 起源于 Facebook 的内部項目,因為該公司對市場上所有 JavaScript MVC 架構,都不滿意,就決定自己寫一套,用來架設 Instagram 的網站。做出來以後,發現這套東西很好用,就在2013年5月開源了。

由于 React 的設計思想極其獨特,屬于革命性創新,性能出衆,代碼邏輯卻非常簡單。是以,越來越多的人開始關注和使用,認為它可能是将來 Web 開發的主流工具。支援虛拟DOM(Virtual DOM)群組件化的開發。

React官網和github位址

Web技術發展史

(2) ANGULAR

AngularJS 誕生于2009年,由Misko Hevery 等人建立,後為Google所收購。是一款優秀的前端JS架構,已經被用于Google的多款産品當中。AngularJS有着諸多特性,最為核心的是:MVC(Model–view–controller)、子產品化、自動化雙向資料綁定、語義化标簽、依賴注入等等。

AngularJS是協助搭建單頁面工程(SPA)的開源前端架構。它通過MVC模式使得開發與測試變得更容易。并試圖成為WEB應用中的一種端對端的解決方案。它将指導開發整個應用。

Angular 官網和github位址

Web技術發展史

(3) VUE

vue同時具備angular和react的優點,輕量級,api簡單,文檔齊全,簡單強大,麻雀雖小五髒俱全,目前在github上衆多的前端開源MVVM架構中vue擁有star最多。Vue是一個建構資料驅動的 web 界面的漸進式架構。Vue.js 的目标是通過盡可能簡單的 API 實作響應的資料綁定群組合的視圖元件。

Vue.js 自身不是一個全能架構——它隻聚焦于視圖層。是以它非常容易學習,易于上手,非常容易與其它庫或已有項目整合。另一方面,在與相關工具和支援庫一起使用時,Vue.js 也能完美地驅動複雜的單頁應用,其作者是尤雨溪是中國人。

Vue官網和github位址

Web技術發展史

前端有了MVC架構後,web開發就真正實作了前後端解耦,分離開發。至此web開發的架構圖大緻如下圖

Web技術發展史

9. JS在伺服器端的逆襲:Node.JS

各大浏覽器的競争,使其引擎的性能不斷提升,至今Google V8引擎的性能已經足以運作大型Javascript程式。在V8之上加以網絡、檔案系統等内置子產品,形成了如今的Node.js。随着Node.js的出現,JavaScript開始擁有在服務端運作的能力,它讓 JavaScript 成為與PHP、Python、Perl、Ruby 等服務端語言平起平坐的腳本語言。

釋出于2009年5月,由Ryan Dahl開發,實質是對Chrome V8引擎進行了封裝。它的異步本質使得Node.js在處理I/O密集型業務中優勢凸顯,而大多Web業務中I/O性能都是瓶頸。eBay、Yahoo、甚至Microsoft Azure紛紛引入Node.js以提升性能。

Node.js的package每天都有幾千萬的下載下傳量。這對前端工程師來說可是一個好消息,精通JavaScript的他們也能夠做服務端開發了!雖然現實中并不是這樣美好(服務端開發涉及的不僅僅是語言層面),但一種新的開發模式也是以興起:浏覽器端處理展現層邏輯、而服務端Controller這一層以及相關的模闆渲染、路由、資料接口以及Session/Cookie先關處理實際上交給了Nodejs來做。

通過Nodejs, 意味着前後端很多代碼可以複用(例如資料驗證,業務邏輯)。但另一方面,JavaScript剛被引入到伺服器端開發,其生态環境還未成熟,甚至大量的常用package主版本号都是0。長期用來實作頁面邏輯,天生自由的JavaScript,在伺服器端開發中,仍未形成統一的開發範型。不同開發原則和編碼風格的應用,都将對Node.js項目的性能、可維護性産生重大影響。

Node.js可以在不新增額外線程的情況下,依然可以對任務進行并發處理, Node.js是單線程的。它通過事件循環(event loop)來實作并發操作,對此,我們應該要充分利用這一點 , 盡可能的避免阻塞操作,取而代之,多使用非阻塞操作。

在幾年的時間裡,Node.JS逐漸發展成一個成熟的開發平台,吸引了許多開發者。有許多大型高流量網站都采用Node.JS進行開發,此外,開發人員還可以使用它來開發一些快速移動Web架構。

Web技術發展史

總結

現在Web技術依然在快速發展,Web本身的基礎規範也在不斷完善,HTML5和CSS3引入了更多激動人心的特性。回顧Web的發展曆史,從某個角度看,就是抽象層次不斷提高的一個過程,更高的抽象層次屏蔽更低層的複雜性,進而提高開發效率。

但任何技術架構都不是萬能的,每當技術發展到一定程度,或是出現某些局限性的時候,就會有更優秀的技術出現來解決這些局限性。其實這是計算機技術發展的一個普遍規律,比如進階語言的出現屏蔽了彙編語言的複雜性,幫助我們更快速的程式設計,更多的關注代碼和業務邏輯;資料庫技術的出現使得我們無需關心實體存儲和通路細節,簡單的SQL語句就能搞定我們本來需要複雜且晦澀難懂的底層的代碼才能完成的事情,更進一步,ORM架構使得我們通過一條語句調用一個類的一個方法就能友善就行資料操作。

我們應該讓自己的技術視野具備一定的高度和廣度,看到一門技術的發展規律和發展曆程,這是一種技術修養的展現,其實跟人文修養是一樣的。同時也應該具有一定的深度,因為我們往往站在比較高的抽象層次,比如今天你寫幾行代碼就能把資料庫建立好,增删改查的功能也自動生成好了,現在很多程式員對重複造輪子的事嗤之以鼻,實作功能或是遇到難點也是百度直接照搬代碼。重複造輪子确實降低了工作效率,在企業中當然會使用前人造好的輪子,但是作為技術人員如果隻是知其然而不知其是以然,那麼永遠隻是個勤勞的搬磚工。要成為高手需要你對底層的原理機制有更透徹的了解,真正遇到問題的時候才能抽絲剝繭迎刃而解。

繼續閱讀