<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 59,  comments - 323,  trackbacks - 0
    一直有朋友發(fā)email來(lái)索要那本OpenDoc的源代碼,這里一并給出下載地址。

    http://www.tkk7.com/Files/zbw25/code.rar

    抱歉,拖了這么長(zhǎng)時(shí)間。

    Update:
    昨天在BlogJava上傳的文件,今天就不能下載了,比較暈。。。

    http://www.javaeye.com/topic/19448

    這是在JavaEye的發(fā)布OpenDoc的地址,里面有下載的Link。
    http://www.javaeye.com/topics/download/54f814f5-b77f-46e1-bf61-bd384493f118

    應(yīng)該要注冊(cè)成為javaeye的用戶(hù)后,才能下載。
    posted @ 2006-10-18 19:45 讀書(shū)、思考、生活 閱讀(108324) | 評(píng)論 (11)編輯 收藏
    ?
    ?

    我寫(xiě)的總結(jié)
    ?

      如果和超級(jí)女生這樣的大賽相比的話(huà), Ajax 大賽應(yīng)該被稱(chēng)之為“ Ajax 小賽”吧。 250 名初賽選手, 10 多名復(fù)賽選手,三個(gè)來(lái)自于一個(gè)網(wǎng)站“ Ajax 中國(guó)”的評(píng)委。這樣的比賽意義在哪里呢?

    ?

      僅僅看數(shù)量,是看不出來(lái)的。

    ?

      Ajax Web 應(yīng)用的一種,而且可以肯定的說(shuō),是 Web 應(yīng)用中最為復(fù)雜的一種,一個(gè) Web 項(xiàng)目,我們通常都會(huì)分為“美工”、“ Web 靜態(tài)頁(yè)面制作”、“ Server 端系統(tǒng)開(kāi)發(fā)”這樣幾個(gè)工種。而 Ajax 應(yīng)用則同時(shí)需要 Server 端與 Client 端復(fù)雜的端到端編程技術(shù)。

    ?

      對(duì)于參賽選手而言,這些工作,都得靠一己之力來(lái)完成,在 2 個(gè)多月之內(nèi),做出來(lái)的作品,要美觀,要好用,要有創(chuàng)意,要符合 W3C 組織的 Web 標(biāo)準(zhǔn),還得正確有效的作為一個(gè)程序在瀏覽器里運(yùn)行。真的,不容易!這 11 位(可能會(huì)修改)參賽選手,每一位都不容易!

    ?

      我們(大賽組織者、評(píng)委和參賽選手)都非常確切的意識(shí)到,我們正處在一場(chǎng)變革剛剛起步的階段。 Ajax 可能僅僅是這場(chǎng)革命開(kāi)始時(shí),最響亮的一個(gè)名字。激動(dòng)人心的發(fā)展將會(huì)接踵而來(lái),而我們這些人將會(huì)自豪的宣稱(chēng),我們從一開(kāi)始就不是旁觀者,而是實(shí)實(shí)在在的參與者,和有力的推動(dòng)者!

    ?

      看著選手們的代碼,我們的信心更加充足,這些 Ajax 的愛(ài)好者和參與者們,不僅是熱忱的,更是踏實(shí)的。不但是嚴(yán)肅認(rèn)真的,更是勇于創(chuàng)新的。由這樣的一群人來(lái)推動(dòng) Ajax 在中國(guó)的發(fā)展,實(shí)在是一個(gè)極好的開(kāi)始。

    ?

      而 Ajax 大賽,正是這樣一個(gè)機(jī)會(huì),使得這一群中堅(jiān)力量,能夠集結(jié)、凝聚,進(jìn)而取得更加卓越的成就。這就是我對(duì)于這個(gè)比賽意義的理解。


    ?  說(shuō)實(shí)話(huà),稍微吹了一點(diǎn)

    posted @ 2006-07-14 21:35 讀書(shū)、思考、生活 閱讀(30220) | 評(píng)論 (0)編輯 收藏

    “出來(lái)混,總是要還的。”這話(huà)說(shuō)得真好。我最近的blog寫(xiě)得太少了,想寫(xiě)的東西,其實(shí)又實(shí)在是不少,一日復(fù)一日的堆積心里,又想寫(xiě),又不想寫(xiě),難受呀。

    這篇blog原本還是打算在Word 2007里寫(xiě)的, 后來(lái)作為草稿發(fā)上來(lái),發(fā)現(xiàn)還有不少不如意的地方,還是在線(xiàn)寫(xiě)吧。

    想說(shuō)的事情挺多的,一件一件的說(shuō)吧。

    一、敏捷中國(guó)大會(huì),6月6日在上海交大舉辦了一場(chǎng)。專(zhuān)門(mén)介紹ruby的,昨天在csdn的martin fowler的中文blog上,也貼出了完整的演講全文。《Ruby是一個(gè)非常好的開(kāi)發(fā)工具》,《現(xiàn)場(chǎng)演示Ruby編程》,《細(xì)數(shù)Ruby語(yǔ)言?xún)?yōu)缺點(diǎn)》。關(guān)于這次活動(dòng)的一篇Blog按理我早就該寫(xiě)了,但是卻一直沒(méi)有寫(xiě)出來(lái)。有兩個(gè)原因,一個(gè)是那天老馬在開(kāi)講之前,熊節(jié)是打算在邊上當(dāng)翻譯的,誰(shuí)知道交大的同學(xué)們牛啊,紛紛表示,不必翻譯,都聽(tīng)得懂的,我一個(gè)學(xué)俄語(yǔ)的人,在那里抗議也沒(méi)什么用,大家都一副聽(tīng)力很好的架勢(shì),老馬在上面嘰里呱啦的講著,下面的同學(xué)們不時(shí)的笑著……我呢,也只能隨著大家的笑聲,沖著老馬空洞的笑著……;第二個(gè)原因呢,是個(gè)原本打算等CSDN的演講的翻譯出來(lái),我也好引用一下,誰(shuí)知這一等,就是半個(gè)月,我都已經(jīng)換了一個(gè)工作了。

    說(shuō)實(shí)話(huà),那天老馬的演講,我沒(méi)聽(tīng)懂,不過(guò)因?yàn)樗谀抢铿F(xiàn)場(chǎng)coding,所以我還是看懂了一些代碼。Ruby的代碼給人留下了深刻的印象,而且我不知道是不是Martin故意裝作是一個(gè)初哥,反正看起來(lái)他對(duì)ruby的語(yǔ)法也不怎么熟悉,不過(guò)ruby厲害的地方就在于,你就算是個(gè)初哥,邊試邊弄,也能把程序鼓搗出來(lái)。

    原本的計(jì)劃是介紹Ruby DSL的,不過(guò)時(shí)間明顯的不夠用,關(guān)于DSL的部分反而講得很少,還好這兩天armlinux-w翻譯了一篇專(zhuān)講Ruby DSL的文章過(guò)來(lái):《用Ruby 創(chuàng)建領(lǐng)域特定語(yǔ)言》。當(dāng)時(shí)看到Martin演示的,用Ruby語(yǔ)言描述的配置文件時(shí),腦子里頗有些想法,也寫(xiě)了問(wèn)題交上去問(wèn),不過(guò)老馬也來(lái)不及一一回答,后來(lái)想想,提的那個(gè)問(wèn)題,也沒(méi)有經(jīng)過(guò)自己的深入思考與實(shí)踐,不提也罷。

    倒是我提的另外一個(gè)問(wèn)題,頗有些價(jià)值,當(dāng)時(shí)正好交大的林德樟老師也在,我以前就對(duì)林老師的那句語(yǔ)錄有所不滿(mǎn)《XP是草書(shū),UP是正楷,先草書(shū)后正楷,就會(huì)亂套》。在自己的Blog上也和林老師的門(mén)徒們吵過(guò)架,如今Martin教主本人既然來(lái)了,我等看客正應(yīng)該把這仗挑起來(lái)才是。于是我就提了一個(gè)問(wèn)題,讓兩位專(zhuān)家都來(lái)評(píng)價(jià)一下這句話(huà)。可惜的是,后來(lái)他們兩人的精彩交鋒,我也沒(méi)怎么聽(tīng)懂,還是林老師還用中文闡述了一遍自己的觀點(diǎn),我算是了解了一下他的邏輯。

    原來(lái)我以為,林老師這樣的說(shuō)法,是出于在校教師“和稀泥”的考慮。這下我才了解到,原來(lái)林老師是真的這么認(rèn)為的。而他這么一種說(shuō)法的依據(jù),還是慣常的“中國(guó)國(guó)情論”。或者稱(chēng)之為“補(bǔ)課論”。因?yàn)槊绹?guó)人是現(xiàn)有軟件工程,才有極限編程,而我們現(xiàn)在的軟件產(chǎn)業(yè)還落后人家?guī)资辏圆话衍浖こ踢@一課不上,是不行的。然后林老師還頗有些“攻擊力”的詢(xún)問(wèn)Martin,當(dāng)初你先寫(xiě)了UML,后來(lái)又寫(xiě)了XP,不也是這樣一個(gè)心路歷程嗎?老馬如何回答,我也沒(méi)有聽(tīng)懂,但是在我看來(lái),林老師混淆了三個(gè)概念,一個(gè)是國(guó)家級(jí)的軟件產(chǎn)業(yè)的發(fā)展水平,一個(gè)是企業(yè)級(jí)的軟件開(kāi)發(fā)的管理水平,一個(gè)是開(kāi)發(fā)人員的技術(shù)與理論水平。這三個(gè)不同的水平被他攪在一起,用于支撐自己的說(shuō)法,實(shí)在是???????所以,會(huì)后我又追上去問(wèn)林老師,我提出了三個(gè)概念混淆了云云,沒(méi)想到林老師相當(dāng)和藹可親的對(duì)我說(shuō):“嗯,你說(shuō)的沒(méi)錯(cuò)”,然后又說(shuō)到關(guān)于大學(xué)的軟件教育的問(wèn)題,我在說(shuō)很多剛畢業(yè)的學(xué)生,對(duì)于軟件開(kāi)發(fā)的理解,往往停留于知識(shí)點(diǎn)的積累上,而沒(méi)有去思考,我打算把這些知識(shí)點(diǎn),組合起來(lái)運(yùn)用,以達(dá)到什么目的。很多學(xué)生,只是說(shuō)我知道什么什么,而不會(huì)說(shuō),我會(huì)做什么什么。林老師又和藹可親的對(duì)我說(shuō):“嗯,你說(shuō)的沒(méi)錯(cuò)。我一直跟學(xué)生們說(shuō),學(xué)校和企業(yè)是完全不同的,真正的知識(shí),只能在企業(yè)里才能學(xué)到。”然后我又說(shuō),其實(shí)軟件學(xué)院應(yīng)該多推薦學(xué)生去企業(yè)實(shí)習(xí),還有就是多鼓勵(lì)學(xué)生參與Open Source的項(xiàng)目呀。林老師還是和顏悅色的對(duì)我說(shuō):“是啊,不過(guò)現(xiàn)在的企業(yè),要他們肯接收學(xué)生實(shí)習(xí),不容易的。在美國(guó),每年暑期都會(huì)有大量的實(shí)習(xí)生招聘,這其實(shí)就是企業(yè)在做慈善呀。再說(shuō)現(xiàn)在的大學(xué)老師,對(duì)Open Source的了解,也很少的呀。”然后,我就跟林老師告辭了。作為一個(gè)老師,他給我留下了很好的印象,但是,我更加悲觀的發(fā)現(xiàn),要通過(guò)學(xué)校教育,提高軟件開(kāi)發(fā)人員的素質(zhì),好難啊!

    會(huì)后大家又找了一家小飯店FB了一下,CSDN的霍泰穩(wěn)也來(lái)了,我還給他們提了一個(gè)建議,以后CSDN最好能夠搞一個(gè)系列的活動(dòng),不斷的把世界各地的軟件大師們請(qǐng)到中國(guó)來(lái),巡回演講,收取門(mén)票,整理成每年基本的《軟件大師在中國(guó)》這樣書(shū)出版,還有視頻光盤(pán)也可以賣(mài)錢(qián),各位大師的中文Blog也都建在CSDN,應(yīng)該是一樁雙贏的好事啊,就看他們是不是打算做了。

    (待續(xù))

    posted @ 2006-06-20 23:05 讀書(shū)、思考、生活 閱讀(28450) | 評(píng)論 (6)編輯 收藏
    最近一直在討論招人的事情,如何判斷一個(gè)人的水平,怎么樣才算是沒(méi)有bug,等等等等。也看到一些并不怎么有趣的反對(duì)意見(jiàn),比如:
    不要出來(lái)搞笑說(shuō):
    沒(méi)有bug的程序?????????
    靠,站著說(shuō)話(huà)不腰疼。那個(gè)公司可以做出沒(méi)有bug的軟件來(lái)?
    當(dāng)然,沒(méi)有寫(xiě)過(guò)程序的人不出bug!!
    估計(jì)這位同志不會(huì)寫(xiě)代碼,是個(gè)理論專(zhuān)家。
    還是不要這么狂的好。
    我估摸按你的標(biāo)準(zhǔn),你是肯定不會(huì)被別人錄用的!
    123說(shuō):
    你是編程的嗎?
    無(wú)“BUG”搞笑吧你
    測(cè)試是不能查出所有BUG的
    而且不是所有測(cè)試都能窮舉的
    只能是測(cè)試覆蓋率達(dá)到一個(gè)標(biāo)準(zhǔn)
    BUG出現(xiàn)的概率達(dá)到標(biāo)準(zhǔn)
    才算產(chǎn)品
    “ZERO-BUG”做夢(mèng)去吧
    說(shuō)實(shí)話(huà),這兩個(gè)名字我看都不是用戶(hù)名,而且很可能是同一個(gè)人,就是所謂的troller。我說(shuō)的沒(méi)有bug,是交給我的demo沒(méi)有bug,這樣的要求很高嗎?我還沒(méi)有出算法題,要求應(yīng)聘者的算法效率呢??jī)H僅要求一個(gè)正確實(shí)現(xiàn)簡(jiǎn)單功能的程序,很過(guò)分嗎?
    ?
    在JavaEye還看到另外一篇帖子《大伙能進(jìn)來(lái)討論下“跳槽”的問(wèn)題》,有一個(gè)小伙子,對(duì)自己的代碼有感情,對(duì)人有感情,對(duì)公司有感情,所以當(dāng)公司遇到困難的時(shí)候,一時(shí)間舍不得走。這樣正常的事情,居然頗遭到不少人的冷嘲熱諷,和各種“善意”的勸誡。
    ?
    我就覺(jué)得非常奇怪,一個(gè)程序員,如果對(duì)自己寫(xiě)的代碼沒(méi)有感情,怎么可能寫(xiě)出漂亮的代碼來(lái)?同樣的道理,如果一個(gè)程序員,對(duì)自己的工作質(zhì)量沒(méi)有追求,又怎么可能成為高水平的程序員?一個(gè)前來(lái)應(yīng)聘的人,為了得到offer而寫(xiě)的demo,就這種情況下,在寄出代碼之間都不認(rèn)認(rèn)真真的檢查檢查,這樣粗心大意的家伙,我怎么敢招?
    ?
    總而言之一句話(huà):“對(duì)代碼有感情,對(duì)質(zhì)量有追求”,這是成為好程序員的基本前提。
    posted @ 2006-06-18 02:23 讀書(shū)、思考、生活 閱讀(28071) | 評(píng)論 (14)編輯 收藏
      我寫(xiě)了一篇blog叫做《招人不難》,很多朋友很贊同,也有的朋友不同意我的意見(jiàn),他們很懷疑:“有bug的一律不要?沒(méi)有BUG的代碼是不存在的...blabla”
    ?
      正好今天又看到一篇轉(zhuǎn)貼的笑話(huà),叫做《【轉(zhuǎn)】從一個(gè)笑話(huà)看軟件開(kāi)發(fā)管理》,大意是,程序員交出了自以為沒(méi)有bug的代碼,然后一切都變得越來(lái)越糟糕,而程序員總是會(huì)交出自以為沒(méi)有bug的代碼。
    ?
      我們今天就來(lái)談?wù)劊粋€(gè)程序員,什么時(shí)候可以交出自己的代碼,并且可以自豪的對(duì)別人說(shuō):“我的代碼里面,沒(méi)有bug!”。
    ?
      先說(shuō)傳統(tǒng)的做法,一個(gè)負(fù)責(zé)的程序員,應(yīng)該在交出代碼之前,自己跑好多次自己的代碼,左看右看,上看下看。直到交出去的時(shí)候,沒(méi)有一個(gè)人能夠發(fā)現(xiàn)其中的問(wèn)題。這樣的能力一般只有天才才能具備,我以前遇到過(guò)一個(gè)。但是,如果我企圖以這樣的標(biāo)準(zhǔn)來(lái)招人的話(huà),那就是在發(fā)瘋,怎么還敢說(shuō)“招人不難”?
    ?
      說(shuō)說(shuō)可行的辦法吧。一個(gè)程序員如果足夠的謙虛,時(shí)時(shí)想證明自己可能犯錯(cuò),即將犯錯(cuò),或者已經(jīng)犯錯(cuò)。那么他就會(huì)盡量寫(xiě)出足夠多的TestCase,以便打消自己的疑慮。直到所有的測(cè)試用例全部通過(guò),屏幕上顯示出美麗的綠色長(zhǎng)條,他才能確信,自己的代碼沒(méi)有bug。
    ?
      所以,我的判斷標(biāo)準(zhǔn),也很簡(jiǎn)單。如果寄給我的代碼,沒(méi)有附帶測(cè)試用例,我就自己運(yùn)行他的程序,隨意的亂找,找到一個(gè)我認(rèn)為是bug的,那就是有bug了。如果寄給我的代碼,附帶了足夠的測(cè)試用例,我只要Run一次,看到綠條,這一關(guān)就算是過(guò)了。~~~很簡(jiǎn)單吧。
    ?
      也許有人會(huì)說(shuō),那如果他的測(cè)試用例很簡(jiǎn)單呢?豈不是不能說(shuō)明什么問(wèn)題?怎么不能說(shuō)明問(wèn)題呢?首先可以說(shuō)明:這是一個(gè)會(huì)寫(xiě)測(cè)試用例的程序員!其次,我會(huì)看看他的測(cè)試用例的代碼,大概覆蓋了多少的功能特性。當(dāng)然,這是更進(jìn)一步的能力判斷。但是至少,他的代碼已經(jīng)達(dá)成了他自己的設(shè)計(jì)了呀。
    ?
      所以:“有bug的一律不要”,意味著,你最好能夠自己證明自己沒(méi)有bug,否則,我如果找到一個(gè)bug,你就沒(méi)戲了。
    posted @ 2006-06-11 10:34 讀書(shū)、思考、生活 閱讀(29286) | 評(píng)論 (10)編輯 收藏
      孟老師最近有點(diǎn)煩,面試了一個(gè)剛畢業(yè)大學(xué)生,結(jié)果發(fā)現(xiàn)那家伙一問(wèn)三不知。隨后的跟帖也是常見(jiàn)的感嘆:
      “現(xiàn)在的大學(xué)生過(guò)于浮躁”
      “真不明白本科都在學(xué)什么”
      還有一位臺(tái)灣同胞說(shuō):“本來(lái)還以為只有在臺(tái)灣有這種情形,原來(lái)兩岸的情都相同。”
    ?
      因此,打算寫(xiě)這篇blog,介紹一下我是怎么招人的。其實(shí),招人并不難。
    ?
      1、寫(xiě)招聘廣告
      2、收簡(jiǎn)歷,初步了解背景情況,然后讓加我的MSN
      3、在MSN里,就問(wèn)一個(gè)問(wèn)題:以下幾種技術(shù),你哪一種最熟悉,哪一種最不熟悉
      4、你就用最不熟悉的那種技術(shù),做一個(gè)demo給我,沒(méi)有時(shí)間限制,要求如下:
        -首先是demo的質(zhì)量,一定不能有任何bug
        -其次是代碼的質(zhì)量,要干凈,明白,好懂。
        -要有創(chuàng)意
        -在功能創(chuàng)意與時(shí)間進(jìn)度之間,自行平衡
      5、拿到代碼之后,先看看能不能正常運(yùn)行,看看有沒(méi)有bug。
      6、在Google里搜索代碼的關(guān)鍵段落,看看有沒(méi)有抄襲,或者了解一下借鑒的程度
      7、看他的代碼,是不是足夠干凈,足夠合理,足夠樸素
      8、如果一個(gè)人能夠在很短的時(shí)間里,自行快速學(xué)習(xí)一種新的技術(shù),并交出足夠質(zhì)量的代碼。這樣的員工,我就準(zhǔn)備要了。至于面試,無(wú)非是談?wù)劰べY的高低意向罷了。
    ?
      這樣的招人辦法,要點(diǎn)在于:
      1、我不關(guān)心他的學(xué)歷,工作經(jīng)驗(yàn),年齡和技術(shù)背景,因?yàn)檎械揭粋€(gè)出色的員工,他會(huì)持續(xù)的自我學(xué)習(xí),不斷的進(jìn)步。
      2、有bug的一律不要
      3、代碼最能夠說(shuō)明問(wèn)題,其他一切判斷都要在我看過(guò)他的代碼之后。一個(gè)人,不要玩弄聰明,不要炫耀技巧,寫(xiě)老老實(shí)實(shí),干干凈凈的代碼,合理的貼切的變量命名、方法命名、類(lèi)命名,合理而不多不少的類(lèi)間關(guān)系。這樣的代碼,就是漂亮的代碼。能寫(xiě)出這樣的代碼的人,就有足夠好的思維和品性。
      4、快速學(xué)習(xí)的能力要比過(guò)去的工作經(jīng)驗(yàn)更加重要,因?yàn)槟敲炊喙ぷ鹘?jīng)驗(yàn),也要有助于完成今后的工作,才能體現(xiàn)出價(jià)值。
      5、不抄襲,有創(chuàng)意,這樣的人才很難得。
      6、有計(jì)劃的實(shí)現(xiàn)功能,能夠在功能和時(shí)間進(jìn)度之間合理決斷。這就是有大局觀的人才。
    ?
      當(dāng)然,這樣招人的基礎(chǔ)是,你自己的代碼水平要夠高。很多公司根本就沒(méi)有這樣的水平,只能靠筆試來(lái)判斷人家的水平。
    ?
      我工作過(guò)的公司,曾經(jīng)有一個(gè)小伙,他的代碼,縮進(jìn)不是靠Tab,而是“按下空格鍵,任代碼隨意后退”,他的代碼,彎彎曲曲,難看至極。前兩天,他跟我說(shuō)“我筆試得了90多分,當(dāng)場(chǎng)拿到了4.5K的Offer。”可見(jiàn),筆試是毫無(wú)意義的測(cè)試手段。
    ?
    btw:還有問(wèn)題,這樣招人效率不是很高,也比較累,緊急招人的情況不適用。當(dāng)然,緊急招人的項(xiàng)目,通常肯定是搞不好的。
    posted @ 2006-05-30 16:11 讀書(shū)、思考、生活 閱讀(29031) | 評(píng)論 (36)編輯 收藏
      大多數(shù)程序員,都極度痛恨寫(xiě)文檔。Coding是愉快的,而Write是痛苦的。有一部分原因,其實(shí)是要?dú)w咎于程序員自身,以我的經(jīng)驗(yàn),很多程序員往往會(huì)“艱于表達(dá)”,尤其是用“文字、圖表、PPT、Word”之類(lèi)的Office Document來(lái)表達(dá)。當(dāng)然,還有一部分原因,是由于很多項(xiàng)目開(kāi)發(fā)實(shí)踐中,文檔的前后矛盾、形式主義、反復(fù)修改、歧義重重,常常讓程序員們抓狂。
    ?
      UML是一個(gè)比較好的工具,但是,僅僅靠UML,是無(wú)法將項(xiàng)目的知識(shí)描述清楚的。也有不少項(xiàng)目組在引入了UML之后發(fā)現(xiàn),文檔的工作量不但沒(méi)有減少,而是更多了。隨著項(xiàng)目的進(jìn)展,需要維護(hù)的設(shè)計(jì)文檔數(shù)量,也更多了。也因此造成了更多的前后矛盾,形式主義,反復(fù)修改。
    ?
      根本的痛苦,并不在于一開(kāi)始寫(xiě)一份文檔,而在于所有寫(xiě)下的文檔,都必須跟隨項(xiàng)目的進(jìn)展而隨之變化。當(dāng)我們寫(xiě)出來(lái)的文檔越多,需要被持續(xù)維護(hù)的文檔也就越多,需要反復(fù)檢查文檔間的可能存在的矛盾也就越多,所有扔出去的石頭,最后都會(huì)落回到自己頭上。
    ?
      于是,還有不少項(xiàng)目組,將文檔工作與代碼工作截然分開(kāi),文檔就寫(xiě)一次,用來(lái)應(yīng)付上面的管理層,而代碼自管自的繼續(xù)開(kāi)發(fā)。對(duì)于小型項(xiàng)目來(lái)說(shuō),這其實(shí)是一個(gè)不錯(cuò)的權(quán)宜之計(jì)。但是一旦項(xiàng)目越來(lái)越龐大、復(fù)雜。所有的隱性的知識(shí),都僅僅存在于程序員的腦子里,所有成文的東西,都可能是錯(cuò)的,而真實(shí)的情況,卻隱藏在代碼之中。如果代碼質(zhì)量再糟糕一些,后來(lái)維護(hù)的朋友,就遭遇火坑了。
    ?
      文檔,寫(xiě)還是不寫(xiě),這是一個(gè)問(wèn)題!
    ?
      還記得測(cè)試驅(qū)動(dòng)開(kāi)發(fā)嗎?為自己的每一個(gè)方法,每一個(gè)類(lèi),都寫(xiě)出單元測(cè)試來(lái)。不但如此,更加徹底的做法是,在寫(xiě)代碼之前,先寫(xiě)測(cè)試用例。這樣才能保證不會(huì)忘記寫(xiě)測(cè)試用例。更大的好處在于,這樣有助于思考、有助于獲得更加完善的設(shè)計(jì),有助于寫(xiě)出更加高質(zhì)量的代碼,有助于安全的重構(gòu),有助于自動(dòng)化的持續(xù)集成實(shí)踐。總之,是好得不能再好的一項(xiàng)開(kāi)發(fā)實(shí)踐。
    ?
      這一實(shí)踐之所以可行,就在于他將繁雜的集中的測(cè)試工作,分解為日常的,必須不斷進(jìn)行的工作。當(dāng)你每天都在寫(xiě)測(cè)試用例,當(dāng)你的每一個(gè)測(cè)試用例,都能夠與代碼完全對(duì)應(yīng)時(shí),壓力反而減輕了,工作量也更少了,更重要的,一些優(yōu)良的習(xí)慣也因此被養(yǎng)成了。
    ?
      在兩年前,我要開(kāi)始一個(gè)全新的P2P網(wǎng)絡(luò)電視項(xiàng)目時(shí),也在考慮關(guān)于文檔的問(wèn)題。當(dāng)時(shí)我發(fā)現(xiàn)了Open Source的WikiPedia。這是一個(gè)PHP的WIKI,最大的應(yīng)用是維基百科全書(shū)。因此,這個(gè)項(xiàng)目的質(zhì)量就絕對(duì)值得信賴(lài)。我就將它拿過(guò)來(lái),作為我們項(xiàng)目文檔管理的工具。
    ?
      用Wiki來(lái)管理項(xiàng)目文檔,基于以下一些考慮:

    文檔是項(xiàng)目的知識(shí),這些知識(shí)必須集中管理、容易獲取、人人可以編輯。

    項(xiàng)目在生長(zhǎng),代碼在增加,文檔也必須能夠跟隨項(xiàng)目自然生長(zhǎng),強(qiáng)行劃分設(shè)計(jì)階段和開(kāi)發(fā)階段,是不可取的。

    Wiki不是傳統(tǒng)的項(xiàng)目文檔,而是一個(gè)應(yīng)交流需要,可能隨時(shí)增刪改的知識(shí)庫(kù)。項(xiàng)目組的成員,遇到問(wèn)題,就應(yīng)該首先查看Wiki,如果這是Wiki中沒(méi)有,那么他應(yīng)該找人詢(xún)問(wèn)。而那個(gè)知道答案的人,如果他不想再今后不斷的回答同一問(wèn)題,就應(yīng)該把這個(gè)答案寫(xiě)入Wiki,這就是Wiki條目增長(zhǎng)的自然動(dòng)力。

    傳統(tǒng)文檔最大的問(wèn)題在于浪費(fèi),而Wiki通過(guò)持續(xù)修改,按需提供的方式,保證了所有寫(xiě)下的文字,一定有超過(guò)一個(gè)人需要讀它。

    ?
      在Wikipedia的基礎(chǔ)上,我又做了一些增強(qiáng),以更好的輔助項(xiàng)目的管理。

    Include功能,增加include標(biāo)簽,可以在一個(gè)條目中,引入其他條目的全文,而不是僅僅增加一個(gè)link。

    文檔的層次結(jié)構(gòu),當(dāng)項(xiàng)目的文檔條目逐漸增加,分門(mén)別類(lèi)的條目,更加便于查找,也可以有效的避免條目重名的問(wèn)題。

    一個(gè)Click,就能夠創(chuàng)建新一個(gè)條目,用于填寫(xiě)當(dāng)天的工作安排。

      相應(yīng)的管理制度,也必須建立起來(lái)。

    每日15分鐘文檔制度,基于“填寫(xiě)當(dāng)日工作”的功能,我規(guī)定每個(gè)項(xiàng)目組成員,每天要花三個(gè)5分鐘來(lái)寫(xiě)文檔,早上的5分鐘,填寫(xiě)當(dāng)日工作計(jì)劃。中午的5分鐘填寫(xiě)上午的工作情況,下班前的5分鐘,填寫(xiě)下午的工作情況。這樣,每天的文檔工作相當(dāng)輕松,但是文檔能夠保證持續(xù)的跟隨項(xiàng)目成長(zhǎng)下去。更進(jìn)一步的,這樣的制度,對(duì)于項(xiàng)目的進(jìn)度控制,也很有幫助。

    User Case條目驅(qū)動(dòng),所有分解出去的User Case,在分配到責(zé)任人之后,該責(zé)任人的第一項(xiàng)工作,就是在Wiki中寫(xiě)下對(duì)于這個(gè)User Case的理解。隨后項(xiàng)目進(jìn)展,也應(yīng)該持續(xù)的維護(hù)這個(gè)條目。

    同時(shí)進(jìn)行Bug的管理,Bug也作為Wiki中的條目,以便于和其他條目項(xiàng)目引用。

    每次Check In CVS時(shí),必須寫(xiě)注釋。這是更加細(xì)節(jié)的文檔,然后我還做了一個(gè)小程序,能夠自動(dòng)的從CVSTrac中讀出當(dāng)天Check In代碼的注釋。供每個(gè)人在寫(xiě)當(dāng)天文檔的時(shí)候引用。

      總而言之,我對(duì)于項(xiàng)目文檔的看法,并不是非此即彼的極端主義者。在我看來(lái),好的項(xiàng)目文檔管理政策,應(yīng)該有助于集中團(tuán)隊(duì)知識(shí)和智慧,同時(shí)不要讓程序員痛苦和反感。這樣才叫做有效的項(xiàng)目管理。仿造Martin Fowler的著名文獻(xiàn)《持續(xù)集成》,我給這篇Blog起這樣一個(gè)名字《軟件開(kāi)發(fā)文檔的持續(xù)集成》,希望能夠引發(fā)更多的、更深入的思考。
    posted @ 2006-05-12 14:23 讀書(shū)、思考、生活 閱讀(28647) | 評(píng)論 (3)編輯 收藏
      我新到這家公司,就開(kāi)始了一場(chǎng)死亡之旅,我們的項(xiàng)目開(kāi)發(fā)周期是3個(gè)月,人員大概有3~6個(gè)不一定。而以我的經(jīng)驗(yàn),我們大概要做的,是一個(gè)3~5個(gè)人年的非常復(fù)雜的創(chuàng)新型項(xiàng)目。新加盟的技術(shù)總監(jiān),是一個(gè)崇尚文檔交流的“老干部”,因此,我們花了一個(gè)月的時(shí)間,在寫(xiě)各種各樣的設(shè)計(jì)文檔。真正能夠用于開(kāi)發(fā)的時(shí)間,是2個(gè)月。
    ?
      我們這個(gè)小組的另外一位組員,也是一位經(jīng)驗(yàn)豐富的項(xiàng)目經(jīng)理,他崇尚的,是文檔UML化描述。因此,我現(xiàn)在除了寫(xiě)文檔,還要用Rational Rose畫(huà)好多好多的圖~~~
    ?
      在他們兩位來(lái)這個(gè)項(xiàng)目組之前,我其實(shí)已經(jīng)寫(xiě)出了一份基本完整的User Case列表,而且和另外一位組員已經(jīng)進(jìn)入測(cè)試驅(qū)動(dòng)的、結(jié)對(duì)編程階段了。。。
    ?
    ?
      大家可能已經(jīng)看出來(lái)了,這其中的開(kāi)發(fā)模式,簡(jiǎn)直就是混亂不堪。到底是文檔驅(qū)動(dòng)?UML驅(qū)動(dòng)?用例驅(qū)動(dòng)?還是測(cè)試驅(qū)動(dòng)呢?
    ?
      問(wèn)題還不止這些,我們的大老板比較喜歡和我們一起討論設(shè)計(jì),甚至?xí)臀覀儬?zhēng)論具體的某個(gè)算法。開(kāi)發(fā)文檔沒(méi)有統(tǒng)一的管理,匯報(bào)機(jī)制沒(méi)有明確的定義,項(xiàng)目需求隨時(shí)都可能變動(dòng),就連到底我們這個(gè)小組會(huì)有幾個(gè)人,都還是一個(gè)未知數(shù),這樣的死亡之組,不知各位有什么好的建議?

    ?背景資料介紹完畢,抱怨結(jié)束,下面討論正題:

      文檔驅(qū)動(dòng)、測(cè)試驅(qū)動(dòng)、用例驅(qū)動(dòng)、模型驅(qū)動(dòng)、特征驅(qū)動(dòng)。。。。他們都要解決的是什么問(wèn)題?

      要回答這個(gè)問(wèn)題,還真不容易。我們得問(wèn)一個(gè)更加重要的問(wèn)題,真正驅(qū)動(dòng)項(xiàng)目的,究竟是什么呢?我想,應(yīng)該是需求吧?

    ?

      那么,這些“文檔”、“測(cè)試”、“用例”、“模型”、“特征”,究竟是什么呢?對(duì)于需求的描述!我們之所以不會(huì)直接用需求來(lái)驅(qū)動(dòng)項(xiàng)目開(kāi)發(fā),而是要借助工具,來(lái)幫助我們描述需求,就是因?yàn)榭谡Z(yǔ)化的需求描述是非常模糊的,充滿(mǎn)歧義的。所以,選擇什么來(lái)驅(qū)動(dòng)我們的項(xiàng)目,其實(shí)就是要看,以上這些工具,哪一個(gè)能夠更好、更準(zhǔn)確的描述需求?

    ?

      文檔其實(shí)是最難準(zhǔn)確描述需求的一種方式,如果是純文字的文檔,就更難。我們的技術(shù)總監(jiān),非常喜歡讀寫(xiě)文檔,我最近也創(chuàng)下了一天寫(xiě)47頁(yè)文檔的最新記錄。但是,當(dāng)我們開(kāi)會(huì)的時(shí)候,我還是經(jīng)常需要提醒我們的技術(shù)總監(jiān),麻煩他再仔細(xì)看看文檔第XX頁(yè)的第XX段,以及配合著另一份文檔的XX小節(jié),來(lái)確切的理解我的意思!如果沒(méi)有我的解釋?zhuān)蜁?huì)誤解我的文檔。

    ?

      當(dāng)然,如果要寫(xiě)出不需要我來(lái)解釋?zhuān)湍芾斫獾奈臋n,那么文檔的工作量,將會(huì)極其驚人!我以前寫(xiě)過(guò)一篇blog,《Jacobson博士演講觀后感》是我對(duì)UP的創(chuàng)始人的極度反感的集中體現(xiàn)。GHawk,以及交大林老師的所謂“UP”的觀點(diǎn),當(dāng)然不可能獲得我的贊同。在GHawk的最新一篇blog:《UP & XP之爭(zhēng),意義何在?(續(xù))》中,GHawk說(shuō):“唯一的問(wèn)題是:“如何確保測(cè)試用例的質(zhì)量”。顯然,我們不能把一把不直的尺子度量出來(lái)的結(jié)果作為可靠的參考依據(jù)。怎么解決呢?“結(jié)對(duì)編程”么?嗯,這是一個(gè)不錯(cuò)的方式,那么最終該信賴(lài)誰(shuí)呢?是Pair中的A還是B呢?或者,是Leader么?那么又是誰(shuí)提出的要求呢?是老板么?還是客戶(hù)?政府?法規(guī)?市場(chǎng)?……問(wèn)題沒(méi)有終結(jié)了。”

    ?

      由此我可以推斷,他對(duì)于XP的認(rèn)識(shí),基本上是停留在猜測(cè)的階段。對(duì)于這篇blog的觀點(diǎn),我就不逐一反駁了,我的猜測(cè)是,他經(jīng)歷過(guò)一次失敗的XP嘗試,而究其原因,我猜測(cè)是因?yàn)樗麄兡莻€(gè)所謂的XP Team中,沒(méi)有一個(gè)人,曾經(jīng)實(shí)踐過(guò)一次正規(guī)的XP開(kāi)發(fā)。

    ?

      再來(lái)看模型驅(qū)動(dòng),這中間有一個(gè)大問(wèn)題,因?yàn)樾枨笫恰皢?wèn)題域”的范疇,而模型,則是“解答域”的范疇,試圖通過(guò)解答域的精確描述,來(lái)實(shí)現(xiàn)對(duì)于需求的準(zhǔn)確描述,肯定不靠譜啊。

    ?

      特征驅(qū)動(dòng),我認(rèn)為FDD其實(shí)是老方法的新名詞,具體的實(shí)踐,可能更加接近測(cè)試、迭代式的過(guò)程。了解不過(guò),所以我也不打算多說(shuō)。

    ?

      用例驅(qū)動(dòng)與測(cè)試驅(qū)動(dòng),其實(shí)我認(rèn)為這是一個(gè)硬幣的兩面,用例要盡快的翻譯為測(cè)試用例,而測(cè)試用例,正是為了更加準(zhǔn)確的表述需求用例。這是我能夠想到的,驅(qū)動(dòng)項(xiàng)目開(kāi)發(fā)的,最好的方法!

    posted @ 2006-04-26 00:32 讀書(shū)、思考、生活 閱讀(29567) | 評(píng)論 (31)編輯 收藏
      幾段在腦子里盤(pán)旋了很久的話(huà):
    ?
      帶一個(gè)項(xiàng)目,要保證項(xiàng)目的質(zhì)量,當(dāng)然要靠Team Leader的水平。那么,什么才是最重要的項(xiàng)目質(zhì)量呢?當(dāng)然是代碼質(zhì)量!一個(gè)軟件項(xiàng)目,最重要的產(chǎn)品當(dāng)然是代碼!
    ?
      如果這個(gè)Leader看不懂項(xiàng)目的代碼,他只能通過(guò)要求文檔的質(zhì)量,來(lái)間接的控制代碼的質(zhì)量。一個(gè)能夠看得懂代碼的Leader,他就能夠直接控制代碼質(zhì)量。而能夠直接控制代碼質(zhì)量的Leader,對(duì)于文檔的要求,會(huì)合理很多。
    ?
      直接控制與間接控制,哪一個(gè)更加有效,是不言而喻的。當(dāng)然,那些沒(méi)有代碼閱讀能力的Leader,他們會(huì)更加強(qiáng)調(diào)文檔的重要性,甚至舍本逐末,認(rèn)為文檔質(zhì)量才是項(xiàng)目質(zhì)量的體現(xiàn)。進(jìn)而變態(tài)地追求文檔完美,以至于浪費(fèi)了程序員寫(xiě)代碼的時(shí)間。這樣的Leader,根本就不可能管好項(xiàng)目的。
    ?
      公司往往會(huì)出于恐慌,向員工要求很多詳盡的文檔,主要是為了防止員工離職帶來(lái)的損失。而問(wèn)題在于,公司的主要努力,應(yīng)該用于留住員工,而不是用于加強(qiáng)“善后能力”。更不是為了增強(qiáng)善后能力,搞得員工越發(fā)想離開(kāi)這家公司。
    ?
    btw:
    ?
    補(bǔ)記一段交鋒對(duì)話(huà):
    軟件開(kāi)發(fā)項(xiàng)目中的成本比例》是我以前寫(xiě)的一篇blog,有一個(gè)GHawk有這么一段留言:
    ?
    UP和Agile都是工程過(guò)程實(shí)踐的總結(jié),林德彰先生說(shuō)過(guò)“UP是正楷,XP是草書(shū)。先學(xué)好了UP,才能學(xué)好XP;先學(xué)XP再學(xué)UP就會(huì)亂套。”
    Agile強(qiáng)調(diào)的是“代碼是真正有價(jià)值的東西。”這同樣也是實(shí)踐的結(jié)果。二位對(duì)于過(guò)程有不同的看法并不能說(shuō)明孰是孰非,這只是在不同的實(shí)踐內(nèi)容和階段上的總結(jié)。在過(guò)程的選用問(wèn)題上,只有不斷地實(shí)踐才是前進(jìn)的方向。?
    ?
    另外還有一篇blog,專(zhuān)門(mén)討論這句話(huà)。
    ?
    我的回答是:
    ?
    林德彰的說(shuō)法,是一個(gè)在校教師,典型的和稀泥的說(shuō)法,我不同意。
    ?
    沒(méi)想到今天有一個(gè)朋友WANG回了一帖:
    ?
    老林是在校教師?你應(yīng)該去看一下人家在美國(guó)打拼的經(jīng)驗(yàn)~~??
    ?
    我的回復(fù)是:
    他在美國(guó)打拼怎么了?還有好多土生土長(zhǎng)的美國(guó)人,也不鳥(niǎo)那什么UP呢?
    我為什么要聽(tīng)一個(gè)海龜來(lái)上課呢?
    這年頭,海龜還不夠多嗎?

    另外對(duì)GHawk多說(shuō)一句話(huà):讓組員快速磨合的最好辦法,是結(jié)對(duì)編程,而不是大家埋頭寫(xiě)文檔。
    posted @ 2006-04-22 21:35 讀書(shū)、思考、生活 閱讀(29984) | 評(píng)論 (21)編輯 收藏
      我們現(xiàn)在這個(gè)公司的大老板,平時(shí)在三樓辦公。但是,每天都會(huì)有幾次,他會(huì)在我們的辦公室里走來(lái)走去——“進(jìn)行著聊勝于無(wú)的監(jiān)督工作”。
    ?
      我想,他大概沒(méi)有聽(tīng)說(shuō)過(guò)“XP”、“結(jié)對(duì)編程”這樣的名詞。
    ?
      4月15日,周六,我參加了BEA上海User Group的一次活動(dòng)。北京來(lái)的Charls,做了一次非常精彩的演講。名字叫做《一個(gè)Xper的心路歷程》。全場(chǎng)笑聲不斷,Charls的感染力征服了每一個(gè)人。
      演講最后提出的一個(gè)觀點(diǎn)是:“成為一個(gè)Xper,就是成為一個(gè)合格的程序員”。要勇于暴露自己的不足,要善于溝通,要謙虛,要有計(jì)劃,要……做到了這些,我們才算是“剛剛夠格”。
    ?
      我基本上已經(jīng)被說(shuō)服了……在Charls演講結(jié)束的時(shí)候,我只想問(wèn)一個(gè)小問(wèn)題。因?yàn)樗f(shuō),在項(xiàng)目組里,如果有人遇到問(wèn)題,不要自己偷偷摸摸 的Google搞定,而是應(yīng)該馬上“舉手”,看看小組里有沒(méi)有人能夠馬上告訴你答案。這才是“勇于暴露自己的不足”。而我還想從另外一個(gè)角度問(wèn)一下。
    ?
      (以下對(duì)話(huà)是一個(gè)大概的回憶)
    ?
      “我一直以來(lái)的工作方式是這樣的,遇到問(wèn)題的時(shí)候,首先Google一下,這樣我不但可以找到當(dāng)前這個(gè)問(wèn)題的答案,還能夠了解很多周邊的知識(shí),觸類(lèi)旁通。如果直接問(wèn)人的話(huà),問(wèn)題解決,我也就不再深入了。這樣是不是對(duì)于個(gè)人能力成長(zhǎng)不太有利呀。”
      Charls:“項(xiàng)目進(jìn)度在那里,當(dāng)然是馬上解決問(wèn)題最好。”
      我:“那么我們是不是可以這么理解,XP對(duì)于項(xiàng)目開(kāi)發(fā)的目標(biāo)很有效,而對(duì)于程序員個(gè)人能力的成長(zhǎng)目標(biāo),不是很有效?”
      Charls:“我一直這么說(shuō),XP更加高級(jí)的剝削方式……”
    ?
      頓時(shí),我豁然開(kāi)朗。XP的好處,從老板的角度來(lái)看,應(yīng)該更多:
    ?
      結(jié)對(duì)編程——最有效的相互監(jiān)督機(jī)制
      結(jié)對(duì)編程——最有效的內(nèi)部培訓(xùn)機(jī)制
      測(cè)試驅(qū)動(dòng)開(kāi)發(fā)——最有效的質(zhì)量保證體系
      User Story+客戶(hù)現(xiàn)場(chǎng)辦公——最低成本的需求收集、分析機(jī)制
      每日集成——有效降低集成、測(cè)試成本
      …….
      從程序員的角度來(lái)說(shuō),這些“與我何干”呢?

      所以,一個(gè)追求利潤(rùn)最大化的老板,就應(yīng)該選擇XP,而一個(gè)聰明的老板,不但要運(yùn)用XP,還要保證8小時(shí)工作制,甚至給員工20%的 On Beach時(shí)間(來(lái)源于Gigix對(duì)于ThroughWorks的介紹)。這樣才能保持員工的可持續(xù)編程能力。如果我是老板的話(huà),我就會(huì)這么干!
      那天討論的話(huà)題中,還有一些XP沒(méi)能夠很好回答的問(wèn)題:
      比如文檔。在我以前的開(kāi)發(fā)實(shí)踐中,我們都建立了一個(gè)Wiki,并且強(qiáng)制程序員每人每天就Wiki幾次,以分散寫(xiě)文檔的壓力。
      比如對(duì)于人員的高要求的疑問(wèn)。我的理解是,XP對(duì)人員提出了很高的要求,但是同時(shí)也提供了最有效的人員培訓(xùn)機(jī)制(結(jié)對(duì)編程),所以,對(duì)于入職人員的要求,并不需要很高,更多的是考察一個(gè)人的溝通能力、學(xué)習(xí)能力,而不是開(kāi)發(fā)的能力。
    posted @ 2006-04-18 06:44 讀書(shū)、思考、生活 閱讀(30192) | 評(píng)論 (9)編輯 收藏
    決定不再玩連載的把戲了,總共就這么點(diǎn)文字,還不如一口氣放出來(lái)算了。
    ?
    這是以前寫(xiě)的書(shū)的初稿,后來(lái)因?yàn)榇蛩闳客品貙?xiě),所以將過(guò)去寫(xiě)的內(nèi)容,作為Open Doc放出。
    ?

    歡迎下載: AJAX——新手快車(chē)道

    posted @ 2006-03-27 22:39 讀書(shū)、思考、生活 閱讀(6224) | 評(píng)論 (24)編輯 收藏
    Crmky 獨(dú)立開(kāi)發(fā)Cindy,已經(jīng)很久了~~~至今只有他一個(gè)人。
    ?
    這是一個(gè)Java的NIO開(kāi)發(fā)框架,我在上一家公司,和現(xiàn)在所在的這家公司,都已經(jīng)使用了這個(gè)框架。但是,開(kāi)發(fā)人員始終只有他一個(gè)人。
    ?
    前天他寫(xiě)了一篇Blog:《目標(biāo)》,對(duì)我有很大的觸動(dòng)。我也一直存在這樣的疑慮,為什么我們要用Java開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用?或者說(shuō),使用java開(kāi)發(fā)的網(wǎng)絡(luò)應(yīng)用,難道注定只是一個(gè)快速原型,就像當(dāng)年用VB開(kāi)發(fā)桌面應(yīng)用?一旦需要面對(duì)性能需求時(shí),就得推翻過(guò)去的工作,用C/C++重新實(shí)現(xiàn)一遍?
    ?
    現(xiàn)在,目標(biāo)已經(jīng)很明確了——“無(wú)限接近于C/C++效率的java網(wǎng)絡(luò)框架”。這是Cindy的終極目標(biāo),而我則相當(dāng)確信,我一定要為這個(gè)目標(biāo),做出貢獻(xiàn)!現(xiàn)在,我已經(jīng)是Cindy項(xiàng)目的第二名成員了

    正好今天看到一篇Leal的blog。我能為開(kāi)源社區(qū)做些什么?

    zoomq在woodpecker上寫(xiě)道:

    每日至少抽一刻鐘解答列表中初學(xué)者的問(wèn)題,
    每周至少抽兩小時(shí)整理新學(xué)知識(shí),用Blog/Wiki/mail將體驗(yàn)發(fā)表/分享出去,
    每周至少抽四個(gè)小時(shí)來(lái)翻譯自個(gè)兒喜愛(ài)的自由軟件的文檔,
    每月至少抽八小時(shí)編程,推進(jìn)自個(gè)兒的項(xiàng)目,
    每年至少參加一次自由軟件的活動(dòng),傳播自由軟件思想,發(fā)展一名“自由人”……

    只要我們每個(gè)人都堅(jiān)持下去……
    10年!就足以改變中國(guó)軟件的整體風(fēng)貌!

    自接觸電腦以來(lái),自由/開(kāi)源軟件也一直給我諸多幫助和樂(lè)趣,Linux、Python、Vim凡此種種。當(dāng)我有些業(yè)余時(shí)間,有些體會(huì)和收獲時(shí),又該為自由/開(kāi)源社區(qū)做何回饋呢?


      我的思考是:參加一個(gè)項(xiàng)目,或者發(fā)起一個(gè)項(xiàng)目,使用一個(gè)項(xiàng)目并且提交反饋,宣傳一個(gè)項(xiàng)目。不要僅僅是感嘆中國(guó)開(kāi)源項(xiàng)目的水平。如果你是一個(gè)程序員,那么,你也可以為之做點(diǎn)什么。

    posted @ 2006-03-27 13:53 讀書(shū)、思考、生活 閱讀(3162) | 評(píng)論 (16)編輯 收藏
    本來(lái)拿到的是一個(gè)20多M的MP3文件,還好找到一個(gè)工具,轉(zhuǎn)了一下。還是微軟的格式牛啊。
    ?
    下載地址:
    posted @ 2006-03-22 15:55 讀書(shū)、思考、生活 閱讀(3218) | 評(píng)論 (7)編輯 收藏

      我有很濃厚的“地圖情結(jié)”,以前我寫(xiě)過(guò)一篇《我的信仰地圖》,最近又做了一次關(guān)于Ajax的演講,名字叫做《Ajax技術(shù)地圖》。我一直以來(lái)的觀點(diǎn)是,世界是一個(gè)整體,在這個(gè)巨大的世界之中,任何事物、任何知識(shí),任何觀點(diǎn),都有其合理、自然的位置。理解這個(gè)世界的過(guò)程,就是逐步將需要了解的各種事物,在作為整體的一個(gè)世界中,找到其位置。了解這個(gè)位置的前后左右,相互關(guān)系,相互影響。這樣的理解世界的學(xué)習(xí)方式,我認(rèn)為是最為有效的。所以當(dāng)我在JavaEye看到關(guān)于《代碼大全》的廣告時(shí),我的第一反應(yīng)就是:這不是世界地圖嗎?
    ?
      看了看他的目錄,竟然有35章之多?架構(gòu)、分析、設(shè)計(jì)、編程、測(cè)試、重構(gòu)、面向?qū)ο蟆⒄{(diào)試、規(guī)范、管理、軟件質(zhì)量控制、協(xié)作、優(yōu)化、開(kāi)發(fā)工具、注釋、甚至個(gè)性、開(kāi)發(fā)藝術(shù)等等等等,只要是與軟件有關(guān)的,基本上他都寫(xiě)到了。
    ?
      說(shuō)實(shí)話(huà),我當(dāng)時(shí)相當(dāng)?shù)牟恍?.....可能嗎?居然有這么一個(gè)家伙,能夠像當(dāng)年的托馬斯?阿奎那一樣,以一己之力,寫(xiě)出《神學(xué)大全》?CSDN的網(wǎng)站上介紹這個(gè)Steve McConnell,在1998年的時(shí)候,被Software Development雜志的讀者評(píng)為軟件業(yè)最具影響力的三大人物之一,與Bill Gates、Linus Torvalds齊名。一個(gè)寫(xiě)書(shū)的,能和兩個(gè)寫(xiě)代碼的天才齊名?網(wǎng)站上的那些推薦的話(huà),個(gè)個(gè)都是大名鼎鼎,個(gè)個(gè)都是推崇備至。作為我這樣一個(gè)有逆反心里的家伙來(lái)說(shuō),直覺(jué)上就是:“會(huì)不會(huì)呀,有這么牛嗎?”

    ?

      當(dāng)然了,我也不好多說(shuō)什么,畢竟沒(méi)有看過(guò)書(shū)~~~

    ?

      沒(méi)想到好事居然找上門(mén)來(lái)了,博文視點(diǎn)的魏泉是我要寫(xiě)的那本Ajax書(shū)的責(zé)任編輯。而《代碼大全》也是他們負(fù)責(zé)出版的。那天他找到我,說(shuō)是讓我看看這本書(shū)的書(shū)稿……看看能不能寫(xiě)一篇書(shū)評(píng)。這等美差,我很爽快的就答應(yīng)下來(lái)了。

    ?

      一看之下,果然是很喜歡,作者的思考問(wèn)題的方式,與我的方式相當(dāng)?shù)慕咏际潜M可能將多種、甚至矛盾的事物,放在一個(gè)整體的環(huán)境中來(lái)理解。比如對(duì)于隱喻,用于描述軟件開(kāi)發(fā)的特征的各種各樣的隱喻,其實(shí)各有其價(jià)值,如果能夠組合運(yùn)用,自然能夠獲得一種平衡。正如作者所說(shuō):“使用隱喻又是件說(shuō)不清楚的事情(fuzzy business)。你需要適當(dāng)?shù)匾晁暮x,才能從其中蘊(yùn)含的深刻啟發(fā)中受益。但若你過(guò)分地或者在錯(cuò)誤的方向上引申了它的含義,它也會(huì)誤導(dǎo)你。正如人們會(huì)誤用任何強(qiáng)大的工具一樣,你也可能誤用隱喻,但它的強(qiáng)大的功效,還是會(huì)成為你智慧工具箱中的一個(gè)寶貴部分。”

    ?

      這樣的一種看法,可以說(shuō)“中正平和、深具智慧”,這是我們?cè)诖蠖鄶?shù)關(guān)于軟件開(kāi)發(fā)的論述中,很難看到的。

    ?

      再比如說(shuō),作者在第三章時(shí)給出的一個(gè)表格:三種常見(jiàn)的軟件項(xiàng)目種類(lèi),及其典型的良好實(shí)踐。就將軟件分為商業(yè)系統(tǒng)、性命攸關(guān)的系統(tǒng)以及性命攸關(guān)的嵌入式系統(tǒng)。然后指出對(duì)于這三類(lèi)不同的應(yīng)用,在開(kāi)發(fā)手段、管理強(qiáng)度、設(shè)計(jì)、構(gòu)建、測(cè)試、部署等等方面的差別化策略。這樣的分類(lèi),自然就避免了將各種開(kāi)發(fā)手段,簡(jiǎn)單的對(duì)立起來(lái)比較的方法,顯得更加具有說(shuō)服力。

    ?

      再比如說(shuō),全書(shū)給出了相當(dāng)多的Check List,這樣的表格,實(shí)在是大有益處,借用地圖的隱喻來(lái)書(shū),這樣的CheckList,就是一個(gè)一個(gè)的定位器,它能夠幫助你認(rèn)清自己的位置,了解問(wèn)題所屬的范疇,了解應(yīng)該努力的大致方向。這樣的“開(kāi)發(fā)工具”,真是獨(dú)一無(wú)二。

    ?

      這本書(shū)我目前只看了前面的5~6章,實(shí)在沒(méi)有太多的發(fā)言權(quán),不過(guò)我現(xiàn)在已經(jīng)可以肯定,這是一本非常有價(jià)值的好書(shū),我推薦所有沒(méi)有看過(guò)的朋友去看看這本名副其實(shí)的經(jīng)典之作。

    ?

      說(shuō)實(shí)話(huà),天下沒(méi)有免費(fèi)的午餐,我這篇書(shū)評(píng),也是屬于交差之作。人家出版社把樣書(shū)給你看,請(qǐng)你寫(xiě)書(shū)評(píng),當(dāng)然希望你能說(shuō)些好話(huà)?幸運(yùn)的是,這些好話(huà),的確都是我自己愿意說(shuō)的。

    posted @ 2006-03-22 15:53 讀書(shū)、思考、生活 閱讀(5639) | 評(píng)論 (5)編輯 收藏
    廣州之行,真是匆匆又匆匆,在廣州呆的時(shí)間,算上在飛機(jī)場(chǎng)的時(shí)間,都還不到24個(gè)小時(shí)。

    個(gè)中甘苦,就不在這里說(shuō)了,還是把PPT傳上來(lái)吧。

    之所以叫處女秀,是因?yàn)檫@是我第一次上臺(tái)做技術(shù)演講,但是這句話(huà)卻不是我自己想到的,而是江南白衣說(shuō)出來(lái)的。

    PPT的標(biāo)題是《Ajax技術(shù)地圖》,基本上是一個(gè)純粹空對(duì)空的理論探索,不出現(xiàn)一行代碼。還好隨后曹曉鋼的演講,同樣是講Ajax,充斥了無(wú)數(shù)的代碼,相信廣州的朋友們,一定爽到了。

     

    PPT的下載地址是:
    http://www.ajaxcn.org/space/start/2006-03-13/1/Ajax%E6%8A%80%E6%9C%AF%E5%9C%B0%E5%9B%BE.pps

     

    廣州游記和其他感想,就明天再補(bǔ)吧。

    posted @ 2006-03-13 22:47 讀書(shū)、思考、生活 閱讀(2975) | 評(píng)論 (8)編輯 收藏
    去廣州參加BEA的User Group活動(dòng)。
    演講題目是:《Ajax技術(shù)地圖》
    副標(biāo)題是:為即將到來(lái)的技術(shù)變革做好準(zhǔn)備。
     
    11日晚19:45起飛,22:25到達(dá)白云機(jī)場(chǎng)。
    12日晚19:25起飛,21:20回到上海。
     
    奇怪啊,去要2小時(shí)20分,回來(lái)只要1小時(shí)55分。順風(fēng)、逆風(fēng)嗎?
     
    得抓緊時(shí)間寫(xiě)PPT了
    posted @ 2006-03-10 22:34 讀書(shū)、思考、生活 閱讀(1824) | 評(píng)論 (7)編輯 收藏

    莊表偉 說(shuō):

    JSVM,我覺(jué)得有一個(gè)方向可以嘗試去發(fā)展,就是瀏覽器中的對(duì)象管理,起到一個(gè)VM的作用

    dlee 說(shuō):

    問(wèn)題就是你敢不敢去做小白鼠,或者叫做生活在剃刀邊上。對(duì)于一個(gè)嚴(yán)肅的項(xiàng)目,我做項(xiàng)目經(jīng)理,是不會(huì)采用jsvm的。

    莊表偉 說(shuō):

    那為什么你就會(huì)采用prototype呢?

    dlee 說(shuō):

    prototype背后有強(qiáng)大的支持,而不是像jsvm那樣只有萬(wàn)春華同志等很少的幾個(gè)鐵桿。

    莊表偉 說(shuō):

    為什么?你是看著哪邊人多去哪邊的嗎?

    dlee 說(shuō):

    你看那些叫喊"""支持"""的人會(huì)不會(huì)貢獻(xiàn)一行代碼。你太容易非黑即白了。當(dāng)然不完全是這樣,不過(guò)支持能力是一個(gè)非常重要的考慮因素。

    莊表偉 說(shuō):

    我的意思是,JSVM,該不該用他,只能由我們看過(guò)他的代碼以后,來(lái)決定?

    dlee 說(shuō):

    你有能力維護(hù)所有的代碼嗎?

    莊表偉 說(shuō):

    我只是用他呀,又不是要改他

    dlee 說(shuō):

    我的意思是說(shuō),如果你在項(xiàng)目中使用了SpringRod Johnson玩累了,明天就宣布解散這個(gè)項(xiàng)目。你自己獨(dú)立去維護(hù)Spring的代碼。你去用什么啊,它只有很少的UI組件,其中還有問(wèn)題。 你不要夸口這些自己都能開(kāi)發(fā)好,我兩年前開(kāi)發(fā)了一個(gè)比較好用的Grid,花費(fèi)了一周多的時(shí)間。你自己去實(shí)現(xiàn)這樣一個(gè)組件后再說(shuō)話(huà)。

    莊表偉 說(shuō):

    我不是用他的UI呀,而是用他的這個(gè)框架,來(lái)組織自己的代碼。

    dlee 說(shuō):

    你不用它的UI,有什么必要使用這個(gè)框架呢?dojo/prototype一樣可以做到啊,我是認(rèn)為你這樣做引入了不必要的成本。況且你如何判定使用的UI庫(kù)在設(shè)計(jì)理念上與jsvm完全沒(méi)有沖突?

    莊表偉 說(shuō):

    OK,你現(xiàn)在已經(jīng)有結(jié)論了,但是我還沒(méi)有仔細(xì)看過(guò)他的代碼呢,所以我現(xiàn)在還沒(méi)有結(jié)論,等我看過(guò)以后,自然會(huì)有一個(gè)結(jié)論的。

    dlee 說(shuō):

    Ajax庫(kù)這方面,大部分人都跟我希望的一樣,需要一個(gè)全面的解決方案。你說(shuō)的jsvm專(zhuān)精于做某個(gè)領(lǐng)域,我認(rèn)為是行不通的。任何運(yùn)行于瀏覽器的js框架都應(yīng)該是為UI服務(wù)的。沒(méi)有實(shí)現(xiàn)過(guò)很多UI組件,如何檢驗(yàn)它的這個(gè)架構(gòu)設(shè)計(jì)的合理性?

    莊表偉 說(shuō):

    目前看來(lái),prototype,也只是專(zhuān)精于基礎(chǔ)領(lǐng)域的,在它之上,另有script.aculo.usRicoBehaviour這樣的lib

    dlee 說(shuō):

    你喜歡擺擂臺(tái),那么就擺個(gè)擂臺(tái),大家都實(shí)現(xiàn)Grid組件,看看誰(shuí)做得好。

    莊表偉 說(shuō):

    呵呵,這倒是個(gè)好辦法

    dlee 說(shuō):

    你可以跟醒來(lái)來(lái)詳細(xì)討論,問(wèn)題不是你想想得那么簡(jiǎn)單。做小白鼠也有好處,曉鋼就經(jīng)常偷偷練習(xí)一些自己的獨(dú)門(mén)絕技。

    莊表偉 說(shuō):

    呵呵

    dlee 說(shuō):

    你可以將我跟他的沖突理解為主要在一個(gè)領(lǐng)域,就是我不認(rèn)為解決他所說(shuō)的兩個(gè)問(wèn)題,需要這么重的方案。而且他的解決方案從JS開(kāi)發(fā)者的角度看來(lái)也不是很優(yōu)雅。

    莊表偉 說(shuō):

    嗯,這兩點(diǎn),我基本上是同意的

    dlee 說(shuō):

    萬(wàn)春華同志的興趣不在UI組件方面,這使得他偏離了瀏覽器JS誕生的使命。今天我跟醒來(lái)說(shuō)過(guò)類(lèi)似的意思。 我們的分歧不完全在技術(shù)本身上面。因?yàn)槲覀兯伎紗?wèn)題的思路差別很大,所以沒(méi)有出現(xiàn)很大的交集

    莊表偉 說(shuō):

    嗯,我比較理解你的意思了,但是,我不是很同意...

    dlee 說(shuō):

    你看過(guò)他們的代碼了嗎?

    莊表偉 說(shuō):

    看了一些

    dlee 說(shuō):

    代碼的模塊程度如何?有沒(méi)有可能將醒來(lái)說(shuō)的一些部分完全去掉?

    莊表偉 說(shuō):

    哪些部分?

    dlee 說(shuō):

    我覺(jué)得他們?nèi)绻鲆恍└忧逦膭澐郑瑒澐殖鲆粋€(gè)最小的core部分,而且像Spring那樣劃分成很多不同的jar,這樣會(huì)更好一些。最糟的情況是要么全有要么全無(wú)

     

      醒來(lái) 已經(jīng)添加到此對(duì)話(huà)中。

     

    dlee 說(shuō):

    你既然對(duì)jsvm非常感興趣,就和醒來(lái)先詳細(xì)談?wù)劇N易鳛榕月?tīng)好了。

    莊表偉 說(shuō):

    呵呵,好的呀

    醒來(lái) 說(shuō):

    好啊,我 最近剛看了jsvm的源碼

    莊,你覺(jué)得jsvm怎么樣

    莊表偉 說(shuō):

    我剛開(kāi)始看他的代碼。說(shuō)實(shí)話(huà),我覺(jué)得他的js代碼寫(xiě)得非常好,也很干凈、清楚。因此,這樣的一個(gè)人,寫(xiě)出這樣水平的代碼的人,對(duì)于js的理解,肯定是相當(dāng)深入的。

    醒來(lái) 說(shuō):

    代碼寫(xiě)的是真不錯(cuò)

    莊表偉 說(shuō):

    我以前曾經(jīng)想當(dāng)然的認(rèn)為,他不了解js,只喜歡java,所以才會(huì)把js,扭曲成java的樣子這樣的想法,肯定是偏見(jiàn)。那么,在承認(rèn)對(duì)方有足夠的智力與經(jīng)驗(yàn)的前提下,再來(lái)看他的代碼,我覺(jué)得更不該"斷然否定",說(shuō)他"一無(wú)是處"

    醒來(lái) 說(shuō):

    我在javaeye 上提出了我的意見(jiàn),我也認(rèn)為他的代碼寫(xiě)得很不錯(cuò),但是側(cè)重點(diǎn)有點(diǎn)不合時(shí)宜。現(xiàn)在真是有些像java虛擬機(jī)了,基本是一個(gè)classloader + class cache 的實(shí)現(xiàn)

    莊表偉 說(shuō):

    還有這個(gè):

    a) 獨(dú)立模式:standalone, 該模式下,當(dāng)前頁(yè)面的jsvm獨(dú)立加載,不和系統(tǒng)中其他頁(yè)面的JSVM發(fā)生關(guān)聯(lián)。

    b) 應(yīng)用程序模式:application, 應(yīng)用程序模式下的頁(yè)面會(huì)除了加載jsvm以外,還將構(gòu)造一個(gè)Application的環(huán)境。其他模塊模式的頁(yè)面會(huì)共享Application的資源。

    c) 模塊模式:module, 模塊模式的頁(yè)面必須運(yùn)行在一個(gè)Application模式的頁(yè)面下。該頁(yè)面可以通過(guò)application框架共享資源以及訪(fǎng)問(wèn)全局變量。

    d) 自動(dòng)模式:auto, 頁(yè)面根據(jù)環(huán)境自動(dòng)選擇是獨(dú)立模式還是模塊模式。

    我覺(jué)得很有點(diǎn)意思

    醒來(lái) 說(shuō):

    從名字上來(lái)講,jsvm倒是符合本意。但是java的成功不是只靠一個(gè)jvm的,我覺(jué)得 jdk 更關(guān)鍵

    莊表偉 說(shuō):

    現(xiàn)在的js庫(kù),除了jsvm,都是以一個(gè)Page為單位運(yùn)行的,鮮有"Application"的概念。而VM的提出,我認(rèn)為,為將來(lái)合理的Browser Object Cache Layer,提供了可能

    醒來(lái) 說(shuō):

    我有點(diǎn)懷疑,這樣帶來(lái)的復(fù)雜性有沒(méi)有必要

    莊表偉 說(shuō):

    而且我還希望將來(lái)JSVM,能夠更好的支持請(qǐng)求任務(wù)隊(duì)列的管理,這樣的機(jī)制,JS的語(yǔ)法本身提供得并不夠好。還有多線(xiàn)程的管理,JS也沒(méi)有像Java那樣的,語(yǔ)法級(jí)的支持。

    dlee 說(shuō):

    我不大相信瀏覽器中的JS將來(lái)會(huì)被用在這樣的目的

    醒來(lái) 說(shuō):

    其實(shí)我覺(jué)得,這些應(yīng)該是瀏覽器提供的功能,在瀏覽器未發(fā)展到這個(gè)程度之前,強(qiáng)迫javascript畸形的實(shí)現(xiàn),不一定值得

    莊表偉 說(shuō):

    嗯,這是問(wèn)題的關(guān)鍵...我前面的暢想,的確是我希望將來(lái)的JS,能夠支持的一部分

    dlee 說(shuō):

    是的,我們希望將來(lái)的JS引擎來(lái)提供這些基礎(chǔ)設(shè)施

    莊表偉 說(shuō):

    現(xiàn)在JSVM,也許能夠支持一部分,也許還不能夠,所以,說(shuō)不定哪天JS 2.0出來(lái),JSVM就沒(méi)有意義了

    醒來(lái) 說(shuō):

    所以對(duì)于jsvm的模式,應(yīng)用程序模式還可以理解,模塊模式很難讓人明白有什么用

    莊表偉 說(shuō):

    這是一個(gè)思考模式的問(wèn)題

    假設(shè)你對(duì)于js本身不熟悉,要讓你合理、自然的劃分多個(gè)js文件,合理、自然的在該load的時(shí)候才去load,這就相當(dāng)?shù)馁M(fèi)力

    醒來(lái) 說(shuō):

    所以我的意見(jiàn)就是,jsvm 希望吸引人來(lái)開(kāi)發(fā),應(yīng)該要給出jsdk 差不多,一個(gè)jsvm 吸引不了人

    莊表偉 說(shuō):

    當(dāng)然,更加正確的道路,當(dāng)然是按照js的本性來(lái)做,提出某種"js loading design pattener"。但是,在經(jīng)驗(yàn)還沒(méi)有被總結(jié)成模式之前,模仿java式的代碼組織,不失為一種方案

    醒來(lái) 說(shuō):

    load js 的模式其實(shí)現(xiàn)在都是 用一個(gè)同步的xmlhttprequest 去加載js,然后eval。這個(gè) dojo prototype 都有提供基礎(chǔ)支持

    莊表偉 說(shuō):

    不是如何loading。而是,我現(xiàn)在有幾百Kjs文件,如何切分成合理的大小,然后在需要的時(shí)候去調(diào)用他們

    醒來(lái) 說(shuō):

    這個(gè)想法是對(duì)的,也是jsvm值得肯定的地方

    我的主要意見(jiàn)是說(shuō)它提供的 jsc 的形式有點(diǎn)雞肋,同時(shí)缺乏簡(jiǎn)單高效的工具類(lèi),所以吸引不了開(kāi)發(fā)人員。jsvm2 的代碼里有 1/3 就是為了支持這個(gè)自創(chuàng)的jsc語(yǔ)法

    莊表偉 說(shuō):

    這是...敗筆...jsc我也不喜歡,混雜了部分js語(yǔ)法和部分java語(yǔ)法...還不如僅僅規(guī)定一個(gè)必須的頭部,其他的完全采用js語(yǔ)法呢。還有一點(diǎn)我覺(jué)得是這個(gè)萬(wàn)兄在那里暢想,就是JSVM打算支持多種語(yǔ)法的設(shè)想,工作量太大了。

    dlee 說(shuō):

    不過(guò)萬(wàn)春來(lái)同志說(shuō)這個(gè)可以不用

    醒來(lái) 說(shuō):

    所以我建議索性?huà)仐?/SPAN>jsc,以萬(wàn)兄的javascript功力,寫(xiě)一部分有用的工具類(lèi),我覺(jué)得不會(huì)有人真的愿意用 var map = new HashMap(), map.put(k, v); 這樣的方式寫(xiě)js

    莊表偉 說(shuō):

    對(duì)的

    dlee 說(shuō):

    所以我剛才說(shuō):

    我覺(jué)得他們?nèi)绻鲆恍└忧逦膭澐郑瑒澐殖鲆粋€(gè)最小的core部分,而且像Spring那樣劃分成很多不同的jar,這樣會(huì)更好一些。最糟的情況是要么全有要么全無(wú)。

    醒來(lái) 說(shuō):

    jsc 是可以不用,但jsvm 加載了接近80kjs就為了支持jsc, 沒(méi)有意義啊

    莊表偉 說(shuō):

    他現(xiàn)在是有多個(gè)js的,只是他core的部分太大了

    醒來(lái) 說(shuō):

    莊,如果你去看runtime.js 就知道了,jsvm2其實(shí)把jsc都預(yù)先編譯了,否則效率一定太低

    現(xiàn)在甚至還有一些觀點(diǎn),不要把js分得太多,因?yàn)橐ぐl(fā)太多的http連接,反而響應(yīng)性更不好。畢竟js的加載是同步的 ,這各ajax的異步核心思想有沖突。

    dlee 說(shuō):

    這個(gè)考慮也是很有道理的

    莊表偉 說(shuō):

    激發(fā)太多的http連接?還是激發(fā)太多的同步http連接?

    dlee 說(shuō):

    那個(gè)所謂的classloader就是向服務(wù)器請(qǐng)求一個(gè)包含js類(lèi)的文件,然后evaluate。而且也要考慮evaluate的執(zhí)行效率

    醒來(lái) 說(shuō):

    每一個(gè)import 就是一個(gè)http 連接。當(dāng)然,jsvm 考慮到了cache

    dlee 說(shuō):

    對(duì)的,就是發(fā)出一個(gè)xmlhttp請(qǐng)求

    莊表偉 說(shuō):

    其實(shí),他完全可以將自己的jsdk,做成一個(gè)jsc文件,一口氣load進(jìn)來(lái)

    dlee 說(shuō):

    不是多個(gè)連接,這個(gè)要看服務(wù)器怎么配置。其實(shí)支持http1.1的瀏覽器和服務(wù)器都是保持長(zhǎng)連接

    醒來(lái) 說(shuō):

    jsvmcache 也有些問(wèn)題,他所謂的application模式,在不同的瀏覽器上實(shí)現(xiàn)各不相同,iejs源碼用iehtc 技術(shù)保存的,ff 是存cookiecookie 的容量是有限制的,所以cache 主要是針對(duì) ie

    dlee 說(shuō):

    可能是在同一個(gè)http連接上發(fā)送多個(gè)http請(qǐng)求,這些請(qǐng)求需要排隊(duì)

    莊表偉 說(shuō):

    OK,我提一個(gè)方案,你們看是不是可以作為"最佳實(shí)踐"之一:

    對(duì)于多個(gè)異步請(qǐng)求,可以讓他分次異步提交。

    對(duì)于多個(gè)同步請(qǐng)求,應(yīng)該將多個(gè)請(qǐng)求打包以后一次提交。

    這個(gè)作為"請(qǐng)求隊(duì)列管理"的一部分

    醒來(lái) 說(shuō):

    道理應(yīng)該是這樣,jsvm里好像沒(méi)有這樣的控制,import語(yǔ)句也沒(méi)有這么智能

    莊表偉 說(shuō):

    其實(shí)jsvm應(yīng)該這么做,比如他load一個(gè)jsc文件進(jìn)來(lái),里面的import語(yǔ)句可能有一堆,就應(yīng)該是一口氣load其他的jsc,不該再分多次了

    醒來(lái) 說(shuō):

    我總覺(jué)得 線(xiàn)程/隊(duì)列 這些該是瀏覽器的事情,用js開(kāi)發(fā)很不保險(xiǎn)

    莊表偉 說(shuō):

    你看過(guò)我寫(xiě)的那個(gè)RSSReader的代碼嗎?里面就有一個(gè)請(qǐng)求隊(duì)列的

    醒來(lái) 說(shuō):

    jsvm做不到,因?yàn)?/SPAN>loadjsc里又有import 語(yǔ)句,這是遞歸的

    莊表偉 說(shuō):

    不是遞歸,是分層的

    醒來(lái) 說(shuō):

    要么js語(yǔ)言升級(jí),要么瀏覽器升級(jí),我總覺(jué)得現(xiàn)階段就想讓ajax完全達(dá)到替代桌面應(yīng)用的程度是不可能的

    莊表偉 說(shuō):

    這個(gè)當(dāng)然是不可能的...

    醒來(lái) 說(shuō):

    所以在現(xiàn)階段,還是不要搞復(fù)雜了,多線(xiàn)程和隊(duì)列能用到的地方畢竟不多

    我覺(jué)得dlee強(qiáng)調(diào)的對(duì)的,現(xiàn)在需要的是組件

    語(yǔ)言級(jí)別的東西,就讓js語(yǔ)言和瀏覽器標(biāo)準(zhǔn)去慢慢支持吧

    莊表偉 說(shuō):

    我理解你們所認(rèn)為的"輕重緩急"了。根本的觀點(diǎn)在于:"急于將瀏覽器中應(yīng)用,推向完全的桌面應(yīng)用,并不現(xiàn)實(shí)"。立足于"更好的瀏覽器端應(yīng)用",而非"盡可能像桌面應(yīng)用的瀏覽器端應(yīng)用",這么說(shuō)來(lái),當(dāng)務(wù)之急自然是UI控件的完善與豐富

    dlee 說(shuō):

    我覺(jué)得瀏覽器中js誕生的使命就是改善交互和UI

    醒來(lái) 說(shuō):

    對(duì),就是這個(gè)意思

    dlee 說(shuō):

    而且我從項(xiàng)目開(kāi)發(fā)負(fù)責(zé)人的角度,更希望一個(gè)全面的解決方案。不是什么都需要我去做集成

    莊表偉 說(shuō):

    JSVM的問(wèn)題,不在于他語(yǔ)法上像Java,而在于他的目標(biāo)上像Java

    dlee 說(shuō):

    也可以這樣來(lái)理解

    醒來(lái) 說(shuō):

    ajax 里的cache 應(yīng)該是去cache 數(shù)據(jù),用來(lái)cache js代碼,意義多大呢,所以jsvm太技術(shù)化了

    dlee 說(shuō):

    Ajax in Action中,提出了一種獨(dú)占式應(yīng)用。就是像Word一樣,可能每天都要用上幾個(gè)小時(shí)。目前的Ajax技術(shù),包括一些基礎(chǔ)框架,還很難達(dá)到這個(gè)要求。所以確實(shí)需要這樣一類(lèi)基礎(chǔ)架構(gòu),但是我們認(rèn)為這些支持最好由瀏覽器和JS引擎來(lái)提供。

    莊表偉 說(shuō):

    看來(lái)我們已經(jīng)初步達(dá)成共識(shí)了

    醒來(lái) 說(shuō):

    js 就是用來(lái)操作DOM的,不要讓它承擔(dān)太多重任,xmlhttp本來(lái)也不是 js的一部分,瀏覽器的擴(kuò)展而以

    dlee 說(shuō):

    我發(fā)現(xiàn)現(xiàn)在很多人有一個(gè)通病。就跟我在那個(gè)ajaxmodel2框架的討論中說(shuō)的那樣。毫不思考地就將一種技術(shù)或者架構(gòu)用于設(shè)計(jì)意圖之外的場(chǎng)合。其實(shí)把IFrame用于異步請(qǐng)求也是這個(gè)情況

    醒來(lái) 說(shuō):

    對(duì)jsvm 的建議就是拋棄jsc,完善它自己的面向?qū)ο蠹軜?gòu),并提供工具類(lèi)支持,這樣才有可能和 dojo 有競(jìng)爭(zhēng)。所以在國(guó)外是稱(chēng)為  tricks,  是有貶義的意思,但翻譯成中文,變成竅門(mén),反而有了褒義了

    dlee 說(shuō):

    Ajax in Action的作者稱(chēng)作hacky的做法,帶有貶義

    dlee 說(shuō):

    Ajax顯得與眾不同的地方不是它所使用的技術(shù)本身,而是通過(guò)使用這些技術(shù)所帶來(lái)的新的交互模式。我們所習(xí)慣的傳統(tǒng)的Web交互模型并不適合于獨(dú)占式的應(yīng)用,只有打破了這種交互模型,新的可能性才會(huì)慢慢浮現(xiàn)出來(lái)。

    這是Ajax in Action的一句話(huà),說(shuō)得非常有道理。我們看到如此眾多的人都對(duì)Ajax感興趣不是偶然的。現(xiàn)在我們處在web app發(fā)生革命性變化的前夕

    莊表偉 說(shuō):

    嗯,我更關(guān)注:慢慢浮現(xiàn)出來(lái)的這些可能性中,哪些是正道,哪些是邪道

    醒來(lái) 說(shuō):

    我是覺(jué)得一定要擦亮眼睛,多從用戶(hù)的角度想問(wèn)題

    莊表偉 說(shuō):

    這是對(duì)的

    posted @ 2006-03-02 22:05 讀書(shū)、思考、生活 閱讀(1877) | 評(píng)論 (1)編輯 收藏
    <2006年3月>
    2627281234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(20)

    隨筆檔案

    友情BLOG

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 99在线观看免费视频| 一个人免费观看在线视频www| 亚洲网站在线免费观看| 在线观看永久免费视频网站| 在线亚洲97se亚洲综合在线| 亚洲一区二区影视| yellow免费网站| 99在线精品视频观看免费| 亚洲不卡无码av中文字幕| 亚洲欧洲自拍拍偷午夜色| 久青草国产免费观看| 很黄很色很刺激的视频免费| 亚洲人成影院在线观看| 国产精品亚洲精品| 花蝴蝶免费视频在线观看高清版| 大学生美女毛片免费视频| 久久久久亚洲AV成人无码网站 | 99久久久国产精品免费牛牛 | 国产精品亚洲综合网站| 99久久免费中文字幕精品| 亚洲精品国产高清嫩草影院| 亚洲免费人成视频观看| 中国黄色免费网站| 国产男女猛烈无遮挡免费视频网站 | 在线jlzzjlzz免费播放| 久久精品国产亚洲av麻豆小说 | 亚洲成av人无码亚洲成av人| 十八禁无码免费网站| 免费人成在线观看网站视频| 亚洲乱码在线播放| 国产免费无码一区二区| 国产jizzjizz视频免费看| 亚洲免费网站在线观看| 国产色爽免费无码视频| 免费在线观看毛片| 亚洲午夜成人精品无码色欲| 日日麻批免费40分钟无码| 国产亚洲情侣一区二区无码AV| 亚洲高清国产拍精品熟女| 免费人成在线观看69式小视频| 亚洲精品成人片在线观看精品字幕 |