Sunwd's Blog | 网络,科技,音乐,生活
创新永无止境,一切皆有可能。

2004年08月



    摘要:不错啊    (全文共2769字)——点击此处阅读全文




    摘要:SONY MUSIC 48首世纪终极情歌    (全文共8860字)——点击此处阅读全文




    摘要:Nirvana的5张专辑    (全文共13176字)——点击此处阅读全文




    摘要:好听的song!    (全文共1846字)——点击此处阅读全文




    摘要:余世维讲座(3)    (全文共9459字)——点击此处阅读全文




    摘要:余世维讲座(2)    (全文共9482字)——点击此处阅读全文




    摘要:余世维讲座(1)    (全文共5467字)——点击此处阅读全文




    摘要:看完后,如果觉得精彩,别忘了来这里发表评论叫好,为余老先生喝彩!!    (全文共2877字)——点击此处阅读全文




    摘要:有点意思,看来可以搞一个“平学研究”了,值得学习。    (全文共5496字)——点击此处阅读全文




    摘要:非常值得学习的资本运作案例    (全文共3437字)——点击此处阅读全文




    摘要:这种OS竞争方法有点创意,照此类推,也可以在U盘、软盘上,可惜,OS太大了。不过,有借鉴意义,想想可以怎样发挥一下?    (全文共1731字)——点击此处阅读全文




    摘要:请各位管理软件业内的朋友发表意见    (全文共825字)——点击此处阅读全文




    摘要:这才叫中国精神,在强大的美国田径队伍前面,保持这样的姿态,才是好样的!    (全文共2412字)——点击此处阅读全文




    摘要:Google开始摸索Blog怎么赚钱了    (全文共907字)——点击此处阅读全文




    摘要: 全面抗衡“彩色巨人”IBM 呼唤全能选手    (全文共13071字)——点击此处阅读全文




    摘要:日新版教科书篡改侵略史     (全文共4285字)——点击此处阅读全文




    摘要:靠着与自己对中国贡献极不对称的垄断力量从中国老百姓手中掠夺黄金白银,M$是这样,Intel是这样,TOYATO,立邦。。也同样一样。我们不应该在做弱者,我们应该站起来大声说“不,这是我的地盘,我做主,我订规矩“。否则,这和侵略有啥区别,不过是换成经济上的,还是在象是羊皮的WTO下。 我们应该学着做强者,让世界听到我们的声音。欢迎大家发表意见。    (全文共1580字)——点击此处阅读全文




    摘要:我们向往自由,厌恶霸道,反对霸权。不管是国家政治上的美国,还是软件业的微软,还是披着羊皮逐渐露出犬齿的Intel,为联想加油,不仅是因为联想是中国的,而且是勇敢的!! 想起毛主席的豪言壮语:“美帝国主义都是纸老虎”的论断。     (全文共4013字)——点击此处阅读全文




    摘要:用友金蝶:成长的烦恼    (全文共22155字)——点击此处阅读全文




    摘要:很有意思的法语歌,歌词也不错,唤起你的童年梦想    (全文共1913字)——点击此处阅读全文




    摘要:《梁祝》完整版    (全文共2534字)——点击此处阅读全文




    摘要:黄金十年的国语经典情歌     (全文共14704字)——点击此处阅读全文




    摘要:《滚石》评出的最伟大的100首英文歌曲     (全文共17229字)——点击此处阅读全文




    摘要:[专辑] 五月天-五月之恋    (全文共2035字)——点击此处阅读全文




    摘要:The Mass 魔界传奇     (全文共2684字)——点击此处阅读全文




    摘要:GUNDAM SEED歌曲下载    (全文共1481字)——点击此处阅读全文




    摘要:转让“买卖街”域名:mmj.com.cn    (全文共106字)——点击此处阅读全文




    摘要:又一个首富诞生了!!    (全文共8260字)——点击此处阅读全文




    摘要:再见了!无聊的传统电脑    (全文共5196字)——点击此处阅读全文




    摘要:速达金蝶拉锯战进入中盘,“杀K计划”第二步启动    (全文共1495字)——点击此处阅读全文




    摘要:Netscape推出了自己的桌面搜尋工具:Netscape Desktop Navigator。    (全文共659字)——点击此处阅读全文




    摘要:苹果专利-“变色龙”     (全文共481字)——点击此处阅读全文




    摘要:邓小平文选摘录    (全文共245字)——点击此处阅读全文




    摘要:严重关切近期日本台湾越走越近    (全文共237字)——点击此处阅读全文



2—3个月宝宝的启智训练
  《年轻妈妈之友》

  一个月来,宝宝的一举一动一颦一笑牵动着你的丝丝心绪,他每一个新的表情、他偶尔发出的无意应答,都会令你欣喜不已:小天才!

  那么,2-3个月的小天才一般有什么表现呢?

  来,为了帮助宝宝早早成为2-3个月的天才,开始我们的启智训练游戏。训练注意:

  1.新生儿期的训练项目仍可进行。

  2.必须在宝宝愉快的时候进行训练。

  3.选择宝宝能接受的项目进行训练,如果他有抗拒的表达,就立即停止。

  4.每次训练只进行一项内容,一般每次训练1分钟左右。同时注意观察宝宝,他一有疲倦的表示就停止。

  5.如果是裸体、半裸体的训练,要注意室内温度。

  6.让宝宝在宽大的软垫上训练,包括学习爬行这样的游戏也不要直接在地板上进行。

  注意不能让他超越垫子,不能让他撞击到硬质的桌脚、椅子脚、柜子角等东西,不要让他触碰电插座。

  7.爸爸也应当参与训练,让宝宝感受不同的训练气质与方法,促进宝宝的智力发展。

  训练项目:

  1.垫上操

  准备:宝宝仰卧,双手垂直在身体两侧。

  一:拉着宝宝的双手,轻轻平举在他身体的两侧。

  二:把平举继续为往上举起,高过宝宝的头部。

  三:回到双手平举在身体两侧。

  四:回到双手垂直在身旁两侧。

  注意动作要轻柔,这个训练可提升运动智能,并形成一种连续性思维。

  2.水中游

  把大浴缸暂时变为宝宝的小游泳池,一手托住宝宝的脖子和肩膀,一手托住他的屁股,慢慢放入水中,托着他“仰泳”,任他踢打嬉戏,只要你牢牢把握住他的身体,不让他呛水、碰到浴缸四壁即可。宝宝对水中活动并不陌生,这个训练刺激平衡智能,并有助形成愉悦的心性。

  宝宝对水中活动并不陌生,这个训练刺激平衡智能,并有助形成愉悦的心性。

  3.新视野

  A.宝宝俯卧,妈妈一手从侧面插进宝宝胸前,帮助他撑起上身,另一手可以拿一个鲜艳的玩具逗引宝宝抬头。

  学会抬头,是扩大视野的开始。这个训练还可以锻炼腹肌及背肌,为宝宝的爬行打下基础,而自由爬行,是小小宝宝接受更多信息的必要条件。

  B.宝宝仰卧,抓住宝宝胳膊,轻轻地慢慢地把他拉起来,成坐着的姿势,随即慢慢地把他放下。

  与躺着相比,坐起来又是一种新视野的体验。这个训练还可以锻炼腹部肌肉。

  C.爸爸把宝宝举高、放下,宝宝会快乐得咯咯笑。

  让宝宝从不同的角度看四周,进一步开阔视野。

  4.找朋友

  把几个不同表情的绒布娃娃头缝合在一起,中间缝一根吊带,把娃娃头吊在宝宝手能够到的地方,让宝宝拍打,观察他喜欢什么表情的脸。此时宝宝的手眼协调能力极弱,拍打完全是无意触碰,你可以送上手去帮助他触碰。

  宝宝喜欢看脸,不同娃娃的表情,可以刺激宝宝的视觉。手的运动也会刺激宝宝把动作和效果联系起来。

  5听歌谣

  把宝宝抱坐在你膝盖上,托住宝宝的背部边有节奏地前后摇晃,边念歌谣,比如:摇啊摇,摇啊摇,摇到外婆桥,外婆叫我好宝宝,给我吃甜糕。

  让宝宝在动作配合中听简单的歌谣,刺激语言接受系统。





  6咿咿呀呀

  微笑地看着宝宝,模仿他的话,要等他说完“一句话”后再模仿,声调要或高或低。交谈越多,宝宝与你咿呀说话的机会也越多。

  用一切机会倾听宝宝说话,与他对话,刺激思维反应,刺激语言发展。

  7.声声入耳

  A.给宝宝套上漂亮柔软的手套,穿上漂亮的袜子,手和脚戴上小铃铛。

  B.给宝宝能捏响的玩具。

  当宝宝想看手套、袜子的时候,就能学习控制自己手的动作,还能把动作和声音联系起来。

  当宝宝无意中抓握玩具发出声响的时候,会把动作和声音联系起来,刺激大脑反应。

  8.妈妈回来了

  9.妈妈用手帕盖住自己的脸,然后掀开,冲宝宝笑。

  10.几次反复后,宝宝会形成期待的心理,刺激他的思考能力。

  妈妈知识准备

  身体发育:俯卧时能够抬头,胳膊和腿会有节奏地抬起、放下。

  视觉:眼睛会随着眼前的物体转动,会注视自己手的活动。

  听觉:听到外界的声音会停止动作。

  语言预备:会咯咯笑,会发出“啊啊”等单音节的声音。

  交际呼应:逗引他会笑。

  文/周玉洁图/杨芳




  早教丛书《开发婴幼儿的智力和才能》

  在这快速的成长期里对婴儿讲内容丰富的话

  所谓教育,并不是毫无基础地进行堆积和训练。把孩子原有的素质和才能激发出来,才是教育本来的目的。婴儿在生下来时就具备着所有的才能,只要施行教育的时间越接近于出生零点,这些素质就越能够以天才的形式展现出来。

  如果这一思想得以成立的话,我们将发现,培养出聪明孩子绝不是一件困难的事情。实施零岁教育最关键的一点,就是要在婴儿刚一出生时,便开始对他讲丰富的话。

  婴儿来到人世时,对这个世界一无所知。所以他从生下来的那一瞬间开始,就必须学习人世间的一切东西。在这其中,尽可能早地对他讲话是第一重要的。这是因为婴儿是通过语言来认识世界、从而达到精神上的成长的。如果尽早地对他讲话,婴儿的身心就会得到迅速的发展,获得远远超过普通婴儿的优秀资质。

  然而人们往往并未意识到孩子在婴儿时期精神方面的成长步伐会有如此之快,也不知道如果等到这一步伐减慢之后再给予孩子教育的话,他已经不会有显著的进步了。

  这一点我们从IQ(智商)上也可以得到证实:几乎每一个从零岁至一岁开始接受教育的婴儿,到三岁时的IQ都可高达180~200,不,或许还要更高,IQ在250~300的孩子也并不少见。即使对孩子的教育从三岁开始,到六岁时的IQ也可以达到160~180。但是如果依照过去人们的想法:六岁之前让孩子玩玩就行了,幼儿园嘛,最要紧的还是保健呀、情操教育呀、培养良好习惯这类事情,而不在这个时候给予孩子智力的教育,其结果是所有孩子的智商在六岁时的平均指数只接近于100,并且这个数值几乎就这样被固定了下来。从这里我们可以看到听其自然的结果。

  零岁至一岁的四个阶段

  下面,让我们来看一看应该怎样与婴儿相处。零岁至一岁这一年间是变化相当大的一年,因此不能一概而论。

  我们把它分成四个阶段:

  第一阶段诞生至三个月

  这是手脚和身体不能自由动作和移动的时期。

  此时的婴儿具有最强的接受能力。我们应设法对婴儿的视觉、听觉、触觉、味觉、嗅觉这五种感觉施以作用,使其获得发展。

  视觉 刚刚出生的婴儿,在他的睡床周围必须要有世界名画。让色彩鲜艳的环境围绕着婴儿是我们不应忘记的,比如在书架上放上色调明亮的玩具、花盆等装饰物。一个月之后,每天给婴儿看三分钟的黑白格子图案,持续一周时间。刚一开始婴儿只能维持五秒钟的注意力,到后来能够延长到60~80秒。注意力的增长与掌握大量的知识是分不开的,可以说注意力是学习能力的基础。婴儿最喜爱的并不是粉红色或蓝色,而是对比度鲜明的黑白两色。与属于中间色的七色活动雕刻板相比,婴儿更喜欢黑白的活动雕刻板。在九个月之前,婴儿识别颜色的视觉神经还没有生长完全,所以还不能够区别红、黄、蓝这些基本色调。六个月时,如果婴儿对条纹或格子花样产生了厌倦,就可以把活动雕刻板的格子幅度变得小一些(6厘米×6厘米→2厘米×2厘米)。当婴儿对以前喜欢的图样不加理睬时,可以暂时不给他看。这个时候最好在婴儿的小床周围贴上汉字表。也可以把书写着大红字的拼音字母表贴在墙上。从出生时就开始与文字亲近的婴儿,会变得一见到文字就非常欢喜。把孩子抱到汉字表前面,每天只需用两三秒时间把一个字反复地念给他听。用不了多久,只要你一把他抱过去,他就会兴奋得手舞足蹈。

  听觉 天天都给婴儿听优美的音乐吧,每天两次,每次十五分钟。曲调要温柔,音量也不要太大。必须注意的是,如果长时间地让婴儿听录音带或CD,婴儿就会变得只适应机械音,而对母亲的声音没有反应。听音乐时可以让婴儿站在你的膝盖上,让他和着音乐的节奏像跳舞一样前后活动。你也可以和着芭蕾的音乐,托着婴儿一上一下,让他的小脚一会儿离开你的膝盖,一会儿又落到你的膝盖上。更重要的是,从婴儿诞生开始就对他多多讲话。喂奶的时候、换尿布的时候、洗澡的时候,都可以用柔和的语调对他讲话。换尿布时,用手轻轻地抓住婴儿的小手,反复地对他说:“这是手哟,手、手。”也可以一边换尿布,一边给孩子看洋娃娃,告诉他:“这是洋娃娃,洋娃娃。”英国的汤普森夫人在自己的孩子刚一出生时就开始了语言教育法(卡尔·比特教育法)。两星期后,她带着婴儿到附近的公园散步。她让婴儿的小手摸着花说:“这是花,花。”如此这般地开始教孩子语言。婴儿八个月的时候,竟可以用标准的英语说出“花”这个单词了。随后,他的话就像泉水一般地涌出来。这个孩子,在幼儿园和小学里成绩超群,十岁时获得教育长的准许,进入与自己能力相适应的中学学习,并且在一个月之后的测验中取得了第一名的成绩。十五岁时,他考取了剑桥大学医学院,但因为年纪太小而没有被录取。然而他却受到了伦敦市内六所大学的邀请,最后进入了伦敦大学医学院。现在,十八岁的他正在以比其他同学更优异的成绩学习着。让我们就像汤普森夫人那样带着婴儿外出吧,让他摸着花,教给他“花、花”。对他念优美的诗,用母亲温柔的音调给他唱歌。三岁之前不要让他看电视。

  触觉 婴儿从生下来那一刻起,就开始了他的学习。他把听到的、看到的东西牢牢地放入自己的深层意识中并记忆下来。与此同时,大脑的回路也开始建立。婴儿在吃母乳时,便是他对触觉的第一次学习。让我们来仔细观察一下婴儿吃奶的样子吧。我们会发现,婴儿寻找奶头、用嘴含住以及吮吸乳汁的动作进步得非常快。刚开始时,由于不熟练,不是鼻子碰到奶头,就是下巴碰到奶头,所以还得依靠母亲的帮助,但是很快他就学会了自我调整。请故意用奶头去碰婴儿的上唇、下唇、下巴、左脸颊或右脸颊,你会看到,婴儿迅速地进行调整,掌握了上下、左右的空间感。除了奶头,还可以试着用手、纱布、吸管等东西去碰婴儿的上下唇等,他会很快习惯这些不同的感觉。*?味觉分别用纱布沾点温水、冷水、糖水、辣水、酸水等让婴儿吸一吸,这对他的味觉是个很好的刺激。

  握力 试着让婴儿用手握住母亲的手指。从一出生就接受握力训练的婴儿,会更快地成长发育。任何一个初生的婴儿,都具有用手握住东西来支撑自己身体的本能,但是这个能力会很快消失。为了不让这个握力消失,我们从婴儿出生时就要对他进行抓握物体的训练。美国的斯特娜夫人,在孩子出生两周后,就让他双手抓住棒子,做单杠似的训练,因此孩子长得非常健康,并且异常出色,一个半月就会坐起来了,看上去就像四个月的孩子。当然,训练时要相当注意,一定不能让婴儿掉下来摔伤头和身体。*?嗅觉把好闻的气味,比如鲜花等物的香味给婴儿闻,他会把头转向发出香味的地方。让婴儿闻各种各样的气味,其嗅觉会变得敏锐、发达。





    摘要:看看哪个银行的缩写最牛    (全文共573字)——点击此处阅读全文




    摘要:夏季奥运会会徽、主题曲全集     (全文共15929字)——点击此处阅读全文




    摘要:设计类网站收藏    (全文共23338字)——点击此处阅读全文




    摘要:把小商业网站做成大企业形象    (全文共2138字)——点击此处阅读全文




    摘要:关于 google     (全文共9759字)——点击此处阅读全文




    摘要:“社交网络”    (全文共4991字)——点击此处阅读全文




    摘要:Demo寻找明日之星:RSS、博客技术吸引更多关注    (全文共7321字)——点击此处阅读全文




    摘要:《金融时报》:Google的成功妙方    (全文共4023字)——点击此处阅读全文




    摘要:18世纪的贝叶斯定理成为Google计算的新力量    (全文共6514字)——点击此处阅读全文




    摘要:手机搜索服务悄然兴起 将挑战传统搜索引擎     (全文共865字)——点击此处阅读全文




    摘要:2003年“最具商业价值的中国网站100强”    (全文共97593字)——点击此处阅读全文




    摘要:2004年10大热点通讯技术     (全文共6747字)——点击此处阅读全文




    摘要:智能CRM系统构建及相关核心问题    (全文共6311字)——点击此处阅读全文




    摘要:IBM电子商务运维服务    (全文共3386字)——点击此处阅读全文




    摘要:数字家电的大发展    (全文共4995字)——点击此处阅读全文




    摘要:说说唐朝的皇帝    (全文共13038字)——点击此处阅读全文




    摘要:任正非:如何走出管理混沌     (全文共4102字)——点击此处阅读全文




    摘要: MSN Sniffer:嗅探MSN Messenger聊天信息    (全文共1138字)——点击此处阅读全文




    摘要:笑掉大牙    (全文共5037字)——点击此处阅读全文




    摘要:无线电传播    (全文共10861字)——点击此处阅读全文




    摘要:winXP SP2 正式版 简体&繁體官方发布    (全文共2430字)——点击此处阅读全文




    摘要:從企業角度看社群軟體 - wiki 與 blog    (全文共2436字)——点击此处阅读全文




    摘要:以開放源碼的方式來管理你的專案    (全文共1773字)——点击此处阅读全文



Wiki的歷史和技術特性


作者:徐子涵

Wiki 的歷史

1945年美國麻省理工學院副校長布希(Vannevar Bush)在「As We May Think」一文中首度揭示了hypertext超文件的概念。在過了將近十八年之後,Ted Nelson在一九六三年將Vannevar Bush所提出的超文件構想,命名為「Project Xanadu」。這個計劃後來啟發了發明WWW的Tim Bernes-Lee,間接後來的wiki打下了平台基礎。WikiWikiWeb的發明人在他和Bo Leuf所著的「The Wiki Way」一書中也提到他受到這些前輩們影響的故事。

第一個wiki(WikiWikiWeb)於1995年誕生,被設計用來取代原本的Portland Pattern Repository(一個線上的資料庫)。沒多久後,這個最原始的wiki站開始吸引不少的使用者,最主要的原因是1995年剛好是網際網路真正發跡,開始走入民間的時代。目前這個Portland Pattern Repository仍在使用中,讀者可以經由www.c2.com進入。

圖 WikiWikiWeb

Ward Cunninham在後來表示,他當初選擇wiki-wiki作為命名的原因在於好記,而且快速的意象相當符合他所設計的系統。早在80年代,他就已經設計了WikiWikiHyperCard。這是一套類似目前wiki超文件的頁面系統,只不過是用傳統的卡紙來代替。在WikiWikiWeb上線不久後,Patrick Mueller為他自己寫了第一個wiki複件(clone),使用的語言是Rexx。緊接著Ward馬上發布「Wiki Wiki Goes Public」.的訊息,將原始碼釋出。因此所有的人都可以根據自己的需要去修改原始的wiki。目前中文的使用者若要選擇wiki複件,有幾個是比較適合,分別是OddMuse, OpenWiki, Twiki, WikkiTikkiTavi, ChiqChaqWiki, MoinMoin, PmWiki 和Snipsnap。

圖 snipsnap

Wiki的技術特性

Wiki技術的特性,我們可以分為技術的本身和使用者運用這個技術時會遭遇到什麼樣的情境這兩方面來討論,首先是技術方面。在技術面有許多和其他社群軟體不太一樣的地方,也有相同的地方。

簡單的編寫和排版語法是wiki最主要的競爭力來源之一。例如以OddMuse這個wiki複件來看,一個空行表示文章的分段,單純的URLs會變成超連結。若URLs指得是單純的圖形,那會直接被顯現出來。使用井字號(#)表示數字清單,若是將星字號(*)加在每一個條目之前,則是代表階層式的清單和內縮段落。至於定義的條列,是以分號(;)開始,用冒號(:)來分隔定義項目和定義內容。表格列是以兩個垂線(||)作為開始和結束,也用兩個垂線來分隔各個欄位。空的欄位會和下一個欄位合併。詳細的語法說明,可以在OddMuse網站上找到。讀者可以藉由這一部份的介紹了解的是,我們不需要了解html語法就可以好好的利用wiki的強大功能。

圖 formatting rules

有些wiki提供了帳號權限控管的功能,這在wiki界算是相當少數,但對於如果想要把wiki部署在公司內部的企業來說,這就有其必要了。在這些支援帳號控管功能的wiki複件中,使用者可以擁有自己的帳號,而管理者也可以針對這些帳號,個別分派可以管理、編輯、修訂的頁面。這可以讓有重要資訊的頁面,不會因為編輯人員的不小心,而導致有錯誤的更動。那麼如果是完全沒權限控制的wiki呢?其實每個wiki頁面都提供了編寫歷史檔,所以若是有人不小心刪除原來的頁面,我們都可以馬上將頁面上的資訊回覆到以前的版本。就是因為有這個特性,所以許多wiki複件沒有考慮支援權限控管,因為自由和開放社群的設計哲學,才是讓目前許多wiki可以活躍的原因之一。這個開放的編輯系統和大多數人認為一定不可行的直覺有所牴觸,但是根據多年來的運用,這種開放的編輯系統,反而更能孕育良好社群倫理和降低「雜訊」比。

另外,wiki本身有一些關鍵技術也讓他特出於其他的社群軟體之外,「WikiName」就是一個讓新手比較容易不知其所以然的功能。在傳統網頁的撰寫中,我們需要利用特定語法來賦予一個「語詞」超連結的功能。但是在wiki之中,我們可以利用合併兩個以上的語詞並且將其第一個字母大寫的方式,來創造一個新連結。例如剛才所提到的WikiName,或是WilliamJeffersonClinton等,都會在編輯者儲存頁面後,自動轉成超連結。我們若點選這些超連結後會進入到一個專門給這個詞彙的新網頁,然後馬上可以在網頁中進行編輯。 這個功能的最大好處是可以省去翻查其他文件的時間,並且直接在相關的語彙、詞句和文章間快速建立連結。也因為wiki的這個特性,超文件所能發揮的潛力,得以實現。

圖 chineselinks

眼尖的讀者可能會問到,那麼沒有大小寫分別的中文或是日文呢?目前有些wiki複件可以使用括號來處理,例如「((戲劇))」- 雙括號間包含中文的語法,可以讓這個詞彙變成超連結。少數的wiki則是利用「戲劇_理論」加底線的方式來解決這一個問題。如果要使用英文的Free Links功能,那麼可以運用像這樣的語法[[Free Links]]來達成。

RecentChanges(最近更新)的功能在wiki中是最重要的功能之一,我們可以在幾乎所有的wiki複件找到這一份清單。清單的連結通常會置放於主要的瀏覽列中,以確保閱讀wiki頁面的人不管進到了那一個頁面,都可以馬上的回到這一份清單來。許多資深的使用者就利用來跟上wiki中資訊的更新速度。這個功能我們同樣的可以在類似phpbb式的社群軟體看到。最新的文章能是以特殊顏色的標記來表示。RecentChange的清單中我們可以看到編輯者在編輯某個頁面時所留下來的摘要資訊,這份摘要資訊主要的功能在於提供使用者一個快速瀏覽並且了解某一個wiki頁面經過什麼幅度的修改,或是哪些部分已經做了修改。有些wiki更提供了RSS文件,讓使用者可以直接由桌上的RSS彙整軟體來「訂閱」這個RecentChanges頁面,不必還要到網站上瀏覽每一則的資訊。

圖 Recent Changes

InterWiki是串聯不同wiki站台間的語法和架構。比如說有一個站叫做OddMuse,那我們可利用像是OddMuse:RecentChanges的語法,輕鬆建立連結到OddMuse站裡面RecentChanges頁面。要建立到其他wiki的連結,只要輸入對方wiki名稱,後接冒號,再來是那個wiki上某個頁面名稱即可。這個功能讓不同的wiki之間,同樣可以利用簡單的語法來進行資訊的連結。例如不同部門的計劃可以有自己的wiki,但是指涉其他非本計劃內wiki頁面的資源時,馬上可以利用這一個語法達成。

在搜尋整個wiki方面,不同的wiki複件都提供了簡單或者是進階的全文檢索功能。在這麼多的資訊中,如果沒有搜尋的功能,我們將很難找到所需要的資訊。Wiki技術很自豪的一點就是,使用者一定可以在三個層次以內的連結點擊當中,找到所有的頁面!這一點可是其他支援社群建立或是知識管理的軟體,所不敢保證的。Backlinks(回溯連結)是現在許多wiki加入的新功能,這個回溯連結的目的在於可以記錄網路上有什麼其他的網頁連結到某一個特定的wiki頁面,提供一個和其他非wiki網站鍵接的橋樑。至於對內的部分,還有一種功能叫做LikePages,使用者可以利用這個功能接續閱讀同主題的wiki頁面,有這個功能的wiki複件又通常會支援Category的分類機制。這個功能可以在編輯者儲存頁面的時將wiki頁面歸類到某些預設好的Category之中。後來的閱讀者,可以不經由搜尋的功能,直接瀏覽某個分類底下的文章,或是繼續在這個分類底下編輯修訂的動作。另一個可以讓一般網路使用者眼界大開的小功能,是touchgraph所釋出的wiki補丁,可以讓頁面和頁面之間的關係以視覺化來呈現。這對於wiki使用的便利上又添加了一分。

除此之外,由於其他數不清的技術細節和背後設計哲學,讓wiki成了作家的共筆工具軟體之一。Wiki設計哲學包含了:

* 開放架構:如果某個頁面的編寫有所不全,所有人都可以編輯這個頁面;

* 累進積存:每個頁面可以在短時間內引用其他頁面,以快速地累進資源;

* 有機演化:整個wiki的架構支援類似生物界有機體的繁殖和演化;

* 平易簡直:只要幾個簡單的語法就可讓人暢快的開始編輯wiki;

* 支援多功:編輯和組織的語法是一樣的,所以每一個人都可以同時是編輯者又是修訂者;

* 所見即所需:從呈現出來的頁面就可以馬上了解背後編輯的語法;

* 名稱統一:統一的WikiName讓其他的頁面不需要在名詞間多加註情境的解釋;

* 精確命名:頁面的命名儘量以精確為主,以避免一般名詞超連結間不必要的衝突;

* 能夠容錯:每個頁面都會有編輯的歷史,因此有容錯的能力;

* 可供觀察:所有的訪客都可以閱讀任何的頁面;

* 鼓勵融合:重複或者是過於接近的頁面可以馬上藉由編輯而融合,減少資訊的浪費。

這些是最初wiki在設計時所秉持理念。當然在達成這些理念的技術細節上,每個wiki複件都會有些不一樣,但是基本的精神--快、簡單、易於編輯和開放的架構,卻是大多數wiki所保持特色和特點。在多媒體素材充斥於網路的今天,若沒有了wiki這項技術的提醒,人們還可能真的繼續迷失在資訊的洪流當中而不自知了。由於wiki是非常好的共筆系統和技術,所以我們在wiki的應用部分,會繼續聊到目前許多個人、團體,甚至是企業是如何來使用wiki。




在软件社区中,Ward Cunningham享有思想源泉的美誉。他发明了CRC Cards,这是改进对象发现的一种技术。为了促进软件模式的发现和编档,他发明了世界上第一个wiki,一种基于web的协同编写工具。最近,许多极限编程(Extreme Programming)技术背后的主要灵感也被归功于Cunningham。

在2003年9月23日于丹麦Aarhus召开的JDOO大会上,Bill Venners遇到了Ward Cunningham。在这次访谈中,Cunningham深刻剖析了使用wiki协同探索和极限编程的几个方面。

在第I部分“使用Wiki探索”中,Cunningham讨论了使用wiki协同探索以及wiki作者和读者之间的权衡。

在第II部分,Cunningham讨论了他如何把wiki设计成这样一种模型:集体代码所有权、以所有权而自豪的集体激励以及通过消除犯错的代价来解决纷争。

在第III部分中,Cunningham讨论了变更成本曲线的扁平化、预测未来的问题以及像艺术家手中的泥巴那样塑造程序。

 

第I部分使用Wiki进行探索

为什么需要Wiki?

Bill Venners:您发明wiki的最初目的是什么?

Ward Cunningham:我创建wiki要完成几件事。第一个wiki的初衷是要建立一种环境,我们能够交流彼此的经验,从而发现编程的模式语言。我以前曾经使用过HyperCard组,它基本上也是为了类似的目标。我知道人们喜欢使用那种HyperCard组来阅读和创作,但它是单用户的。当开始PLoP(编程模式语言)系列讨论会的时候,我们认识到我们真正想要做的是开始编写一部新的作品,我认为我需要使用HyperCard组,并希望能找到一种应用于web的等价物。

对于wiki,我还有更多通用的目标。首先,人们常说“人人喜欢讲话”,我认为这里面有一种令人信服的人类本性。在创建wiki时,我希望激发每个人喜欢讲故事的天性。其次,也许是最重要的一点,我希望不经常创作的人们会发现创作非常轻松,这样就有机会发现创作的结构和方法。

Bill Venners:wiki如何使创作变得轻松?

Ward Cunningham:不熟悉写作的某个人可能有一个想法,这个想法值得写成一段。他们本来可以为杂志写一篇评论,但是一段文字太短了。为了给杂志撰写文章,他们不得不介绍一下背景,讲述某些重要的东西,而且要以多数人都能理解的方式讲述,然后结束文章。太复杂了,多数人都不愿意花费那么多的精力。

但是如果您正在阅读别人的作品,并想到“是的,但是还有一点”可以放在一段中这样说,“啊,不错,但实际上还有……”在wiki上有很多这种类似于“对,但是……”的对比想法。讨论组也作了同样的事情,但是在讨论组中这些对比都丢失了。

Bill Venners:为何在讨论组中丢失了?

Ward Cunningham:因为没有上下文,无法持续下去。讨论组往往反复围绕着同一个话题,但是人们忘记了以前说过什么。我认为,常见问题解答(FAQ)的发明就是针对这个问题的。很多时候,读一读FAQ要比参加讨论组更有意义。在一开始做wiki的时候,有一个系统叫FAQ-O-Matic,它和wiki的想法一样,只不过其真正的目的是制作FAQ。我看到它的时候就想“哦,英雄所见略同”。不过我接下来又想,“不,我更喜欢面向文档的形式而不是问答形式。”在我们的作品中想要创建的模式是某种类似FAQ的东西,但应该不止如此。现在,wiki上可能有10,000到15,000种模式,25,000页文档。

Bill Venners:您认为wiki适合做什么?wiki的高明之处在哪里?

Ward Cunningham:如果您试图回答一个不容易阐述的问题,事先不了解某种应该知道的自然结构,wiki会非常有用。对于像“项目进展如何”之类的问题,我们可以设计一个数据库。但是数据库中要放哪些字段还要归结到对项目进展问题什么是重要的。关于项目的哪方面重要这些资料是不可预见的。

Wiki页面的格式非常自由。在整个wiki中有一个超文本结构,但是在一个给定的页面上,在自然语言灵活性的许可范围之内,您可以讲任何想要述说的东西。因此,wiki是跟踪项目进展状态的一种良好方式。比方说,您可以把我的模式作品看成是一个长期进行的项目。我们不知道终点在那里,但是我们希望在进展中发现它。

此外,wiki也非常适合于想要把控制权交给系统用户的环境。在wiki中并没有多少何人何时可以做何事的逻辑,因为wiki并不真正理解您在做什么。它只是为您保留页面。关于什么是适当的用法什么是不好的用法,已经建立了大量的惯例,但这些都存在于用户的头脑中,而不是在应用程序的业务逻辑中。如果您有一个可靠的团体,不谋求通过计算机强制某种行为,wiki就可以很好地工作。比如,有人曾经问我wiki是否适用于协同环境。我认为某些公司对它们的雇员完全具备这种信赖,某些公司则没有。不信赖雇员的公司可以根据某些需要维护一个web站点而不是wiki。

把握大局

Bill Venners:读者如何把握wiki上的总体内容?

Ward Cunningham:首先要理解,因为我们使wiki更方便作者,实际上就增加了读者使用的难度。里边有某种组织方式,这种组织方式还可以改进,但它不是组织严密的。因此读者就会感到仿佛是在茫茫的一片信息片段中搜寻。偶然发现一段很好的信息,于是就想,“好极了,为什么没有人哪怕只是把那些好的片段作一个清单,我就不用再搜索其他的部分了。”换句话说,“为何没有人组织一下,让我迅速找到问题的答案?”早晚他们的想法会得到实现,“哎呀,行了!”他们花了一个月或者两个月查找所关心的东西,然后做一个页面,wiki组织成什么样子由他们自己承担。

我不是一个分类的痴迷者。如果感兴趣的事物不符合需求或者不是预期的,定义一个有用的分类方案非常困难。不过有些人认为每个页面都应该带有分类。他们带着一个分类方案,根据页面的名称,为wiki建立分类结构。这些注重分类的人负责维护它。如果某人创作了一个不能归类的页面,其他的人就会说,“哦,这应该归为wiki保留页面或者设计模式。”

Bill Venners:如何把一个页面归类为wiki保留页?

Ward Cunningham:只需对一个叫做WikiMaintenanceCategory的页面进行引用。单击该链接时,就会转到那一页,对这种分类进行解释以及为何有这一类。因此把页面归到某一类,习惯上是增加到该类别描述页的链接。这样标记了该页。如果要了解这一类是什么,可以沿着链接到类别描述页。如果要看看这一类中有什么页面,可以搜索引用该类别页的所有页面。

Bill Venners:我猜想搜索也许是研究新wiki的一种方式。从一定意义上讲,wiki类似于一种小型的internet。 一切都分散在各处。如何发现正在寻找的内容呢?我可以从搜索关键字开始。

Ward Cunningham:是的。任何名称以“Category”结尾的wiki页都是一个值得搜索的条目。可以通过Google搜索小说,但是如果有人不把作品标记为小说,就找不到它。分类系统是一组页面,解释分类的基本原理,可以读读这些页面。它们使用了名称空间的一小部分——所有这些词都以“Category”结束——并建立了这些页面涉及其他页面分类的实例。非常棒。还在发展中。如果我要做一个解决方案,可能会非常简单,甚至同样好。我最喜欢的一点是,有一个非常积极的社区在管理这些分类。有时他们把分类搞错了,但很快就会纠正过来。

Wiki中的时间要素

Bill Venners:您所说的有点让我想起“自由讨论”。您把一些人集合起来充实那些您还不完全清楚的事物。

Ward Cunningham:Wiki有点像“自由讨论”,尽管不是交互式的。您可以做10分钟的自由讨论,用30分钟分析自由讨论的成果,然后在45分钟之内完成某件事。Wiki的脚步要慢一些。您可以就某个观点写一个页面,或者就很多想法写一个页面。然后在一周之内回来看看页面上有什么进展。但是如果在15分钟之内回来,不会发生太多的变化。Wiki上的事情是以天或者周为周期的,因为人们往往每天或每周浏览一次。

Wiki中有一个有趣的时间特性。读新闻组或者邮件列表时,会有一种感觉,当前就是您在列表中的位置。我不希望wiki中有一个时间表。当在读wiki上的某些内容时,我不希望时间会影响您,不论它是一年前写的还是一天或者一分钟前写的。这意味着我们需要通过某种方式得到上下文。

如果您正在编写一个页面,那个页面必然和其他某个页面有关。因此所要做的就是,在一个段落中说明其他页面中哪一些是关于这个上下文的。人们逐渐熟悉这些页面的名称。他们遇到一个新的页面,阅读包含对上下文页面链接的段落。如果已经度过这些页,就继续读下去。如果不知道这些页,他们就会说,“哦,这一页没有什么意思。我还得读一读其他的页。”这样如果您了解上下文的话,就不必再去看了。但是如果不了解上下文,您可以去看一看。上下文不会变。

Bill Venners:听起来似乎您必须了解wiki站点。过一段时间后您就会熟悉它了。一开始可能会令人感到困惑,也没有多少提示,您进来发现到处都是这样的内容,但不一定是根据读者的需要组织的。

Ward Cunningham:对,wiki总是在不断地组织中。每花费一个小时组织,都要花费另外两个小时来增加新的材料。因此wiki的总是处于半组织化状态。

Wiki 和可读性

Bill Venners:我确实非常喜欢wiki的思想,但是我发现阅读许多wiki页非常困难。可读性的问题是我一直没有在Artima.com上增加wiki的主要原因。Artima.com也是一种基于web的协作文档,但是更加结构化。在wiki中没有专职编辑为读者组织材料。所有的页面都是协作性的。结构是协作性的。编辑是协作性的。从wiki的协作性中有什么足以抵消可读性的损失?

Ward Cunningham:作为wiki读者,您能够获得以前没有发言的那些人的观点。听我们发言的人对于怎样编写和发布计算机程序有直觉的想法。我们这一行在发表过程中对传统保留了某些尊重。比如,如果您想为一本科学杂志投稿,应该经过同行评审。同行评审的一部分是你应该熟悉所有其他作品。而其他作品可能纠缠进某些细枝末节。关于编程的作品有时并不符合程序员的实际感触。有了wiki,没有时间学习写作并在杂志上开辟专栏的实践程序员,就有机会讲出那些对于他们来说是重要的事情。Wiki提供了一个不同的视角。事实上,您可以分辨出一个人是在wiki上根据自己的经验创作,还是转述刚刚读到的东西。

Bill Venners:那么您怎么分辨呢?

Ward Cunningham:您可以根据他们谈论事情的方式来区分,比如“Mary Ann就是做不好这一部分。”这不符合科学传统。如果有人引述某位作者的话,“某某怎么说,你这家伙怎么听不明白”,有人在赞美他所读的书。另一方面,如果有人说,“您知道,在以前的三个项目中我们都尝试过,但一次也没成功,我们只能用别的办法摆平它。”有个家伙解决了这个问题,他正在跟我谈一些深刻的问题。如何解释要靠我自己。这只是他的经验。然后您可能还会看到其他几段文字,“是的,我也遇到过,我用这种方法搞定了。”那么现在就有两种方法了。突然之间,您开始与解决了软件问题的人交流了,而不是和谈论解决软件问题的人交流,这有很大的不同。

 

第II部分代码和文本集体所有权

集体的代码和文本

Bill Venners:极限编程(XP)的集体代码所有权特点让我想到了wiki,在wiki中,每个人对所有一切负责。

Ward Cunningham:这样做完全是有意的。在设计wiki前的几个月中,我们有过一次争论。我认为Kent Beck和我站在一边。坚信主流软件工程教条的那些人站在另一边。我们说“集体代码所有权很好。”他们则说“太荒谬了。没有职责划分,而没有责任就决不会有质量。让他们避免制造缺陷,就必须把缺陷和某个人挂钩。”我说,“完全不对。”

我设计wiki的决定,很大程度上受到建立一种协同过程模型的渴望所启发,我认为在大型代码库中应该有这种协作。我希望wiki能够模拟这种情况。比方说在一堆代码中有一个问题。您知道怎么解决问题,但是解决需要涉及到大量模块。重构需要大量艰苦的工作,如果要同每个最初的作者协商就更加困难。你只是希望改正问题。

困难在于代码可能是按层次结构组织的,但是解决方案可以从多方面来考虑,而不止是某种层次结构。因此当您在某一方面发现一种贯穿整个层次结构的解决办法时,您只能随着解决方案的要求,在适当的地方加入解决方案。我们经常发现自己处于这样一种境地,人们了解这个程序,但是他们不能将这些知识应用于程序。为什么?因为知识的发展和在拥有这些知识之前做出的某些组织决策相冲突。换句话说,程序抗拒知识的积累。

Bill Venners:抗拒?

Ward Cunningham:程序对某种类型的知识有抵抗力——没有预计到的知识——因为很难在一开始就设立的结构内表达这些知识。很难把不符合这种结构的任何东西加进去。

Wiki中也有一点对预料之外思想的抗拒,但这种抗拒主要在人们的实践中。Wiki中写进去的东西越多,对自身权利的要求越严格,但是如果有人要修改而且到第25页去修改,他们就可以去25页。

比如,在wiki中,发生的某个过程是页面从讨论发展成短文。许多人愿意阅读讨论。那些每天访问wiki的人希望看看昨天又说了什么,因此需要按时间组织的页面。但是对学习而言,投稿先后顺序并不是一种很好的组织原则。因此页面总是保持某种讨论之中的感觉,直到这个讨论结束。后来,有人又回来阅读了这些讨论,把您可能称之为线性模式的页面重新组织成文档模式的页面。

如果在注解之间转来转去,而且有许多类似的彼此相邻的注解,您经常会发现可以去掉一大半篇幅。因为只要位置适当,一句话可能就说明白了。在Ward的wiki上,这个过程被称为“重构(refactoring)”,就像我们在软件中那样称呼这个过程。Ward的wiki是关于软件的,其中有许多从事软件的人,因此称为重构。在其他地方可能就会称为“编辑”了。在Ward的wiki上,重构是一个持续的过程。设想如果某些地方被证明不很合适,就要再次进行重构。一切都是重构的目标。这也是我们愿意在软件中所看到的。

软件的优势是它有明确的解释。因为软件是为机器编写的,我们可以依靠精确的解释编写测试。在重构程序时,我们可以测试没有破坏或者丢失的任何东西。但wiki是为人类编写的,没有精确的解释。我可以说,“哎呀,我可以把这个句子放在这儿,并砍掉一半,因为在这个上下文中很容易理解。”但是我可能错了。对于我容易理解,但可能对其他人很难,我也没法做测试。因此在重构过程中,我们可能会丢失wiki上的某些信息。Wiki像一个信息漏桶。它每天都在丢失信息。但是有更多的信息加进来,因此净结果是正的。即使丢失了某些东西,wiki总是比昨天有更多的内容。

高质量代码的集体激励

Bill Venners:从您的描述中我了解了集体代码所有权的好处。但代价是什么?集体代码所有权的缺陷是什么?

Ward Cunningham:我相信有一些缺陷,但是现在还没有想到。

Bill Venners:所有权的自豪感又如何?人类适应集体自豪感吗?在您自己创建什么时,总是希望把它做好。

Ward Cunningham:我认为集体所有权实际上更好一些。是的,我对自己所做的事情感到自豪。对于我而言,自豪感是一种激励。通过集体所有权,我们基本上建立了一种小型的社区,训练他们自我肯定所做的工作。但如果归我所有,人们就会说,“那是Ward的模块,我不想看Ward的模块。”如果必须调用Ward的模块,他们可能会喜欢该模块的API。我的模块缺陷率很低也许会给他们留下印象。不过他们可能会说,“他的模块很简单。他有一个容易编写的模块,这就是为何他的缺陷率这么低。”他们不会知道真正的原因。

当人们使用我提供的材料时,他们会感觉到是否容易使用。所谓使用材料,我是指拿来代码调整,以便做更多一点工作或者稍微改变其功能——这些代码应该做的任何事情。当人们使用代码时,他们会看到我努力完成的一些事情,否则的话他们永远也不会注意到。不需要迫使他们说“Ward你很了不起”,但有时候他们会说,“Ward你很了不起。”这就满足了我的自负感。所有权的自豪感?的确如此。

现在,不需要在每一行上写上我的名字。事实上,这证明如果它确实很好,可能是因为他们做得好,而不是我。我可能只是做了一个计划,然后他们完成了而且完成得很好。我可能会受到不应得到的荣誉,不过他们也可能把赞誉送给别人。一个想法来自谁,荣誉应归谁,这种观点是弹性的。但我认为人们在知道谁参与其中的时候,可以很好地解决这种弹性,承认每个人的贡献。通过集体所有权,我们建立了一种社会环境,通过源代码语句中迸发的智慧可以了解一个人。

Bill Venners:集体所有代码的这种特点为何不能出现在wiki页面上,wiki页面上的内容有时候显得有点乱?

Ward Cunningham:我肯定也会这样。

Bill Venners:您刚才谈到某一行代码是谁编写的并不总是很明显。对于wiki页面也是如此。谁写了某一行文本也并不总是很明显的。有时候一个人在wiki页面上写了一些东西,“我有这样的经验”,而作为读者我并不知道这个“我”到底是谁。集体代码所有权和集体文本所有权相比有什么不同,您刚才只谈到了代码而没有涉及文本?

Ward Cunningham:我认为不可预料的代码是很常见的。代码可能能够工作,但如何工作本质上是秘密的,不可能阅读。事实上,这也可能是一种常见情况。因此混乱可能不够确切,应该是不可读。我有与他人长期结对编程的经验,在读到他们的代码时,甚至认为是自己的代码。但在wiki上还没有出现这种情况,我读到某人的文字而认为是自己写的。这可能是因为代码具有更高的组织性,但我认为更可能是因为代码交流的范围更狭窄。代码交流的范围仅限于某种过程的计算机化,而谈话的最佳方式是相当广泛的。这样就会导致和英语相比,代码会更快地具有稳定的组织性。

解决纷争

Bill Venners:在“Extreme Programming Explained”一书中, Kent Beck写道,“集体所有权增强了在项目中对个人能力的认知。您不会永远钉住别人的蠢事不放。您在途中发现了某些东西,然后把它排除掉。”对于什么是蠢事如果不同人的看法互相矛盾时该怎么办?所谓蠢事不是一种主观的评价吗?

Ward Cunningham:啊,我决不会这样说。当我认识到不需要赢得每一次争论的时候,这是我编程生涯中的一个转折点。我正在和别人讨论代码,我说“我认为最好的做法是A”,他们则说“我认为最好用B”。我说“不,应该是A”,他们则坚持说“我们想用B”。当我能够这样回答的时候,对我而言这是一个转折点:“好吧,用B办法。如果我错了这样就不会损害我们。如果我对了,而您用B办法也不会造成多少损害,因为我们可以改正错误。让我们看看这样做是否错了。”

我们不要把自己看成非常幸运的预言者,要求自己预测未来。最好是建立一种环境,这样您就能够试一试B并看看发生什么。现在证明争吵通常是无益的。无论谁编程,都可以自由选择编程的方式,这样就足够了。当然有时候也可能会证明争论是有用的。我们正在做别的事情,看了看说,“您知道,用在那里并不合适,因为B确实不符合。”而这个问题可能是我在宣传A方法时正好考虑到的,也可能不是。它可能是开发人员在方法B的上下文中硬塞进去的。但有时候您了解这些缺陷或者难以改进的地方。于是开发人员说,“你知道,这些代码令我感觉不舒服。”我说“好吧,我可以解决这个问题”。他们问道“您行吗?”我说,“当然,我可以解决这个问题。您做了B,我就使用B。”然后我就可以开始处理它,只要可能就尽量使用B。但是因为承担了职责,我就有机会使它实现需要的功能。

Bill Venners:您是说再回到A。

Ward Cunningham:如果需要的话。

Bill Venners:也可能是到C。

Ward Cunningham:通常会变成C。对于我们双方这都是一种学习的经历。如果没有这种经历,我们就都没有学到什么。Ward赢了,其他人输了。或者相反。这和一场战争差不多。为什么不说,“好吧,让我们编码看看怎么样。如果不行的话我们再改变。”

我无法告诉你我花费了多少时间担心无关紧要的决策。如果能够做一项决策,然后看看结果如何,当然会大大减少这种担忧,但是这意味着您必须建立一种环境,当确实出问题时可以修正。如果某些事情确实出了问题,不会浪费您和您的客户过多的成本。这不是一种可笑的花费。如果您处于不能承受错误的情况下,就很难做正确的事情。因此如果尝试做正确的事情,正确的事情可以抵消犯错误所造成的代价,要远比猜测什么是正确的好。

比如,在一个项目中我们通过经常升级抵消了错误成本。我们是通过建立一个相当精细的数据库模式演化机制实现的。。我们曾经每周发布一次,每周都修改模式。我们可以为不同的客户根据不同的要求对模式作不同的修改,把这一切结合起来最终得到正确的结果。因为我们每周都在做,大约六周或八周以后,我们就确信我们可以完成它了。我们从没有担心过。多数人都说,“无论做什么,千万不要做模式演化除非你已经做了。”但在项目结束的时候,他们说,“天哪,我们真的做到了。”因此在从来没有做过之前,他们说,“只要我们去做,就让我们做完它吧。”他们做了一个巨型项目,以前从未有这样的经验。你猜怎么样?他们错了。相反,我们每周都在做。每周做一点。我们确实从中受益了。我们永远不会害怕它。它也从来没有出现问题。

因此我们不是通过说“我们要做的工作性质就是这样”,从而通过抹去问题来解决问题。要是这么简单的话才是真的奇怪了。实际上更多的是提问的方法,“您希望擅长什么?”,如果您希望擅长它,就找出一种方法来每天应用它。如果每天都要应用,那么就只能熟练掌握了。因此,选择您希望擅长什么。您应该擅长您所害怕的东西,这样您就不会再害怕它了。

 

第III部分塑造程序

变更的成本

Bill Venners:在“Extreme Programming Explained”一书中,Kent Beck写道,“软件工程中一个普遍的假设是程序修改的成本随着时间呈指数级增长。”并建议说,“通过技术和编程实践的结合,有可能得到一条方向相反的曲线。”怎么能够实现变更成本曲线的扁平化呢?

Ward Cunningham:传统上来说,变更成本曲线告诉我们,早发现变更的需要与晚发现这种需要相比,进行变更所花费的代价越小。我批判了这种曲线,因为根据这种理论,我们差不多可以故意犯错,然后在实践中改正错误,这样有助于减少以后变更的成本。

我们认为,任何变更的决定因素不是何时进行变更,而是需要做多少思考。如果我们每周做一次变更,而理解我们的真正需要花费了两天,那么做这种变更就需要两天。如果我们每21周变更一次,理解我们的真正需要也花费两天时间,那么这个变更也用了两天。

在每周一次的变更中,我们可能要写20条语句。在21周变更一次时,我们可能需要写20条语句并修改4条语句。但是如果您习惯于变更,修改4条语句也花不了多少时间。只需要找到那些语句并修改它,可能只需要1分钟。

因此理解变更的需要是决定性因素。编程实现变更并不重要。只要我们理解了变更,我们就可以编程实现,或早或迟。修改代码的实际成本并不在编程中占有主导地位。主要的成本是理解所花费的时间,这就给出了一条趋向平缓的变更成本曲线。

许多人害怕变更,是因为尽管在编写的时候还理解代码,但这种理解很快就消失了。他们对你说,“我们为这些语句费尽了心血,无论如何不要改变这些语句!”他们并不想回到原来的代码,因为重新理解太费劲了。因此使变更成本曲线扁平的另一种方法,即以后变更的成本不会比现在更大,就是确定人们必须能够看到他们将要改变什么并理解它。因此,当你在编写代码时,你就会更多地为将要阅读代码的人编写,而不是为运行它的机器编写。

同样,你也不愿意编写大量的注释,告诉别人如何进行他们所需要的修改,因为您并不知道他们要进行何种修改。最好抱有这样一种观点,您不能帮助将来的程序员进行修改。您所能做到的就是使他们容易理解您努力去做的事。如果您非常小心,避免做太多的事情,这样最有助于他们理解您的努力。您试图完成的功能越多,将来的程序员要理解您的代码就越困难。

比方说,如果您明显地忽略了一种情形,以后的程序员需要解决它,他们打开代码发现您显然是忽略了这种情形。这意味着他们可以自由实现需要的任何功能。但是如果您试图应付这种情形,他们来了首先要确定哪里不工作。他们将看到您试图解决这种情况,因此他们首先要尝试理解您在做什么。一旦理解了您要做什么,他们就可以指出如何修改以实现需要的功能。他们更愿意接手的时候发现您甚至没有考虑到这一点。也许您想到了,但完全没有对此编程。

对未来的预测

Bill Venners:每个人都同意预测未来是很困难的,但预测总是这么糟吗?

Ward Cunningham:在科学中预言未来很简单。科学建立在对物理系统行为研究的基础上,被证明具有惊人的可预言性——可能天气除外。我们已经能够向太空发射火箭并使它沿轨道运行,这是预测的一个范例。但是当开始谈及对未来的期望时,我们可能有某些直觉,这些直觉也许是对的,但不会总是对的。我们必须考虑到不正确的情况。

当一个新的需求出现时,我们看了看说,“好的,这不难。这个程序就是为它而作的。”我们在程序中加入一些代码,然后就成了——我喜欢这样。我讨厌这种情况,新需求的出现不能很好地满足,仿佛程序的设计就是为了和需求作对。这种情况下,我们有大量的工作要做。但是这项工作的性质要求首先修改程序使它更容易适应新的需求,然后把新的需求包含进来就很容易了。换句话说,不是为新的需求在并不适合这种需求的结构上打补丁,而是全力以赴做艰难的任务修改结构,使它能够很容易实现这种需求。打补丁的办法意味着,后来者不但要理解并非为这种需求设计的系统,还要理解试图弥补但不改变系统的那些补丁。最好是修改系统以便很容易适应新的特性。

有人也许会说,“为什么不向前看一看,了解我们必须做到的所有工作呢?为什么不从一开始就把系统设计成使所有工作更方便呢?”如果您能够实现这样一个系统,那真是太好了。正是这样,人们一次又一次地试图设计系统使明天的工作更容易。但是当明天到来时,却发现他们并没有很好地理解明天的工作,实际上他们使明天的工作更难了。


意外的体系结构

Bill Venners:为了批驳变更成本曲线,您发现了一种方法可以在项目的整个生命期中进行变更。这就使得对将来的计划不那么重要了,因为可以在以后真正需要展开的时候进行变更。整个体系结构仅仅是在每次只关注一小步的过程中逐渐浮现出来的吗?

Ward Cunningham:我喜欢塑造程序这种说法,就象艺术家塑造一团泥巴一样。艺术家想做一个雕塑,但是在开始雕塑之前,她只是把泥巴揉来揉去。她开始逐渐塑造成形,并看到泥巴要成为什么样子。揉捏得越多,泥巴就越像她希望的样子,最终变得完全符合她的想法。

一个开发小组用了数月编写一段代码。最初,他们做了一段代码,有点僵硬。代码很短,但仍然有点僵硬。他们搅动这些代码,代码稍微变软了点。在上面提到的一个项目[第II部分]中,我们向数据库增加了模式演化功能。它软化了程序,变更容易多了。每次变更模式时,我们都作一点改进。程序员和代码——作为一个整体——都软化了。我们塑造程序并保持它的柔软性。

在项目结束时您已经完成了需要做的所有事情——有人为之付钱的所有功能——您看了看代码问道,“这一堆东西中的核心是什么呢?这是怎么完成的?我们日复一日地编写程序,它是怎么结束的呢?”通常程序的结束都是令人惊诧的。您会说,“这是一种优美的结构。”那么体系结构又从何而来呢?

在这里,体系结构意味着我们处理不同需求的系统化方式。当我们根据需要塑造程序时,体系结构使我们能够发现进展到哪里了。融入程序的是一个系统,包括我们所做的每一个小决策——正确的小决策,错误但改正了的小决策。从某种意义上讲我们得到的这个体系结构并没有经过尝试。在其他决策上下文中的所有决策凝结成了一种体系结构。


 




WikiWikiWeb 中文介绍

“一个民有,民治,民享的Wiki将永存于世!”
在葛底斯堡国家公墓的演说
-- 亚伯拉罕·林肯

“原来这世上本无Wiki,用的人多了,便成了Wiki"
-- 鲁迅.

WikiWikiWeb 是指一种内容的创建、更新、监控、审查和档案管理都非常自由开放,同时遵循一定技术规则和文化的网站,我们简称Wiki。Wiki的发明人 WardCunningham 一次看到机场巴士上写着 Wiki Wiki Bus ,Wiki是夏威夷语“快”的意思,他后来就用 Wiki 来命名我们现在用的自由协作网站,中文的正式翻译还没有,我们姑且把他叫做维客自由协作网。

为什么 Wiki?

Wiki本质上是一种非常松散和开放的网络协作方式,它所有活动都以“文档”为中心,以知识共享和构建为目的,特点是简单易用,维护管理成本低。它的价值观是“人们产生文档的意义在于这些文档能对人有用,应该鼓励任何人对文档中的任何信息自由修改和整理以对自己或他人更加有用”,因此任何过时或者不再被人关心的内容会被人从wiki上去掉,更不用说那些明显错误或者令人讨厌的东西了。因此wiki这种模式在下面这些情况下就显得非常受人喜爱:

  • 构建社团知识 (知识管理)

    一个社群在网络上共享和交流的信息,利用传统新闻讨论组、邮件讨论列表、BBS或者Notes等交互平台,对于任何一个问题,人们通过对文章标题进行回复来参与信息共享的过程,因此易于展现讨论的线索,每个文章只代表作者的主观意见,因此不容易展现一致的观点;也可以利用单向的信息发布平台,如在线可检索的知识库,联机手册,其信息搜集过程是完全由单方面完成的,成本高,周期长,时效性差;但运行wiki,就能将知识的构建过程完全开放,任何人都可以参与一个知识的描述,即可以展开,也可以归纳,由整个社群负责维护所有信息的内容表达方式、组织方式、利用方式,成本相对最低。功能就象一个社群的大脑,知识检索对应大脑回忆知识,讨论新问题对应大脑主动思维,编辑和编排wiki结构对应大脑修正更新已有信息和总结统一认识。

  • 文档的创建(非正式文档),如faq,howto,example:

    软件编写和测试维护阶段,一般大的软件公司都会有许多编写开发工程文档、使用说明书的工作,尤其是哪些采用了UML规范设计,CMM质量控制的大项目。这些文档非常庞大,但是程序员从来不看他们,而是直接看代码,最终用户也不看它们,而是直接问开发技术人员。wiki可以帮助程序员和最终用户建立知识共享平台,将他们头脑中的隐性知识外化,社会化,对真正常用的文档进行索引以便构建知识库。而把那些成堆的项目文档留给项目经理和律师

  • 创建词典,百科全书

    在一些新兴的文化现象流行的时候,伴随出现许多(大量)新的词汇,有许多wiki用来提供给人们自由添加更新这些词汇,如网络上常用的英文缩写词,别名等,正规的词典来不及收入,如 lol (laugh out a lot), FYI ( for your information ), ASL (age/sex/location)。这显然比个别人维护要及时得多。

  • 团队web logs, team bloging

    个人的web日志很流行,它可以像一个日记来记录个人的想法,新闻等并获得其它人的意见看法,发表以后不应该由其它人修改。一般但是如果是一个团队,社团使用就需要一些互动性,wiki就可以胜任这种工作,用来发布社团新闻(结合 RSS ),记录大事记和提供相关web资源。

  • 文档的备份,分布式存储
    • XML-RPC 结合 wiki DOM,可以由任何人任何时间远程备份整个wiki网站。
    • InterWiki 可以用来链接相关wiki。

Wiki的安全观

很多人担心wiki上会不会垃圾泛滥甚至出现可能触犯国家法律法规的言论,这个可能性其实不只是wiki会碰到的问题。因为一个不允许公开修改的网站同样面临网络安全的攻击的危险。相比而言,由于wiki允许公开的监控,任何人都可以非常容易的删掉不与某个wiki相符的内容,而且这比某个破坏者插入垃圾信息要省事的多,因此wiki的安全性实际上是从根本上简化了传统网站都会面临的安全的管理问题。 在wiki的主站上有一句英语的谚语:“没有锁的门是最不怕被撬的门”。

简言之,wiki的开放性是建立在强大的技术基础上的,更建立在革新性的安全观念基础上。

 

--------------------------

 

Wiki - 一种多人协作的写作工具。Wiki站点可以有多人(甚至任何访问者)维护,每个人都可以发表自己的意见,或者对共同的主题进行扩展或者探讨。关于其历史在此不做深究。Wiki Wiki的意思来源于一种夏威夷土语,quick的意思。有兴趣可以去WikiWikiWeb仔细看看。

Wakka (WakkaWiki)是一种使用PHP语言的Wiki实现。Wiki地实现有很多种,使用Perl/Python/PHP都有(当然还有其他语言的视线)。

因为我是PHP爱好者,比较关心PHP地实现。早期有PHPWiki和PWiki,现在比较知名的有TaviWiki (或者正式的应该叫 WikiWikiTavi ) (主站点在 http://tavi.sourceforge.net/),有些比较知名的站点,如Smarty Wiki就是使用Tavi。

WakkaWiki现在还未引起太多人注意,也许因为时间不长,到现在的最新版本不过是0.11。不过我个人认为是最好的PHP Wiki实现,也许是所有语言中最好的实现之一。主要的优点是其安装和配置极其简单,这几乎是所有其他的Wiki不能比拟的。Python写的MoinMoin应该是很好的,不过因为没有支持环境,无法测试,再说也不是很懂Python,所以不便作太多评价。据我所知,还有一些比较好的视线,如日本的PukiWiki实现,还有YukiWiki也是日本作品。由于不懂日语,没办法了解太多。也没有太大兴致去安装测试了。还有将Wiki扩展得比较深入的,如TikiWiki,在Wiki扩展成了一个比较完整的内容管理系统(CMS)。

Blog我想不用说太多。

主要是想谈谈对Blog和Wiki的不同之处的一点浅见。

毫无疑问,你完全可以用Wiki(工具)架设你的blog站点。但是我认为从比较严格的意义上来说,blog和wiki是完全不同的东西,
服务这完全不同的目的。简单来说,blog更是一种无主题变奏,一般来说是少数人(大多数情况下是一个人)的关注的蔓延。一般的blog站点都会有一个主题,凡是这个主旨往往都是很松散的,而且一般不会去刻意地控制内容的相关性。blog注重的是个人的思想(不管多么不成熟,多么地匪夷所思),个性化是blog的最重要特色。blog注重交流,一般是小范围的交流,通过访问者对一些或者一篇blog文章的评论和交互。
blog也有协作的意思,但是协作一般是指多人维护,而维护者之间可能着力于完全不同的内容。这种协作在内容而言是比较松散的。任何人,任何主体的站点,你都可以以blog方式展示,都有它的生机和活力。

Wiki则不同。Wiki站点一般都有着一个严格的共同关注,Wiki的主体一般是明确的坚定的。Wiki站点的内容要求着高度相关性。最其确定的主旨,任何写作者和参与者都应当严肃地遵从。Wiki的协作是针对同一主题作外延式和内涵式的扩展,将同一个问题谈得很充分很深入。Wiki非常适合于做一种 “All about something”的站点。个性化在这里不是最重要的,信息的完整性和充分性以及权威性才是真正的目标。Wiki由于其技术实现和含义的交织和复杂性,如果你漫无主题地去发挥,最终连建立者自己都会很快的迷失。Wiki使用最多也最合适的就是去共同进行文档的写作或者文章/书籍的写作。特别是技术相关的(尤以程序开发相关的)FAQ,更多的也是更合适地以Wiki来展现。




Blog最大的问题是知识的零散性,Blog中的知识散布在系统的时间线轴之中,尽管有分类功能,但仍无法有效管理日积月累的知识。wiki是以内容、以知识为中心的内容管理系统,刚好可以弥补Blog这方面的不足...

什么是wiki?

wiki是任何人都可以编辑的网页。在每个正常显示的页面下面都有一个编辑按钮,点击这个按钮你就可以编辑页面了。有些人要问:任何人都可以编辑?那不是乱套了么?其实不然,w iki体现了一种哲学思想:“人之初,性本善”。wiki认为不会有人故意破坏wiki网站,大家来编辑网页是为了共同参与。虽然如此,还是不免有很多好奇者无意中更改了w iki网站的内容,那么为了维持网站的正确性,wiki在技术上和运行规则上做了一些规范,做到既保持面向大宗公开参与的原则又尽量降低众多参与者带来的风险。这些技术和规范包括:

  1. 保留网页每一次更动的版本,即使参与者将整个页面删掉,管理者也会很方便地从纪录中恢复最正确的页面版本。
  2. 页面锁定,一些主要页面可以用锁定技术将内容锁定,外人就不可再编辑了。(虽然wiki都有这个功能,但我看到使用它的甚少,这可能跟w iki倡导的精神相违背吧)。
  3. 版本对比,wiki站点的每个页面都有更新纪录,任意两个版本之间都可以进行对比,wiki会自动找出他们的差别。
  4. 更新描述,你在更新一个页面的时候可以在描述栏中写上几句话,如你更新内容的依据、或是跟管理员的对话等。这样,管理员就知道你更新页面的情况。
  5. IP禁止,尽管wiki倡导“人之初,性本善”,人人都可参与,但破坏者、恶作剧者总是存在的,wiki有纪录和封存IP的功能,将破坏者的I P纪录下来他就不能在胡作非为了。
  6. Sand Box(沙箱)测试,一般的wiki都建有一个Sand Box的页面,这个页面就是让初次参与的人先到Sand Box页面做测试,Sand Box与普通页面是一样的,这里你可以任意涂鸦、随意测试。
  7. 编辑规则,任何一个开放的wiki都有一个编辑规则,上面写明大家建设维护wiki站点的规则。没有规矩不成方圆的道理任何地方都是适用的。



不同 Wiki 引