這裏就不談論先後端分離的歷史了。先後端分離搞了好久。隨着前端技術愈來愈複雜,客戶對前端的要求日益上升。以能搞定全功能模塊的全棧工程師爲例,以往可能分配在前端的時間大概佔 60%-70%,如今估計得上升到 80%-90% 了。html
如今流行的方法是先後端分割開,交給兩班人馬分別開發。以如今公司的某項目爲例,該項目前端後端分爲兩個獨立的工程,發佈到兩個獨立的Web服務器,經過Nginx在聚合呈現爲一個網站。該項目進行了 2年多,開發人員各自技能卻是日益精深了,項目進展卻十分緩慢。修改功能必須配合行動,前端融合 session 內容分別輸出都難以實施。回過頭看,這種一個功能兩我的協商接口或者架構師定好接口分別開發的方式是不恰當的。這種先後端切割方式加重了溝通成本,也下降了對業務變動的響應能力。前端
我之前的開發方式是先後端合併的,每一個程序員都須要開發完整功能。當時的框架相似 d2js,前端功能不甚複雜,後端因爲框架簡單變得很簡單,雖然框架支持先後端分離,但開發中仍然保持全棧式開發。html5
後來接觸的公司裏,南京某公司的作法值得借鑑。該司後端由PHP實現,PHP程序員負責完成一個粗糙簡單的頁面(一片白,無任何CSS)。功能完成後,前端對該頁面進行美化。該司使用的是跳轉方式,不是AJAX方式,前端對後端有強依賴。node
如今我採起的辦法是,保持全棧的存在。根據功能特色,管理爲主的,全棧完成主要功能,前端負責跟進美化,操做爲主的,前端完成UI,後端再適當配合。複雜UI能夠組件化的,前端造成組件後供全棧使用。佈局始終由前端負責,但涉及權限的,交給後端。非AJAX的,後端完成後前端美化。程序員
這個方式的優勢有:編程
1. 完成功能優先。如今已經發現,美化界面工做會極大拖長工期。後端
2. 全棧發展較爲全面,和單獨的後端、前端均可以作有效溝通。避免了先後端想法不一樣致使前端幹一天后端幹一天對接又一天。服務器
3. 無先後端溝通成本,全棧人員對於業務的理解更透徹,甚至能夠獨立完成原型構想。網絡
4. 發揮了組件化技術的潛力,前端完成的組件能夠供全棧搭配,全棧設計的前端頁面也是一個組件,可供前端用於佈局。session
5. 前端基本能脫離業務。從這個角度看,分工其實更細了。
6. 後端開發的不僅獲得一個接口,而是真正設計出能夠看到的能運行的頁面(固然,這樣後端也就是全棧了)。我一直強調能展現。後端接口+文檔是不討人喜歡的,通信協議裏沒有 SAMPLE 是十分費解的。MOLECULE 是具備SAMPLE的組件設計方案,MOLECULE 組件正好包含在HTML頁面中,該HTML頁面既是組件的容器,也是組件的SAMPLE,能夠打開,打開就能看到運行起來的組件,對我來講這纔是一個完備的組件。如今出現一種 MOCK 開發工序,指後端開發完接口後,生成調用UI供試用,說來這項技術在2009年我就已經發明瞭。當時的接口是基於 JAVA 的 DSL,分析 DSL 就能夠獲得 MOCK 測試 UI。
和不少框架不一樣,d2js 框架是一個先後端框架,前端後端互相配合,又相對獨立,可分可合。能設計出這樣的框架,也得益於本人對於先後端都有清晰超前的認識。
記得很早以前思考一個理想人的問題。假如某我的無所不能,先後端開發都會、產品設計、UI設計、商務等等,無所不能,能夠想象,若是這我的有10倍於人的效率,他能帶來的產出將遠大於10我的的公司。設計工做流程,組織架構,能夠將組織設想爲一個盡力完善的理想人。
說到這裏,可能有人會輕率得出結論:最好的組織架構就是一個大腦統領身體,具備強大的執行力,指哪兒打哪兒。這個模式是行得通的,若是這個大腦與身體切實無礙的連通。有一些人,好比喬布斯,確實能夠作到這一點。喬布斯是產品經理型的人,不是編程高手但懂編程,可能也不能使用Photoshop 可是通曉設計。這顆大腦能夠參與技術討論,也能夠參與設計的討論。正如神經元的突觸,喬布斯的神經元能夠與各種其餘神經元互相激活。
若是公司領袖的大腦足夠健壯,能夠造成一種星型拓撲的聯邦結構。
但後來的研究代表,人類的神經系統並非這種大腦控制一切的中樞控制式的系統。人類的不少行爲都不須要大腦幹預,而是造成一個個自組織式的聚落小系統。如消化器官的消化活動,敲擊鍵盤的活動中手指的控制,都是部分區域的神經網絡完成的。以往認爲,大腦神經皮層按分區行使不一樣職能。如今發現,當某個分區受損時,其它區域的皮層也能夠轉化出相應功能。甚至有一個著名的醫學案例:無腦人。
Brain of a white-collar worker - The Lancet
http://www.thelancet.com/journals/lancet/article/PIIS0140-6736(07)61127-1/fulltext
分工日益複雜後,一個大腦聯絡支配全部大腦的思惟已經行不通。做爲最高BOSS,同時通曉公司全部技能已不現實,所能進行的是找到能理解戰略,造成戰術上的思路,能互動的大腦,如能造成市場戰術、產品戰術、研發戰術、運維戰術、生產戰術的大腦。
BOSS 能夠採起捉對廝殺策略,本身和市場、產品、研發、運維等分別溝通。但若是市場、產品、運維等之間存在互相溝通,團隊狀況會好得多。
1. 各個分工角色對總體事業的認識更深
2. 事業中有本身的認知,更有成就感
3. 不一樣的視角互相刺激,能夠造成更好的方案
4. 各角色從單薄的認知化爲複合認知,戰鬥力更強
也就是說:中層之間能夠溝通能夠形成更多神經元之間的刺激機會,使不一樣的大腦組成更大的神經網絡,打造更活躍的團隊。可想而知,大腦之間享有的共同熱點越多,共振會越強。
通常來講,因爲分工壁壘,互相瞭解程度僅止於原理性瞭解,不可能作到交換分工也能上崗。
一我的同時掌握 JAVA 框架和 JS 語言彷佛並不現實,但和 nodejs 同樣,d2js 也是 js 語言打通先後端的框架,使用 d2js 框架,一我的同時通曉先後端並不是難事。d2js 培訓成本很是低,通常來講培訓不到5個工做日就能夠上手,有的人經過自學也能在很多天內掌握 d2js。這種開發方式戰鬥力要顯著優於先後端機械割裂的方式。
可否由前端實現UI設計後,全棧將其變爲能夠活動的呢?我認爲徹底能夠!我會在後面的項目中進行嘗試。
這裏又出現一個問題,有沒有兼習UI設計又懂html5的前端呢?
:)