標籤:發展趨勢 前後端 web 行動裝置 App 富用戶端
今天在csdn首頁看到一篇推薦文章《RethinkDB:為即時應用而生的開來源資料庫》
看了一段範例程式碼,如下:
r.table(geo).get('sfo')('location').toGeojson.run(conn, callback);// result passed to callback{ 'type': 'Point', 'coordinates': [ -122.423246, 37.779388 ]}讓我想起了ajax技術剛興起的時候,有一個比較有名的javascript架構(忘了準確的名字了,姑且叫做jsRMI),與此形似,也是試圖在前端網頁上通過javascript調用遠端邏輯介面(RMI)。
從這些架構的使用者(也就是互連網應用的開發人員)角度看——如果我沒有理解錯誤的話(rethinkDB我沒有細看它的feature list),兩者都是試圖在前端解決(部分)商務邏輯問題——或者我們稱之為侵入後台業務,那麼,兩者的區別只不過是程度上的不同——jsRMI只不過是“試探性”的侵入商務邏輯層,而RethinkDB則簡單粗暴的直接幹到了資料層。
於是乎,有了一個比較含糊的感覺, 這個感覺早已有之,但是始終無法明晰化,不妨先寫下來,以供以後參考驗證。
正如我的標題所說:Warning : caught an JavaWebDeveloperException() in MobiAppAge.foward() function
我感覺到了一個警告 Warning,雖然它還沒有升級到 ERROR、FATAL、CRASH等層級,但是也是一個比較明確的預兆,尤其是對web開發程式員而言——那就是,世界變了,傳統的互連網應用開發模式也變了。
java初期的的口號Write Once,Run Anywhere所針對的應用情境是洗衣機、電冰箱、電視機等等,藉著互連網的東風,以JavaApplet的視覺表現力風光一時,然後因為flash的出現,又馬上銷聲匿跡,轉入後端應用並大獲成功。
在這一場轉折中,互連網應用的開發分成了兩個涇渭分明的陣營:後端開發:重邏輯和業務——前端開發:重效果和表現力。
但是,富用戶端的出現,在解構這一切。
雖然富用戶端的提法已經很早,但是遵從互連網業內操蛋的”概念先行“慣例,直到今天,我們才能肯定和確認它的影響力,比如:行動裝置 App。
我們的戰場開始從PC端轉向移動終端——雖然PC的”使用者份額“仍然是大頭,但是,從市場的反應來看,移動端的”利潤份額“更高,也更能體現”價值規律“:無論是從資本方還是勞務方的角度來看。
一個簡單的例子就是:5年的java web開發人員和2年的android開發人員誰更容易達到期望的薪資水平?
我並無意於引發爭論或者表達對兩種開發人員技術水平高低的某種既定立場,也不想批判某些企業急功近利、蜂擁而上的思維模式,舉這個例子只不過簡單的說明一下市場對技術的認可程度。
也許web後端開發人員應該能夠警覺到”前/後端開發“某種平衡的破壞,甚至低頭承認自己的某些傲慢——”寫java是造原子彈,寫javascript是賣茶葉蛋“。事實上,金蛋銀彈還是壞蛋,歸根結底是市場說了算的。
比如Node.js的興起,我認為是一個很明顯也很成功的”需求決定論“的註腳。
我沒有興趣拿node.js在各項技術指標上去和java的某些架構去對比,這就和爭論”java和c++哪個效能更好“一樣無聊——我們早就該認識到,沒有爛的開發語言、只有爛的開發人員。
在我的眼裡,Node.js的最大特點是——它是基於javascript的。這也就是它成功的原因:傳統富用戶端的開發人員集中在基於Flash的action script領域和基於瀏覽器的javascript領域,而這兩種開發語言都是ECMA Script的子集——正因為如此,開發人員能夠輕鬆快捷的構建產品原型、驗證產品設計以及快速發布上線。
而在傳統的開發模式裡面,前後端開發分離的情況下,真正最直擊消費者的前端開發人員要花費和浪費大量的時間和精力去溝通需求、確定介面乃至於在各個後端功能模組的開發人員之間扯皮。
行動裝置 App領域的廝殺是慘烈的,拿著傳統的軟體工程和專案管理的經驗去硬套——這些經驗的總結很多還來自於與互連網無關的行業軟體領域——無異於自殺行為。
而在這種高烈度的瞬息萬變的環境中,一個優秀的PMP可能永遠無法達到”神經貓“發布三天訪問過億的成就——雖然”神經貓“的成功有一些”莫名其妙“的成分,但是不可否認的是,這種在產品和開發上的”投機“在行動裝置 App中甚至已經成為一種常態——發布十幾個甚至幾十個個小應用,然後期待其中的某個能夠成功,從而收回所有成本!
關注使用者、關注應用的體驗乃至視覺表現力——眼球經濟也好、以人為本也好、忽悠掙錢也好,大環境決定了前端開發人員的位置逐漸重要起來,而後端應用開發人員的”落寞“和”吃力不討好“是必然的。
不如我們設想這樣一個情境:當我們這些長期從事後端開發的”老程式員“還在設計MVC(模型、視圖、控制層),考慮是DTO還是POJO等等等等的時候,前端開發人員說:您歇會兒,沒這麼麻煩,我用RethinkDB、RebuildDB、RefactorDB之類直接調用資料庫就好了,反正app的邏輯也不複雜,而且我調用起來更方便。
很有壓力對不對?不過我覺得很有趣——這也是我一直所主張的東西——任何體系和結構的發展趨勢應該是簡單而不是複雜。
歸根結底,這是一場用戶端引發的血案——哈姆雷特同志無語問蒼天:THIN OR FAT CLIENT? THIS IS A QUESTION.
現實是,行動裝置 App的富用戶端定位,決定了戰鬥在後端的同志們要把很多的東西交出去,不管願意不願意。
以mvc模式為例:
Viewer已經完全放棄了,
Controller還能控制個毛線,mobi app只找你要簡單介面而已
Model?Node.js是跑在server上的啊,親~
寫到這裡,似乎也沒有什麼特別想嘮叨的話了,做個最後說明:
首先,我沒有鼓吹javascript和貶低java,只不過這兩種語言代表了最明顯的一個分野——需求的直接和多變 VS 實現上的複雜和頑固——我個人對php和python玩兒什麼OOP是很不以為然的。
其次,我的一個基本判斷是在行動裝置 App領域,傳統的前、後端開發的涇渭分明已經不存在,兩者在貼近——不管是外力還是內因、願意還是不願意。而技術的趨勢更偏重於輕量和快速的開發語言、架構和服務,其支援的服務對即時性、互動性要求更高。
再次,在瘦用戶端thin client領域,傳統的勢力範圍並未發生大的變化,變化的只是環境,包括利益——這也是讓開發人員糾結的地方,至少不少java開發人員轉行android是一個事實。
最後,該如何適應這種變化,我也沒有什麼答案。也許,
向前走——做android、ios開發;
向後走,去設計、實現更底層的高效能架構和服務(也許可能要扔掉http);
向左走,延續老本行,簡單的”二八率“的話,八成份額也還是PC
向右走,賣水果,賣大棗,幹嘛不吃飯呢:)
Warning : caught an JavaWebDeveloperException() in MobiAppAge.foward() function