posts - 176, comments - 240, trackbacks - 0, articles - 7

          軟件不同于建筑

          Posted on 2008-09-01 23:24 canonical 閱讀(469) 評(píng)論(2)  編輯  收藏
             軟件系統(tǒng)的構(gòu)建之所以與建筑工程不同,無(wú)法達(dá)到建筑工程的精確性和可控性,其中一個(gè)很重要的原因在于建筑的產(chǎn)物是一個(gè)靜態(tài)的結(jié)構(gòu),建筑的過(guò)程主要是采用各種預(yù)制件填充某個(gè)規(guī)劃好的建筑空間,而軟件是一種動(dòng)態(tài)運(yùn)行的產(chǎn)品,它的各個(gè)組成部分之間的關(guān)系不是可以靜態(tài)描述的,而是存在著復(fù)雜的交互關(guān)系,而且軟件在運(yùn)行的過(guò)程中還需要根據(jù)需求的變化進(jìn)行動(dòng)態(tài)的調(diào)整,這種動(dòng)態(tài)性使得軟件開(kāi)發(fā)中很難抽象出固定的預(yù)制件,很難像建筑工程那樣實(shí)現(xiàn)標(biāo)準(zhǔn)件的組裝。現(xiàn)在所謂構(gòu)件技術(shù)的構(gòu)件插拔圖景其實(shí)是具有誤導(dǎo)性的。

              但是從另外一方面說(shuō),軟件內(nèi)在的動(dòng)態(tài)性使得它可以具備更強(qiáng)的適應(yīng)能力,如果所編制的軟件把握住了業(yè)務(wù)機(jī)制的核心內(nèi)容,則在運(yùn)行過(guò)程中只需要進(jìn)行少量調(diào)整就可以應(yīng)對(duì)大量類(lèi)似情況。100棟類(lèi)似的建筑需要花費(fèi)100倍的建造費(fèi)用,而100個(gè)近似的軟件需求的滿足可能只需要花費(fèi)2至3倍的開(kāi)發(fā)費(fèi)用。現(xiàn)代軟件企業(yè)在研發(fā)過(guò)程中都在不斷的追求自身產(chǎn)品的平臺(tái)化,其目的正在于以不斷提高的適應(yīng)性來(lái)應(yīng)對(duì)不斷變化的客戶需求。我們所面對(duì)的要求不僅僅是精確把握需求,而是要深刻把握需求背后所對(duì)應(yīng)的業(yè)務(wù)機(jī)制。

          Feedback

          # 粗粗瀏覽了一下[未登錄](méi)  回復(fù)  更多評(píng)論   

          2008-09-11 02:09 by thinker
          不知道你那個(gè)Witrix,,商業(yè)上發(fā)展得如何。

          我曾參與創(chuàng)建過(guò)一個(gè)屬于找死型的國(guó)內(nèi)做通用開(kāi)發(fā)工具的公司。雖然后來(lái)痛感國(guó)內(nèi)通用軟件市場(chǎng)的腐爛轉(zhuǎn)而做起了電子行業(yè),不過(guò)關(guān)于開(kāi)發(fā)工具和語(yǔ)言的思考一直沒(méi)有停止。

          和這里的人相比,我對(duì)現(xiàn)在這些新的語(yǔ)言和發(fā)展有些隔膜了,不過(guò)很多東西由于能和我的思考對(duì)應(yīng)上,雖然缺少實(shí)踐也能理解一二。

          在你的文章中看到了不少同感,嘗試做點(diǎn)交流,雖然很難互相理解,但我可以嘗試表達(dá)一下:

          1 受到認(rèn)識(shí)論的一些啟發(fā),我想我們首先應(yīng)該將軟件開(kāi)發(fā)的過(guò)程定義為一個(gè)科學(xué)發(fā)現(xiàn)的過(guò)程,一個(gè)通過(guò)理性分析建構(gòu)邏輯模型的過(guò)程,是在理論-事實(shí)的迭代中逐漸完善的。這一點(diǎn)已經(jīng)是共識(shí),但目前的工具尚未對(duì)這個(gè)過(guò)程提供完好的支持。這我們可以從系統(tǒng)重構(gòu)時(shí)程序員大量的查找替換拷貝粘貼就可以看出來(lái)。

          2 不能以輕視的態(tài)度看待所謂的語(yǔ)法糖,拋開(kāi)OO的所謂哲學(xué),僅僅把那些所謂的抽象看作語(yǔ)法糖。其實(shí)沒(méi)有什么抽象的概念,當(dāng)我們說(shuō)“繼承”,其實(shí)只不過(guò)是在說(shuō)一段代碼,而且一般來(lái)說(shuō)是在設(shè)計(jì)時(shí)運(yùn)行的代碼罷了。如果“繼承”代碼在運(yùn)行時(shí)運(yùn)行,那就變成了一種具有病毒特征的高效的動(dòng)態(tài)語(yǔ)言。

          3 設(shè)計(jì)時(shí)與運(yùn)行時(shí)的關(guān)系,尚未得到徹底的分析,我想一旦深入理解了這種關(guān)系,所謂靜態(tài)語(yǔ)言與動(dòng)態(tài)語(yǔ)言的鴻溝就不復(fù)存在,我們可以在效率與靈活性之間從容取舍。

          4 再來(lái)看所謂的現(xiàn)代開(kāi)發(fā)工具對(duì)效率的要求不高的說(shuō)法,也是有前提的。我們只不過(guò)感受不到效率的限制而已。事實(shí)上,對(duì)效率的要求,已經(jīng)使我們被迫放棄一些看起來(lái)優(yōu)雅的設(shè)計(jì)。舉一個(gè)極端的例子,在位圖編程中,我們無(wú)法把單獨(dú)的像素看作一個(gè)一個(gè)的對(duì)象,即使這可以讓程序看起來(lái)簡(jiǎn)單。如何讓優(yōu)雅與高效并存,也是一個(gè)不小的課題。雖然完全并存是不可能的,但我以為現(xiàn)有的語(yǔ)言在這方面的提升空間還相當(dāng)大。

          5 程序員之間的交流,文檔是靠不住的,唯一靠得住的就是代碼,包括靜態(tài)的,尤其是動(dòng)態(tài)運(yùn)行的。未來(lái)的開(kāi)發(fā)工具應(yīng)該正視這個(gè)問(wèn)題,為程序員之間的交流提供優(yōu)秀的方案,這看起來(lái)是提高團(tuán)隊(duì)工作效率的最有效的方法了。舉一個(gè)另類(lèi)的例子,可不可以在一段代碼上附加一個(gè)錄音注釋呢?

          6 AOP所揭示的是一個(gè)方向,但目前做得遠(yuǎn)遠(yuǎn)不夠。設(shè)想一下我們?cè)谠O(shè)計(jì)程序的過(guò)程中頭腦中浮現(xiàn)出來(lái)的各種隱喻,指導(dǎo)我們敲下代碼的頭腦中的模型。當(dāng)我們對(duì)接班的程序員介紹的時(shí)候,是先給他講這些隱喻,模型更有效率呢,還是直接看一段糅合了N個(gè)思路的代碼更有效率?其實(shí),在瀏覽代碼時(shí),我們也只能通過(guò)恢復(fù)設(shè)計(jì)者的數(shù)個(gè)思路來(lái)理解,而不是直接通過(guò)代碼來(lái)理解。

          7 讓用戶編程,似乎是個(gè)瘋狂的想法,但在某些時(shí)候,編程比操作按鈕來(lái)得更加友好。以此為思路,任何軟件都是一個(gè)自開(kāi)發(fā)的工具。

          8 大教堂與市集的愿景是好的,但缺少一條最根本的東西,商業(yè)利益驅(qū)動(dòng),不同于那些軟件共產(chǎn)主義分子,我認(rèn)為一個(gè)靈活的市場(chǎng)機(jī)制,是發(fā)揮每個(gè)人效能的最佳環(huán)境。我們未來(lái)應(yīng)不必在opensource和closesource之間進(jìn)行取舍,這也是開(kāi)發(fā)工具所應(yīng)支持的。

          9 在一個(gè)復(fù)雜的繼承關(guān)系中,基礎(chǔ)類(lèi)的修改往往意味著新產(chǎn)生無(wú)數(shù)的Bug。其實(shí),如果在運(yùn)行時(shí)引入版本概念,我們往往可以對(duì)系統(tǒng)進(jìn)行細(xì)微的,不那么符合OO的小修改,但是卻能很好的工作,也能很好的理解。至于不符合審美的問(wèn)題,如果是工程,那么就此結(jié)束,如果要復(fù)用,那么再繼續(xù)調(diào)整。OK,這里談到我的一個(gè)核心概念,把繼承當(dāng)作版本來(lái)處理,版本管理所能處理的要更加廣泛靈活,而繼承只不過(guò)是一個(gè)特例的應(yīng)用而已。


          # re: 軟件不同于建筑  回復(fù)  更多評(píng)論   

          2008-09-11 22:42 by canonical
          目前我們主要基于witrix研發(fā)行業(yè)軟件,本身并無(wú)意推廣witrix平臺(tái)。現(xiàn)在witrix所承載的核心應(yīng)用對(duì)它的靈活性和性能都有著很高的要求。
          1. witrix技術(shù)的創(chuàng)新之處在于提供了程序結(jié)構(gòu)的新的抽象和融合方式,它所帶來(lái)的價(jià)值主要是程序的持續(xù)改進(jìn)能力。在公司里我們是嚴(yán)禁拷貝粘貼的。可以重用的業(yè)務(wù)邏輯總可以抽象為某種技術(shù)實(shí)體。
          2. domain specific的語(yǔ)法我們認(rèn)為非常重要。很多人傾向于使用非常強(qiáng)大的語(yǔ)言,這種語(yǔ)言允許構(gòu)造所有復(fù)雜的局部結(jié)構(gòu),但是在我們看來(lái),再?gòu)?fù)雜的通用語(yǔ)言也無(wú)法涵蓋各異的業(yè)務(wù)邏輯,而語(yǔ)言本身提供的抽象能力至關(guān)重要。同時(shí)我們還非常關(guān)注于抽象出的技術(shù)結(jié)構(gòu)的穩(wěn)定性。假如做一件事情有n種語(yǔ)義等價(jià)的方式,而且沒(méi)有一種強(qiáng)制手段可以進(jìn)行形式校驗(yàn),則任何一種抽象得到的結(jié)構(gòu)都是不穩(wěn)定的,因?yàn)槲覀兛偸菚?huì)受到各種誘惑偏離一種固定的形式,最終造成形式的解體。
          3. 我們?cè)诰幾g期作了很多工作,這是解決系統(tǒng)結(jié)構(gòu)問(wèn)題的一種重要手段。在沒(méi)有得到全部信息的情況下(沒(méi)有運(yùn)行時(shí)的數(shù)據(jù)信息),即使沒(méi)有類(lèi)型概念,我們?nèi)匀豢梢栽诮Y(jié)構(gòu)方面作很多文章。
          4. 現(xiàn)在很多情況下其實(shí)是沒(méi)有很好的抽象方式。比如說(shuō),如果把位圖的每個(gè)像素都看作一個(gè)具有自我活動(dòng)能力的對(duì)象,我們遇到的問(wèn)題首先是巨大的管理成本,這遠(yuǎn)不如把它看作只接受外部控制的數(shù)據(jù)信息更直觀,更簡(jiǎn)單。一些所謂優(yōu)雅的設(shè)計(jì)只是在最模糊的印象上似乎很時(shí)尚, 但是真正細(xì)致到細(xì)節(jié)的時(shí)候,它遠(yuǎn)不能提供我們所需要的結(jié)構(gòu)控制能力。
          5. 代碼是交流的重要工具。witrix設(shè)計(jì)的一個(gè)重要目標(biāo)就是代碼的可描述性,編碼的過(guò)程就是描述系統(tǒng)結(jié)構(gòu)的過(guò)程。我們正在盡力縮小需求描述與代碼結(jié)構(gòu)之間的概念差距。但是很多時(shí)候代碼是信息不完全的,有些信息我們寫(xiě)在了代碼之外的文檔中,特別是一個(gè)設(shè)計(jì)的原因是什么,為什么采用當(dāng)前的處理方式。
          6. AOP的原始形式存在一些隱蔽的問(wèn)題,直接應(yīng)用AOP效果是有限的。在witrix中我們是對(duì)AOP的概念體系進(jìn)行了補(bǔ)充,才定義出足夠強(qiáng)大的結(jié)構(gòu)組合方式。
          7. 對(duì)程序員來(lái)說(shuō)代碼更加便捷,但是工具仍然是有效的,它可以限制程序的可能性,大大提高我們構(gòu)造某種業(yè)務(wù)流程的可靠性。
          8. 商業(yè)是一方面,人的精神和傳統(tǒng)是另一方面。
          9. witrix目前就在運(yùn)行時(shí)管理著大量的代碼版本,繼承只是一種初級(jí)的結(jié)構(gòu)融合手段。

          對(duì)設(shè)計(jì)有興趣的朋友可以通過(guò) canonical.cqh@gmail.com聯(lián)系我

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 焉耆| 郓城县| 安乡县| 句容市| 清水河县| 鄂托克旗| 定结县| 崇信县| 杭锦后旗| 醴陵市| 那坡县| 桃江县| 水城县| 罗江县| 无棣县| 吉安市| 抚州市| 石家庄市| 彰武县| 定边县| 柳州市| 上虞市| 和顺县| 永吉县| 乃东县| 昌图县| 特克斯县| 申扎县| 牙克石市| 日喀则市| 蛟河市| 墨脱县| 临城县| 青川县| 西乌珠穆沁旗| 敖汉旗| 平阳县| 绵阳市| 东方市| 安宁市| 靖边县|