VCL已死,RAD已死 ——SD2C中未能盡言的話題
<<<-- 上一節
這個插播,是Shaofei Cheng在MSN跟我的一段聊天記錄。關於這個話題,我在會後休息的時候,與很多朋友都談到過,但限於現場,無法記錄。正好Shaofei Cheng與我又一次溝通了這個,得以形成記錄,也能反映一些我在“VCL已死,RAD已死”這個論題中有關架構的思想。故此公眾,大家可以狂批……
建議整篇文章從頭讀起,在這裡在這裡 -->>>
Shaofei Cheng 說:UI設計師設計了介面,然後開發人員說:荒唐!這樣的介面用Delphi根本做不出來!
Shaofei Cheng 說:我覺得這段蠻有意思
Aimingoo 說:是啊,真的常常這樣。
Aimingoo 說:在WIMP模型上做UI是受限的。而在塊+層的模型上做,跟PS的實現過程非常接近,所以基本
就不受限。
Aimingoo 說:這個,才是WEB UI流行的根本原因之一。當然,WEB自己的力量也是原因之一。
Shaofei Cheng 說:我覺得沒有做不出來的介面 只有工期內做不出來的介面
Shaofei Cheng 說:所以最後程式員能做出來的介面 是和底層依賴的庫/開發工具/架構關係很大的一個範圍
Shaofei Cheng 說:我一直覺得這一點很有問題的
Aimingoo 說:是的。
Shaofei Cheng 說:很多人都感歎 要是能同時用prototype和Jquery多好
Shaofei Cheng 說:有些問題在prototype裡面一句話就解決了 有些問題在Jquery裡只要幾個字母
Aimingoo 說:哈哈哈~~
Aimingoo 說:不需要,在我看來,應用邏輯的開發人員,與UI及控制邏輯的開發人員應該是兩個。
Aimingoo 說:如果是一個,這個人就得向superman靠齊。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:關於這個 不知道你瞭解過WPF的開發模式沒有
Shaofei Cheng 說:VisualStudio + Expression Blend
Shaofei Cheng 說:VisualStudio給程式員用
Shaofei Cheng 說:Expression Blend給UI Designer用
Shaofei Cheng 說:我猜你會有點興趣
Aimingoo 說:我瞭解過。。。
Aimingoo 說:後來還提到了。只是你沒明白 ,我認為這樣根本解決不了問題。
Shaofei Cheng 說:哦?
Shaofei Cheng 說:你怎麼看呢?
Aimingoo 說:橫向分層,劃分領域。
Shaofei Cheng 說:介面和程式分開嗎?
Aimingoo 說:是。
Aimingoo 說:真正、徹底地分開。
Shaofei Cheng 說:那麼現在WPF已經是這樣了
Shaofei Cheng 說:XAML是由UI Designer出的
Aimingoo 說:但是,在沒領域的情況下,用WPF+分層思想做產品的仍然是同一個或同一批人。
Aimingoo 說:這是提高不了效率的。
Aimingoo 說:這篇文章有三節,你看了幾節了?
Shaofei Cheng 說:都看了
Shaofei Cheng 說:感覺不是特別catch你的觀點
Aimingoo 說:你應該去瞭解一下,有幾個UI設計師是用Expression Blend的?有幾個是瞭解XAML的?
Shaofei Cheng 說:呃 我們Team現在的UI......
Shaofei Cheng 說:被逼迫著學呢
Aimingoo 說:在一個使用了Expression Blend的團隊中,UI設計師在哪裡?在不在團隊裡?
Aimingoo 說:他與團隊是什麼關係?
Shaofei Cheng 說:在團隊裡啊
Aimingoo 說:如果UI設計師被逼迫著放棄PS,而使用EB,你應該這是合理的嗎?你認為開發人員團隊,對
UI設計師稱“他們”,是合理的嗎?
Aimingoo 說:不對的。UI設計師應該是我們,是與開發人員在一起的一個團隊成員,是一個體系下的。而
且,他們應該使用不同的工具,使用不同的語言交流互動。
Aimingoo 說:沒必要要求他們在工具上趨同。關鍵在於他們如何配合,而不是是否使用相同的工具。
Aimingoo 說:在盛大,設計師是在“設計中心”的,而開發人員是在“技術中心”。所以,事實上在某個
具體團隊裡,設計師是“外來戶”。
Shaofei Cheng 說:然而工具總是必須一致的
Shaofei Cheng 說:就好像我們現在的Team 開發必須用VS一樣
Aimingoo 說:哈哈~~
Aimingoo 說:Team為什麼“必須”用VS呢?
Aimingoo 說:是team的需要嗎?或是公司高管們需要?
Shaofei Cheng 說:因為要協同工作
Aimingoo 說:給你們選擇,如果能有自主的環境,你們是否一定會選擇VSTS
Aimingoo 說:協同的是人,不是工具。工具只是輔助來做這件事的。
Aimingoo 說:我們可否有別的選擇?
Aimingoo 說:一個例子是,你讓UI設計師如何用VSTS來跟“你們的”團隊協作?
Shaofei Cheng 說:嗯 可是Team必須在某些東西上統一
Shaofei Cheng 說:你沒法追求絕對自由
Shaofei Cheng 說:比如假如一個Delphi團隊裡我突然說 我想用C++
Shaofei Cheng 說:這是不可能的
Aimingoo 說:你誤會了我的意思。。。。
Aimingoo 說:我那天在會場裡講,我說:混合語言的真實意義,不是在於讓Delphi裡面能用上內嵌彙編,
或用上C的二進位對象檔案。這個是早期的混合語言開發。
Aimingoo 說:這種混合語言,是以個體開發為核心的。
Shaofei Cheng 說:嗯
Aimingoo 說:我所講的混合語言,是在領域分層上,在不同的層次上用不同的、最適合的語言來開發。
Aimingoo 說:我看到的,例如UI上,我們用JS+DHTML或Flash來做,我們使用這種環境下最適合的開發工
具;在用戶端,我們選Delphi,當然如何你的團隊擅長VC,沒關係,用就好了;
Aimingoo 說:在伺服器端,我們用Erlang,或是python,ruby。沒關係,用就是了。
Aimingoo 說:我們要把這三種不同的角色混合在一個團隊中——解決一個大型體系的團隊中,這才是混合
語言開發:在不同層面上使用最佳的方案。
Shaofei Cheng 說:Markup+ Scripting+ Programming?
Shaofei Cheng 說:你是指這種結構?類似這種的切分嗎?
Aimingoo 說:不是確定的語言結構“Markup+ Scripting+ Programming”,而是層次隔離的思想。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:我就是說 類似於這種的切分方式
Aimingoo 說:對的。
Aimingoo 說:類似的。
Aimingoo 說:從架構師的層面上來講,關注的是某種具體切分的合理性。
Aimingoo 說:比如你切成“Markup+ Scripting+ Programming”,我就需要考慮markup上是否有合理的表達。
Aimingoo 說:是否能夠能Script互動,是否能夠在當前項目中切實可行。等等於此。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:那你覺得跟現在WPF做的有何不同呢?
Shaofei Cheng 說:Markup有可能被替換成某種Binary
Shaofei Cheng 說:Scripting也可能被替換成某種 Markup
Aimingoo 說:WPF是要求了團隊的結構,或解決方案的單一性。
Shaofei Cheng 說:WPF應該說是一種具體的解決方案
Aimingoo 說:我的意見是:用什麼(例如WPF/XXX)並不是關鍵,而是在你決策之前,看看你的團隊以及
目標是什麼。
Aimingoo 說:對的,WPF只能說是一個具體方案。而且我個人認為,傳統的思想下會導致其成本更高,而
不是更低。
Shaofei Cheng 說:嗯 取決於使用方式
Shaofei Cheng 說:如果還是讓一個程式員去寫XAML 然後再寫程式的話......
Aimingoo 說:對了。從這個角度上思考,你就知道我在想什麼了。
Shaofei Cheng 說:儘管WPF在暗示大家把介面和程式分開
Aimingoo 說:如果仍然是程度A去寫XAML,然後A再去寫程式,A再去關心部署,事情就根本上未有變化。
Aimingoo 說:對了,WPF做了這種暗示,M$也在產品結構上做了調整。但是,商業利益問題決定了他們不
願意向“Team Dev”推動這種思想。
Shaofei Cheng 說:從language和tool上都在暗示 但它本身並不是一個團隊結構的約束
Aimingoo 說:當一個使用PS的介面設計師進入團隊時,他就成了外來戶。
Aimingoo 說:他用既有工具做不了任何事情,用自己的工具,又與團隊的模式存在衝突。這是兩難的事情。
Aimingoo 說:真正分層體繫上,比如說建築領域裡,磚工與瓦工是分開的,使用不同的工具與技藝,包括
交流的語言。
Aimingoo 說:但這不妨礙他們在一起建築。
Shaofei Cheng 說:這個的話 我覺得是另外一個問題
Shaofei Cheng 說:任何Team進了新人都會有類似問題
Shaofei Cheng 說:但是你所說的這個分層 一定要有一個平台來實現
Aimingoo 說:平台,可以是流程,可以是規則。
Aimingoo 說:你還是開發人員思維。平台一定是VSTS嗎?
Aimingoo 說:一定是一個工具嗎?
Aimingoo 說:一定是一個軟體產品嗎?
Aimingoo 說:平台,就是人+人+人+人~~
Aimingoo 說:以及其上的一套規則和流程。如同建築、工地、包工隊。
Shaofei Cheng 說:每一層的產品呢
Aimingoo 說:對了,“每一層的產品”是個問題。但為什麼“每一層的產品”都是M$出的呢?
Aimingoo 說:M$想做這件事情~~只是他想做而已,為什麼最終變成了開發人員的依賴呢?
Shaofei Cheng 說:問題是 如果這個產品是文檔
Shaofei Cheng 說:一個誇張點的例子
Shaofei Cheng 說:假如UX出了一份厚厚的 設計說明書 包括顏色、位元影像、互動的各種說明
Shaofei Cheng 說:那麼開發人員如何去用?
Aimingoo 說:這是另一個思想。
Shaofei Cheng 說:不 很相關的
Shaofei Cheng 說:每一層之間用什麼來交換資訊 會直接決定這個結構是否可行
Aimingoo 說:在人月神話裡討論過。
說到A團隊與B團隊的產品輸出,早期的觀點是B一定要看到A的全部東西,而後期、以及更合
理的觀點是:不要看到A的全部東西,而只是關注如何使用它。
Aimingoo 說:換言之,你上面的這個列表:厚厚的 設計說明書 包括顏色、位元影像、互動的各種說明等等,
基本上都不是要給開發人員看的。
Aimingoo 說:基本上,那是UI設計人員的思想,以及思想的過程。
Shaofei Cheng 說:對 是和這也也有關係 但是重點在於你提出的問題
Shaofei Cheng 說:就是分層次解決方案
Aimingoo 說:一個具體的UI實現者,應該與UI設計者一起工作,實現者問:這裡要怎麼動?設計者說,慢
慢地,由快到慢地……等等等等。
Aimingoo 說:UI人員對“快和慢”是一種感覺,你不能要求他把這個寫成一個公式或者數字,而且既然這
樣做了,終有一天,體驗人員會反對。
Aimingoo 說:所以開發人員只需要在一個階段滿足他(UI設計師)的需要就可以了。通過這種對稱的工作,
完成原始的模型,然後進入第一個開發迭代。
Shaofei Cheng 說:那麼 我覺得在你這個例子裡 UI設計者成為了顧問的角色
Shaofei Cheng 說:他的產品是持續供應的語言協助
Aimingoo 說:應該是顧問+素材提供者+需求方
Shaofei Cheng 說:這個有點太具體了 你能讓每一層都這樣嗎?
Shaofei Cheng 說:比如 一個專門作互動的程式員 和做業務的程式員 也如此協做?
Aimingoo 說:用IVAR的例子,一個“骨架產品”是要花大量時間和互動成本、設計成本來建設的。
Aimingoo 說:當骨架完成之後,具體施工時就只剩下了規則和具體商務邏輯。
Aimingoo 說:舉例來說,你認為現在城市施工中的“塔籠式建築”,是一夜建成的嗎?
Shaofei Cheng 說:當然我只能回答不是
Aimingoo 說:當然不是,那是架構師、設計師、工程精英們在幾十年的時間裡總結出來的。
Shaofei Cheng 說:赫赫
Aimingoo 說:在這個架構之下,施工人員們現在只剩下了一套可複製的流程。
Shaofei Cheng 說:這樣的話 我覺得你所說的分層次思想就退化成了一種UX和dev協作方式而已
Shaofei Cheng 說:我覺得UX需要一種自己的語言 可以被UX和dev接受的
Aimingoo 說:所以,在我們上面的討論中,UI設計人員與開發人員之間這種對稱的、直接的溝通會發生在
某些原型的、骨架的階段,但不是所有的階段。
Aimingoo 說:>>> Shaofei Cheng 說:>>> 這樣的話 我覺得你所說的分層次思想就退化成了一種UX和dev協作方式而已
這就是你的思想中最關鍵的邏輯問題了。
Aimingoo 說:要注意,思想是思想,方法是方法。
Aimingoo 說:你不能用思想去對等地討論方法。
Aimingoo 說:你只能強調:一種UX和dev協作方式,是分層次思想的一種實現方法。
Aimingoo 說:明白了嗎?
Aimingoo 說:討論某種實施方法的正確或錯誤是很簡單的事:正確的東西換個背景就錯誤了。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:需要一個具體的情境
Aimingoo 說:但是,分層的思想,以及清楚地認識到分層思想與縱向切分的不同。
Aimingoo 說:最後,理解廠商們為什麼做現在這些事,以及他們將來會怎麼做……這一切與一個具體的場
景是無關的。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:但我覺得你說地UX跟dev那種模式並不好
Shaofei Cheng 說:分層的優勢應該是獨立工作吧
Shaofei Cheng 說:我是說 對於分層來說 非常不好
Aimingoo 說:好,或不好,是要放在情境上去討論的。
Aimingoo 說:比如你的觀點是基於你的現有工作情境,或工作經曆。
Aimingoo 說:分層的優勢,是領域的推動。劣勢,是溝通成本的增加。
Aimingoo 說:層間互動的代價是極高的。必須在一個可以承受這種代碼的環境中,才能使用它。
Shaofei Cheng 說:領域的推動 就是更專業化吧?
Aimingoo 說:我再舉個例子。
Shaofei Cheng 說:好
Aimingoo 說:Erlang是用“節點、進程”這樣的單位來切分一個項目的。
Aimingoo 說:進程內,根據Erlang的設計,通過函數介面來互動;進程間,通過訊息介面來互動;節點間,
通過連接埠介面來互動。
Aimingoo 說:這各級之間的互動成本,是漸次遞增的。
Aimingoo 說:到了節點間互動時,連接埠互動成本就取決於網路環境。以Erlang早期的應用情境,也就是手
機平台來說,發個簡訊兩分鐘後收到,是很正常的事。
Aimingoo 說:所以節點間互動導致的時延是可以接受的。對吧?
Shaofei Cheng 說:嗯
Aimingoo 說:但是,這樣的系統不能用在PC環境中,因為如果一個企業的應用邏輯需要2分鐘來互動——例
如老闆按下一個按鈕,要兩分鐘才反饋,大概是不成的。
Aimingoo 說:這種情況下,ErLang並不勝任企業級的商務邏輯。儘管它並發、高負載……等等優勢,他不
適合就是不適合。
Shaofei Cheng 說:呃嗯
Shaofei Cheng 說:然而這是程式間不同層的協作
Shaofei Cheng 說:不是人之間吧?
Aimingoo 說:但是,二十年後,環境變了。現在的連接埠互動的成本越來越低。
Aimingoo 說:兩台機器之間,光纖串連的成本都很低了。一張千兆卡,傳輸速度遠遠超過原生硬碟I/O。
兩台機器之間傳遞資料,比從本地硬碟讀資料還要快。
Shaofei Cheng 說:嗯
Aimingoo 說:那麼,連接埠互動的成本低到這種可接受的程度,所以ErLang漸漸地就被伺服器端開發人員們
看好了。
Aimingoo 說:所以,我說“層間互動的代價是極高的。必須在一個可以承受這種代價的環境中,才能使用
它”。Erlang通過節點來分層,這種思路導致的互動代價可以被接受了,他就被接受了。同
時,他的其它優勢才發揮了出來。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:great sample
Aimingoo 說:同樣的道理,我現在在討論我們開發中的橫向分層,必須是一個可以接受他的工程環境才能
用的。
Aimingoo 說:你可用在一個RAD團隊中使用橫向分層,結果仍然是一個開發人員去做所有層上的事情,他願
意去做,而且還很Happy。即使如此,他也要有消化層間互動代價的能力,他的項目或團隊也
要有這種能力。
Aimingoo 說:否則還是要做砸鍋。
Shaofei Cheng 說:所以說這個環境很重要
Aimingoo 說:然而我之視見,我認為,消化層間互動的代價,可能不是一個開發人員能做的,而是領域推
動才能實現的。比如,我們有專業的設計人員,知道如何跟開發人員互動,如何構建原型——
但我要強調,這個設計人員一定不是開發人員!
Aimingoo 說:只有具有了這樣領域能力,他才能在這個團隊中工作好。否則,我們就要給出時間,行業也
要給出時間來實現這些。
Aimingoo 說:就好象在“塔樓式”建築方式出來之前,我們還得用舊方法造樓一樣。
Shaofei Cheng 說:其實整理一下思路
Shaofei Cheng 說:我一直在提WPF
Shaofei Cheng 說:WPF是一個UI和dev協作的環境
Shaofei Cheng 說:理論上講 或者這個系統設計的初衷 就是讓UX層跟dev層互動的代價變為0
Shaofei Cheng 說:當然實際上他沒有做到
Aimingoo 說:是。
Aimingoo 說:而且他還違背了UI設計者的初衷,他必須遷就Team Dev地去學習VSTS。
Shaofei Cheng 說:但是這是一個權衡的問題
Shaofei Cheng 說:UI設計者被強迫用EB 也是一個限制
Aimingoo 說:是的。如果這個團隊的開發目標,鎖定在VSTS可控的範圍內,那麼這樣是可以接受的。
Shaofei Cheng 說:或者說拋開工具
Shaofei Cheng 說:UI designer必須提交一份XAML
Shaofei Cheng 說:XAML工具有不少
Aimingoo 說:你要具有架構師的思想,你必須認識到VSTS適合不適合,以及UI設計者被強迫用EB正不正確,
是一個具體情境的具體問題
。
Aimingoo 說:他是一種權衡,這本身不具有正確性。
Shaofei Cheng 說:嗯
Shaofei Cheng 說:或者說WPF本身對項目來說是一個選擇
Shaofei Cheng 說:其附帶的分層效果只是一個附加工具
Shaofei Cheng 說:沒法因為它的這種能力而選擇它是吧?
Aimingoo 說:我們再舉一個例子。我在《大道至簡》裡面就講過這個。
Aimingoo 說:我說,我們的項目總有需求方,從開發人員的角度上來看,我們希望我們的需求提出者使用
C語言來描述它的需要。最好用C給開發人員寫個架構。
Aimingoo 說:對吧。但是,我們知道,我們的需求方大概不會用C,比如大企業的項目負責人,你不可能讓
他用C。
Shaofei Cheng 說:嗯
Aimingoo 說:於是我們的工程界就說,我們需要一個標準的需求描述語言,例如說UML。這樣一來,客戶要
會使用案例圖,Team Dev(中的設計師)也要能懂它。
Aimingoo 說:看起來一切美好。然而,客戶不會用C,難道他就會用UML嗎?
Shaofei Cheng 說:嗯
Aimingoo 說:你的問題和這個一樣。UI設計師不會用C,難道他就會用XAML嗎?
Shaofei Cheng 說:嗯
Shaofei Cheng 說:但是團隊內和團隊外不同
Aimingoo 說:什麼是最簡成本的溝通?
Aimingoo 說:注意,你的目標是UI設計師的設計可以被開發,你的目標僅僅是這個。
Aimingoo 說:那麼溝通的目標,就是“開發人員+設計者=一個可開發的產品”。那麼讓他們去保證這一點好了。
Aimingoo 說:哪怕拿出來只是一個骨架,只要證明這個骨架可以持續開發就好了。
Aimingoo 說:完全沒必要通過一種XAML來保證。那是極大無聊的事情。
Shaofei Cheng 說:那麼至於究竟開發人員去把位元影像寫成XAML 還是UX去把設計寫成C 其實只是一個開發時候的協作?
Aimingoo 說:GOOD!GOOD!
Aimingoo 說:我終於成功了,這太重要了。你必須明白,那隻是開發時協作的一個可選工具!
Shaofei Cheng 說:假如就有這麼個變態UX 喜歡用C寫設計 也是可以的
Aimingoo 說:至於這個協作過程中,是用白板,還是在PS介面上畫,或者是別的什麼,並不重要啊。
Shaofei Cheng 說:當時我想說 工具影響成本
Aimingoo 說:所以,我從來不說我反對XAML,或反對UML。因為那原本就是一種可選工具。他是備選的,所
以我不能否定它。但是,我不能一葉障目地說我必須用它。
Aimingoo 說:說必須用它的,是M$,是廠商,是業務代表。
Shaofei Cheng 說:在工具設計者設想的情境中 這個東西保證了可行
Aimingoo 說:>>> Shaofei Cheng 說:>>> 在工具設計者設想的情境中 這個東西保證了可行
Aimingoo 說:我同意。
但,那是他們的預想。
Aimingoo 說:他們的預想只是一頭豬或一群豬的代價。
Shaofei Cheng 說:比如如果電腦上沒有PS 圖形技術沒有出現
Shaofei Cheng 說:UX只能把紙上的東西給開發人員
Shaofei Cheng 說:那麼UX for software這個職業可能就不會出現了
Shaofei Cheng 說:也不會有人提議將 軟體的介面設計分成一層了吧
Aimingoo 說:這個職業呵~~~ N早先就有。
Aimingoo 說:要不你認為Windows是怎麼做出來的?Mac?
Aimingoo 說:哈哈。
Aimingoo 說:基本上,到這裡吧,我覺得你已經瞭解我想說的了。
Shaofei Cheng 說:嗯
謝謝
Aimingoo 說:對了,winter,我想把這段討論貼出來。可?
Shaofei Cheng 說:當然沒問題
Shaofei Cheng 說:跟你談談架構方面的東西很有收穫
Aimingoo 說:我整理下下。會比較清楚。
Shaofei Cheng 說:嗯
下一節-->>