談Web應用開發時我們談什麼

海興發表於2014-11-16

觀乎人文,以化成天下。-- 賁•彖傳
錢穆先生在《民族與文化》中講,民族是文化的主體,文化反過來又會融凝民族。所謂文化,有人文和化成兩方面的含義。古漢字中,文同紋,用在人文中是指可辨識的特點,同樣的用法還有水文、天文。具體來說,人文是指一個群體的生活方式、習俗等日常生活中所呈現出來的特點,即族群之紋。化成是指個人融入某個族群的人文的過程,我相信只要稍微想想,每個人都能舉出很多具體的例子,不過這種融入有淺層的,也有深層的。其實在我們碼農中也分佈著很多這樣的族群,每天用相同的語言、思維方式和工作方式做著相同的工作,形成了碼農特有的文化。前不久,寫字樓三層換了一撥人,我隱約覺得新來的是一批碼農,因為那種氣質感覺太熟悉了,等寫字樓換了樓牌,果然是IT事業部。

蒂姆·伯納斯-李1991年8月在瑞士用HTML為歐洲粒子物理研究所建立出世界上第一個網頁布蘭登·艾克1995年4月為網景瀏覽器開發出JavaScript,Sun公司1999年在Servlet 規範2.2中首次提出Web應用的概念,傑西·詹姆士·賈瑞特2005年創造了術語Ajax,全球資訊網聯盟(W3C)2014年10月完成HTML5標準。歷經20多載,全球資訊網飛速發展,無遠弗屆。但Web應用程式本質上一直沒變,依然是執行在瀏覽器中,由JavaScript、HTML和CSS構成的應用程式。可在伺服器端,Web應用的開發方式卻是百花齊放,異彩紛呈,也由此形成了為數眾多的Web應用開發族群。每個族群都有自己的語言、工作任務和開發方式,彼此也會發生爭執,互相攻擊。

作為Web應用開發的老碼農,我經歷過Java Web族群中Servlet、JSP、SSH、JSF的發展歷程,還嘗試過Scala版的Playframework。接觸過PHP、Python、ASP.Net、Flex和RoR,現在又變成了Node.js族群中的一員。進入每種技術時,雖然都是從Hello World開始,卻從來沒有真正系統地思考過Web應用這個World究竟什麼樣,總是迅速地和語言、框架、庫和各種小元件打得火熱,用各種方式做出一個又一個的ModelViewController。為了做一個有文化的碼農,我不想再渾渾噩噩地Coding,想要停下來梳理一下自己對Web應用開發這個世界的認識,形成我的Web應用開發世界觀。在談Web應用開發時,我們究竟在談什麼呢?我想,這個世界主要由兩部分組成:

  1. Web應用
  2. 開發

是的,Web應用和開發很明顯是兩個不同的主題。

Web應用

就Web應用而言,就像現在所有人都承認地球是太陽系的一顆行星一樣,大家公認的Web應用本質上是客戶端(主要是瀏覽器)通過HTTP(S)傳送請求,伺服器端對請求進行處理,然後通過HTTP(S)返回響應,響應或者是可渲染的HTML頁面,或者是JSON、XML格式的API處理結果。就Web應用本身而言,各個開發族群面臨的問題域也是一樣的。我們日復一日的勞作,其實主要是為了解決下面幾類問題:

WebApp

我們的主要工作是解決實現Web應用功能的核心問題,雖然每個專案的具體需求不同,但在技術上都會涉及到的下面這些要素:

  • 請求:定義請求所用的HTTP謂詞(GETPOST等)和要傳遞的資料。
  • 響應:定義響應的返回形式(HTML或JSON等)和構成響應的資料。
  • 路由/控制器:將URL路徑對映到處理請求的動作。
  • 狀態:處理需要在不同請求間傳遞的狀態資料,比如使用者資訊、選購商品等。
  • 資料:定義模型及其CRUD操作。

此外我們還要解決保證Web應用正常執行的外圍問題。相較於上面那些問題,下面這些問題的共性更強,通常是將已有的元件根據專案情況引入進來,配置好:

  • 安全
    • 配置HTTPS協議,實現安全的資料傳輸;
    • 認證與授權;
    • 對惡意攻擊的防範;
  • 效能:為更快交付響應而採取的各種措施
    • 擴充套件;
    • 架設代理伺服器;
    • 壓縮響應資料包;
    • 打包、縮小靜態檔案;
  • 監測:開發階段為維護階段做的準備工作,主要是為了保證Web應用正常執行,以及提供問題追蹤線索
    • 記錄日誌
    • 捕獲異常情況及錯誤報告
    • 監測分析

這些問題域展開來看,每部分都會有更多細節,對應著Web應用中某處的程式碼,也就是我們要做的工作。或者框架、庫、元件幫我們做的工作。

enter image description here

再細化就是各個不同族群的實戰,就像從主幹發散出去的支脈一樣,這些支脈形成了各個族群特有的社會形態。

開發

開發過程是在某種方法論的指導下使用各種工具完成Web App編碼的過程。編碼本身就是一個複雜的任務,所以除了Web App這個標的物,還需要考慮很多問題。在開發Web App時,最起碼要涉及到下面這些內容:

enter image description here

開發Web App是我們Web開發碼農日常的主要活動,每天都要在上面投入幾個甚至十幾個小時(這個應該佔大多數)。我們在開發Web App時,我們在做什麼呢?

  • 方法論:這個是戰略層面的,類似於指導思想,要一直學習和不斷踐行的。但老闆們應該更關心這個課題。
    • 專案:主要解決做什麼,會花多大代價做的問題;
    • 過程:歸根結底是為了保證團隊能夠協作
    • 人:碼農及其他。。。
  • 環境:一般是開發專案開始階段要做的工作,就像建廠房,置辦生產工具和物料一樣。
    • 開發語言:這個一般是決定性因素,跟現實語言的地位一樣,選了什麼樣的語言,一般也就選了什麼文化
    • 庫:這是語言的翅膀
    • 框架:幾乎所有Web App都會以一個框架為基礎,所以這是Web App的基礎和核心
    • 工具:幫我們完成日常工作的各種工具,個個都要熟悉
    • 專案原型:或者叫專案模板、專案骨架,總之是開始工作的起點
  • 日常工作:除了編碼,我們還要做很多事情
    • 編碼:一行又一行
    • QA:既要寫測試程式碼,還要做各種檢查
    • 版本控制:把程式碼放到版本控制系統中非常重要,不然出了問題哭都來不及
    • 除錯:這是必不可少的工作,因為程式碼總會有問題,不經過除錯就能通過測試的程式碼或者是因為太簡單了,或者因為寫程式碼的是碼神

當然,上面很多問題並不是Web App開發獨有的。針對這些問題域,有些是各個族群,甚至整個行業共通的,比如方法論;有些工具也是,比如版本控制工具Git。但大多數問題域中,各族群都有自己的特色,並且在同一族群內部,有些問題一般也不止一種解決方案。

把上面這些問題乘以各大主流的開發族群,你應該可以想象得出Web App開發是個多麼豐富多彩的課題了吧。把簡單的事情搞複雜,往往是因為對問題的認識不夠深刻。認識這個世界需要時間,也需要大家不斷努力地嘗試。而Node.js對人們認識Web App開發做出了卓越的貢獻。

Node.js的Web App開發世界

寫到這裡,我必須說,其實這是一篇軟文,據說《用Node.js與Express開發Web應用》很快就要出版了,敬請期待!

相關文章