談Web應用開發時我們談什麼
觀乎人文,以化成天下。-- 賁•彖傳
錢穆先生在《民族與文化》中講,民族是文化的主體,文化反過來又會融凝民族。所謂文化,有人文和化成兩方面的含義。古漢字中,文同紋,用在人文中是指可辨識的特點,同樣的用法還有水文、天文。具體來說,人文是指一個群體的生活方式、習俗等日常生活中所呈現出來的特點,即族群之紋。化成是指個人融入某個族群的人文的過程,我相信只要稍微想想,每個人都能舉出很多具體的例子,不過這種融入有淺層的,也有深層的。其實在我們碼農中也分佈著很多這樣的族群,每天用相同的語言、思維方式和工作方式做著相同的工作,形成了碼農特有的文化。前不久,寫字樓三層換了一撥人,我隱約覺得新來的是一批碼農,因為那種氣質感覺太熟悉了,等寫字樓換了樓牌,果然是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應用開發時,我們究竟在談什麼呢?我想,這個世界主要由兩部分組成:
- Web應用
- 開發
是的,Web應用和開發很明顯是兩個不同的主題。
Web應用
就Web應用而言,就像現在所有人都承認地球是太陽系的一顆行星一樣,大家公認的Web應用本質上是客戶端(主要是瀏覽器)通過HTTP(S)傳送請求,伺服器端對請求進行處理,然後通過HTTP(S)返回響應,響應或者是可渲染的HTML頁面,或者是JSON、XML格式的API處理結果。就Web應用本身而言,各個開發族群面臨的問題域也是一樣的。我們日復一日的勞作,其實主要是為了解決下面幾類問題:
我們的主要工作是解決實現Web應用功能的核心問題,雖然每個專案的具體需求不同,但在技術上都會涉及到的下面這些要素:
- 請求:定義請求所用的HTTP謂詞(
GET
、POST
等)和要傳遞的資料。 - 響應:定義響應的返回形式(HTML或JSON等)和構成響應的資料。
- 路由/控制器:將URL路徑對映到處理請求的動作。
- 狀態:處理需要在不同請求間傳遞的狀態資料,比如使用者資訊、選購商品等。
- 資料:定義模型及其CRUD操作。
此外我們還要解決保證Web應用正常執行的外圍問題。相較於上面那些問題,下面這些問題的共性更強,通常是將已有的元件根據專案情況引入進來,配置好:
- 安全
- 配置HTTPS協議,實現安全的資料傳輸;
- 認證與授權;
- 對惡意攻擊的防範;
- 效能:為更快交付響應而採取的各種措施
- 擴充套件;
- 架設代理伺服器;
- 壓縮響應資料包;
- 打包、縮小靜態檔案;
- 監測:開發階段為維護階段做的準備工作,主要是為了保證Web應用正常執行,以及提供問題追蹤線索
- 記錄日誌
- 捕獲異常情況及錯誤報告
- 監測分析
這些問題域展開來看,每部分都會有更多細節,對應著Web應用中某處的程式碼,也就是我們要做的工作。或者框架、庫、元件幫我們做的工作。
再細化就是各個不同族群的實戰,就像從主幹發散出去的支脈一樣,這些支脈形成了各個族群特有的社會形態。
開發
開發過程是在某種方法論的指導下使用各種工具完成Web App編碼的過程。編碼本身就是一個複雜的任務,所以除了Web App這個標的物,還需要考慮很多問題。在開發Web App時,最起碼要涉及到下面這些內容:
開發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應用》很快就要出版了,敬請期待!
相關文章
- 當我們談優化時,我們談些什麼優化
- 當我們談 Java 併發的時候,你們在談什麼?Java
- 當我們談論格鬥遊戲時,我們在談論什麼遊戲
- 當我談開源時,我談些什麼?
- 當我們在談論HTTP快取時我們在談論什麼HTTP快取
- 當我們談論Promise時,我們說些什麼Promise
- 當我們談論CloudTable時究竟在談論什麼?Cloud
- Web開發牛人訪談:你們都在用什麼?Web
- 當我談 HTTP 時,我談些什麼?HTTP
- 當我們談深度學習時,我們用它落地了什麼?深度學習
- 當我們在談論建構函式注入的時候我們在談論什麼函式
- 我們們一起來談談,redis為什麼快?Redis
- 當我們談論Spring的時候到底在談什麼Spring
- 是時候談談JavaScript物件導向了!(我們什麼時候更需要它)JavaScript物件
- 當我談跑酷遊戲時,我在談些什麼遊戲
- 淺談入行Qt桌面端開發程式設計師-從畢業到上崗(1):當我們說到桌面端開發時,我們在談論什麼?QT程式設計師
- Web應用防火牆是什麼?談談原理及部署建議Web防火牆
- 當我們談微服務,我們在談什麼 (3) — 如何保障微服務的穩定性微服務
- 我們究竟在怕什麼?——談談恐怖遊戲的元素堆砌遊戲
- 當我們談論Virtual DOM時,我們在說什麼——etch原始碼解讀原始碼
- 瞧,我們組的Web應用開發方式Web
- 為什麼我們仍在談論軟體整合?
- 當談到 GitLab CI 的時候,我們該聊些什麼(上篇)Gitlab
- 《JavaScript Web應用開發》作者Nicolas Bevacqua訪談問題徵集(圖靈訪談)JavaScriptWeb圖靈
- Repractise基礎篇:Web應用開發七日談Web
- Web | 淺談用Python進行Web開發WebPython
- HMS Core Insights第三期直播回顧 – 當我們在談論App的時候,我們還可以談論什麼?APP
- HMS Core Insights第三期直播預告—— 當我們在談論App的時候,我們還可以談論什麼?APP
- 當談到 GitLab CI 的時候,我們都該聊些什麼(下篇)Gitlab
- 開發Web應用為什麼要用TypeScript?WebTypeScript
- 袁紅崗訪談:是什麼讓我們選擇了開源?(轉)
- 淺談canvas在web開發中的應用與優化CanvasWeb優化
- 面試併發volatile關鍵字時,我們應該具備哪些談資?面試
- 馬什麼梅?I什麼N?淺談 web 前端開發中的國際化Web前端
- 當我們談深度學習時,我們用它落地了什麼?阿里雲內容安全功能全新升級深度學習阿里
- 因開發ChatGPT應用被約談ChatGPT
- 淺談桌面應用程式的開發
- Apple Watch應用開發經驗談:我遇到的那些坑APP