演講人:浙大高分子物理鄭強(qiáng)教授
地點(diǎn): 浙江圖書(shū)館報(bào)告廳
精彩語(yǔ)錄節(jié)選:
“在中國(guó)這個(gè)發(fā)展中國(guó)家,你能建10所世界一流大學(xué),那美國(guó)有多少所?日本有多少所?現(xiàn)在的實(shí)際狀況是:世界上前200所大學(xué),中國(guó)一所都排不進(jìn)!在亞洲能排出幾所?我到國(guó)外去看了以后,感到要將浙大建成世界一流大學(xué)就像共產(chǎn)主義理想.“
“以前說(shuō)“無(wú)知無(wú)畏“,現(xiàn)在卻是“無(wú)知才無(wú)畏“,許多企業(yè)把浙江省技術(shù)監(jiān)督局、科委的人請(qǐng)來(lái)吃一頓飯,喝一點(diǎn)酒,他就給你簽個(gè)字,再把我們這些教授脅迫到那里去,給你蓋個(gè)章,然后就是“填補(bǔ)國(guó)內(nèi)外空白“、“國(guó)際先進(jìn)水平“,寫(xiě)論文則是“國(guó)際領(lǐng)先水平的研究成果“、“首次科學(xué)發(fā)現(xiàn)“等等,這都是目前非常嚴(yán)重的問(wèn)題!作為一個(gè)大學(xué)教授,我深深地為此擔(dān)憂!這不是我們的責(zé)任,是我們的領(lǐng)導(dǎo)無(wú)知,是他們倡導(dǎo)了這個(gè)主流.我知道在座的處長(zhǎng)或老總?cè)兆雍茈y過(guò),因?yàn)槟銈儾粚?xiě)這樣的報(bào)表,就拿不到錢(qián),項(xiàng)目就得不到批準(zhǔn).教授也同樣如此,天天寫(xiě)報(bào)告,而不是在實(shí)驗(yàn)室靜下心來(lái)好好搞研究,這是很?chē)?yán)重的!“
“我們國(guó)家的現(xiàn)實(shí)和發(fā)展就是這樣:凡是依賴(lài)不成的,我們自己都能搞得像模像樣,比如二彈一星;凡是能夠引進(jìn)的,就都搞不成.......現(xiàn)在很多合資企業(yè)就這樣,賣(mài)點(diǎn)東西,而沒(méi)有去考慮這些深層次的東西.殊不知,這就是社會(huì)的惡性循環(huán)!“
“我認(rèn)為:語(yǔ)言、計(jì)算機(jī)就是工具.中國(guó)的外語(yǔ)教授講英語(yǔ)還不如美國(guó)賣(mài)菜的農(nóng)民!怎么看待這個(gè)問(wèn)題?日本博士、德國(guó)教授說(shuō)不出英語(yǔ)的多得是!我們?cè)趺茨苷f(shuō)一個(gè)人不會(huì)說(shuō)英語(yǔ)就是文盲呢?語(yǔ)言就是一個(gè)工具!你沒(méi)有那個(gè)環(huán)境,他怎么能講這個(gè)語(yǔ)言呢?......如果我是教育部長(zhǎng),我要改革二件事:第一,取消六級(jí)考試,你一個(gè)研究生連中文一級(jí)都不及格,你英文考六級(jí)干什么呢?看看研究生寫(xiě)得論文,自己的民族文化都沒(méi)有學(xué)好,天天考英語(yǔ)──打勾:托福打勾,GRE打勾,英文考出很高的分,可哪個(gè)寫(xiě)的英文論文在我面前過(guò)得了關(guān)呢?過(guò)不了關(guān)!這樣培養(yǎng)出來(lái)的人能干什么?自己搞的專(zhuān)業(yè)一點(diǎn)都沒(méi)學(xué)好!......說(shuō)不會(huì)計(jì)算機(jī)就是文盲,這又是一個(gè)誤區(qū)!我現(xiàn)在是教授,我顧不上搞計(jì)算機(jī)!“
“你看我,從高中開(kāi)始學(xué)英語(yǔ),大學(xué)學(xué),碩士學(xué),博士學(xué),花了我多少精力!你說(shuō)中國(guó)人怎么做得出高科技的研究成果?我這幾天就教訓(xùn)我手下的幾位女學(xué)生,問(wèn)她們?cè)诟墒裁?看不到人影,一天到晚考這樣、考那樣的,到美國(guó)去干什么?在國(guó)內(nèi)要干的事多著呢!你整天考英語(yǔ),美國(guó)人連報(bào)個(gè)名都要收你們的錢(qián),日本人也是如此,中國(guó)學(xué)生到日本去要交手續(xù)費(fèi),到日本留學(xué)是為日本人打工,好不容易掙點(diǎn)錢(qián)交了學(xué)費(fèi),讀完博士在日本的公司就職,當(dāng)勞動(dòng)力,掙了一筆錢(qián)后要回國(guó)了就買(mǎi)了家電,把錢(qián)全給了日本人.你們都沒(méi)有注意這件事,這里面都是經(jīng)濟(jì)問(wèn)題.這就是素質(zhì)教育到底是什么.“
“中小學(xué)的教育就是聽(tīng)話,老師管干部,干部管同學(xué),孩子們都學(xué)會(huì)了成年化的處世方式,這是害人啊!這樣強(qiáng)迫性地做了一些好事后,沒(méi)有把做好事與做人準(zhǔn)則結(jié)合起來(lái)去培養(yǎng),而只學(xué)會(huì)了拍馬屁、討老師喜歡、說(shuō)成人話.上次電視上就曾經(jīng)播出,一個(gè)小孩得了個(gè)獎(jiǎng),主詩(shī)人問(wèn)他最愿意說(shuō)什么,他說(shuō):“我最愿意跟江爺爺說(shuō):我向你報(bào)告!““江爺爺“是誰(shuí)?還不是老師教的!孩子們?cè)谥行W(xué)活得很累,到了大學(xué)就沒(méi)人管了,所以就要玩、就要談戀愛(ài).
“我們有很多同學(xué)成績(jī)好,卻什么都做不了.在我們大學(xué)像我這種程度的人,招博士生是從來(lái)不看成績(jī)的,成績(jī)算什么!現(xiàn)在我從事的這個(gè)領(lǐng)域在中國(guó)有叁個(gè)杰出的人才,當(dāng)初在讀研究生時(shí)都補(bǔ)考過(guò),而成績(jī)考得好的幾個(gè)人卻都跑到美國(guó)去賣(mài)中藥了,這說(shuō)明了什么問(wèn)題?作老板的可不能這樣啊!......人才的梯隊(duì)一定要合理,而不要認(rèn)為教授就是萬(wàn)能的、博士就是萬(wàn)能的.中國(guó)的教育體系就是讓每一個(gè)老百姓都充滿希望和理想,教育孩子們要樹(shù)立遠(yuǎn)大的理想.實(shí)際上,人的能力是不一樣的,掃地能掃好,也應(yīng)該受到尊重;打掃廁所能打掃干凈,也應(yīng)該受到尊重,不能動(dòng)不動(dòng)就要高學(xué)歷.我要提醒的是:在國(guó)外可不是這樣,美國(guó)、日本的博士就很難找到工作,為什么?因?yàn)槔习逍奶坼X(qián),招了博士要給他高工資,而他能做什么用呢?這是個(gè)具體問(wèn)題.“
“科技到底該干什么?高科技到底該干什么?如果我是科技部長(zhǎng),該玩的就玩,就像陳景潤(rùn),他就是玩!陳景潤(rùn)如果是處在今天的中國(guó),他絕對(duì)是要去討飯的,因?yàn)樗粫?huì)去搞產(chǎn)業(yè)化,他的英語(yǔ)也不好,他說(shuō)話都不流利,中文都講不好,按現(xiàn)在“標(biāo)準(zhǔn)“,他是個(gè)文盲,還談什么教授!日本人就是喜歡美國(guó)人,我跟日本人說(shuō):你們這個(gè)民族愛(ài)誰(shuí),誰(shuí)就要向你們?nèi)釉訌?日本人就是喜歡黑人也不喜歡中國(guó)人.......我特別對(duì)我們的女教授、女同學(xué)說(shuō):在日本人面前一句日文都不要講,會(huì)也不要講;日本人一聽(tīng)說(shuō)你講英文,特別是看到中國(guó)女孩講英文,腿都要發(fā)軟,這是真的!“
“中國(guó)人為什么這些年都往外跑,最重要的是要讓國(guó)民自己愛(ài)自己國(guó)家.......如果我是杭州的市長(zhǎng),我絕對(duì)不是狹隘的民族自尊心──如果杭州有什么災(zāi)難,我就首先把杭州的老百姓安排在香格里拉,讓外國(guó)人在外面排隊(duì)!(掌聲!)這樣,你才會(huì)讓你的國(guó)民愛(ài)自己的國(guó)家!一個(gè)日本的農(nóng)民跑到峨嵋山去玩,骨頭摔斷了,你就用中國(guó)空軍的直升飛機(jī)去救他,而在日本大學(xué)一名中國(guó)留學(xué)生在宿舍里死了7天才被發(fā)現(xiàn);名古屋大學(xué)的一對(duì)中國(guó)博士夫婦和孩子誤食有毒磨菇,孩子和母親死了,父親則是重癥肝炎,在名古屋大學(xué)醫(yī)學(xué)院的門(mén)診室等了12個(gè)小時(shí),也沒(méi)有一個(gè)日本教授來(lái)看望!而你們?yōu)槭裁催€要這么友好,以為自己很大度,實(shí)際上是被人家恥笑,笑你的無(wú)知!你們這個(gè)民族*!我們不能這樣!我們的領(lǐng)導(dǎo)人跑到國(guó)外去訪問(wèn),看到有幾個(gè)人在歡迎他們,就感到挺有面子;而外國(guó)來(lái)了個(gè)什么人物,都是警車(chē)開(kāi)道,這究竟是怎么回事?這讓我們中國(guó)人感到是自豪還是悲哀?所有這些,對(duì)教育工作來(lái)講,都是深層次的問(wèn)題.所以我經(jīng)常講,我作為一位自然科學(xué)工作者,我教育我的學(xué)生,首先是學(xué)會(huì)做人,沒(méi)有這些,你學(xué)了高分子,外語(yǔ)都是花架子,你不是一個(gè)完整的人!“
“一個(gè)觀念或是一個(gè)問(wèn)題:是不是技術(shù)越新越好?今天談的就都是提醒大家的......技術(shù)并不是越新越好,技術(shù)要有儲(chǔ)備.日本的企業(yè)現(xiàn)在賣(mài)的東西大都是10年或15年前的技術(shù),好東西他不拿出來(lái),他要等到現(xiàn)有的技術(shù)把成本收回并獲得盡可能高額的利潤(rùn)以后才會(huì)拿出來(lái).其次,我的對(duì)手什么時(shí)候推出新東西時(shí),我才會(huì)出手.不要以為你今天好不容易搞了生產(chǎn)線,明天又有新的了,你的錢(qián)還沒(méi)賺到就換新的,有什么用?我這次到日本剛好談到懸浮列車(chē)──即使何先生在我也要說(shuō),這是中國(guó)人又在玩高新科技.懸浮列車(chē)目前在理論上都還不成熟.日本現(xiàn)在最完善,最經(jīng)濟(jì)的就是新干線!
從經(jīng)濟(jì)和市場(chǎng)的概念來(lái)講,越先進(jìn)的東西,風(fēng)險(xiǎn)越大,有可能得到的回報(bào)就越少!"
?
java.lang.NoSuchFieldError: tokenTypeToASTClassMap創(chuàng)業(yè)者要遵循的5個(gè)基本做事方法 |
對(duì)于想創(chuàng)業(yè)的人,我對(duì)他們的提醒是:不要被成功企業(yè)所編寫(xiě)的創(chuàng)業(yè)故事所迷惑,因?yàn)槟抢镏v的都是一個(gè)企業(yè)成長(zhǎng)過(guò)程中過(guò)五關(guān)斬六將的最精彩的部分。作為創(chuàng)業(yè)者,有5個(gè)很基本的做事方法你必須遵循。 我鼓勵(lì)大家創(chuàng)業(yè),但鼓勵(lì)大家創(chuàng)業(yè)不等于盲目創(chuàng)業(yè)。對(duì)于想創(chuàng)業(yè)的人,我對(duì)他們的提醒是:不要被成功企業(yè)所編寫(xiě)的創(chuàng)業(yè)故事所迷惑,因?yàn)槟抢镏v的都是一個(gè)企業(yè)成長(zhǎng)過(guò)程中過(guò)五關(guān)斬六將的最精彩的部分。你要用自己的頭腦去思考,去學(xué)習(xí)。作為創(chuàng)業(yè)者,有5個(gè)很基本的做事方法必須遵循: 第一,一定要有激情和理念,你才能感染自己和其他人。在最困難的時(shí)候,在所有人絕望的時(shí)候,你要感染你的客戶,感染你的員工,感染你的合作伙伴……你要感染所有人! 第二,要專(zhuān)注。別說(shuō)小公司,大公司多元化也有失敗的例子,小公司更應(yīng)該抓準(zhǔn)一個(gè)點(diǎn)把它做深、做透。這樣才能積累所有的資源。小公司到處試驗(yàn),會(huì)讓你的企業(yè)耗盡很多資源。專(zhuān)注就是有所不為才能有所為,這點(diǎn)非常重要。 3721堅(jiān)持了6年,一直堅(jiān)持做中文上網(wǎng)、中文搜索,我就做這一件事情;Google也是很專(zhuān)注,有了一定的積累以后才能橫向擴(kuò)展。很多創(chuàng)業(yè)者都栽在不夠?qū)W⑸希且驗(yàn)樗约耗X子里面沒(méi)有想清楚,今天在這兒打一口井,明天在那兒打一口井,最后哪兒也沒(méi)有挖出水,地面上只是留下了許多坑而已。你5個(gè)指頭都叉開(kāi)和一個(gè)拳頭是不一樣的,專(zhuān)注就是你把所有的資源都凝聚在一個(gè)點(diǎn)上。 第三是執(zhí)行力,很多創(chuàng)業(yè)者很容易在這里摔跟頭。我見(jiàn)過(guò)很多人夸夸其談,估計(jì)他們創(chuàng)業(yè),至少第一次肯定都不會(huì)成功,因?yàn)槲矣X(jué)得真正的創(chuàng)業(yè)者要少說(shuō)多做,要把自己美妙的想法努力轉(zhuǎn)化成結(jié)果。 創(chuàng)業(yè)者做事情著眼點(diǎn)要低,要現(xiàn)實(shí)。很多創(chuàng)業(yè)者去見(jiàn)風(fēng)險(xiǎn)投資人的時(shí)候,說(shuō)起自己的事業(yè)都說(shuō)得云山霧罩的,其實(shí)這樣會(huì)讓風(fēng)險(xiǎn)投資人根本不明白你在說(shuō)什么。你只要踏踏實(shí)實(shí)地說(shuō)你想做什么,這個(gè)東西能解決什么問(wèn)題就可以了。 想法只是一個(gè)開(kāi)頭的方式,是不值錢(qián)的。我們坐在這兒,一個(gè)小時(shí)可以天馬行空,弄出幾十個(gè)想法來(lái),腦子稍微一轉(zhuǎn),你的思想已經(jīng)在宇宙走了好幾個(gè)來(lái)回了—- 行動(dòng)的成本才是最高的,對(duì)創(chuàng)業(yè)者來(lái)講要看自己是不是有這種經(jīng)驗(yàn)和執(zhí)行力。同樣的想法兩個(gè)人同樣做,誰(shuí)的執(zhí)行力更強(qiáng),誰(shuí)的經(jīng)驗(yàn)更豐富,誰(shuí)就更容易成功。 第四,創(chuàng)業(yè)者還要有一種胸懷,就是所謂與時(shí)俱進(jìn)的學(xué)習(xí)能力。我看到很多人創(chuàng)業(yè)不成功就是因?yàn)樗麄兲载?fù),不能從成功人士那里學(xué)到一些優(yōu)點(diǎn),聽(tīng)不進(jìn)好的建議。很多創(chuàng)業(yè)者沒(méi)有經(jīng)驗(yàn),沒(méi)有經(jīng)驗(yàn)不可怕,問(wèn)題是你有沒(méi)有謙虛、開(kāi)放學(xué)習(xí)的心態(tài),使你不能與時(shí)俱進(jìn)。很多創(chuàng)業(yè)者會(huì)陷入一個(gè)死循環(huán),他們通常認(rèn)為自己看得準(zhǔn),才是出手的前提;積累經(jīng)驗(yàn)越多,才能越看越準(zhǔn)。但你沒(méi)經(jīng)驗(yàn),又怎么可能看準(zhǔn)? 解決這個(gè)問(wèn)題有辦法,時(shí)機(jī)不成熟,就不創(chuàng)業(yè),先給別人打工。把公司讓我做的事情做好,提高自己的能力,逐步就知道創(chuàng)業(yè)的方向了。我不贊成年輕人剛畢業(yè)就創(chuàng)業(yè),我認(rèn)為他們還是應(yīng)該在公司里踏踏實(shí)實(shí)干五六年,雖然是打工,實(shí)際上是公司在給你“繳”學(xué)費(fèi),你在不同的平臺(tái)通過(guò)積累經(jīng)驗(yàn),這是任何老板剝奪不走的,只有積累這種經(jīng)驗(yàn),你的創(chuàng)業(yè)能力才更高,才更有把握。我在方正工作時(shí),從來(lái)沒(méi)有覺(jué)得自己是打工,我一直認(rèn)為自己是在創(chuàng)業(yè),因?yàn)槲矣X(jué)得是在積累自己的能力,積累自己的資源。客觀上,我對(duì)方正還是作了很多貢獻(xiàn)。我到雅虎還是一種創(chuàng)業(yè)的心態(tài),我把雅虎的文化改成創(chuàng)業(yè)的文化,因此雅虎中國(guó)在2004年取得了很好的業(yè)績(jī)。保持良好的心態(tài),這是你創(chuàng)業(yè)成功的前提。 第五,不要盲目去模仿和抄襲大公司的做法。比如,很多人在新浪、搜狐做過(guò),他出來(lái)就會(huì)不自覺(jué)按照大公司的做法建立一些規(guī)范制度等,但大公司為了穩(wěn)妥,一般都比較慢。大公司為這個(gè)“慢”付得起代價(jià),小公司不能用大公司的這種做事方法。我講過(guò)大象和兔子的故事:大象和駱駝3天不吃也沒(méi)事,但是新創(chuàng)業(yè)的公司像小兔子一樣,每一步都要跑得快,要到處找食。本來(lái)就是個(gè)兔子,卻以為自己是個(gè)大象,用大象的心態(tài)做事,在狼面前慢慢踱步,最后就會(huì)被狼吃掉。創(chuàng)業(yè)意味著你要有創(chuàng)業(yè)的做事方式。 如果你跟大公司做一樣的事,他的實(shí)力很強(qiáng),跟他比是沒(méi)有優(yōu)勢(shì)的。因此,如果把整個(gè)產(chǎn)業(yè)畫(huà)成一張地圖,你可以看哪些領(lǐng)域被誰(shuí)占了,誰(shuí)有什么優(yōu)勢(shì)。你應(yīng)該找一個(gè)不在這張地圖上的事情去做。比如說(shuō),前幾年大家都不重視的搜索,現(xiàn)在就做起來(lái)了。創(chuàng)業(yè)公司應(yīng)該踏踏實(shí)實(shí)把自己的事做好,不要在自己很小的時(shí)候就想要通吃,要顛覆,要滅掉誰(shuí),這是沒(méi)有意義的。小公司要學(xué)會(huì)跟大公司合作,要學(xué)會(huì)廣交朋友,在這個(gè)產(chǎn)業(yè)鏈跟別人合作,會(huì)使自己成功得更快一些。 周鴻祎:1970年10月生于湖北,1995年畢業(yè)于西安交大管理學(xué)院系統(tǒng)工程系,獲碩士學(xué)位。曾就職方正集團(tuán),先后任研發(fā)中心副主任、事業(yè)部總經(jīng)理等職。1998年10月,創(chuàng)建3721公司。2003年3721被雅虎收購(gòu),2004年3月出任雅虎中國(guó)總裁。2005年7月6日,宣布將于8月31日正式辭去雅虎中國(guó)總裁一職。9月1日,他將以投資合伙人的身份正式加盟IDGVC(國(guó)際數(shù)據(jù)集團(tuán)風(fēng)險(xiǎn)投資基金)。 |
IBM的文章Getting started with the Eclipse Communication Framework 介紹了ECF,同時(shí)告訴我們?nèi)绾伍_(kāi)始使用ECF,同時(shí)還提供了一個(gè)基于Yahoo IM 的例子。
Getting started with the Eclipse Communication Framework
http://www.ibm.com/developerworks/opensource/library/os-ecl-commfwk/?ca=dgr-jw22ECF
下載地址
http://www.eclipse.org/ecf/downloads.html
引用頁(yè) http://www.eclipse.org/downloads/download.php?file=/technology/ecf/org.eclipse.ecf.sdk-0.8.0.S20060507.zip
安裝完畢插件后,起服務(wù)目錄在
$:\eclipse\features\org.eclipse.ecf.serverfeature_0.8.0\bin
startserver.cmd
然后打開(kāi)eclipse 菜單ECF鏈接選擇協(xié)議ecf generic 后設(shè)置服務(wù)器url例如http://localhost:3282/server,輸入別名
進(jìn)入強(qiáng)大的聊天室.讓我們一起XP?編程吧
|
||
|
web2.0定義是什么?
web2.0定義是什么?這是一個(gè)簡(jiǎn)單直接但又是最核心的問(wèn)題,討論web2.0的文章層出不窮,內(nèi)容包括如何實(shí)現(xiàn)web2.0, web2.0如何盈利, web2.0如何擊敗web1.0等。但沒(méi)有多少人愿意討論web2.0的定義,也沒(méi)有多少人討論web2.0已有的定義存在什么問(wèn)題。沒(méi)有清晰理性的定義,我們的討論就像唐吉珂德騎著毛驢沖向他心目中的怪獸-大風(fēng)車(chē)一樣。可笑而又毫無(wú)意義。
翻閱搜索引擎帶給我們關(guān)于web2.0的海量資料,找到了Blogger Don的“WEB2.0概念詮釋”,他寫(xiě)道“Web2.0是以 Flickr、Craigslist、Linkedin、Tribes、Ryze、Friendster、Del.icio.us、43Things.com等網(wǎng)站為代表,以Blog、TAG、SNS、RSS、wiki等社會(huì)軟件的應(yīng)用為核心,依據(jù)六度分隔、xml、ajax等新理論和技術(shù)實(shí)現(xiàn)的互聯(lián)網(wǎng)新一代模式。” 這個(gè)定義把一些讓人眼花繚亂的前衛(wèi)名詞和計(jì)算機(jī)專(zhuān)用術(shù)語(yǔ)堆砌在一起作為WEB2.0概念詮釋?zhuān)0褢?yīng)用,協(xié)議,語(yǔ)言格式混雜在一起來(lái)描述WEB2.0概念。定義者要么對(duì)計(jì)算機(jī)知識(shí)一知半解,要么是企圖讓人們的感到神秘從而對(duì)其頂禮膜拜。按照其定義的方式對(duì)“國(guó)家”這個(gè)概念進(jìn)行詮釋?zhuān)菄?guó)家就是“以中國(guó),法國(guó),美國(guó),俄羅斯,土耳其等集合體為代表,以軍隊(duì),警察,文官系統(tǒng),議會(huì)等社會(huì)團(tuán)體的應(yīng)用為核心,依照量子力學(xué),馬斯絡(luò)需求層次理論,混沌學(xué)等新理論和技術(shù)實(shí)現(xiàn)人類(lèi)社會(huì)的聚集模式。“,多么荒唐的的定義
一個(gè)新概念或新理論不可能從石頭里蹦出來(lái),也不會(huì)超越我們的時(shí)代憑空想象。他必然有自己的歷史傳承。理解WEB2.0,我們要了解WEB甚至是bbs的歷史。 World Wide Web,簡(jiǎn)稱(chēng)WWW,由英國(guó)人TimBerners-Lee 1989年發(fā)明。通過(guò)WEB把互聯(lián)網(wǎng)上的資源在一個(gè)網(wǎng)頁(yè)里直觀的表示出來(lái)并通過(guò)網(wǎng)頁(yè)相互連接。在web之前,互聯(lián)網(wǎng)相當(dāng)數(shù)量的文檔資源是存放在bbs上。通過(guò)對(duì)bbs發(fā)展歷史的研究,我們發(fā)現(xiàn)web時(shí)代的內(nèi)容服務(wù)網(wǎng)站主要是從bbs的功能中演化而成。
BBS誕生于70年代末,那時(shí)還沒(méi)有瀏覽器,搜索引擎,甚至沒(méi)有個(gè)人網(wǎng)站。我們?cè)贐BS上可以做四件事1。發(fā)布新聞 2。發(fā)布交易信息 3。發(fā)布個(gè)人感想,心情描述4。互動(dòng)式問(wèn)答 前三個(gè)功能逐漸從bbs中分離出去,發(fā)展成三個(gè)方向的網(wǎng)站----新聞?lì)悾娮由虅?wù)類(lèi)和博客類(lèi),這三類(lèi)網(wǎng)站經(jīng)過(guò)整合逐漸成為各自的門(mén)戶。如新浪,易趣,博客中國(guó)。第四個(gè)功能互動(dòng)式問(wèn)答正在分離,但還沒(méi)有出現(xiàn)該領(lǐng)域的門(mén)戶網(wǎng)站。如www.ideacool.net ,新浪的愛(ài)問(wèn),小i等網(wǎng)站。我們可以把這一類(lèi)網(wǎng)站模式稱(chēng)之為威客模式,英文名witkey。
我們應(yīng)該已注意到1。新聞?lì)惥W(wǎng)站。2.電子商務(wù)類(lèi)網(wǎng)站 與3。博客類(lèi) 4。威客類(lèi)網(wǎng)站的功能和形式上有一個(gè)明顯的鴻溝。這個(gè)鴻溝就應(yīng)該是web1.0 與web2.0的劃分界線。 新聞?lì)惥W(wǎng)站和電子商務(wù)類(lèi)網(wǎng)站為代表的web1.0時(shí)代是以信息接收者為中心,免費(fèi)分享信息的時(shí)代。博客類(lèi)和威客類(lèi)網(wǎng)站為代表的web2.0時(shí)代是以信息提供者為中心。互聯(lián)網(wǎng)用戶能夠管理個(gè)人的資料和信息。通過(guò)各種途徑讓自己的智慧,知識(shí),經(jīng)驗(yàn),技能體現(xiàn)價(jià)值。簡(jiǎn)而言之,web2.0的定義就是提供一種平臺(tái)讓個(gè)人的智慧,知識(shí),技能體現(xiàn)價(jià)值的一種互聯(lián)網(wǎng)新模式。這種模式的表現(xiàn)形式主要為博客類(lèi),和威客類(lèi)兩種。實(shí)現(xiàn)的支撐包括互聯(lián)網(wǎng)技術(shù),信用制度,支付制度等。
--------------------------------------------------------------------------------
Web2.0的盈利點(diǎn)
?
主要集中在威客模式上:?
1. 威客模式面向的對(duì)象主要是有專(zhuān)業(yè)專(zhuān)長(zhǎng)的用戶如科學(xué)家,工程師,醫(yī)生等,博客面向的是善于表達(dá)個(gè)人觀點(diǎn)和思想的用戶如記者,娛樂(lè)明星,專(zhuān)欄作家等等。
2。個(gè)人的知識(shí),技能,智慧可以體現(xiàn)價(jià)值。其中“體現(xiàn)價(jià)值”不一定指獲得經(jīng)濟(jì)利益,獲得受幫助者的贊揚(yáng),獲得公眾的認(rèn)可也是體現(xiàn)價(jià)值的方式之一。但讓參與者獲得經(jīng)濟(jì)利益是威客模式的重要特點(diǎn)。
3。個(gè)人的知識(shí),技能,智慧可以體現(xiàn)價(jià)值,但不代表參與者一定能夠獲得收益,這要取決于其知識(shí),技能的含金量,可以說(shuō),能力越大,收益越大。
4。威客模式的建立需要實(shí)踐該模式的平臺(tái)建立信用制度,支付制度,例外處理制度等等。這些制度是否完善是該平臺(tái)能否持續(xù)發(fā)展的決定性因素。
5。威客模式也是人類(lèi)大腦通過(guò)互聯(lián)網(wǎng)協(xié)同工作的一種模式。
6.為威客提供服務(wù)的平臺(tái)通過(guò)分享威客交易知識(shí)的收益獲取利潤(rùn)。
談到影響,可能以微軟為首的軟件巨頭更容易被提及,畢竟開(kāi)發(fā)人員所直接應(yīng)用的操作系統(tǒng)、語(yǔ)言、開(kāi)發(fā)工具等各種技術(shù)都掌握在這些公司手中。然而,這并不能抹殺和妨礙提起國(guó)內(nèi)一些企業(yè)和人士對(duì)中國(guó)軟件開(kāi)發(fā)各方面產(chǎn)生的影響。
站在這個(gè)角度,本刊在國(guó)內(nèi)的軟件企業(yè)和個(gè)人中評(píng)選出了如下20位人士,他們對(duì)近期軟件開(kāi)發(fā)產(chǎn)生了一定程度的影響。選出這些人,也是為了拋磚引玉,讓國(guó)內(nèi)的開(kāi)發(fā)者更了解自己正在經(jīng)歷的變化和面臨的挑戰(zhàn)。
在這些人員中,有些屬于早一代的程序員,他們創(chuàng)造的業(yè)績(jī)激勵(lì)了很多程序員進(jìn)入軟件開(kāi)發(fā)。鮑岳橋就是一個(gè),盡管現(xiàn)在他已經(jīng)成為了聯(lián)眾的總裁,但之前從UCDOS步入輝煌,Windows時(shí)代一度面臨困境,最終憑借網(wǎng) 絡(luò)游戲 成功 轉(zhuǎn)型 ,這種以技術(shù)創(chuàng)業(yè)成功的例子對(duì)中國(guó)的程序員來(lái)說(shuō)就是巨大的誘惑。
與此同時(shí),很多人從軟件教育方向在逐漸改變整個(gè)軟件行業(yè)的人才結(jié)構(gòu),這一說(shuō)法毫不夸張。青鳥(niǎo)APTECH就是將印度軟件教育模式帶到中國(guó)來(lái)的典型,尤其是在中國(guó)軟件人才結(jié)構(gòu)并不合理的情況下,他們所做的工作也是有益的嘗試。
而且,面向未來(lái)的眼光也必不可少,很多人所做的工作帶來(lái)的變化現(xiàn)在還不顯著,但對(duì)未來(lái)可能會(huì)產(chǎn)生相當(dāng)?shù)挠绊憽1热纾袊?guó)軟件人才的培養(yǎng)結(jié)構(gòu)在逐漸向國(guó)際化靠攏,軟件學(xué)院功不可沒(méi)。更為超前的是,為了探索未來(lái)中國(guó)軟件在底層技術(shù)上的引導(dǎo)性,有很多人在做努力,從Linux在中國(guó)的推廣,到科泰世紀(jì)打造自己的操作系統(tǒng)和開(kāi)發(fā)平臺(tái),盡管這些嘗試可能會(huì)失敗,但帶給我們的是經(jīng)驗(yàn)和深入的思考。
現(xiàn)在,有人說(shuō)程序員面對(duì)著太多的頭緒,已經(jīng)迷失了方向。的確,是有一些人迷失了方向,但這里的20位人士能夠讓我們以更清醒的眼光看待中國(guó)的軟件開(kāi)發(fā),了解我們?nèi)〉玫某煽?jī)和面臨的挑戰(zhàn)。
開(kāi)國(guó)元?jiǎng)?/strong>
嚴(yán)援朝
所屬公司:新浪網(wǎng)
入選理由:開(kāi)發(fā)第一個(gè)中文操作系統(tǒng)CCDOS,參與創(chuàng)辦四通利方,掌控最大的中文網(wǎng)站新浪網(wǎng)技術(shù)總架構(gòu)。
“做軟件就是在不斷地明確目標(biāo),就是搞清楚你的GO 是什么,所有的軟件都逃不出那三句話——IF、THEN、 ELSE。棒的程序員很快能夠知道自己的GO是什么,沒(méi)長(zhǎng)進(jìn)的程序員老也弄不清楚自己到底要干嘛,所以永遠(yuǎn)處在 學(xué)習(xí)過(guò)程中,手里永遠(yuǎn)拿著一本書(shū),永遠(yuǎn)在學(xué),永遠(yuǎn)也學(xué)不會(huì)。”這是嚴(yán)援朝很經(jīng)典的一句話,甚至有程序員把這作為自己的座右銘。作為中國(guó)第一代程序員的象征,他如今依然負(fù)責(zé)在新浪網(wǎng)的整體技術(shù)架構(gòu)上。不知是不是嚴(yán)援朝怕別人忘記自己,不久前,從新浪網(wǎng)炮制出了兩篇文章,大談自己的一些深?yuàn)W看法。其實(shí)如果單純是這種原因,應(yīng)該大可不必,因?yàn)閲?yán)援朝在中國(guó)軟件開(kāi)發(fā)史上奠定的地位無(wú)人可撼。
求伯君
所屬公司:金山軟件
入選理由:軟件領(lǐng)域的常青樹(shù),以榜樣的力量激勵(lì)眾多程序員。
每一個(gè)聽(tīng)到這個(gè)名字的程序員,都會(huì)有一種莫名的激動(dòng)和敬仰。從金山成立的那一天起,公司的招聘廣告上就把求伯君作為吸引程序員加入的重要宣傳詞,由此可見(jiàn)求伯君在程序員中的影響力。
不久前,我們準(zhǔn)備做“程序員的一天”的欄目,找到求伯君。他說(shuō):“做是可以,不過(guò)現(xiàn)在這些天不太適合,整天要陪著很多官員應(yīng)酬。”看來(lái),作為董事長(zhǎng)的求伯君也僅僅能在精神上鼓舞程序員了。據(jù)說(shuō),金山正在籌拍一部 《劍俠情緣》 的電視劇,求伯君還可能在其中飾演一位方丈。到時(shí)候,我們或許可以欣賞求伯君的影視風(fēng)采了。
王江民
所屬公司: 江民科技
入選理由:38歲開(kāi)始編程,挖掘了殺毒軟件的巨大市場(chǎng)潛力
“38歲開(kāi)始學(xué)習(xí)計(jì)算機(jī),兩三年之內(nèi)成為中國(guó)最出色的反病毒專(zhuān)家之一;45歲只身一人獨(dú)闖中關(guān)村辦公司,產(chǎn)品很快占據(jù)反病毒市場(chǎng)的80%以上。”這些事實(shí)已經(jīng)讓我們無(wú)法忽視王江民對(duì)中國(guó)軟件開(kāi)發(fā)帶來(lái)的影響力,在業(yè)內(nèi)被尊稱(chēng)為老師的王江民,憑借堅(jiān)持而開(kāi)拓出了殺毒軟件市場(chǎng),這也成為中國(guó)軟件產(chǎn)業(yè)所僅有的幾個(gè)亮點(diǎn)之一。盡管現(xiàn)在KV系列產(chǎn)品中早已沒(méi)有了一行他的代碼,而且在市場(chǎng)中的表現(xiàn)也差強(qiáng)人意。但毋庸置疑,KV系列讓眾多的程序員知道了王江民,而他身殘志堅(jiān)的毅力和品質(zhì)也讓很多程序員面對(duì)困難和挫折時(shí),從中得到鼓舞。
鮑岳橋
所屬公司:聯(lián)眾公司
入選理由:在DOS和Windows平臺(tái)、網(wǎng)絡(luò)時(shí)代下都獲得成功的典型
從UCDOS流行的那一天起,鮑岳橋也成為了中國(guó)無(wú)數(shù)程序員的偶像。然而,和很多程序員一樣,他也并沒(méi)有從UCDOS的成功中得到多少具體的物質(zhì)利益。接下來(lái),Windows平臺(tái)開(kāi)發(fā)的巨大沖擊到來(lái)了,網(wǎng)絡(luò)的沖擊到來(lái)了,有誰(shuí)能同時(shí)抓住兩個(gè)機(jī)會(huì)?鮑岳橋無(wú)疑做了最好的注釋。鮑岳橋認(rèn)為,是否掌握某項(xiàng)技術(shù)不是關(guān)鍵,技術(shù)這個(gè)東西完全是觸類(lèi)旁通的,當(dāng)今計(jì)算機(jī)的發(fā)展如此迅速,一個(gè)人不可能掌握所有的新技術(shù),一個(gè)有經(jīng)驗(yàn)的程序員應(yīng)該能夠利用自己原有的知識(shí)和經(jīng)驗(yàn),很快地掌握新技術(shù)和新知識(shí)。他與簡(jiǎn)晶、王建華的合作也是聯(lián)眾成長(zhǎng)中的精彩經(jīng)歷,盡管現(xiàn)在他容登總裁寶座,而簡(jiǎn)晶和王建華離去創(chuàng)業(yè),但他們當(dāng)初的合作還讓現(xiàn)在的眾多程序員看到了初期團(tuán)隊(duì)合作的成功例子。
宮敏
所屬公司:凝思科技
入選理由:最早將自由軟件引入中國(guó)
宮敏,對(duì)很多人來(lái)說(shuō),這是一個(gè)陌生的名字。但正是宮敏博士,在芬蘭參與了LINUX操作系統(tǒng)的開(kāi)發(fā)與研究。后來(lái),他用磁帶背回了20GB容量的自由軟件,形成了中國(guó)第一個(gè)自由軟件庫(kù),被稱(chēng)為是中國(guó)自由軟件界元老。
然而,就在國(guó)內(nèi)自由軟件運(yùn)動(dòng)掀起狂潮時(shí)他卻全身而退,埋頭于開(kāi)發(fā)和做實(shí)事去了。2000年,宮敏回國(guó)創(chuàng)辦北京凝思科技有限公司,目標(biāo)是在較短時(shí)間內(nèi)為國(guó)家相關(guān)部門(mén)提供具有完全自主知識(shí)產(chǎn)權(quán)的高性能、高安全的國(guó)產(chǎn)信息安全
高技術(shù)
產(chǎn)品。宮敏認(rèn)為,自由軟件首先要重視教育,培養(yǎng)出一批有良好心態(tài)和真才實(shí)學(xué)的人。
????????教育先導(dǎo)
譚浩強(qiáng)
入選理由:計(jì)算機(jī)基礎(chǔ)教育
雷軍曾經(jīng)說(shuō)過(guò):“是譚浩強(qiáng)讓程序員感到了寫(xiě)程序就是自己的生命。”這可能是早一代程序員的感覺(jué)吧。在計(jì)算機(jī)基礎(chǔ)教育方面,譚浩強(qiáng)無(wú)疑擁有極高的聲望和經(jīng)驗(yàn)。不過(guò),現(xiàn)在社會(huì)已經(jīng)進(jìn)入新的階段,盡管譚浩強(qiáng)已經(jīng)成立了工作室,并不斷出版了一系列的書(shū)籍,但真正如《Basic 語(yǔ)言》這樣風(fēng)行的書(shū)籍并沒(méi)有再次出現(xiàn)。
譚浩強(qiáng)的書(shū)集中體現(xiàn)了中國(guó)計(jì)算機(jī)教育的特點(diǎn),淺顯,作為入門(mén)級(jí)的書(shū)籍非常不錯(cuò),但一旦真正要深入下去,可能就要選擇國(guó)外那些大師級(jí)人物所寫(xiě)的書(shū)籍了。這也是國(guó)內(nèi)很多程序員對(duì)譚浩強(qiáng)某些書(shū)籍頗有微詞的原因所在。
然而,不管如何,時(shí)代和機(jī)遇都造就了譚浩強(qiáng)在中國(guó)計(jì)算機(jī)史上的地位,這一點(diǎn)無(wú)法抹殺。
李開(kāi)復(fù)
所屬公司:微軟
入選理由:創(chuàng)辦微軟亞洲研究院,在學(xué)生中影響巨大
有人說(shuō)微軟亞洲研究院現(xiàn)在很會(huì)作秀,大事小事總要通報(bào)一番,而且不時(shí)出來(lái)組織一些成果演示,或許這繼承了李開(kāi)復(fù)的風(fēng)格。做過(guò)研究又在企業(yè)中多年鍛煉的經(jīng)歷使得李開(kāi)復(fù)把亞洲研究院當(dāng)作企業(yè)一樣的來(lái)運(yùn)作,《追隨智慧》等書(shū)籍的出版更將這種宣傳推上了頂點(diǎn)。但從另外一方面來(lái)看,李開(kāi)復(fù)的確給國(guó)內(nèi)的計(jì)算機(jī)科學(xué)研究帶來(lái)了新的氣象,亞洲研究院的一些技術(shù)成果也對(duì)IT產(chǎn)業(yè)有著深遠(yuǎn)的影響。同時(shí),微軟亞洲研究院在大學(xué)中深入的各種活動(dòng)使得李開(kāi)復(fù)在學(xué)生中的影響力頗高。而最近《給中國(guó)學(xué)生的一封信》和《給中國(guó)學(xué)生的第二封信》都言辭懇切,引起了巨大反響。微軟給中國(guó)印象最好的地方是亞洲研究院,這也算是李開(kāi)復(fù)的高明之處吧。
陳鐘
所屬院校:北京大學(xué)軟件學(xué)院院長(zhǎng)
入選理由:軟件學(xué)院的積極倡導(dǎo)和實(shí)踐者
其實(shí)選擇陳鐘,不如說(shuō)選擇了軟件學(xué)院更為恰當(dāng)。畢竟從國(guó)家重視軟件學(xué)院開(kāi)始,有幾十家高等院校開(kāi)始了這方面的探索。而32歲就成為博導(dǎo)的陳鐘作為北京大學(xué)軟件學(xué)院的院長(zhǎng),在大興開(kāi)拓了新的天地,并取得了不錯(cuò)的成績(jī)。
最近,有朋友說(shuō):“以前,計(jì)算機(jī)系的學(xué)生對(duì)軟件學(xué)院很不屑一顧,認(rèn)為就是一群雜牌軍。但現(xiàn)在,他們笑不起來(lái)了,軟件學(xué)院的課程配置和教學(xué)完全是按照市場(chǎng)的要求去進(jìn)行的,他們已經(jīng)得到了市場(chǎng)的認(rèn)可。” 當(dāng)然在這些探索中,有的學(xué)院做的并不好,但作為國(guó)家希望改變現(xiàn)在計(jì)算機(jī)人才培養(yǎng)的方式而設(shè)的試點(diǎn),我們有理由期待軟件學(xué)院帶來(lái)的改變。而陳鐘將繼續(xù)在這個(gè)過(guò)程中施展自己的才華。
楊明
所屬公司:北大青鳥(niǎo)APTECH
入選理由:將印度軟件人才培養(yǎng)模式引進(jìn)中國(guó)
印度發(fā)展軟件產(chǎn)業(yè)的成功被大肆宣揚(yáng)后,吸收印度經(jīng)驗(yàn)的探討逐漸風(fēng)行起來(lái)。但真正實(shí)施借鑒印度經(jīng)驗(yàn)就是北大青鳥(niǎo)APTECH了。作為總經(jīng)理的楊明,力圖將這種模式和中國(guó)的實(shí)際情況相結(jié)合,打造出一種獨(dú)特的軟件從業(yè)人員的培訓(xùn)渠道。楊明并不喜歡別人稱(chēng)他培養(yǎng)出來(lái)的是“軟件藍(lán)領(lǐng)”,因?yàn)椋谒磥?lái),通過(guò)APTECH模式培養(yǎng)的人才是幫助很多人進(jìn)入IT領(lǐng)域的“金光大道”。而且,采取特許經(jīng)營(yíng)這套模式也被巨額資金打造的產(chǎn)業(yè)鏈證明是可行的,因?yàn)槟壳耙言谌珖?guó)建立和發(fā)展了近100家授權(quán)培訓(xùn)中心。據(jù)說(shuō),北大青鳥(niǎo)還將繼續(xù)投資幾個(gè)億用來(lái)擴(kuò)張,無(wú)論如何,教育模式方面,楊明帶領(lǐng)的北大青鳥(niǎo)APTECH將會(huì)給國(guó)內(nèi)軟件業(yè)人才市場(chǎng)帶來(lái)相當(dāng)?shù)挠绊憽?/p>
侯捷
入選理由:技術(shù)寫(xiě)作創(chuàng)造品牌
侯捷深入淺出的寫(xiě)作手法,給國(guó)內(nèi)枯燥的技術(shù)書(shū)籍寫(xiě)作注入了一針強(qiáng)心劑。而且,國(guó)內(nèi)的出版公司也從侯捷身上看到了一個(gè)優(yōu)秀技術(shù)作者的市場(chǎng)潛力,因此將挖掘國(guó)內(nèi)優(yōu)秀作者作為重要的工作內(nèi)容。
同時(shí),在侯捷直接和間接的影響下,國(guó)內(nèi)一批軟件開(kāi)發(fā)者看到了技術(shù)寫(xiě)作的價(jià)值,開(kāi)始出版技術(shù)書(shū)籍。現(xiàn)在,程序員發(fā)現(xiàn)了另外的一條可供選擇的方向:技術(shù)寫(xiě)作。隨著更多的開(kāi)發(fā)者參與到其中,對(duì)提升國(guó)內(nèi)開(kāi)發(fā)者交流、共享技術(shù)起到了很好的促進(jìn)作用。
侯捷并不掩飾自己對(duì)財(cái)富的追求,他說(shuō):“好的作者就應(yīng)該得到好的報(bào)酬,這樣才能保證他能夠靜心研究技術(shù),再寫(xiě)出更好的書(shū)來(lái)。”當(dāng)網(wǎng)上攻擊自己的帖子越來(lái)越多的時(shí)候,侯捷選擇了自己的方式,他以老師的口吻試圖來(lái)解釋自己所倡導(dǎo)的這一切。然而,他的回應(yīng)和解釋并不能排解一些人的繼續(xù)攻擊,因?yàn)榫W(wǎng)絡(luò)就是網(wǎng)絡(luò)。
???創(chuàng)新者
王志東
現(xiàn)屬公司:點(diǎn)擊科技
入選理由:在網(wǎng)絡(luò)上取得成功后仍然鐘情軟件,投巨資做面向未來(lái)的協(xié)同軟件
不了解王志東的人覺(jué)得他放棄了軟件,而后又被網(wǎng)絡(luò)所拋棄;但了解王志東的都知道他最鐘愛(ài)的還是軟件,而且現(xiàn)在他同時(shí)擁有了網(wǎng)絡(luò)。
自從離開(kāi)新浪之后,王志東的消息就逐漸從網(wǎng)絡(luò)上減少了。應(yīng)該說(shuō),王志東帶給我們的消息更多是互聯(lián)網(wǎng)所帶來(lái)的影響力。
對(duì)于王志東正在做的協(xié)同軟件,很多人到現(xiàn)在也沒(méi)有完全明白。盡管?chē)?guó)外的一些廠商正在投巨資開(kāi)發(fā)協(xié)同軟件,但在國(guó)內(nèi),推廣起來(lái)還存在很多的問(wèn)題。但無(wú)論如何,王志東能夠在功成名就后仍然投入資金來(lái)開(kāi)發(fā)一個(gè)仍屬未知數(shù)的軟件領(lǐng)域,這種對(duì)軟件的癡情不正彪顯了開(kāi)發(fā)者執(zhí)著的特質(zhì)嗎。
周奕
入選理由:倡導(dǎo)走向國(guó)際市場(chǎng),以共享軟件掙美元的先行者。
2001年的10月份,周奕從美國(guó)打來(lái)一個(gè)長(zhǎng)途電話,對(duì)共享軟件在國(guó)外尋求注冊(cè)談了很多他的想法,當(dāng)時(shí)的他充滿著發(fā)現(xiàn)新大陸的喜悅,也迫切希望與國(guó)內(nèi)的程序員共同分享。隨著媒體的宣傳,“寶馬車(chē)”給程序員帶來(lái)了極大的吸引,一大批程序員、沒(méi)有畢業(yè)的學(xué)生、甚至包括剛剛學(xué)習(xí)VB兩三天的小孩子也都做起了美元夢(mèng)。不過(guò),周奕在國(guó)際上面臨的壓力也不小,一大批類(lèi)似MP3 to CD的軟件不斷出現(xiàn),其中不乏其他中國(guó)程序員的作品。盡管周奕的軟件銷(xiāo)售量下滑,但他從來(lái)沒(méi)有后悔過(guò)這樣做。
現(xiàn)在國(guó)際市場(chǎng)上有數(shù)量眾多的共享軟件,其中中國(guó)、俄羅斯和美國(guó)占據(jù)了最大的份額,一大批共享軟件作者通過(guò)這種途徑換來(lái)了豐足的生活,當(dāng)然也有另外一批人并沒(méi)有帶來(lái)所企盼的收獲。但無(wú)論如何,周奕作為“共享軟件走向國(guó)際市場(chǎng)”創(chuàng)始人被眾多的程序員稱(chēng)為“老大”,這種影響力在中國(guó)的軟件開(kāi)發(fā)史值得一書(shū)。
陳天橋
所屬公司:上海盛大
入選理由:用市場(chǎng)的成功加速了網(wǎng)絡(luò)游戲開(kāi)發(fā)的進(jìn)程
陳天橋的入選可能爭(zhēng)議很大,之所以堅(jiān)持把他列入,完全是基于他給網(wǎng)絡(luò)游戲市場(chǎng)帶來(lái)的巨大沖擊。掰開(kāi)手指數(shù)數(shù),中國(guó)有幾個(gè)軟件行業(yè)被如此追捧過(guò),除財(cái)務(wù)管理軟件和殺毒軟件之外,還沒(méi)有那個(gè)軟件行業(yè)被瘋狂的關(guān)注。正是基于上海盛大為代表的公司在網(wǎng)絡(luò)游戲市場(chǎng)上取得的成績(jī),才使人把目光放在了網(wǎng)絡(luò)游戲上。而且,正是盛大和韓國(guó)游戲開(kāi)發(fā)商產(chǎn)生的沖突才使得自己和其他的運(yùn)營(yíng)商意識(shí)到了國(guó)產(chǎn)網(wǎng)絡(luò)游戲研發(fā)的重要性。網(wǎng)絡(luò)游戲程序員一時(shí)物以稀為貴,很多培訓(xùn)結(jié)構(gòu)和高校都開(kāi)設(shè)了相關(guān)專(zhuān)業(yè),國(guó)家在這方面的政策也有了調(diào)整。以一己之力影響了網(wǎng)絡(luò)游戲開(kāi)發(fā)的產(chǎn)業(yè)進(jìn)程,陳天橋帶領(lǐng)盛大產(chǎn)生的影響力不可忽略。
陳榕
所屬公司:科泰世紀(jì)
入選理由:打造新一代操作系統(tǒng)
陳榕的身上散發(fā)著一股銳氣,有人說(shuō)他是個(gè)天生的演講家。不過(guò)當(dāng)陳榕剛到國(guó)內(nèi)推廣其思想的時(shí)候,很多人不理解,他的情緒也會(huì)很激動(dòng)。有人說(shuō)他對(duì)技術(shù)研究的太深刻了,雖然提出的思想很對(duì),但這種事情不應(yīng)該在國(guó)內(nèi)做,因?yàn)橹袊?guó)沒(méi)有這樣的環(huán)境。不知道陳榕如何看待這個(gè)問(wèn)題。
現(xiàn)在,美國(guó)的風(fēng)險(xiǎn)投資已經(jīng)不易獲得,而政府對(duì)這方面的支持使陳榕找到了一個(gè)機(jī)會(huì)。能否取得市場(chǎng)成功盡管是陳榕所關(guān)注的,但他可能更在意將多年以來(lái)在微軟無(wú)法實(shí)現(xiàn)的一個(gè)夢(mèng)在這里實(shí)現(xiàn)吧。
然而,在微軟的.NET已經(jīng)推出,多種嵌入式操作系統(tǒng)相互爭(zhēng)奪的市場(chǎng)上,科泰世紀(jì)的操作系統(tǒng)要取得成功還面臨嚴(yán)峻的挑戰(zhàn)。不過(guò)陳榕很有信心,他用一個(gè)例子來(lái)證明:微軟很多的產(chǎn)品在1.0和2.0版本的時(shí)候都不被人看好,都是到3.0才成熟并得到市場(chǎng)認(rèn)可的。我們也期望那一天早些到來(lái)。
吳濤
入選理由:易語(yǔ)言創(chuàng)始人
如果說(shuō)在中文語(yǔ)言編程上,中國(guó)有為數(shù)不多的開(kāi)發(fā)者還寄托希望的話,那身處湖北省枝江市鑫源村的吳濤無(wú)疑是其中之一。這位數(shù)年前就開(kāi)始做易語(yǔ)言的程序員遠(yuǎn)離了喧囂的北京,毅然回家做起了中文可視化編程環(huán)境。
在最近的版本中,吳濤建立了完全的易程序編譯器系統(tǒng),支持全編譯,可以直接將程序編譯為CPU指令碼運(yùn)行,從而突破了長(zhǎng)期以來(lái)的速度瓶頸。同時(shí),他的商業(yè)推廣也做的不錯(cuò),從易語(yǔ)言支持論壇的火爆中就可以看出這點(diǎn)。而吳濤一直執(zhí)著在語(yǔ)言研究和底層編程工具的態(tài)度也是很多程序員需要學(xué)習(xí)的。盡管吳濤所做的工作不會(huì)撼動(dòng)整個(gè)軟件開(kāi)發(fā)的大局,但有人執(zhí)著于這樣的工作也應(yīng)該得到我們的尊敬。想一想,同樣是基于中文的出發(fā)點(diǎn),為什么WPS會(huì)得到推崇,而不能容忍易語(yǔ)言的存在呢。
???個(gè)人典范
雷軍
現(xiàn)屬公司:金山軟件
入選理由:從程序員向管理者成功轉(zhuǎn)型的代表
2003年初,當(dāng)雷軍在亞運(yùn)村的一個(gè)并不為人所知的酒吧中聊天,探討程序員成長(zhǎng)和轉(zhuǎn)型的時(shí)候,雷軍曾說(shuō):“我現(xiàn)在認(rèn)識(shí)到,CEO也是一種職業(yè),這個(gè)職業(yè)對(duì)我更有吸引力。對(duì)公司未來(lái)的幾年發(fā)展,我心中已經(jīng)有了一個(gè)方向,關(guān)鍵就是如何去實(shí)施和時(shí)間快慢的問(wèn)題而已。”
應(yīng)該說(shuō),媒體已經(jīng)將雷軍塑造成為了一個(gè)從程序員到管理者轉(zhuǎn)型的典型例子。然而,在這種轉(zhuǎn)變中,有誰(shuí)能夠了解到雷軍當(dāng)時(shí)所面臨的壓力和風(fēng)險(xiǎn),如果失敗了呢?沒(méi)有人會(huì)問(wèn)這個(gè)問(wèn)題,也沒(méi)有人會(huì)回答它。雷軍帶領(lǐng)金山發(fā)動(dòng)的紅色風(fēng)暴也將通用軟件的價(jià)格拉了下來(lái),這也給程序員一次重新審視自己的機(jī)會(huì)。記得當(dāng)時(shí)有報(bào)道談到銘泰的程序員看到自己開(kāi)發(fā)的軟件不得不以幾十元的低價(jià)銷(xiāo)售時(shí),甚至哭了起來(lái)。這算不算的雷軍帶給程序員的另外一種影響呢?
不過(guò),現(xiàn)在雷軍作為管理者,同樣面臨著多種問(wèn)題,當(dāng)網(wǎng)絡(luò)游戲火爆之后,雷軍將賭注放在了劍俠情緣網(wǎng)絡(luò)版上,有人還說(shuō)雷軍精于戰(zhàn)術(shù),但戰(zhàn)略還有欠缺,這次的寶押對(duì)了嗎?不管怎樣,如果雷軍成功了,這是管理者的成功,如果他失敗了,也不過(guò)是管理者的失敗案例之一。但雷軍曾經(jīng)有過(guò)的程序員身份將永遠(yuǎn)讓我們關(guān)注他的人生。
丁磊
所屬公司:網(wǎng)易
入選理由:技術(shù)眼光抓住網(wǎng)絡(luò)時(shí)代機(jī)遇的典范
如果告訴你中國(guó)的首富也在看《程序員》雜志,你是否相信?這可能很難想像,但事實(shí)的確如此。
如果說(shuō)網(wǎng)絡(luò)給了很多人一個(gè)機(jī)遇,包括軟件開(kāi)發(fā)人員,但并不是所有人都能抓住了這個(gè)機(jī)遇,即便抓住,又很難有人把這個(gè)機(jī)遇發(fā)揮到像丁磊這樣極至。
有人說(shuō)丁磊不是一個(gè)技術(shù)人員,因?yàn)椴](méi)有開(kāi)發(fā)過(guò)哪個(gè)令其揚(yáng)名的產(chǎn)品,但丁磊所具有獨(dú)到的技術(shù)眼光在轉(zhuǎn)向網(wǎng)絡(luò)服務(wù)和網(wǎng)絡(luò)游戲時(shí)都起到了重要作用,說(shuō)丁磊屬于那種“玩技術(shù)”的更為合適。開(kāi)發(fā)者如何利用各種技術(shù)挖掘到更為廣闊的商業(yè)價(jià)值,這可能就是丁磊帶給我們的啟示吧。
張小龍
所屬公司:博大
入選理由:開(kāi)發(fā)Foxmail和微軟的OutLook抗衡,以免費(fèi)軟件一夜成名
一個(gè)普通的程序員開(kāi)發(fā)的軟件能和微軟的產(chǎn)品相抗衡,這很少見(jiàn),而產(chǎn)品被巨資收購(gòu)就更加是傳奇,創(chuàng)造這個(gè)傳奇的人就是張小龍。如果說(shuō)互聯(lián)網(wǎng)時(shí)代的軟件只有幾個(gè)算上成功的話,F(xiàn)oxmail肯定會(huì)名列其中。
依靠這兩點(diǎn),張小龍對(duì)很多程序員產(chǎn)生的激勵(lì)就不可小視。當(dāng)然,這也是在當(dāng)時(shí)的背景下發(fā)生的傳奇,現(xiàn)在這樣的故事可能不會(huì)再次發(fā)生了。
張小龍加盟博大任副總裁和CTO后,他現(xiàn)在的工作首先是管理和組織各個(gè)產(chǎn)品和項(xiàng)目開(kāi)發(fā)組,其次是規(guī)劃公司的產(chǎn)品結(jié)構(gòu),公司現(xiàn)在有很多的產(chǎn)品和項(xiàng)目都要由他來(lái)統(tǒng)籌。這一次,團(tuán)隊(duì)合作的力量將成為他再次成功的基礎(chǔ)。
廖恒毅
現(xiàn)屬公司:佳軟公司
入選理由:十多年從事一線軟件開(kāi)發(fā)的代表,正打造基于.NET的企業(yè)級(jí)開(kāi)發(fā)平臺(tái)
廖恒毅從不掩飾自己對(duì)微軟的喜愛(ài)。從中文之星2.0到開(kāi)發(fā)基于.NET的大型企業(yè)管理軟件,他與微軟的關(guān)系密不可分。而之前曾經(jīng)在杜家濱領(lǐng)導(dǎo)下的微軟中國(guó)公司擔(dān)任開(kāi)發(fā)合作部經(jīng)理的經(jīng)歷,更給他身上打下了深深的微軟烙印。盡管廖恒毅很坦率的談到,他當(dāng)時(shí)所做的工作不如現(xiàn)在的負(fù)責(zé)人,但作為一個(gè)純粹的程序員,他利用微軟技術(shù)創(chuàng)造的價(jià)值卻無(wú)人可及。從中文之星2.0的熱賣(mài),到創(chuàng)造的拼音加加輸入法帶動(dòng)了輸入法技術(shù)的創(chuàng)新都是證明,而現(xiàn)在,他用.NET構(gòu)架了佳軟公司未來(lái)超速發(fā)展的動(dòng)力,他說(shuō):“今天我更關(guān)注我的技術(shù)能否給社會(huì)而不僅僅是個(gè)人帶來(lái)的價(jià)值。”
如果有人說(shuō),微軟的技術(shù)能做什么樣的系統(tǒng)呢?廖恒毅一定會(huì)毫不遲疑的拿自己的系統(tǒng)舉例,利用創(chuàng)建的軟件平臺(tái),一個(gè)人可以在10多天的時(shí)間中打造出一個(gè)完整的企業(yè)管理系統(tǒng),這是類(lèi)似SAP和Sibel的平臺(tái),只是現(xiàn)在中國(guó)的軟件環(huán)境并不適合其拿出來(lái)做公開(kāi)的標(biāo)準(zhǔn),公司更愿意使用這套系統(tǒng)來(lái)面向最終客戶。未來(lái),廖恒毅所創(chuàng)造的這一軟件架構(gòu)給中國(guó)企業(yè)軟件開(kāi)發(fā)帶來(lái)沖擊也并非不可能。當(dāng)然,技術(shù)的領(lǐng)先并不代表市場(chǎng)的領(lǐng)先,這一點(diǎn)他也很清楚。
廖恒毅并不習(xí)慣去公司分配給他的辦公室去辦公,他更喜歡扎在公司程序員的房子里面和大家一起工作。有次,聊程序員能做到什么時(shí)間,廖恒毅笑著說(shuō):“做了程序員,只要活著,就要一直寫(xiě)程序了。”
袁紅崗
所屬公司:金蝶中間件公司
入選理由:最早開(kāi)發(fā)Windows上的企業(yè)應(yīng)用軟件,打造獨(dú)立知識(shí)產(chǎn)權(quán)的EJB服務(wù)器
很多JAVA程序員對(duì)袁紅崗極其佩服,源于他做了很多人不敢想更不敢做的事情,這就是他打造了國(guó)產(chǎn)的EJB服務(wù)器,很快,金蝶將在國(guó)內(nèi)推出自主產(chǎn)權(quán)EJB服務(wù)器的3.0版本。
同時(shí),袁紅崗還是在Windows平臺(tái)上開(kāi)發(fā)企業(yè)應(yīng)用軟件的最早的一批程序員,當(dāng)時(shí)寫(xiě)出的適合小型企業(yè)使用的財(cái)務(wù)購(gòu)銷(xiāo)存一體化軟件KINGDEE 2.7,令I(lǐng)T行業(yè)對(duì)金蝶刮目相看,使金蝶一舉成名,正是這些人才奠定了中國(guó)的管理軟件的基礎(chǔ)。
袁紅崗將自己多年的經(jīng)驗(yàn)以一種樸實(shí)的風(fēng)格寫(xiě)出來(lái),這些帖子在網(wǎng)上也影響深遠(yuǎn)。
后記:
我們選擇了20位對(duì)中國(guó)軟件開(kāi)發(fā)最具影響力的人,從側(cè)面也展示了中國(guó)軟件開(kāi)發(fā)的脈絡(luò)。其中我們可以看到中國(guó)的軟件開(kāi)發(fā)大部分以國(guó)內(nèi)市場(chǎng)為主,很多過(guò)去的那些軟件英雄都與中文、漢化有著千絲萬(wàn)縷的聯(lián)系。正是在這種情況下,這些人取得了成功,但同時(shí)也讓國(guó)內(nèi)的開(kāi)發(fā)人員將目光局限在了國(guó)內(nèi)市場(chǎng)上。而國(guó)內(nèi)市場(chǎng)的不成熟以及其他一系列原因又導(dǎo)致了無(wú)法支撐起語(yǔ)言和底層開(kāi)發(fā)工具技術(shù)廠商的存活。
正因?yàn)槿绱耍覀円灿幸恍o(wú)奈,這些人大部分都是在心理上給程序員施以影響的人,而在技術(shù)層面上能夠?qū)浖_(kāi)發(fā)方向產(chǎn)生影響的很少,即便是有影響力,其影響范圍也很小。
軟件設(shè)計(jì)方面,國(guó)內(nèi)沒(méi)有一個(gè)企業(yè)或者個(gè)人引領(lǐng)某種規(guī)范使得大家可以靠過(guò)來(lái)。在全球技術(shù)統(tǒng)一化的今天,能否開(kāi)發(fā)出面向全球市場(chǎng)的軟件技術(shù),這是需要重視的問(wèn)題。我們的軟件公司和程序員能否向這個(gè)方向努力呢?
摘要
Hibernate和struts是當(dāng)前市面上幾個(gè)最流行的開(kāi)源的庫(kù)之一。它們很有效率,是程序員在開(kāi)發(fā)Java企業(yè)應(yīng)用,挑選幾個(gè)競(jìng)爭(zhēng)的庫(kù)的首選。雖然它們經(jīng)常被一起應(yīng)用,但是Hibernate的設(shè)計(jì)目標(biāo)并不是和Struts一起使用,而Struts在Hibernate誕生好多年之前就發(fā)布了。為了讓它們?cè)谝黄鸸ぷ鳎匀挥泻芏嗵魬?zhàn)。這篇文章點(diǎn)明了Struts和Hibernate之間的一些鴻溝,尤其關(guān)系到面向?qū)ο蠼7矫妗N恼乱裁枋隽巳绾卧趦烧唛g搭起橋梁,給出了一個(gè)基于擴(kuò)展Struts的解決方案。所有的基于Struts和Hibernate構(gòu)建的Web應(yīng)用都能從這個(gè)通用的擴(kuò)展中獲益。
在Hibernate in Action(Manning,2004十月)這本書(shū)里,作者Christian Bauer和Gavin King揭示了面向?qū)ο笫澜绲哪P秃完P(guān)系數(shù)據(jù)模型,兩個(gè)世界的范例是不一致的。Hibernate非常成功地在存儲(chǔ)層(persistence Layer)將兩者粘合在一起。但是領(lǐng)域模型(domain model)(也就是Model-View-Controller的model layer)和HTML頁(yè)面(MVC的View Layer)仍然存在不一致。在這篇文章中,我們將檢查這種不一致,并且探索解決的方案。
范例不一致的再發(fā)現(xiàn)
讓我們先看一個(gè)經(jīng)典的parent-child關(guān)系例子(看下面的代碼):product和category。Category類(lèi)定義了一個(gè)類(lèi)型為long的標(biāo)示符id和一個(gè)類(lèi)型為String的屬性name。Product類(lèi)也有一個(gè)類(lèi)型為long的標(biāo)示符id和一個(gè)類(lèi)型為Category的屬性category,表示了多對(duì)一的關(guān)系(也就是說(shuō)很多product可以屬于一個(gè)Category)
/**
* @hibernate.class table="CATEGORY"
*/
public class Category {
?? private Long id;
?? private String name;
?? /**
????* @hibernate.id generator-class="native" column="CATEGORY_ID"
????*/
?? public Long getId() {
??????return id;
?? }
?? public void setId(Long id) {
??????this.id = id;
?? }
?? /**
????* @hibernate.property column="NAME"
????*/
?? public String getName() {
??????return name;
?? }
?? public void setName(Long name) {
??????this.name = name;
?? }
}
/**
* @hibernate.class table="PRODUCT"
*/
public class Product {
?? private Long id;
?? private Category category;
?? /**
????* @hibernate.id generator-class="native" column="PRODUCT_ID"
????*/
?? public Long getId() {
??????return id;
?? }
?? public void setId(Long id) {
??????this.id = id;
?? }
?? /**
????* @hibernate.many-to-one
????* column="CATEGORY_ID"
????* class="Category"
????* cascade="none"
????* not-null="false"
????*/
?? public Category getCategory() {
??????return category;
?? }
?? public void setCategory(Category category) {
??????this.category = category;
?? }
}
我們希望一個(gè)product可以被更改category,所以我們的HTML提供了一個(gè)下拉框列出所有Category。
<select name="categoryId">
?? <option value="">No Category</option>
?? <option value="1">Category 1</option>
?? <option value="2">Category 2</option>
?? <option value="3">Category 3</option>
</select>
這里我們看出了兩者的不一致:在Product領(lǐng)域?qū)ο罄铮琧ategory屬性是Category類(lèi)型,但是ProductForm只有一個(gè)類(lèi)型為long的categoryId。這種不匹配不但增加了不一致,而且導(dǎo)致了不必要的代碼進(jìn)行primitive type的標(biāo)示符和對(duì)應(yīng)的對(duì)象之間的轉(zhuǎn)換。
這種不一致部分是由于HTML Form自己引起的:它只代表了一種關(guān)系模型,不能代表面向?qū)ο蟮哪P汀C嫦驅(qū)ο蠛完P(guān)系模型的不一致在存儲(chǔ)層由對(duì)象關(guān)系映射(O/RM)解決。但是類(lèi)似的問(wèn)題在表示層(view layer)仍然存在。解決的關(guān)鍵是讓他們一起無(wú)縫地工作。
Struts的功能和局限
幸運(yùn)的是,Struts能夠生成和解釋內(nèi)嵌的對(duì)象屬性。Category下拉框可以用Struts page-construction(html) tag library:
<html:select property="category.id">
?? <option value="">No Category</option>
?? <html:options collection="categories" property="id" labelProperty="name"/>
</html:select>
我們假設(shè)categories是Category對(duì)象的一個(gè)list。所以現(xiàn)在我們要修改ProductForm,讓它變得更加“面向?qū)ο蟆保覀円薷腜roductForm的categoryId,改成類(lèi)型為Category的category。這種改變會(huì)導(dǎo)致在Product和ProductForm之間復(fù)制屬性的工作更加繁瑣,因?yàn)閮烧哂邢嗤膶傩浴?br />
public class ProductForm extends ActionForm {
???? private Long id;
???? private Category category;
???? ...
}
當(dāng)我們完成剩余的Struts Action, configuration, validator, jsp, hibernate層后,開(kāi)始測(cè)試,我們馬上在訪問(wèn)ProductForm.category.id時(shí)遇到了NullPointerException。這是預(yù)料中的!因?yàn)镻roductForm.category還沒(méi)有被設(shè)置,同時(shí),Hibernate也會(huì)將多對(duì)一所聯(lián)系的對(duì)象引用設(shè)為空(如果database field為空指)(譯者:這里指Hiberate將product.category為Null,如果該P(yáng)roduct沒(méi)有聯(lián)系到任何category)。Struts要求所有的對(duì)象在顯示(生成HTML Form)和傳播(提交HTML FORM)之前被建立。
讓我們看看如何用ActionForm.reset()來(lái)架起橋梁。
(并非如此)臭名昭著的Struts ActionForm
在我第一個(gè)星期接觸Struts的時(shí)候,我最大的一個(gè)疑問(wèn)就是:為什么我必須為Properties, getter方法, setter方法保持幾乎完全相同的兩份copy, 一份在ActionForm Bean, 一份在DomainObject。這個(gè)繁瑣的步驟成了Struts社區(qū)最主要的抱怨之一。
以我的觀點(diǎn),ActionForm存在有原因的。首先,它們可以區(qū)別于Domain Object因?yàn)樗麄兊?dāng)了不同的角色。在MVC模式下,Domain Object是Model層的一個(gè)部分,ActionForm是View層的。因?yàn)閃ebpage的Field和Database的Field可能不一樣,某些特制的轉(zhuǎn)換是常見(jiàn)的。第二,ActionForm.validate()方法可以定義非常好用的驗(yàn)證規(guī)則。第三,可能有其他的,特定的View行為,但是又不想在domain layer實(shí)現(xiàn),特別當(dāng)persistence framework來(lái)管理domain object的時(shí)候。
提交Form
讓我們來(lái)用ActionForm內(nèi)有的方法-reset()-來(lái)解決view和model之間的不一致。這個(gè)reset()方法是在ActionForm在被Struts Controller Servlet處理request時(shí)候復(fù)制ActionForm屬性之前調(diào)用的。這個(gè)方法最常見(jiàn)的使用是:checkbox必須被顯式地設(shè)為false,讓沒(méi)有被選中的checkbox被正確識(shí)別。Reset()也是一個(gè)初始化用于view rending對(duì)象的合適地方。代碼看起來(lái)是這樣的:
public class ProductForm extends ActionForm {
???? private Long id;
???? private Category category;
???? ...
???? public void reset(ActionMapping mapping, HttpServletRequest request)
???? {
????????super.reset( mapping, request );
????????if ( category == null ) { category = new Category(); }
???? }
}
Struts在使用用戶提交的值填寫(xiě)ProductForm之前,Struts會(huì)調(diào)用reset(),這樣category屬性將會(huì)被初始化。請(qǐng)注意,你必須檢查category看它是不是null,后面我們會(huì)討論這個(gè)。
編輯Form
到目前為止,我們已經(jīng)解決了form提交時(shí)候的問(wèn)題。但是當(dāng)我們?cè)谏蒮orm頁(yè)面的時(shí)候呢?Html:select tag也希望有一個(gè)非空的引用,所以我們將在form生成頁(yè)面之前調(diào)用reset()。我們?cè)赼ction類(lèi)里加入了一行:
public class EditProductAction extends Action {
???? public final ActionForward execute( ActionMapping mapping, ActionForm form,
????????HttpServletRequest request, HttpServletResponse response ) throws Exception
???? {
????????...
????????Product product = createOrLoadProduct();
????????ProductForm productForm = (ProductForm)form;
????????PropertyUtils.copyProperties( productForm, product );
????????productForm.reset( mapping, request );
????????...
???? }
}
我假設(shè)讀者已經(jīng)對(duì)action類(lèi)和Jakarta commons Beanutils包非常熟悉了。CreateOrLoadProduct()建立了一個(gè)新的Product實(shí)例或者從數(shù)據(jù)庫(kù)里載入一個(gè)已有的實(shí)例,具體取決于這個(gè)action是建立或者修改Product的。ProductForm被賦值后(譯者:也就是調(diào)用PropertyUtils.copyProperties后),productForm.category已經(jīng)從Product.category復(fù)制過(guò)來(lái)了(譯者:實(shí)際上只是復(fù)制了category對(duì)象引用,并沒(méi)有開(kāi)銷(xiāo)),然后,ProductForm就能用來(lái)生成頁(yè)面了。我們同時(shí)也必須保證:不覆蓋已經(jīng)被Hibernate載入的對(duì)象,所以我們必須檢查(category)是不是為null。
因?yàn)閞eset()方法是在ActionForm中定義的,我們可以把上述代碼放入一個(gè)superclass,比如CommonEditAction,來(lái)處理這些事情:
????
??????Product product = createOrLoadProduct();
????????PropertyUtils.copyProperties( form, product );
????????form.reset( mapping, request );
如果你需要一個(gè)只讀的Form, 你有兩個(gè)選擇: 第一檢查所聯(lián)系的jsp對(duì)象是不是null, 第二復(fù)制domain對(duì)象到ActionForm之后調(diào)用Reset()
保存domain對(duì)象
我們解決了提交Form和生成Form頁(yè)面的問(wèn)題, 所以Struts可以滿足了。但是Hibernate呢?當(dāng)用戶選擇了一個(gè)null ID option – 在我們的例子中“no category”option- 并且提交form, productForm.category指向一個(gè)新建立的hibernate對(duì)象,id為null。當(dāng)category屬性從ProductForm復(fù)制到Hibernate控制的Product對(duì)象并且存儲(chǔ)時(shí),Hibernate會(huì)抱怨product.category是一個(gè)臨時(shí)對(duì)象,需要在Product存儲(chǔ)前先被存儲(chǔ)。當(dāng)然,我們知道它是Null,并且不需要被存儲(chǔ)。所以我們需要將product.category置為Null,然后Hibernate就能存儲(chǔ)Product了(譯者:在這種情況下,數(shù)據(jù)庫(kù)product.category被設(shè)成空值)。我們也不希望改變Hibernate的工作方式,所以我們選擇在復(fù)制到Domain對(duì)象之前清理這些臨時(shí)對(duì)象,我們?cè)赑roductForm中加了一個(gè)方法:
public class ProductForm extends ActionForm {
???? private Long id;
???? private Category category;
???? ...
???? public void reset(ActionMapping mapping, HttpServletRequest request) {
????????super.reset( mapping, request );
????????if ( category == null ) { category = new Category(); }
???? }
???? public void cleanupEmptyObjects() {
????????if ( category.getId() == null ) { category = null; }
???? }
}
我們?cè)赾opyProperties之前清理掉這些臨時(shí)對(duì)象,所以如果ProductForm.category只是用來(lái)放Null的,則將ProductForm.category置為Null。然后Domain對(duì)象的category也會(huì)被設(shè)成null:
public class SaveProductAction extends Action {
???? public final ActionForward execute( ActionMapping mapping, ActionForm form,
????????HttpServletRequest request, HttpServletResponse response ) throws Exception
???? {
????????...
????????Product product = new Product();
????????((ProductForm)form).cleanupEmptyObjects();
????????PropertyUtils.copyProperties( product, form );
????????SaveProduct( product );
????????...
???? }
}
一對(duì)多關(guān)系
我還沒(méi)有解決Category到Product的一對(duì)多關(guān)系。我們把它加入到Category的Metadata中:
public class Category {
???? ...
???? private Set products;
???? ...
???? /**
??????* @hibernate.set
??????* table="PRODUCT"
??????* lazy="true"
??????* outer-join="auto"
??????* inverse="true"
??????* cascade="all-delete-orphan"
??????*
??????* @hibernate.collection-key
??????* column="CATEGORY_ID"
??????*
??????* @hibernate.collection-one-to-many
??????* class="Product"
??????*/
???? public Set getProducts() {
????????return products;
???? }
???? public void setProducts(Set products) {
????????this.products = products;
???? }
}
注意:Hibernate的cascade屬性為all-delete-orphan表明:Hibernate需要在存儲(chǔ)包含的Category對(duì)象時(shí)候,自動(dòng)存儲(chǔ)Product對(duì)象。和parent對(duì)象一起存儲(chǔ)child對(duì)象的情況并不常見(jiàn),常見(jiàn)的是:分別控制child的存儲(chǔ)和parent的存儲(chǔ)。在我們的例子中,我們可以容易地做到這一點(diǎn),如果我們?cè)试S用戶在同一個(gè)html page編輯Category和ProductS。用set表示Products是非常直觀的:
public class CategoryForm extends ActionForm {
???? private Set productForms;
???? ...
???? public void reset(ActionMapping mapping, HttpServletRequest request) {
????????super.reset( mapping, request );
????????for ( int i = 0; i < MAX_PRODUCT_NUM_ON_PAGE; i++ ) {
?????????? ProductForm productForm = new ProductForm();
?????????? productForm.reset( mapping, request );
?????????? productForms.add( productForm );
????????}
???? }
???? public void cleanupEmptyObjects() {
????????for ( Iterator i = productForms.iterator(); i.hasNext(); ) {
?????????? ProductForm productForm = (ProductForm) i.next();
?????????? productForm.cleanupEmptyObjects();
????????}
???? }
}
更進(jìn)一步
我們已經(jīng)可以察看,編輯,提交forms,并且存儲(chǔ)相關(guān)的objects,但是為所有的ActionForm類(lèi)定義CleanupEmptyObjects()和reset()方法是個(gè)累贅。我們將用一個(gè)抽象的ActionForm來(lái)完成協(xié)助完成這些工作。
作為通用的實(shí)現(xiàn),我們必須遍歷所有的Hibernate管理的domain對(duì)象,發(fā)現(xiàn)他們的identifier,并且測(cè)試id值。幸運(yùn)的是:org.hibernate.metadata包已經(jīng)有兩個(gè)Utility類(lèi)能取出domain對(duì)象的元數(shù)據(jù)。我們用ClassMetadata類(lèi)檢查這個(gè)object是不是Hibernate管理的。如果是:我們把它們的id Value取出來(lái)。我們用了Jakarta Commons Beanutils包來(lái)協(xié)助JavaBean元數(shù)據(jù)的操作。
import java.beans.PropertyDescriptor;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.metadata.ClassMetadata;
public abstract class AbstractForm extends ActionForm {
?? public void reset(ActionMapping mapping, HttpServletRequest request) {
??????super.reset( mapping, request );
??????// Get PropertyDescriptor of all bean properties
??????PropertyDescriptor descriptors[] =
???????? PropertyUtils.getPropertyDescriptors( this );
??????for ( int i = 0; i < descriptors.length; i++ ) {
???????? Class propClass = descriptors[i].getPropertyType();
???????? ClassMetadata classMetadata = HibernateUtil.getSessionFactory()
????????????.getClassMetadata( propClass );
???????? if ( classMetadata != null ) {?? // This is a Hibernate object
????????????String propName = descriptors[i].getName();
????????????Object propValue = PropertyUtils.getProperty( this, propName );
????????????// Evaluate property, create new instance if it is null
????????????if ( propValue == null ) {
?????????????? PropertyUtils.setProperty( this, propName, propClass.newInstance() );
????????????}
???????? }
??????}
?? }
?? public void cleanupEmptyObjects() {
??????// Get PropertyDescriptor of all bean properties
??????PropertyDescriptor descriptors[] =
??????PropertyUtils.getPropertyDescriptors( this );
??????for ( int i = 0; i < descriptors.length; i++ ) {
???????? Class propClass = descriptors[i].getPropertyType();
???????? ClassMetadata classMetadata = HibernateUtil.getSessionFactory()
????????????.getClassMetadata( propClass );
???????? if ( classMetadata != null ) {?? // This is a Hibernate object
????????????Serializable id = classMetadata.getIdentifier( this, EntityMode.POJO );
????????????// If the object id has not been set, release the object.
????????????// Define application specific rules of not-set id here,
????????????// e.g. id == null, id == 0, etc.
????????????if ( id == null ) {
?????????????? String propName = descriptors[i].getName();
?????????????? PropertyUtils.setProperty( this, propName, null );
????????????}
???????? }
??????}
?? }
}
為了讓代碼可讀,我們省略了Exception的處理代碼。
我們的新AbstractForm類(lèi)從Struts的ActionForm類(lèi)繼承,并且提供了通用行為:reset和cleanup多對(duì)一關(guān)聯(lián)對(duì)象。當(dāng)這個(gè)關(guān)系是相反的話(也就是一對(duì)多關(guān)系),那么每個(gè)例子將會(huì)有所不同,類(lèi)似在Abstract類(lèi)里實(shí)現(xiàn)是比較好的辦法。
總結(jié)
Struts和Hibernate是非常流行和強(qiáng)大的框架,他們可以有效地相互合作,并且彌補(bǔ)domain模型和MVC視圖(view)之間的差別。這篇文章討論一個(gè)解決Struts/Hibernate Project的通用的方案,并且不需要大量修改已經(jīng)有的代碼。