??xml version="1.0" encoding="utf-8" standalone="yes"?>无码任你躁久久久久久,日韩亚洲欧美久久久www综合网 ,亚洲人成网站999久久久综合http://www.shnenglu.com/zerolee/category/3017.htmlx自己5q后?x)是什么样子…?/description>zh-cnMon, 19 May 2008 18:27:28 GMTMon, 19 May 2008 18:27:28 GMT60_病h理着_病院http://www.shnenglu.com/zerolee/archive/2006/12/23/16770.html仄洛仄洛Sat, 23 Dec 2006 06:36:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/23/16770.htmlhttp://www.shnenglu.com/zerolee/comments/16770.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/23/16770.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/16770.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16770.html    在一家中{规模、非常成功的谷公司Q有q样一U控制。参加会(x)议的是ȝ理,他是创徏q个公司的一位资深商业h士,q有一位就是负责品开发的资深E序员。ȝ理向我们展示?jin)品,演示了(jin)它的强大功能。我们看C(jin)Q但是也看到?jin)它很难用,用户界面q于复杂。我和我的设计组成员立刻认识刎ͼ是那位程序员边“施工”边“设计”了(jin)q个产品?br />   ȝ理抱怨说Q一个竞争者以品质更差的品抢C(jin)自己公司的部分市(jng)Z额。他在结实时抱怨很困惑Q因Z认ؓ(f)自己的品功能更强。虽然这位ȝ理叫我们来帮助他摆脱困境Q但是他决{权交给?jin)那位资q序员。对我们来讲Q品需要进行一些“行为”上的改动是现而易见的事情。我们向他们两个展示?jin)我们的?gu)。对我们来讲Q简单而易见的再设计项目需要几个月的时间。如果采Ux们的Ҏ(gu)Q这家公司可以产品更有用、更实际、更强大、更令h愉快、更有竞争力。但是,那位资深E序员却意外地让我们不要对品行为做M改动。他认ؓ(f)产品没有什么不好。他感觉产品之所以销路不好,是因为销售队伍在使用产品斚w没有得到更好的培训。他惌我们制作一些内部促(j)销资料材料Q用来培训销售h员。他完全否认产品有缺P管无可争议的证据说明“不好”的产品是问题的Ҏ(gu)?br />   E序员花?jin)很多时间和_֊L握YӞ因而他无法惛_用户不愿花时间弄明白E序员们~写的Y件。他愿意接受自己的公叔R临着问题q样一个事实,但是不愿意承认自己应负的责Q。他责备销售队伍不能帮助客户了(jin)解品。他愿意接受~写新培训资料的dQ做一些工作以解决现实问题Q但是他完全没有意识刎ͼ他应Z品销量的递减而承担责仅R?br />   q位资深E序员的专横E度让h吃惊。他不仅被自己创建强大品的能力所蒙蔽Q他q蒙蔽了(jin)他的老板——ȝ理。这位资q序员没有能力设计?gu)用户高兴的东ѝ?br />   q家公司的品是在同cM品中率先面市(jng)的品。这家公叔R速成长ƈ在两q前公开上市(jng)Q是华尔街的宠儿Q得C(jin)商业媒体的称赞,也得到许多民间和业界的奖,g一切都很完,而它的市(jng)g的确证明?jin)它的成功?br />   然而除?jin)他的投资商、合作伙伴和其他支持者之外,竞争者们也在x着q家公司的D动。他们看C(jin)?jng)场的潜力,也看C(jin)q家公司产品的弱炏V他们看C(jin)q家公司的品很强大Q有很多功能Q但他们也看C(jin)q是一只“蟩舞的熊”。它有新功能Q但是没有能让用h快。它跌Q但跛_不好。挑?gu)家公司的q很容易,因而竞争者复制了(jin)q家公司产品中很好的功能Qƈ让品易于用。新的竞争者利用一个功能没那么多的产品获得?jin)?0%的市(jng)Z额?br />   ȝ理自w的技术背景防了(jin)他作出正的判断。这U背景帮助他创徏?jin)有力的产品Q但是现在它挡住?jin)视U,让他看不C的资q序员是多大的障碍。他认ؓ(f)资深E序员的态度非常正常Q而我的设计组成员却感到异常惊谔。在q家公司里,ȝ理是局外h。他的程序员从后座“驾驶”着整个企业?/font>



仄洛 2006-12-23 14:36 发表评论
]]>
建造原型的代h(hun)http://www.shnenglu.com/zerolee/archive/2006/12/22/16718.html仄洛仄洛Fri, 22 Dec 2006 02:55:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/22/16718.htmlhttp://www.shnenglu.com/zerolee/comments/16718.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/22/16718.html#Feedback2http://www.shnenglu.com/zerolee/comments/commentRss/16718.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16718.html   ~写原型也是~写代码。原型具有与~写代码相同的惯性和成本Q但是缺乏真正的软g产品所要求的可靠性、稳定性。Y件的原型cM于徏{工E中的脚手架Q而真正的软g和石墙类|h怹、可l护、可扩展的特性。经理们不愿舍弃能够工作的代码,即便是原型代码。他们说不出脚手架和矛_的区别?br />   ~写原型要比~写真正的程序快得多。编写原型的费用很低Q因而极具吸引力。但是只有通过真正的程序才能徏造可靠的产品Q而原型是脆弱的^台。原型是应该抛弃的实验程序,但是实际上很如此。经理们查看原型后会(x)问:(x)“我们不能将它用于品吗Q”对于程序员来说Q通俗的回{是很困隄。经理们奢望通过使用原型来节U数以月计的~程旉?br />   良好~程的精髓在于后期的满感。先期辛勤工作,后期收获。多数手工工作都非常昂贵。而程序一旦编写完毕,可以运行百万次而不需要额外成本。最昂贵的程序是只运行一ơ的E序Q最便宜的程序是q行百万ơ的E序。但是,便宜E序中的M问题也会(x)出现百亿ơ。Y件的l济原理让多Ch感到陌生Q最便宜E序的编写成本最为昂贵,最昂贵E序的编写成本最Z廉?br />   ~写大的E序有些像堆砌一叠砖块。将1000块叠放v来,需要及(qing)其精的攄每一块砖。如果第998块砖偏移?/4英寸Q将余下的两快摆上去不会(x)有什么问题。但是如果第5块就没有摆好Q摆?0块以上的砖几乎不可能的?br />   软g也具有这L(fng)Ҏ(gu)。对于Y件基部分的变动要比对上面部分的变动敏感得多。现实当中,多数E序员v始于错误的v点,随着q程而不断修正行q\Uѝ因而,E序充满着修改q的痕迹。很多功能需求是在编E开始之后才发现的。这些功能被加入到程序中。程序修改的痕迹与叠攄块的偏移cM。将一个按牛从对话框的一侧移到另一侧,像摇晃一下第998块砖Q但是修Ҏ(gu)q所有按钮的代码Q就像摇晃第5块砖。面向对象编E技术和装技术是专门让程序免于修改伤痕的防范技巧。但是确切地_(d)面向对象技术只是将1000块砖分割?0l?00块砖Q不是根本的解决之道?br />   水^高的E序员在~写大程序之前,p很多旉和精力做准备工作。单配置~程环境?yu)需要几天的旉。还需要选择合适的E序库,定义数据V还必须对存储恢复系l作出分析,对其q行定义、编码和试?br />   随着~程工作的展开Q程序员们必然会(x)发现计划中的错误、假设中的缺陗他们面临两个选择Q或者从头再来,或者对E序中有问题的部分打补丁Q引入新的“伤痕”。选择前者的成本非常高,不过选择后者,“伤痕”将限制E序的规模——叠加砖块的高度?/font>

仄洛 2006-12-22 10:55 发表评论
]]>
从Coding Fan到真正的技术专家[转蝲]http://www.shnenglu.com/zerolee/archive/2006/12/21/16676.html仄洛仄洛Thu, 21 Dec 2006 01:05:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/21/16676.htmlhttp://www.shnenglu.com/zerolee/comments/16676.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/21/16676.html#Feedback1http://www.shnenglu.com/zerolee/comments/commentRss/16676.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16676.html 以下文章都是l典Q看不看随你的便Q我只希望知识掌握在更多中国人的手里Q?

中国有很多小朋友Q他?8,9岁或21,2岁,通过自学也写?jin)不代码,他们有的代码写的很漂亮,一些技术细节相当出

众,也很有钻研精,但是他们被一些错误的认识和观点左叻I~Z对系l,对程序的整体理解能力Q这些hQ一个网

上的朋友说得很好Q他们实际上只是一些Coding fansQ压Ҏ(gu)有资格称为程序员Q但是据我所知,不少网l公司的

CTO是q样的coding fans,拿着吓h的工资,做着吓h的项目,目的结局通常也很吓h?
E序员基本素质:(x)

作一个真正合格的E序员,或者说是可以真正合格完成一些代码工作的E序员,应该h的素质?

1Q团队精和协作能力
把它作ؓ(f)基本素质Qƈ不是不重要,恰恰相反Q这是程序员应该具备的最基本的,也是最重要的安w立命之本。把高水

q程序员说成独行侠的都是在呓语,M个h的力量都是有限的Q即便如linusq样的天才,也需要通过l成强大的团?/font>

来创造奇q,那些遍布全球的ؓ(f)linux写核?j)的高手们,没有协作_是不可想象的。独行侠可以作一些赚qY件发

点小财,但是一旦进入一些大pȝ的研发团队,q入商业化和产品化的开发Q务,~Zq种素质的h完全不合格?jin)?

2Q文档习(fn)?
说高水^E序员从来不写文档的肯定是^臭未q的毛孩子,良好的文档是正规研发程中非帔R要的环节Q作Z码程

序员Q?0Q的工作旉写技术文档是很正常的Q而作为高U程序员和系l分析员Q这个比例还要高很多。缺乏文档,一

个Y件系l就~Z生命力,在未来的查错Q升U以?qing)模块的复用时就都?x)遇到极大的麻?ch)?

3Q规范化Q标准化的代码编写习(fn)?
作ؓ(f)一些外国知名Y件公司的规矩Q代码的变量命名Q代码内注释格式Q甚臛_套中行羃q的长度和函数间的空行数?/font>

都有明确规定Q良好的~写?fn)惯Q不但有助于代码的移植和U错Q也有助于不同技术h员之间的协作?
有些coding fans叫嚣高水q程序员写的代码旁h从来看不懂,q种叫嚣只能证明他们自己压根不配自称E序员。代码具

有良好的可读性,是程序员基本的素质需求?
再看看整个linux的搭建,没有规范化和标准化的代码?fn)惯Q全球的研发协作是绝对不可想象的?
4Q需求理解能?
E序员需要理解一个模块的需求,很多朋友写E序往往只关注一个功能需求,他们把性能指标全部归结到硬Ӟ操作

pȝ和开发环境上Q而忽视了(jin)本n代码的性能考虑Q有人曾l放a说写一个广告交换程序很单,q种Z来不知道?/font>

百万甚至千万数量U的讉K情况下的性能指标是如何实现的Q对于这L(fng)E序员,你给他深蓝那套系l,他也做不出太

极链的ƈ访能力。性能需求指标中Q稳定性,q访支撑能力以及(qing)安全性都很重要,作ؓ(f)E序员需要评估该模块在系l运

营中所处的环境Q将要受到的负荷压力以及(qing)各种潜在的危险和恶意d的可能性。就q一点,一个成熟的E序员至需

??q的目研发和跟t经验才有可能有?j)得?

5Q复用性,模块化思维能力
l常可以听到一些程序员有这L(fng)抱怨,写了(jin)几年E序Q变成了(jin)熟练工,每天都是重复写一些没有Q何新意的代码Q这

其实是中国Y件h才最大浪费的地方Q一些重复性工作变成了(jin)熟练E序员的主要工作Q而这些,其实是完全可以避免的

?
复用性设计,模块化思维是要程序员在完成Q何一个功能模块或函数的时候,要多想一些,不要局限在完成当前d

的简单思\上,x看该模块是否可以qq个pȝ存在Q是否可以通过单的修改参数的方式在其他pȝ和应用环?/font>

下直接引用,q样p极大避免重复性的开发工作,如果一个Y件研发单位和工作l能够在每一ơ研发过E中都考虑?/font>

q些问题Q那么程序员׃?x)在重复性的工作中耽误太多旉Q就?x)有更多旉和精力投入到创新的代码工作中厅R?
一些好的程序模块代码,即便?0q代写成的,拿到现在攑ֈ一些系l里面作为功能模块都能适合的很好,而现在我?/font>

到的是,很多公司Y件一升或改q就动辄全部代码重写Q大部分重复性工作无谓的费?jin)时间和_֊?

6Q测试习(fn)?
作ؓ(f)一些商业化正规化的开发而言Q专职的试工程师是不可的Q但是ƈ不是说有?jin)专职的试工程师程序员可?/font>

不进行自;软g研发作ؓ(f)一工E而言Q一个很重要的特点就是问题发现的早Q解决的代h(hun)p低,E序员在每段

代码Q每个子模块完成后进行认真的试Q就可以量一些潜在的问题最早的发现和解冻Iq样Ҏ(gu)体系l徏讄?/font>

率和可靠性就有了(jin)最大的保证?
试工作实际上需要考虑两方面,一斚w是正常调用的试Q也是看程序是否能在正常调用下完成基本功能Q这是最

基本的测试职责,可惜在很多公司这成了(jin)唯一的测试Q务,实际上还差的q那Q第二方面就是异常调用的试Q比如高

压力负荷下的E_性测试,用户潜在的异常输入情况下的测试,整体pȝ局部故障情况下该模块受影响状况的测试,?/font>

发的异常hd资源时的模块E_试{等。当然ƈ不是E序员要对自q每段代码都需要进行这U完整测试,但是

E序员必L醒认识自q代码d在整体项目中的地位和各种性能需求,有针Ҏ(gu)的q行相关试q尽早发现和解决

问题Q当然这需要上面提到的需求理解能力?

7Q学?fn)和ȝ的能?
E序员是人才很容易被淘汰Q很Ҏ(gu)落伍的职业,因ؓ(f)一U技术可能仅仅在三两q内h领先性,E序员如果想安n?/font>

命,必M断跟q新的技术,学习(fn)新的技能?
善于学习(fn)Q对于Q何职业而言Q都是前q所必需的动力,对于E序员,q种要求更加高?jin)。但是学?fn)也要找对目标?/font>

一些小coding fans们,他们也|z乐道于他们的学?fn)能力,一?x)学会(x)?jin)aspQ一?x)儿学?x)?jin)phpQ一?x)儿学?x)?jin)jspQ他?/font>

把这个作为炫耀的资本,盲目的追逐一些肤的Q表面的东西和名词,做网l程序不懂通讯传输协议Q做应用E序不懂

中断向量处理Q这L(fng)技术h员,不管掌握?jin)多所谓的新语aQ永q不?x)有质的提高?
善于ȝQ也是学?fn)能力的一U体玎ͼ每次完成一个研发Q务,完成一D代码,都应当有目的的跟t该E序的应用状?/font>

和用户反馈,随时ȝQ找到自q不Q这样逐步提高Q一个程序员才可能成长v来?
一个不具备成长性的E序员,即便眼前看是个高手,也不要选用Q因Z落伍的时候马上就C(jin)?
具备以上全部素质的hQ应当说是够格的E序员了(jin)Q请注意以上的各U素质都不是由IQ军_的,也不是大学某些课本里

可以学习(fn)到的Q需要的仅仅是程序员对自己工作的认识Q是一U意识上的问题?

那么作ؓ(f)高E序员,以至于系l分析员Q也是对于一个程序项目的设计者而言Q除?jin)应该具备上q全部素质之外,

q需要具备以下素质:(x)

W一Q需求分析能?
对于E序员而言Q理解需求就可以完成合格的代码,但是对于研发目的组l和理者,他们不但要理解客户需求,?/font>

多时候还要自行制定一些需求,Z么这么说呢?
一般而言Q进行研发Q务,也许是客h出需求,也许是市(jng)场和营销部门提出的需求,q时候对于研发部门,他们看到

的不是一个完整的需求,通常而言Q该需求仅仅是一些功能上的要求,或者更正规些,可能获得一个完整的用户视图Q?/font>

但是q都不够Q因为客L(fng)于非技术因素多一些,他们可能很难提出完整和清晎ͼ或者说专业性的性能需求,但是对于

目l织者和规划者,他必能够清醒认识到q些需求的存在q在完成需求分析报告的时候适当的提出,同时要完整和

清晰的体现在设计说明书里面,以便于程序员~码时不?x)失去这些准则?
E序设计者必L理解用户需求所处的环境Qƈ针对性做出需求的分析QD例而言Q同样一个Y仉过ASPU用方式

发布和通过License方式发布Q性能需求可能就是有区别的,前者强调的是更好的支撑能力和稳定性,而后者则可能更强

调在各种q_下的普适性和安装使用的简h?

W二Q项目设计方法和程处理能力
E序设计者必能够掌握不于两到三种的项目设计方法(比如自顶至下的设计方法,比如快速原型法{等Q,q能?/font>

Ҏ(gu)目需求和资源搭配来选择合适的设计Ҏ(gu)q行目的整体设计。设计方法上选择不当Q就?x)耽误研发周期Q浪?/font>

研发资源Q甚臛_(jing)响研发效果?
一个程序设计者还需要把很多功夫用在程囄设计和处理上Q他需要做数据图以确立数据词典;他需要加工逻辑?/font>

图以形成整体的系l处理流E。一个流E有问题的系l,q代码多漂亮,每个模块多精_(d)也不?x)成Z个好的系l?/font>

。当?dng)做好程分析q择好项目设计方法,都需要在需求分析能力上h_的把握?

W三Q复用设计和模块化分解能?
q个g又是老调重谈Q前面基本素质上不是已经说明?jin)这个问题吗Q?
作ؓ(f)一个从事模块Q务的E序员,他需要对他所面对的特定功能模块的复用性进行考虑Q而作Z个系l分析h员,?/font>

要面对的问题复杂的多Q需要对整体pȝ按照一U模块化的分析能力分解ؓ(f)很多可复用的功能模块和函敎ͼqҎ(gu)一

模块形成一个独立的设计需求。D个例子,好比是汽车生产,最早每辆汽车都是独立安装的Q每个部仉是量w定做的

Q但是后来不一样了(jin)Q机器化大生产了(jin)Q一个汽车厂开始通过水U来生汽RQ独立部件开始具有一定的复用性,?/font>

后来标准化成为大势Q不同型P品牌甚至不同厂商的汽车部件也可以q行方便的换装和升Q这时候,汽R生?/font>

效率辑ֈ最大化。Y件工E也是同L(fng)道理Q一个成熟的软g行业Q在一些相关项目和pȝ中,不同的部件是可以随意

换装的,比如微Y的许多桌面YӞ在很多操作模块(如打开文gQ保存文件等{)(j)都是复用的同一套功能模块,而这

些接口又通过一些类库提供给?jin)桌面应用程序开发者方便挂接,q就是复用化的模块设计明昄一个佐证?
一个大型的Q错l复杂的应用pȝ分解成一些相对独立的Q具有高度复用性的Qƈ能仅仅依靠几个参数完成数据联p?/font>

的模块组合,是作为高U程序员和系l分析员一Ҏ(gu)重要的工作,合适的目设计Ҏ(gu)Q清晰的程图,是实现这一?/font>

标的重要保证?

W四Q整体项目评估能?
作ؓ(f)pȝ设计人员Q必能够从全局出发Q对目又整体的清醒认识Q比如公司的资源配置是否合理和到位,比如工程

q度安排是否能最大化体现效率又不至于无法按期完成。评估项目整体和各个模块的工作量Q评估项目所需的资源,?/font>

估项目可能遇到的困难Q都需要大量的l验U篏Q换a之,q是一U不断ȝ的篏计才能达到的境界。在西方一些Y?/font>

pȝ设计的带头h都是很年长的Q比?Q?0岁,甚至更老,他们在编码方面已l远q不如年Mh那样zȝQ但是就?/font>

目评估而言Q他们几十年的经验积累就是最重要和宝늚财富。中国缺q么一代程序员Q主要还不是~那U年U的E序

员,而是那种q纪的程序员基本上都是研I单位作出来的,都不是从专业的品化软g研发作出来的Q他们没有能U篏

那种产品化研发的l验Q这也是没有办法的事情?br /> 
W五Q团队组l管理能?
完成一个项目工E,需要团队的齐心(j)协力Q作为项目设计者或研发的主hQ就应当有能力最大化发挥团队的整体力?/font>

Q技术管理由于其专业性质Q不大同于一般的Z理Q因里面设计?jin)一些技术性的指标和因素?
首先是工作的量化Q没有量化就很难做到合适的l效考核Q而程序量化又不是单的代码行数可以计算的,因此要求技

术管理h员需要能真正评估一个模块的复杂性和工作量?
其次是对团队协作模式的调_(d)一般而言Q程序开发的协作通常分ؓ(f)组q行Q小l有ȝ序员方式的,也有民主方式

的,Ҏ(gu)E序员之间的能力水^差距Q以?qing)根据项目研发的需求,选择合适的l队方式Qƈ能将责权和成员的工作d

紧密l合Q这h能最大发挥组队的效率?
一个代码水q高的hQ未必能成ؓ(f)一个合格的目研发ȝQ这斚w的能力欠~往往是容易被忽视的?

lg可以看到Q作Z个主研发的负责人,一个项目设计者,所需要具备的素质和能力ƈ不是E序代码~写的能力,

当然一般情况下Q一个程序员通过不断的ȝ提高辑ֈ?jin)这U素质的时候,他所h的代码编写能力也已经相当不简?/font>

?jin),但是h意这里面的因果关p,一个高水^的项目设计者通常已经是代码编写相当优U的h?jin),但是q不是一个代

码相当优U的程序员可以胜任项目设计的工作Q这里面存在的也不是智商和课本的问题Q还是在于一个程序员在积?/font>

l验Q逐步提升的时候没有意识到应当思考哪斚w的东西,没有有意识的项目的l织和复用设计进行揣摩,没有l常

性的文档?fn)惯和ȝ?fn)惯Q不改变q些Q我们的合格的项目设计者还是非常欠~?

另外Qؓ(f)防止有无聊的人和我较真,补充一点,本文针对目标是作商业化的软g目和工E,那些U研机构的编E高?/font>

Q比如算法高手,比如图象处理高手Q他们的工作是研I课题而非直接完成商业软gQ当然最l间接成为商业品,?/font>

如微软研I在作的研I课题)(j)Q因此他们强调的素质可能是另外的东西Q这些hQ专Ӟ(j)Qƈ不能说是E序员,不能

用程序员的标准去衡量?

最后补充一点东西,一个Y仉目研发的设计程是怎样的呢Q以通常标准的设计方法ؓ(f)例,Q不q笔者喜Ƣ快速原?/font>

法)(j)?

W一个步骤是?jng)场调研Q技术和?jng)场要结合才能体现最大h(hun)倹{?

W二个步骤是需求分析,q个阶段需要出三样东西Q用戯图,数据词典和用h作手册。用戯图是该Y件用P?/font>

括终端用户和理用户Q所能看到的面样式Q这里面包含?jin)很多操作方面的程和条件。数据词典是指明数据逻辑?/font>

pdƈ加以整理的东东,完成?jin)数据词典,数据库的设计完成?jin)一半多。用h作手册是指明?jin)操作流E的说明书。请

注意Q用h作流E和用户视图是由需求决定的Q因此应该在软g设计之前完成Q完成这些,׃ؓ(f)E序研发提供?jin)约?/font>

和准lI很遗憑֤多公叔R不是q样做的Q因果颠倒,序不分Q开发工作和实际需求往往因此产生隔阂p的现象?
需求分析,除了(jin)以上工作Q笔者以Z为项目设计者应当完整的做出目的性能需求说明书Q因为往往性能需求只有懂

技术的人才可能理解Q这需要技术专家和需求方Q客h公司?jng)场部门Q能够有真正的沟通和?jin)解?

W三个步骤是概要设计Q将pȝ功能模块初步划分Qƈl出合理的研发流E和资源要求。作为快速原型设计方法,完成

概要设计可以进入编码阶D了(jin)Q通常采用q种Ҏ(gu)是因为涉?qing)的研发d属于新领域,技术主h员一上来无法l出

明确的详l设计说明书Q但是ƈ不是说详l设计说明书不重要,事实上快速原型法在完成原型代码后Q根据评结果和

l验教训的ȝQ还要重新进行详l设计的步骤?
W四个步骤是详细设计Q这是考验技术专家设计思维的重要关卡,详细设计说明书应当把具体的模块以最‘干净’的方式(

黑箱l构Q提供给~码者,使得pȝ整体模块化达到最大;一份好的详l设计说明书Q可以ɾ~码的复杂性减低到最?/font>

Q实际上Q严格的讲详l设计说明书应当把每个函数的每个参数的定义都_l细的提供出来,从需求分析到概要设计

到完成详l设计说明书Q一个Y仉目就应当说完成了(jin)一半了(jin)。换a之,一个大型Y件系l在完成?jin)一半的时候,其实

q没有开始一行代码工作。那些把作Y件的E序员简单理解ؓ(f)写代码的Q就从根子上犯了(jin)错误?jin)?

W五个步骤是~码Q在规范化的研发程中,~码工作在整个项目流E里最多不?x)超q?/2Q通常?/3的时_(d)所谓磨

刀不误砍柴功,设计q程完成的好Q编码效率就?x)极大提高,~码时不同模块之间的q度协调和协作是最需要小?j)的Q?/font>

也许一个小模块的问题就可能影响?jin)整体进度,让很多程序员因此被迫停下工作{待Q这U问题在很多研发q程中都?/font>

现过。编码时的相互沟通和应急的解决手段都是相当重要的,对于E序员而言Qbug永远存在Q你必须永远面对q个?/font>

题,大名鼎鼎的微软,可曾有连l三个月不发补丁的时候吗Q从来没有!

W六个步骤是试
试有很多种Q按照测试执行方Q可以分为内部测试和外部试Q按照测试范_(d)可以分ؓ(f)模块试和整体联调;按照

试条gQ可以分为正常操作情冉|试和异常情况试Q按照测试的输入范围Q可以分为全覆盖试和抽h试。以?/font>

都很好理解,不再解释?
MQ测试同h目研发中一个相当重要的步骤Q对于一个大型YӞ3个月?q的外部试都是正常的,因ؓ(f)永远

都会(x)又不可预料的问题存在?
完成试后,完成验收q完成最后的一些帮助文档,整体目才算告一D落Q当然日后少不了(jin)升Q修补等{工作,?/font>

要不是想通过一锤子买卖骗钱Q就要不停的跟踪软g的运营状况ƈ持箋修补升Q知道这个Y件被d淘汰为止?

写这些步骤算不上卖弄什么,因ؓ(f)实话讲我手边是一本《Y件工E》,在大学里q是计算Z业的必修评Q但是我?/font>

道很多程序员g从来都只是热衷于什么?0天精通VC》之cȝQ他们有些和我一h击队?gu)nQ没有正规学q这?/font>

专业Q还有一些则早就在؜够学分后把q些真正有用的东西还l了(jin)老师?

|上现在也很躁Q一些coding fans乱嚷Ph视听Q实际上真正的技术专家很在|上乱发帖子的,如笔者这样不

知天高地厚的Q其实实在是不上什么高手,只不q看不惯q种Ҏ(gu)术,对程序员的误解和胡说Q只好挺w而出Q做?/font>

乱反正之aQ也希望那些q沉q于一些错误h士的coding fans们能认真xQ走到正途上Q毕竟那些聪明的头脑q远q?/font>

没有发挥应有的h(hun)倹{?


 



仄洛 2006-12-21 09:05 发表评论
]]>
电(sh)脑和银行l合在一P你会(x)得到什?http://www.shnenglu.com/zerolee/archive/2006/12/18/16588.html仄洛仄洛Mon, 18 Dec 2006 10:44:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/18/16588.htmlhttp://www.shnenglu.com/zerolee/comments/16588.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/18/16588.html#Feedback3http://www.shnenglu.com/zerolee/comments/commentRss/16588.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16588.html 电(sh)脑和银行l合在一P你会(x)得到什?
---------------------------------
   ?sh)脑Q每ơ从ATM取钱Ӟ我都?x)遭遇到与?sh)脑通病相同的让人生气难堪的行ؓ(f)。如果我的操作有一点失误,它就拒绝所有交易,我t出交易q程。我必须拽出银行卡,重新插入Q重新输入密码,重新开始我的请求。多数情况下我没有犯错误Q而是ATM诱导我犯错误。即使我只有一个个人支帐P它L问我从支帐?、储蓄帐户和货币?jng)场帐户中的哪一个取钱。结果,我L忘记我的帐户属于哪一c,问的问题也让我茫然。大U一个月一ơ,我会(x)不经意地选择“储蓄”帐P内部机器立即我t出整个交易Q然后让我重新开始。机器理应知道我没有储蓄帐户Q不应该让我做出选择。选择“储蓄”和965航班飞行员选择“REMEO”的唯一区别是惩罚的程度不同?br />   ATMq限制我每天只能?00元。如果我利通过所有操作,输入密码Q选择帐户Q输?20元金额Q电(sh)脑就?x)毫不客气的拒绝整个交易Q粗暴地告诉我要取的数额过200元限制。它不事先告诉我q个限制Q不l我重新输入一些金额的Z(x)。它吐出我的卡,l我重新试整个q程的机?x)。排在我w后的h们躁动着Q叹着气。ATM是正和如实的,但是没有l我M帮助?br />   ATM有它必须遵@的规定,而我q不是不愿意遵守Q但是它像电(sh)脑那h理地不告诉我它的规则Q给我矛盄提示Q然后因我无辜地界而突然惩|我。这U行为是?sh)脑的普遍行为,却不是它们固有的。事实上Q电(sh)脑中的Q何东西均不是固有的:(x)它们仅仅表现得像软gQ即E序。Y件程序像人类语言那样有灵zL。一个h的言词可以粗鲁、礼貌,有帮助或让h不舒服。让?sh)脑的行为带有尊敬和CD与让人的a语有敬和礼貌一L(fng)单。所要做的就是让某h描述如何做。不q的是,E序员不善于教电(sh)脑如何做?/font>



仄洛 2006-12-18 18:44 发表评论
]]>
李开复博士谈博士生的?gu)\[转蝲]http://www.shnenglu.com/zerolee/archive/2006/12/16/16526.html仄洛仄洛Sat, 16 Dec 2006 14:24:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/16/16526.htmlhttp://www.shnenglu.com/zerolee/comments/16526.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/16/16526.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/16526.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16526.html   在读?jin)博士生q潇l本报的来信后,GOOGLE公司中国区总裁李开复说Q有q些困惑和担?j),实际上是很多博士生们在读博士之前q没有认真地惌Q自己是不是能耐得住寂寞做学问Q是不是能抵御来自物质世界的诱惑。另外,如果d士抱有“一博士帽能给自己扑ַ作时加分”的xQ不仅会(x)增加自己学习(fn)期间的痛苦,而且在找工作时会(x)发现Q博士头衔不能有多少优势后会(x)更加p?

  ׃是最早进入微软公叔R层的华人,又常常在高校亮相做E回演Ԍ而且q在中国创办?jin)“开复学生网”,l中国学生解{“大Ch生观Q小到如何学好英语”的各种问题Q这使卡内基梅隆大学毕业的工U博士李开复,在中国高校学生中的名气不。就博士生远潇的困惑Q记者专访了(jin)李开复?

  多问问自׃ؓ(f)什么要L博士?/strong>

  “选择d士就{于选择?jin)在未来三五q_(d)或者是更长的一D|_(d)你必要成ؓ(f)孤独的hQ要q离物质的花׃界,甚至要无数次承担p|或者不被学界认可的痛苦”。这注定了(jin)不是每个人都具备能成为博士的潜质。在李开复看来,当你犹U自己是不是要去读个博士之前,一定要向自己问问这些问题:(x)

  首先Q你是不是有创新的热情。因取得博士学位Q最后就得看你在某一领域的研I有没有H破和创新。如果你是一个墨守成规,不太富有挑战_的hQ那么做创新研究可能׃太适合你?

  其次Q要问问自己愿意孤独地追求知识吗Q看到同学发财、出名,?x)M慕、甚x到痛苦吗Q如果你是个物质Ʋ比较强、对挣钱q有兴趣的hQ或怽该去MMBAQ或者找一份好工作Q而不是去d士?

  在美国,一个博士生毕业后可能能拿到10万美元的q薪Q而一个MBA毕业后或许能拿到15万美元,但拿到博士学位要׃5q时_(d)或者更长,但MBA只要两年的时_(d)MBA的投入出比要高一些?

  W三Q你愿意花很多时间拼命工作,即便你知道你正在探究的问题有可能在短旉内无解。如果你是一个很在意p|的hQ那么读博士可能?x)你的人生变得灰暗?

  李开复说Q只有当你肯定自p博士实是ؓ(f)?jin)n受做学问、超前人的乐趣Ӟ才有可能愉快地度q学?fn)生涯?

  李开复回忆,他自己念博士的时候虽然有奖学金,但日子也不富裕,有时候假期也得出L打工Q但每个人在自己不同的生z阶D就应该享受不同阶段的乐,学生时代应该是物质清Q学?fn)而快乐着的?

  毕业Ӟ你应该成Z研究领域中世界第一的专?/strong>

  跨入博士生的门槛后,李开复徏议,要给自己设计一?q的学习(fn)和科研计划。首先,需要彻底地?jin)解在相关领域他人已有的工作和成l,然后再提?gu)qx和见解,脚踏实地工作。另外,q要不断跟踪q个领域的最新研I进展,把握好方向,避免重复性工作,把精力集中在最有h(hun)值的研究方向上?

  李开复说Q他至今q记得在他进入卡内基梅隆大学攻读计算机博士学位时Q当时的pM任说的话Q“当你拿C的博士学位时Q你应该成ؓ(f)你所从事的研I域里世界W一的专家。?

  q样的要求似乎对大多数刚刚v步的人来说都是高不可攀的,可李开复说Q他本h正是立?jin)这L(fng)目标Q在l过五年寒窗、夜以日的努力工作后,他所期待的结果就自然而然地出C(jin)?

  一个打攻d士学位的人,应该给自己?wi)立一个很高的目标。李开复想告诫博士生远潇:(x)d士不是一件轻杄事,切忌躁的情l,而要一步一个脚华ͼ扎扎实实地工作。也不可受一些稍U即逝的名利的诱惑,而要200%地投入。也怽?x)疲劻I?x)懊?zhn),?x)迷失方向,但是要记住,你所期待的成功和H破也正孕育其中?

  李开复回忆说Q他在攻d士学位时Q每周工?天,每天工作16个小Ӟ大量的统计结果和分析报告几乎让h崩溃。他也曾不止一ơ地怀疑自q所作所为是否真的能够成功,但终于有一天,在凌?时做出的一个结果让他感受到?jin)成功的滋味?

  “那U一切都很顺利,谁都可以得到的工作和l果Q我怿研究价g定不高。”李开复说Q另外,一个h如果打算一辈子从事研究工作Q那么从他在d士学位期间所形成的做事习(fn)惯、研I方法和思维方式Q基本上可以判断出他未来工作的轮廓。所以,你一定要做一个“有?j)h”,充分利用在校的时_(d)q来打好基础?

  你找的导师,最好有“我不赞成你Q但我一定支持你”的胸怀

  “在学术界,Z普遍认ؓ(f)‘名师出高徒’。可见导师在你的成长道\上作用是多么的大。”李开复徏议说Q在定自己要开始读博士之后Q应该主动去L自己所研究的领域里最好的老师Q甚臛_该去求教于周围能扑ֈ的专Ӟ看看大家对你想选择的导师有怎样的评P更不要忘?jin)常L教“最博学的老师”——互联网?

  李开复说Q他q鼓励准博士生们直接发电(sh)子邮件去咨询一些世界公认的专家和教授。以他的l验Q对于这L(fng)邮gQ他们中的大部分人都?x)很快给回复?

  李开复听到过一些博士生抱怨说Q在3q的学习(fn)生(dng)中没有得到导师充分的指导。他把自己听到的案例归纳Z(jin)几类准博士们要慎重选择的导师?

  有一cd师,有很多的目Q学生跟着q样的老师Q?q的工夫大概都在替老师打工赚钱。这L(fng)导师暂且看到他长处的一面,可能增加?jin)学生的动手能力Q但博士扑ַ作,招聘的企业看的还是你作ؓ(f)博士的突破和研究能力Q而不是你做过多少目?

  李开复说Q这cd师中Q有一U最恶劣的是Q看C些能q的学生能ؓ(f)自己做点事,即便C(jin)毕业的时间也不让学生毕业Q还要让学生多打几年工。所以在选导师之前,一定要多方打听导师的h品如何?

  q有一cd师也被李开复认为是要当?j)的Q这cd师虽然很安心(j)做研IӞ但他几乎两耳不ȝ外事Q研I思\和方向都是很落伍的,而且他给你选定的方向有可能早就被证明是q时的。李开复说Q有的导师可能上?jin)年U,q年来也没有太多的研I成果,但这个老师人品不错Q能允许和鼓励学生不同常规的xQƈ且从Ҏ(gu)Z能指导学生,q样的导师应该是可以选择的?

  李开复多ơ在各种演讲和文章中提到他当q读博士时的导师。他_(d)虽然d士期_(d)他的导师实没有教给他有关他专业的知识,但是他能l学生大方向的指|而且能毫不吝啬地与学生分享他在学术上的经营和他在学术界的各种资源?

  李开复说Q博士生导师或许是那种没有太多旉l你Q也不会(x)l你太多具体而细节的指导Q但他却有“我不赞成你Q但我一定支持你”的胸怀?

  戴上博士帽不{于p一步跨q挣钱多的地?/strong>

  有了(jin)博士的头衔不一定就{于增加?jin)你扑ַ作的砝码。李开复说Q从他在微Y和GOOGLE公司的招聘经历和他所?jin)解的一些著名跨国公司在华招聘的情况来看Q大家招聘博士的范围都会(x)巧合地限定在国内排行前十几名的大学中?

  李开复解释,一般大公司、尤其是ITcȝ企业在挑选本U生或者硕士研I生Ӟ度是比较松的,即便有的士没有太多学术上的造诣Q但只要拿出做过的像L(fng)目Q一般也是会(x)被认可的Q但对博士就不同?jin)?

  李开复说Q他在招聘博士时?x)仔l阅d聘者的博士论文Q因为对博士的水q判就全靠q篇论文?jin),博士论文如果没有新意Q或者观Ҏ(gu)法陈旧,即应聘者有再多的实践能力,做过再多的项目,也得不到认可?

  正因Z些大公司在招聘时反而对博士的水qx加挑剔,所以李开复说Q千万不要以为戴上博士帽p扑ֈ好工作?

  做个快乐的h最重要

  最q李开复写?jin)一文章,提到?1世纪企业喜欢什么样的hQ其中他认ؓ(f)很关键的要素是,应聘的h是不是一个热爱工作、积极乐观的人?

  李开复希望告诉远潇,即便现在有很多不如意和困惑,但还是要努力让自己成Z个快乐、积极的人。他希望把台湾企业家张忠谋的一个故事告诉远潇?

  张忠谋是台基늚董事长,一ơ朋友请他题词,他给朋友写下?jin)“常想一二”,朋友问他是什么意思。张忠谋_(d)“我们都说h生不如意之事十有八九(ji)Q我要告诉你常想那剩下的一二比较如意的事情。?

  张忠谋说Q他从小q?jin)很多大人物的传讎ͼ发现了(jin)一个规律,凡是成功者都受苦受难Q他们的生命几乎是人生不如意事十有八九(ji)的真实写照。但是他发现q些Z所以能够成功,是因ؓ(f)他们保持?jin)正面的思考,通过“常想一二”,越不愉快。苦隑֯他们来说反而成?jin)生命中最好的LQؓ(f)他们未来的成功做?jin)良好的铺垫?

  李开复说Q其实在21世纪Q还有很多其他的理由要做一个乐观向上的人,因ؓ(f)21世纪有一个更实时善变的环境,我们试的事情会(x)到很多很多的失败?



仄洛 2006-12-16 22:24 发表评论
]]>
“笨”h更容易成功[转蝲]http://www.shnenglu.com/zerolee/archive/2006/12/14/16422.html仄洛仄洛Thu, 14 Dec 2006 04:15:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/14/16422.htmlhttp://www.shnenglu.com/zerolee/comments/16422.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/14/16422.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/16422.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16422.html Author: 黄玺?/font>

   ׃工作性质使然Q我几乎每天都要面对一些上门洽谈合作的人。这些h中,有的很容易让我接受,有的则让我避之唯恐不?qing)?/font>
  与h打交道多?jin),我也看出了(jin)道道。我发现那些看v来比较“笨”的人往往能够打动我,而那些话很多QL试图在短旉内改变我的观念,甚至试图“教肜y(c)我的h则很难与我合作成功?/font>
  我担?j)自ql验比较片面Q于是询问了(jin)好几个与我工作性质差不多的朋友Q发现大家的感觉竟然惊h的一_(d)(x)大家更接受那些坦诚朴素的业务人员?/font>

  下面是我亲nl历的两件事情?/font>
  d夏天Q一个公x动公司年ȝ伙子找到我Q向我推荐一个活动。在我的面前坐定Q我发现他比较紧张,口与一些伉(j)牙俐齿的业务人员无法相提q论。我耐心(j)听完他的介绍后,觉得与项目的推广重点不太dQ便说我?x)安排策划推qK一下,然后送走?jin)他?/font>
  十多分钟后,我经q公怺层大厅,发现他一个h站在那里Q我q以Z在等人,CD性地与他点了(jin)个头Q便l箋忙着做我的事。大U二十多分钟q后Q他又来敲我的门。进屋后Q他昑־更加紧张Q甚x点儿l巴地说Q“?zhn)看,我刚才是不是没有讲清楚,我刚参加工作Q第一ơ单独跑业务。我惛_跟?zhn)讲一遍。?/font>
  他的话象?sh)击一栯我的内心(j)颤栗?jin)一下。我一下子惌v来他Z么在大厅里站着?jin)。从他离开我的办公室到鼓勇气再进入我的办公室Q在半个时的时间里Q这个刚刚参加工作、第一ơ单独跑业务的年Mh该做?jin)多么大的?j)理挣扎啊。我不由得想起了(jin)我第一ơ独立工作的样子以及(qing)我h生中的许多第一ơ,我在惻I在许多第一ơ面前我是否能象q位q轻人那栯紧张但却坦诚呢?我是否会(x)故作聪明地去装作老练呢?人都?x)有W一ơ,人都是由生手逐渐变ؓ(f)熟手的。生手ƈ不丢脸,关键是生手不能故作聪明地L演熟手。因Z面对的谈判对象可能要比你有经验得多。故作聪明不仅贻W大方,更容易弄巧成拙?/font>
  那个上午Q我׃(jin)q一个半时的时间与q位q轻Z谈。我不仅认真听了(jin)他对zd的再ơ介l,而且q帮助他分析?jin)方案的优缺炏V对于这个第一ơ独立工作的q轻人,我希望他的“第一ơ”得到的是鼓p不是挫折。后来尽由于推q周期的原因我没有与他合作,但是我把他介l给?jin)其他的朋友。如今,l过一q的历练Q这个小伙子已经取得?jin)很优异的成l?/font>

  q有一件事情是一个女孩子的?/font>
  也是d夏天Q一个杂志社的女孩子来采访我。我知道现在许多杂志的采讉K是要q告回报的。有的杂志刚开始采访时说得很热闹,但是只要目不给回报Q那些采访就决不?x)变成铅字?/font>
  但是q个奛_子却只字不提回报的事情。采访完后,我就把这件事丢到?jin)脑后。以至于q个奛_子的模样我都想不h?jin)。谁想一个星期后Q我的邮里竟然收到?jin)这个女孩子的文章初E,整整10个PQ两万多字。这是完全出乎我的预料的。我接受q很多采访,见过太多的敷衍了(jin)事的文章。象q个奛_子这样如此用?j)写文章的非常罕见。两万字Q要付出多少?j)血啊,而且是在没有M回报的情况下来写作。我立即产生?jin)要见这个女孩子一面的冲动。我非常想知道在如此躁的社?x),是什么让q个奛_子有如此的定力?/font>
  后来q篇文章刊登后,取得?jin)很好的宣传效果。我告诉推广l理Q找Z(x)一定要安排回报?/font>

  上述我经历过的两件事情已l过M(jin)一q时间。但是现在我q是能够很轻易地惌v来。那两个q轻人现在发展得都不错。我想他们之所以能够不断取得进步,源于他们w上h一U共同的品格Q脚t实圎ͼ不耍小聪明Q有时候看h甚至用的都是W功夫。但是,q个世界的规律却是:(x)成功更青睐看h“笨”的人?/font>



仄洛 2006-12-14 12:15 发表评论
]]>
思h与懒人[转蝲]http://www.shnenglu.com/zerolee/archive/2006/12/10/16211.html仄洛仄洛Sun, 10 Dec 2006 04:36:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/10/16211.htmlhttp://www.shnenglu.com/zerolee/comments/16211.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/10/16211.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/16211.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16211.html从学生时代开始,我就发现?jin)这个世界很多庸人?br />C(jin)大学Q就发现基本都是思h和懒两种人?

C(jin)现在Q终于明白到一些道理:(x)

天空之所以美丽,不是因ؓ(f)天空上有马戏团,而是因ؓ(f)天空什么也没有Q这是一U清澈的丽?/font>

而h之所以庸,是因ؓ(f)内心(j)装了(jin)一个马戏团?/font>

思hL很爱惜自己,l自己最好的待遇Q绝对不?x)亏待自己?/font>

思h?x)随大流Q因为爱惜自己,所以需要保护自己,英雄也好Q枭雄也好,他们都不ƣ赏Q因都是高危职业。因P所以庸Z可能成ؓ(f)英雄或枭雄?/font>

思hl对不懒Q同时也鄙视懒hQ庸Z(x)留意M有利于自q情况Q会(x)q逐一切利益,前提是,性h(hun)比高的。庸Z己是最聪明的hQ因为L攑ּ?yu)豆cI选择大西瓜。但是因为如此,攑ּ手中的“小豆米”就成了(jin)家常侉K?/font>

q就是一切庸人的共同炏V因为有q些领?zhn)Q我知道?jin)一些现象的由来Q?/font>

Z有差生,优生的分别。因为差生都是庸人,优生不是天才Q但是内?j)清澈?/font>

Z看到那么多hQ看两眼c++p难,说根本不是h学的东西。ؓ(f)什么那么多人看到数学就觉得讨厌Q而还鄙视的说Q都是傻瓜在学。因为庸人L选择最高性h(hun)比的东西Q固然不可能?x)对q些没什么性h(hun)比的东西保持热诚?/font>

当然自我ƺ骗也是常用的伎俩?/font>

我认ZhcL具备的机能都是类似的Q强度也差别不大Q但是拥有非常强的可塑性。一个h可以ȝ得比自己强几倍,甚至100倍,千倍。而类似的Q类似的强度Qؓ(f)何却只有一部分变得更加强?/font>

Z么?一切的原因都是——“心(j)”。与其说自然的,q不如说是选择Q有人选择保持原状Q有人选择提升Q这一切都是内?j)的军_。或客观的说Q是?j)智的?jing)响,因ؓ(f)选择q不是有意识的。一个h选择?jin)保持原Ӟ然后仍能沾沾自喜的,无非是思h所具备的心(j)Z(jin)?/font>

教育制度Q无疑是在考学生家长的C会(x)实力Q而学生家长无疑又在考学生的忍耐力。因此,很多大学生满腔热诚的选择自己一点不熟?zhn)的专业,然后堕落在学校落后的现实中,失去奋斗目标的情冉|比皆是。因此不惛_一个庸人,又不惛_一个懒人,请听我的忠告Q?/font>

要看不v自己Q不要太自己当回事Q以后能找䆾q_^凡凡的工作已l算好了(jin)。自׃可能是李嘉诚Q也不可能中大奖Q也不会(x)有什么艳遇横财?/font>

不要q普通h的生z,可以贱,可以烂,但是也要鄙视一切普通h的生zL式?/font>

要懒Q懒CLM替代的精寄托,不要日夜操劳的去玩?/font>

保持q种?j)态去搞学?fn),L办法以后的普通生zL高一点点味吧?/font>

q个忠告的好处是Q?/font>

知道自己q_Q但是比很多人早知道4q?/font>

生活?fn)惯可以塑造h|但是人却不能通过意志U正自我Q可是要改变生活?fn)惯q是可能的。习(fn)惯的改变Q虽然是?x)有一D늚戒断期,但是当需要的生活模式渐渐成ؓ(f)?fn)惯后,p然而然的得到解脱,q比不断l自己压力要健康得多?/font>

最懒的人反而容易找到自q方向?/font>



仄洛 2006-12-10 12:36 发表评论
]]>国外著名大学计算机教学考察随笔[转蝲]http://www.shnenglu.com/zerolee/archive/2006/12/09/16158.html仄洛仄洛Fri, 08 Dec 2006 17:33:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/12/09/16158.htmlhttp://www.shnenglu.com/zerolee/comments/16158.htmlhttp://www.shnenglu.com/zerolee/archive/2006/12/09/16158.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/16158.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/16158.html   Z(jin)解国外大学计机教学情况Q?002q春季,清华大学l团到美国进行了(jin)一ơ考察。考察l先后到斯坦、伯克利、加州理工等著名学府q行?jin)调研,旁听了(jin)一些计机斚w的课E,与有x授、教务管理h员和中国留学生进行了(jin)座谈Qƈ参观?jin)学校的图书馆和计算机机ѝ下文就是我们约h华大学计机与信息管理中?j)副MQ王行a教授撰写的考察随笔?/font>
4?span>9?/span> 斯坦大?/strong>
上午Q我?span>分头听了(jin)“数据库”和“编译原理”的评。数据库为大班课E,本节课主要讲ER囑֒ER模型。授课方式是“黑?_笔”,6块黑板来回切换。教室有?sh)视和录像设备,电(sh)视跟踪和放大黑板内容,所以无论坐在哪个角落,都能看到黑板的内宏V教室后有制作室Q可以对译֠教学当场录制。课上同学提问题很踊跃,老师也不时地提出问题Q回{最好的几乎都是中国留学生?/font>
中午饭后Q我们参观计中?j)和图书馆,两处都有学生上机的环境。学生来d匆,多半都是上网看一下课E通知或下载、打印几|档资料?/font>
我们在浏览网|Q看C午的数据库课E已制作成视频课?不到半天旉)。学生可以自主选择听老师的某D讲解,或看某页的板书。在斯坦,有专门制作h?q有学生参与)寚w分课E进行录制加工,q及(qing)时放到网上,供学生下译֤?fn)。这些课件还有一个重要的目的Q就是用于l教Ԍ为学校周围的在职人员学习(fn)提供方便?/font>
在计中?j)入口处的通知栏上Q我们看C(jin)白板上公布的一些课外讲座,如UNIX操作pȝ使用、Office工具软g的用等,此外q有一些编E语a的入门课E?/font>
下午我们又听?jin)一门“程序设计”课E,估计教室可容U_、五百h。学生进教室Ӟ每h在门口拿一份本节课的讲义。很多老师在上课时都习(fn)惯准备随堂用的讲义Q内容包括补充的素材和本节课布置的习(fn)题。本评?strong>斯坦大学计机pdMQEric S. Roberts教授主讲Q他是IEEE和ACM推出的“Computing Curricula 2001?/span>的主要执Wh。这节课他主要是讲解法设计(?wi)搜索,q宫{?和程序调试。Roberts教授使用W记本电(sh)脑及(qing)大屏q投影授课,屏幕上显C的是讲评到的代码?qing)程序调试环境,但他大部分时间是坐在讲台上,面向学生滔滔不绝地讲解。程序设计课E用的教材是Roberts教授写的两本书:(x)“The Art and Science of C”和“Programming Abstractions in C”。这两本教材在美国被多所大学所采用?/font>
4?span>10?/span> 斯坦大?/strong>
上午Q我们与计算机系副系MQEric S. Roberts教授座谈Q请他谈一下斯坦福大学的计机教育(包括非计机专业的计机教育)。他饶有兴趣地谈C(jin)斯坦大学计机pȝ发展?strong>计算E?/strong>的设|情c(din)?/font>
他说Q与大多C业相比,计算机科学是一个非同寻常的领域。当100q前斯坦大学成立之际,大多数学U就已经有了(jin)一定的历史?0q后Q才发明?jin)世界第一台计机。又q了(jin)25q_(d)计算机科学才成ؓ(f)一个独立的学科。斯坦福计算机科学系成立?965q_(d)q一直保持世界前4名的位置?/font>
在最q?5q中Q计机U学飞速发展,q极大地推动?jin)社会(x)的q步。计机U学l成Z个o(h)人兴奋的领域?/font>
在斯坦福Q大多数学生愿意学习(fn)计算机科学的M评。在CSM评中,学生可以q踪很多不同的领域:(x)E序语言、图形学、数据库、计理论、hZ互、机器h学、h工智能、数值分析等。随着q年来需求的变化QCSM课更加灵zdƈ满大多数学生的需求?/span>
在斯坦福大学Q新生入校时不分专业Q学生的专业要根据个人选修评的情况到高年U才逐步明朗。当?dng)在入校时Q学生还是有自己的意向。学校ؓ(f)每位惛_计算机的同学都提供一份指导性文Ӟ说明在斯坦福学习(fn)计算机的几种途径。除CS之外Q还有五U其他选择供学生考虑Q?/font>
1QC omputer Science Minor(CS辅修专业)
该辅修专业提?CSM课中本科的核?j)课E?见图1)Q由6-8门课l成Q安排在两年中学完?/font>
完成辅修译֐Q学生将获得很强的编E基Qƈq入计算机科学的某个理论分支。进而,学生可以在自己感兴趣的领域学?fn)更多更深入的课E?/span>
?是辅修专业的评讄?/font>
2. Computer Systems Engineering (CSE)
CSE是跨计算机科学和?sh)子工程两个pȝ交叉学科?/font>
CSE的主修课cM于计机U学p,但一?span>偏理论的计算E?/strong>被电(sh)子工E方?/span>的课E所代替(如数字设计与?sh)\分析)?/font>
3. Electrical Engineering (EE)
适合于对计算机科学、特别是对硬件更感兴的同学选修。除?jin)侧重硬件外QEE学位和其他学位的主要不同是侧重于工程?/font>
4. Mathematical and Computational Sciences (Math/CS)
计算机科学和U数学的l合。学位课包括计算机科学基核心(j)课以?qing)各U数学课。除q些核心(j)评外,学生q侧重计机或数学选一些课?/font>
5. Symbolic System
是交叉学U,l合?jin)计机U学、心(j)理学、社?x)学、以?qing)语a学,研究?机的认知。将人和计算为符号处理系l?/font>
Roberts教授q讲刎ͼ׃计算机技术的发展Q可以用计算x复杂的问题,q且可以不需要编E,L(fng)不是传统意义上的~程。所以计机pd计算中心(j)q面向全校开设了(jin)一些更侧重于应用的评(包括各种语言与工L(fng)评)Q主要是满全校非计机专业学生自己学习(fn)计算机和应用计算机的需求。其中一些课E的内容qg我们计算机文化基评内容。这些课E包括:(x)
CS1I—U(ku)sing the Internet
CS193D—C++ and Object-Oriented Programming
CS193I—Internet Programming
CS193J—Programming in Java
CS193U—Software Engineering in C
CS193W—Microsoft Windows Programming
如何开始学?strong>计算E?/strong>呢?Roberts教授l我们画?jin)一张图(见图2)?/font>
Roberts教授指出Q如果要从技术的角度(而不是从文化的角?学习(fn)计算机,CS106A(即程序设?是第一门必修的基础课。学完CS106A后,如果想l深入学?fn)编E的知识Q可选修CS106B。对那些在中学就已具有一定编E能力的学生Q如果想学习(fn)C语言或想q一步提高编E水qI可选修一学期的CS106X(羃两门评快班)。学完CS106B后,学生有?jin)比较明的意向Q如果想q计机专业Q就可开始系l学?fn)计机专业的课E。而不想选择计算Z业的同学Q可以选修计算机系{单位ؓ(f)非计机专业开讄其他 评?/font>
CS106评采用的教学语a是C语言QRoberts教授解释_(d)(x)C语言q泛应用于工业界Q而且是学?fn)更先进语言的基(C++ 和Java)?/font>
我们向Roberts教授提出一个问题:(x)如果学生自己选专业,?x)不会(x)有很多学生都选计机专业Q计机pd何接U么多学生Q?/span>Roberts教授_(d)的确新生中有很多人想学计机Q但学过1??strong>计算E?/strong>之后Q不同学就感到计算Z业不适合自己。经q多q操作,选择计算机系的h数已l趋于稳定。另外,国的学生不见得都喜Ƣ计机Q觉得整天坐在计机前没有意思,而对于考古、地质等野外作业觉得更富有挑战性?/font>
4?/strong>11?/strong>斯坦大?/strong>
今天与计机pL务谈。系教务Ҏ(gu)们讲Q每个教授每q都要开一门核?j)?研究生课E也核?j)?。教师的教学工作量要?span>一定点敎ͼ大课Ҏ(gu)多,课Ҏ(gu)。系里有一套评价体p,学生l系MQ和教师本人打分,q些Ҏ(gu)师的评有媄(jing)响。新生提前一周到校,招生办公室根据学生兴分z֯师指导学生选课。每个学生都有一个导师帮助选课(一名导师负责若q名学生)。学校设有注册办公室Q管理各U教学资源?/font>
随后我们参观?jin)硬件实验室。硬件实验普遍采用模拟YӞ控制盒里有关键芯片?/font>
下午我们听了(jin)一节毕业设计课Q该节课的安排是请IBM公司的工E师讲解正在研究的一些新技术。根据我们的感觉Q学校和公司的联pd密切?/font>
下午我们和一位在斯坦半g研究所长期L的清华老师q行?jin)谈。针Ҏ(gu)们提的一些问题,q位老师说了(jin)一些自q观点Q对于硬件实验,늚教学、电(sh)路课做一些实验,单板Z有,但不是重?有些爱动手的学生选修)。斯坦福大学q是偏Y的多Q同学出M要是搞设计,搞算法。例如利用spice软gQ?0个星期设计一个芯片。硅谷对半导体h才需求很明确Q学?x)三门?sh)路设计课p。斯坦福实验室很,偏专门化的课外聘教师。而基的物理、化学都是大牌教授。美国毕业生专门化很H出Q工作中做自己专业的事Q不别的杂七杂八的事,否则是浪费h才、时间。计机各行各业都在用,但要懂多,q不见得很多Q硬件结构、Y件OS、C语言、数值分析、专业用软g{。计机能力强,表现在把计算Z为工P?x)算法、数据分析,自己专业法强。光?x)计机~程是中{h才,最有h(hun)值是专业的东ѝ?/font>
之后Q我们又与部分中国留学生举行?jin)谈。在座谈q程中,不时有hq进出出Q有的刚下课Q有的要M辅导?助教)Q大家显得都很忙。很多同学是在网上看到要和国内来的大学老师座谈Q就d赶来参加Q即使只能参加一?x)儿也要来。同学们见到我们都非常兴奋,也谈?jin)很多在q里学习(fn)、生zȝ情况。他们说Q这里的房东最喜欢U房子给中国学生Q因Z们早出晚归。在国念书Q作业负担很重,每学期课的门C多,但课E的强度非常大,例如E序设计Q一周就有两Cơ大课。斯坦福不太重视文章Q没有文章要求。但学校中的研究气氛很浓Q很多低q的学生就自动l织hQ找一些具有挑战性的N来做?/font>
?strong>?/strong>4?/strong>13?/strong>加州理工
今天主要是与留学生谈,我们谈的范围很广Q以下是我们聊的一些感兴趣的内宏V?/font>
同学们说Q这里系的差别不是很大,天文、物理、数学,无论是什么系Q都要上一大堆公共课,本科是通才教育。教师与学生的比例是1? QTA与学生的比例??0。编E的课主要是上TA的课。学校每学期?0周,评强度高,隑ֺ大,每学期学5门课已经很吃力了(jin)。同学们异口同声地说Q作业又多又难,交作业时间卡的很死,作业有时做到W二天天亮。作业绝对不能抄Q在成W中所占比例也很大?/font>
我们问了(jin)一些有兌机教育的问题,他们_(d)计算机系主要是讲理论。非计算机系的学生选一些计机理论课,可以扩展知识面。他们感到计机的哪门课都是数学课。各pdƈ没有学生选什么计机的课Q但聪明的学生会(x)选一些计机课。根据他们接触的情况Q专业老师用计机Q学生就?x)学计算机。各pL师交很密切Q教授用计算机,?x)带动计机教学。各领域的权威、教授应该知道学生在计算机方面需要用C么。计机教学不要与其他教学分开Q用的时候就?x)学。他们认为,计算机的基础是程序设计。计机教学分理?/span>(计算机系开)和应?与各专业l合Q各pd开)?/font>
同学们还告诉我们Q期末考试Ӟ监考老师一般站在教室外面,有问题再q到教室解决Q以此表C对同学的信仅R有的考试q脆让同学把卷子拿回dQ规??天内交卷。我们问Q那如果互相抄袭怎么办?同学说基本没有抄袭,因ؓ(f)学生自我U束很严Q非常看重诚信二字。他们讲?jin)正在发生的一件事情:(x)一个同学将公共场所的一把椅子私自搬C(jin)自己的宿舍里Q学生委员会(x)正在Ҏ(gu)事进行处?据说是要开?Q学生委员会(x)做出的决定,学校也不得不认真考虑?/font>
4?span>18?/span> 伯克利分?/strong>
今天安排和一个留学生座谈Q因Z在美国念?jin)多q的书,拿了(jin)一个硕士学位,两个博士学位Q至今还没有d学校之意。他向我们讲qC(jin)自己的一些感受和?/font>
他说Q国内有些大学把理论和市(jng)场对立v来是不对的。我们可以培训出非常好的E序?写一个Y?Q但没有独到见解Q没有算法。计机理论Q图论、线性代数等都是非常有用的。美国学校很重视数学怎么用到实际问题。学CҎ(gu)学,q道用到哪Q就有成感Q而不重视技巧。美国学生做东西比较深入Q想得深。最?gu)的是国学生?/font>
国研究生主动性很强,自发l织在一PN目研I?如h工智能、机器学?fn)?。新生进校后Q学生会(x)ql学生参观专业,引发他们对专业的兴趣。国内的学生要脱俗,胆子要大一些?/font>
在考察的过E中Q我们也览?jin)各校的一些主,其中印象最q是各校在使用|络教学环境时比较讲I实效,花样不多但内容丰富、规范。例如,几乎每门评都有自己的主,老师的一些讲E也攑֜|上。课E主一般包括以下栏目:(x)
l 评内容概要
l 授课人员(列出讲师、TA的名单及(qing)他们的电(sh)话和email地址)
l 上课旉/地点(一门课周学?/span>一般ؓ(f)150分钟Q?5*2 ?0*3)
l {疑安排(旉、地炏V答疑老师姓名)
l 评先修要求(不是必须)
l 教材Q参考书(一些参考书是公司的品文档,如Oracle documents)
l 考核方式(书面作业、上机实验、Project、期中、期末考试{安排和所占分?
l U律规定(抄袭作业的处|、如何保护知识权,|上资源引用的规定和限制{?
以上是我们出国考察?jin)解到的一些情况,写出来与大家分n与借鉴?/font>
附:(x)几个学校的课E网址Q?/font>
http://www.stanford.edu/class/cs106斯坦课E主?以cs106评Z)
http://www.cs.Berkeley.edu伯克?/font>
http://www.schedule.berkeley.edu伯克?/font>
http://www.cs.Caltech.edu/courses.html加州理工


仄洛 2006-12-09 01:33 发表评论
]]>
一个母亲一生撒?个谎ahttp://www.shnenglu.com/zerolee/archive/2006/09/21/12780.html仄洛仄洛Thu, 21 Sep 2006 02:11:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/09/21/12780.htmlhttp://www.shnenglu.com/zerolee/comments/12780.htmlhttp://www.shnenglu.com/zerolee/archive/2006/09/21/12780.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/12780.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/12780.html

一个母亲一生撒?个谎a(转蝲)

    1、儿Ӟ男孩家很穷Q吃饭时Q饭常常不够吃,母亲把自己里的饭分给孩子吃。母亲说Q孩子们Q快吃吧Q我不饿Q——母亲撒的第一个谎 


 
 2、男孩长w体的时候,勤劳的母亲常用周日休息时间去厉K农村x里捞些鱼来给孩子们补钙。鱼很好吃,鱼汤也很鲜。孩子们吃鱼的时候,母亲在一旁啃鱼骨_(d)用舌头舔鱼骨头上的肉渍。男孩心(j)|把自己里的鱼夹到母亲里Q请母亲吃鱼。母亲不吃,母亲又用{子把鱼夹回男孩的碗里。母亲说Q孩子,快吃吧,我不爱吃|——母亲撒的第二个?

 
   3、上初中?jin),Z(jin)~够男孩和哥姐的学费Q当~n工的母亲去居委?x)领些火柴盒拿回家来Q晚上糊?jin)挣点分分钱补点家用。有个冬天,男孩半夜醒来Q看到母亲还w着w子在a(b)灯下p火柴盒。男孩说Q母Ԍ睡了(jin)吧,明早(zhn)还要上班呢。母亲笑W,_(d)孩子Q快睡吧Q我不困Q——母亲撒的第三个?
 
   4、高考那q_(d)母亲请了(jin)假天天站在考点门口为参加高考的男孩助阵。时逢盛夏,烈日当头Q固执的母亲在烈日下一站就是几个小时。考试l束的铃声响?jin),母亲q上去递过一杯用|头瓶(chng)好的茶叮嘱孩子喝了(jin)Q茶亦浓Q情更浓。望着母亲q裂的嘴唇和满头的汗珠,男孩手中的|头瓶反递过去请母亲喝。母亲说Q孩子,快喝吧,我不_(d)——母亲撒的四个谎
 
   5、父亲病逝之后,母亲又当爹又当娘Q靠着自己在缝U社里那点微薄收入含辛茹苦拉扯着几个孩子Q供他们念书Q日子过得苦不堪a。胡同\口电(sh)U杆下修表的李叔叔知道后Q大事小事就扑ֲq来打个帮手Q搬搬煤Q挑挑水Q送些q来帮补男孩的安。h非草木,孰能无情。左d舍对此看在眼里,记在?j)里Q都劝母亲再嫁,何必苦了(jin)自己。然而母亲多q来却守w如玉,始终不嫁Q别人再劝,母亲也断然不听,母亲_(d)我不爱!——撒的五个谎
 
   6、男孩和她的哥姐大学毕业参加工作后,下了(jin)岗的母亲在附近农N?jng)场摆?jin)个小摊维持生zRn在外地工作的孩子们知道后常常寄钱回来补贴母Ԍ母亲坚决不要Qƈ钱退?jin)回厅R母亲说Q我有钱Q——撒的六个谎
 
   7、男孩留校Q教两q_(d)后又考取?jin)美国一所名牌大学的博士生Q毕业后留在国一家科研机构工作,待遇相当丰厚Q条件好?jin),w在异国的男孩想把母亲接来n享清却被老h回绝?jin)。母亲说Q我不习(fn)惯!——撒的七个谎
 
   8、晚q_(d)母亲(zhn)了(jin)胃癌Q住q了(jin)医院Q远在大西洋彼岸的男孩乘飞机赶回来时Q术后的母亲已是奄奄一息了(jin)。母亲老了(jin)Q望着被病折得dzL的母Ԍ男孩(zhn)痛Ʋ绝Q潸然泪下。母亲却_(d)孩子Q别哭,我不疹{——撒的最后一个谎


仄洛 2006-09-21 10:11 发表评论
]]>
STL之父访谈?http://www.shnenglu.com/zerolee/archive/2006/09/10/12230.html仄洛仄洛Sun, 10 Sep 2006 12:52:00 GMThttp://www.shnenglu.com/zerolee/archive/2006/09/10/12230.htmlhttp://www.shnenglu.com/zerolee/comments/12230.htmlhttp://www.shnenglu.com/zerolee/archive/2006/09/10/12230.html#Feedback0http://www.shnenglu.com/zerolee/comments/commentRss/12230.htmlhttp://www.shnenglu.com/zerolee/services/trackbacks/12230.html STL之父访谈录   ?
  译?: myan
出处: http://www.sgi.com/technology/stl  

1995q?月,dr.dobb's journal特约记? 著名技术书c作家al stevens采访?jin)stl创始人alexander stepanov. q䆾访谈U录是迄今ؓ(f)止对于stl发展历史的最完备介绍, 侯捷先生在他的stl有关文章里推荐大安读这文? 因此我将该文全文译如下:

q: (zhn)对于generic programmingq行?jin)长旉的研I? 请就此谈?
a: 我开始考虑有关gp的问题是?oq代末期, 当时我注意到有些法q不依赖于数据结构的特定实现Q而只是依赖于该结构的几个基本的语义属? 于是我开始研I大量不同的法Q结果发现大部分法可以用这U方法从特定实现中抽象出? 而且效率无损. Ҏ(gu)来说,效率是至关重要的, 要是一U算法抽象在实例化会(x)D性能的下? 那可不够?
  
   当时我认研I的正确方向是创造一U编E语a. 我和我的两个朋友一起开始干h.一个是现在的纽U州立大学教授deepak kapur, 另一个是伦塞里尔技术学院教授david musser.当时我们三个在通用?sh)器公司研究中?j)工作. 我们开始设计一U叫tecton的语a. 该语a有一U我们称?通用l构"的东? 其实不过是一些Ş式类型和属性的集合? Z可以用它来描q算? 例如一些数学方面的l构充许Z在其上定义一个代数操? _֌?扩充? 做各U各L(fng)?

   虽然有很多有的创意, 最l该研I没有取得Q何实用成? 因ؓ(f)tecton语言是函数型语言. 我们信奉backus的理念,怿自己能把~程从von neumann风格中解攑և? 我们不想使用副效? q一炚w制了(jin)我们的能? 因ؓ(f)存在大量需要用诸?状?, "副效?{观늚法.  

   我在70q代末期在tecton上面所认识C(jin)一个有的问题: 被广泛接受的adt观念有着Ҏ(gu)性的~陷. Z通常认ؓ(f)adt的特Ҏ(gu)只暴露对象行为特? 而将实现隐藏h. 一Ҏ(gu)作的复杂度被认ؓ(f)是与实现相关的属? 所以抽象的时候应予忽? 我则认识? 在考虑一?抽象)操作? 复杂?或者至是一般观念上的复杂度)必须被同时考虑在内. q一点现在已l成?jin)gp的核?j)理念之一.

   例如一个抽象的栈stackcd,  仅仅保证你pushq去的东西可以随后被pop出来是不够的,同样极端重要的是, 不管stack有多? 你的push操作必须能在常数旉内完? 如果我写?jin)一个stack, 每push一ơ就慢一? 那谁都不?x)用q个烂玩?

   我们是要把实现和界面分开, 但不能完全忽略复杂度. 复杂度必L, 而且也确实是横陈于模块的使用者与实现者之间的不成文契U? adt观念的引入是Z(jin)允许软g模块怺可替? 但除非另一个模块的操作复杂度与q个模块cM, 否则你肯定不愿意实现q种互换.如果我用另外一个模块替换原来的模块, q提供完全相同的接口和行? 但就是复杂度不同, 那么用户肯定不高? q我费口舌介l那些抽象实现的优点, 他肯定还是不乐意? 复杂度必被认ؓ(f)是接口的一部分.

   1983q左? 我{往U约布鲁克林技术大学Q? 开始研I的是图的算? 主要的合作伙伴是现在ibm的aaron kershenbaum. 他在囑֒|络法斚w是个专家, 我他相信高?high order)的思想和gp能够应用在图的算法中. 他支持我与他合作开始把q些x用于实际的网l算? 某些囄法太复杂了(jin), 只进行过理论分析, 从来没有实现q? 他企囑־立一个包含有高序的通用lg的工L(fng), q样某些法可以实C(jin). 我决定用lisp语言的一个变Uscheme语言来徏立这样一个工L(fng). 我们俩徏立了(jin)一个巨大的? 展示?jin)各U编E技?|络法是首要目? 不久当时q在通用?sh)器的david musser加了(jin)q来, 开发了(jin)更多的组?一个非常大的库. q个库供大学里的本科生? 但从未商业化. 在这工作中, 我了(jin)解到副效应是很重要的, 不利用副效应, 你根本没法进行图操作. 你不能每ơ修改一个端?vertex)旉在图上兜圈子. 所? 当时得到的经验是在实现通用法时可以把高序技术和副效应结合v? 副效应不L坏的, 只有在被错误使用时才?

   1985q夏, 我回到通用?sh)器讲授有关高序E序设计的课E? 我展CZ(jin)在构件复杂算法时q项技术的应用. 有一个听评人叫陈迩, 当时是信息系l实验室的主? 他问我是否能用ada语言实现q些技? 形成一个工业强度的? q表C可以提供支? 我是个穷助教, 所以尽我当时对于ada一无所? 我还是回{?好的". 我跟dave musser一起徏立这个ada? q是很重要的一个时? 从象scheme那样的动态类型语a(dynamically typed language)转向adaq样的强cd语言, 使我认识C(jin)强类型的重要? 谁都知道强类型有助于U错. 我则发现在ada的通用~程? 强类型是获取设计思想的有力工? 它不仅是查错工具, 而且是思想工具.q项工作l了(jin)我对于组件空间进行正交分解的观念. 我认识到, 软glg各自属于不同的类?oop的狂热支持者认Z切都是对? 但我在ada通用库的工作中认识到, q是不对? 二分查找׃是个对象, 它是个算? 此外, 我还认识? 通过组件空间分解到几个不同的方向上, 我们可以减少lg的数? 更重要的? 我们可以提供一个设计品的概念框架.

   随后, 我在贝尔实验室c++l中得到一份工? 专事库研I? 他们问我能不能用c++做类似的?我那时还不懂c++, 但当? 我说我行. 可结果我不行, 因ؓ(f)1987q时, c++中还没有模板, q玩意儿在通用~程中是个必需? l果只好用承来获取通用? 那显然不理想.直到现在c++l承机制也不大用在通用~程? 我们来说说ؓ(f)什? 很多人想用承实现数据结构和容器c? l果几乎全部一败涂? c++的承机制及(qing)与之相关的编E风格有着戏剧性的局? 用这U方式进行通用~程, q等于判断这cȝ问题都解决不了(jin). 如果你以xcM为基c? 设计?jin)一个虚函数operater==, 接受一个xcd? q由xzcy, 那么y的operator==是在拿ycd象与xcd象做比较. 以动物ؓ(f)? 定义animalc? zgiraffe(镉K?c? 定义一个成员函数mate(), 实现与另一个哺乛_物的交配操作, q回一个animal对象. 现在看看你的zcgiraffe,它当然也有一个mate()Ҏ(gu), l果一个长颈鹿同一个动物交? q回一个动物对? q成何体l?当然, 对于c++E序员来? 交配函数没那么重? 可是operator==很重要?

   对付q种问题, 你得使用模板. 用模板机? 一切如?

   管没有模板, 我还是搞出来一个巨大的法? 后来成了(jin)unix system laboratory standard component library的一部分. 在bell lab, 我从象andy koenig, bjarne stroustrup(andrew koenig, 前iso c++标准化委员会(x)d; bjarne stroustrup, c++之父 -- 译?q类专家w上学到很多东西. 我认识到c/c++的重? 它们的一些成功之处是不能被忽略的. 特别是我发现指针是个好东? 我不是说I?zhn)的指? 或是指向栈的指针. 我是说指针这个一般观? 地址的观念被q泛使用着. 没有指针我们没法描qƈ行算?

   我们现在来探讨一下ؓ(f)什么说c是一U伟大的语言. 通常Z认ؓ(f)c是编E利器ƈ且获得如此成?是因为unix是用c写的. 我不同意. 计算机的体系l构是长旉发展演变的结? 不是哪一个聪明的人创造的. 事实上是q大E序员在解决实际问题的过E中提出的要求推动了(jin)那些天才提出q些体系. 计算机经q多ơ进? 现在只需要处理字节地址索引的内? U性地址I间和指? q个q化l果是对于h们要求解决问题的自然反映. dennis ritchie天才的作品c, 正反映了(jin)演化?0q的计算机的最模? c当时q不是什么利? 但是当计机被用来处理各U问题时, 作ؓ(f)最模型的c成了(jin)一U非常强大的语言, 在各个领域解军_U问题时都非帔R? q就是c可移植性的奥秘, c是所有计机的最x象模? 而且q种抽象确实实是徏立在实际的计机, 而不是假想的计算Z? Z可以比较Ҏ(gu)的理解c背后的机器模? 比理解ada和scheme语言背后的机器模型要Ҏ(gu)的多. c的成功是因ؓ(f)c做了(jin)正确的事, 不是因ؓ(f)at&t的极力鼓吹和unix.

   c++的成功是因ؓ(f)bjarne stroustrup以c为出发点来改qc, 引入更多的编E技? 但始l保持在c所定义的机器模型框架之? 而不是闭门造R地自己搞Z个新的机器模型来. c的机器模型非常简? 你拥有内? 对象保存在那里面, 你又有指向连l内存空间的指针, 很好理解. c++保留?jin)这个模? 不过大大扩展?jin)内存中对象的范? 毕竟c的数据类型太有限? 它允怽建立新的cdl构, 但不允许你定义类型方? q限制了(jin)cdpȝ的能? c++把c的机器模型扩展ؓ(f)真正cdpȝ.

   1988q我到惠普实验室从事通用库开发工? 但实际上好几q我都是在作盘驱动? 很有但?br />   gp毫不相关. 92q我l于回到?jin)gp领域, 实验室主任bill worley建立?jin)一个算法研I? 由我
   负责. 那时候c++已经有模板了(jin). 我发现bjarne的模板设计方案是非常天才? 在bell lab? 我参
   加过有关模班设计的几个早期的讨论, 跟bjarne吵得很凶, 我认为c++的模板设计应该尽可能向ada?br />   通用Ҏ(gu)看齐. 我想可能我吵得太凶了(jin), l果bjarne军_坚决拒绝我的. 我当时就认识到在c++
   中设|模板函数的必要性了(jin), 那时候好多h都觉得最好只有模板类. 不过我觉得一个模板函数在使用
   之前必须先显式实例化, 跟ada似的. bjarneL不听我的, 他把模板函数设计成可以用重蝲机制?br />   隐式实例? 后来q个特别的技术在我的工作中变得至关重? 我发现它容许我做很多在ada中不可能
   的Q? 非常高兴bjarne当初没听我的.

q: (zhn)是什么时候第一ơ构思stl? 最初的目的是什?
a: 92q那个项目徏立时?个h, 渐渐Ch来少, 最后剩下俩, 我和李梦, 而且李小姐是q个领域的新? 在她的专业研I中~译器是主要工作, 不过Ҏ(gu)受了(jin)gp研究的想? q且坚信此项研究带lY件开发一个大变化, 要知道那时候有q个信念的认可是寥寥无几. 没有? 我可不敢惌我能搞定stl, 毕竟stl标着两个人的名字:stepanov和lee. 我们写了(jin)一个庞大的? 庞大的代码量, 庞大的数据结构组?函数对象, 适配器类, {等. 可是虽然有很多代? 却没有文? 我们的工作被认ؓ(f)是一个验证性项?其目的是搞清楚到底能不能在ɽ法可能通用化的前提下仍然具有很高的效率. 我们化了(jin)很多旉来比? l果发现, 我们法不仅最通用, 而且要率与手写代码一样高? q种E序设计风格在性能上是不打折扣? q个库在不断成长, 但是很难说它是什么时候成Z?目"? stl的诞生是好几件事情的机缘巧合才促(j)成的.

q: 什么时? 什么原因促(j)使?zhn)军_使stl成ؓ(f)ansi/iso标准c++一部分?
a: 1993q夏, andy koenig跑到斯坦来讲c++? 我把一些有关的材料l他? 我想他当时确实是很兴?他安排我9月到圣何塞给c++标准委员?x)做一个演? 我演讲的题目?c++E序设计的科?, 讲得很理论化, 要点是存在一些c++的基本元素所必须遵@? 有关基本操作的原? 我D?jin)一些例? 比如构造函? 赋值操? 相等操作. 作ؓ(f)一U语a,  c++没有什么限? 你可以用operator==()来做乘法. 但是相等操作应该是相等操作. 它要有自反?  a == a; 它要有对U? a == b ?b == a; 它还要有传递? 作ؓ(f)一个数学公? 相等操作对于其他操作是基本的要素. 构造函数和相等操作之间的联pd有公理性的东西在里? 你用拯构造函数生成了(jin)一个新对象, 那么q个对象和原来那个就应该是相{的. c++是没有做要求, 但是q是我们都必遵守这个规? 同样? 赋值操作也必须产生相等的对? 我展CZ(jin)一些基本操作的"公理", q讲?jin)一点P代子(iterator), 以及(qing)一些通用法怎样利用q代子来工作. 我觉得那是一个两时的枯燥演? 但却非常受欢q? 不过我那时ƈ没有xq个东西塞在标准? 它毕竟是太过先进的编E技? 大概q不适于出现在现实世界里, 恐怕那些做实际工作的h对它没什么兴?

   我是?月做q个演讲? 直到ơ年(1994)? 我都没往ansi标准上动q什么脑{? 1?? 我收到andy koenig的一信(他那时是标准文档目~辑), 信中说如果我希望stl成ؓ(f)标准库的一部分, 可以??5日之前提交一份徏议到委员? 我的{复?"andy, 你发疯了(jin)?", 他答复道:"不错, 是的我发疯了(jin), Z么咱们不疯一ơ试试看?"

   当时我们有很多代? 但是没有文档, 更没有正式的? 李小姐和我每星期工作80时, l于在期限之前写Z份正式的? 当是时也, 只有andy一个h知道可能?x)发生些什? 他是唯一的支持? 在那D|子里他确实提供了(jin)很多帮助. 我们把徏议寄出去? 然后是{待. 在写的过E中我们做了(jin)很多? 当你把一个东西写下来, 特别是想C写的可能?x)成为标? 你就?x)发现设计中的所有纰? 寄出标准?我们不得不一D一D重写了(jin)库中间的代码, 以及(qing)几百个组? 一直到3月䆾圣P戈会(x)议之? 然后我们又重C订了(jin)? 因ؓ(f)在重新写代码的过E中, 我们又发现徏议书中间的很多瑕?

q: (zhn)能描述一下当时委员会(x)里的争论? 一开始是被支持呢, q是反对?
a: 我当时无法预料会(x)发生些什? 我做?jin)一个报? 反响很好. 但当时有许多反对意见. 主要的意见是:q是一份庞大的, 而且来得太晚, 前一ơ会(x)议上已经做出册, 不在接受M大的. 而这个东西是有史以来最大的, 包括?jin)一大堆新玩? 投票的结果很有趣, 压倒多数的意见认ؓ(f)应对q行再考虑, q把投票推迟Cơ会(x)? 是后来众所周知的滑铁卢?x)?

   bjarne stroustrup成了(jin)stl的强有力支持? 很多人都通过、更改和修订的方式给予了(jin)帮助。bjarneq脆跑到q来跟我们一起工作了(jin)一个礼拜。andy更是无时无刻的帮助我们。c++是一U复杂的语言Q不是总能搞得清楚切的含义的。差不多每天我都要问a(chn)ndy和bjarne c++能不能干q干那。我得把Ҏ(gu)的荣誉归于andyQ?是他提出把stl作ؓ(f)c++标准库的一部分Q而bjarne也成?jin)委员?x)中stl的主要鼓吹者。其他要感谢的hq有Qmike vilotQ标准库组的负责hQ?rogue wave公司的nathan myers(rogue wave是boland c++builder中stlҎ(gu)的提供商 —?译?Qandersen咨询公司的larry podmolik。确实有好多致谢?br />
   在圣q戈提出的stl实际与当时的c++Q我们被要求用新的ansi/iso c++语言Ҏ(gu)重写stlQ这些特性中有一些是未实现的。ؓ(f)?jin)正用这些新的、未实现的c++Ҏ(gu),bjarne和andy׃(jin)无以计数的时间来帮助我们?br />
   Z希望容器独立于内存模式,q有点过分,因ؓ(f)语言本nq没有包括内存模式。所以我们得要想Z些机制来抽象内存模式。在stl的早期版本里Q假定容器的容积可以用size_tcd来表C,q代子之间的距离可以用ptrdiff_t来表C。现在我们被告知Q你Z么不抽象的定义这些类型?q个要求比较高,q语a本n都没有抽象定义这些类型,而且c/c++数组q不能被q些cd定义所限定。我们发明了(jin)一个机制称?allocator"Q封装了(jin)内存模式的信息。这个机制深d影响?jin)库中间的每一个组件。你可能疑惑Q内存模式和法或者容器类接口有什么关p?如果你用size_tq样的东西,你就无法使用 t* 对象Q因为存在不同的指针cd(t*, t huge *, {等)。这样你׃能用引用,因ؓ(f)内存模式不同的话Q会(x)产成不同的引用类型。这样就?x)导致标准库产生庞大的分支?br />
   另外一仉要的事情是我们原先的兌cd数据l构被扩展了(jin)。这比较Ҏ(gu)一些,但是最为标准的东西L很困隄Q因为我们做的东西h们要使用很多q。从容器的观点看Qstl做了(jin)十分清楚的二分法设计。所有的容器c被分成两种Q顺序的和关联的Q就好像常规的内存和按内容寻址的内存一般。这些容器的语义十分清楚?br />
   当我到滑铁卢以后Qbjarne用了(jin)不少旉来安慰我不要太在意成败与否,因ؓ(f)虽然看上M乎不?x)成功,但是我们毕竟做到了(jin)最好。我们试q了(jin)Q所以应该坦焉寏V成功的期望很低。我们估计大部分的意见将是反寏V但是事实上Q确实有一些反Ҏ(gu)见,但不占上风。滑铁卢投票的结果让人大跌眼镜,80%赞成Q?0%反对。所有h都预期会(x)有一场恶战,一场大论战。结果是实有争论,但投是压倒性的?br />
q: stl对于1994q?月发行的ansi/iso c++工作文g中的cd有何影响Q?br />a: stl被放q了(jin)滑铁卢会(x)议的工作文g里。stl文档被分解成若干部分Q放在了(jin)文g的不同部分中。mike
   vilot负责此事。我q没有过多地参与~辑工作Q甚至也不是c++委员?x)的成员。不q每ơ有关stl?br />   都由我来考虑。委员会(x)考虑q是满周到的?br />
q: 委员?x)后来又做?jin)一些有x板机制的改动Q哪些媄(jing)响到?jin)stlQ?br />a: 在stl被接受之前,有两个变化媄(jing)响到?jin)我们修订stl。其一是模板类增加?jin)包含模板函数的能力。stlq泛C用了(jin)q个Ҏ(gu)来允许你徏立各U容U_器的容器。一个单独的构造函数就能让你徏立一个能容纳list或其他容器的vector。还有一个模板构造函敎ͼ从P代子构造容器对象,你可以用一对P代子当作参数传给它,q对q代子之间的元素都会(x)被用来构造新的容器类对象。另一个stl用到的新Ҏ(gu)是把模板自w当作模板参Cl模板类。这Ҏ(gu)术被用在刚刚提到的allocator中?br />
q: 那么stl影响?jin)模板机制吗Q?br />a: 在弗基山L(fng)?x)议中,bjarnel模板增加一个“局部特D化?partial specialization)的特性。这个特性可以让很多法和类效率更高Q但也会(x)带来代码体积上的问题。我跟bjarne在这个徏议上共同研究?jin)一D|_(d)q个是Z(jin)使stl更高效而提出的。我们来解释一下什么是“局部特D化”。你现在有一个模板函?swap( t&, t& )Q用来交换两个参数。但是当t是某些特D的cd参数Ӟ你想做一些特D的事情。例如对于swap( int&, int& )Q你想用一U特别的操作来交换数据。这一点在没有局部特D化机制的情况下是不可能的。有?jin)局部特D化机制Q你可以声明一个模板函数如下:(x)
  
       template <class t> void swap( vector<t>&, vector<t>& );

   q种形式lvector容器cȝswap操作提供?jin)一U特别的办法。从性能的角度讲Q这是非帔R要的。如果你用通用的Ş式去交换vectorQ会(x)使用三个赋值操作,vector被复制三ơ,旉复杂度是U性的。然而,如果我们有一个局部特D化的swap版本专门用来交换两个vectorQ你可以得到一个时间复杂度为常数的Q非常快的操作,只要Udvector头部的两个指针就ok。这能让vector上的sort法q行得更快。没有局部特D化Q让某一U特D的vectorQ例如vector<int>q行得更快的唯一办法是让E序员自己定一个特D的swap函数Q这行得通,但是加重?jin)程序员的负担。在大部分情况下Q局部特D化机制能够让算法在某些通用cM表现得更高效。你有最通用的swapQ不那么通用的swapQ更不通用的swapQ完全特D的swapq么一pd重蝲的swapQ然后你使用局部特D化Q编译器?x)自动找到最接近的那个swap。另一个例子copy。现在我们的copy是通过q代子一个一个地拯。用模板特D化可以定义一个模板函敎ͼ(x)

template <class t> t** copy( t**, t**, t** );

   q可以用memcpy高效地拷贝一pd指针来实玎ͼ因ؓ(f)是指针拷贝,我们可以不必担心(j)构造对象和析构对象的开销。这个模板函数可以定义一ơ,然后供整个库使用Q而且用户不必操心(j)。我们用局部特D化处理?jin)一些算法。这是个重要的改q,据我所知在弗基p?x)议上得C(jin)好评Q将来会(x)成ؓ(f)标准的一部分?后来的确成了(jin)标准的一部分 —?译者)(j)

q: 除了(jin)标准cd外,stl寚w一cȝ应用E序来说最有用处?
a: 我希望stl能够引导大家学习(fn)一U新的编E风|(x)通用~程。我怿q种风格适用于Q何种cȝ应用E序。这U风格就是:(x)用最通用的方式来写算法和数据l构。这些结构所要求的语义特性应该能够被清楚地归cd分类Q而这些归cdcȝ原则应该是Q何对象都能满的。理解和发展q种技术还要很长时_(d)stl不过是这个过E的L(fng)?br />
   我们最l会(x)寚w用的组件有一个标准的分类Q这些组件具有精?j)定义的接口和复杂度。程序员们将不必在微观层ơ上~程。你再也不用d一个二分查扄法。就是在现在Qstl也已l提供了(jin)好几个通用的二分查扄法,凡是能用二分查找法的场合,都可以用这些算法。算法所要求的前提条件很:(x)你只要在代码里用它。我希望所有的lg都能有这么一天。我们会(x)有一个标准的分类Qh们不用再重复q些工作?br />
   q就是douglas mcilroy的梦惻I他在1969q关于“构件工厂”的那篇著名文章中所提出来的东西。stl是q种“构件工厂”的一个范例。当?dng)q需要有L的力量介入这U技术的发展之中Q光靠研I机构不行,工业界应该想E序员提供组件和工具Q帮助他们找到所需的组Ӟ把组件粘合到一P然后定复杂度是否达到预期?br />
q: stl没有实现一个持久化(persistent)对象容器模型。map和multimapg是比较好的候选者,它们可以把对象按索引存入持久对象数据库。?zhn)在此方向上做了(jin)什么工作吗Q或者对q类实现有何评论Q?br />aQ很多h都注意到q个问题。stl没实现持久化是有理由的。stl在当时已l是能被接受的最巨大的库?jin)。再大一点的话,我认为委员会(x)肯定不会(x)接受。当然持久化是确实是一些h提出的问题。在设计stlQ特别是设计allocatorӞbjarne认ؓ(f)q个装?jin)内存模式的lg可以用来装持久性内存模式。bjarne的洞察秋毫非常的重要和有,好几个对象数据库公司正在盯着q项技术?994q?0月我参加?jin)object database management group的一个会(x)议,我做?jin)一个关于演说。他们非常感兴趣Q想让他们正在Ş成中的组件库的接口与stl一_(d)但不包括allocator在内。不q该集团的某些成员仔l分析了(jin)allocator是否能够被用来实现持久化。我希望与stl接口一致的lg对象持久化方案能在接下来的一q里出现?br />
qQsetQmultisetQmap和multimap是用U黑?wi)实现的Q?zhn)试过用其他的l构Q比如b*?wi)来实现吗?br />aQ我不认为b*适用于内存中的数据结构,不过当然qg事还是应该去做的。应该对许多其他的数据结构,比如跌(skip list)、展树(wi)(splay tree)、半q?half-balanced tree){,也实现stl容器的标准接口。应该做q样的研I工作,因ؓ(f)stl提供?jin)一个很好的框架Q可以用来比较这些结构的性能。结口是固定的,基本的复杂度是固定的Q现在我们就可一个对各种数据l构q行很有意义的比较了(jin)。在数据l构领域里有很多人用各种各样的接口来实现不同的数据结构,我希望他们能用stl框架来把q些数据l构变成通用的?br />   Q译者注Q上面所提到的各U数据结构我以ؓ(f)大多q急需Q而一个stl没有提供而又是真正重要的数据l构是哈希结构。后来在stepanov和matt austern{h的sgi*stl中增补了(jin)hashsetQhashmap和hashtable三种容器Q得这个stl实现才比较完满。众所周知Q红黑树(wi)的时间复杂度为o(logn), 而理想hashl构为o(1)。当?dng)如果实现了(jin)持久化Qb+?wi)也是必ȝ。)(j)

qQ有没有~译器厂商跟(zhn)一起工作来把stl集成C们的产品中去Q?br />aQ是的,我接C(jin)很多厂家的电(sh)话。borland公司的peter becker出的力特别大。他帮助我实C(jin)对应borland~译器的所有内存模式的allocatorlg。symantec打算Z们的macintosh~译器提供一个stl实现。edison设计集团也很有帮助。我们从大多数编译器厂商都得C(jin)帮助?br />   Q译者注Q以目前的stl版本来看Q最?gu)的无疑是sgi*stl和ibm stl for as/390Q所有windows下的的stl实现都不令h满意。根据测试数据,windows下最好的stlq行在piii 500mhz上的速度q远落后与在250mhz sgi工作站(irix操作pȝQ上q行的sgi*stl。以我个人经验,linux也是q行stl的极?jng)_^台。而在windows的stl实现中,又以borland c++builder的rogue wave stl为最差,其效率甚至低于jit执行方式下的java2。visual c++中的stl是著名大师p. j. plauger的个Z品,性能较好Q但其queuelg效率很差Q慎用)(j)

qQstl包括?jin)对ms-dos?6位内存模式编译器的支持,不过当前的重Ҏ(gu)然是?2位上U性内存模?flat model)的操作系l和~译器上。?zhn)觉得q种面向内存模式的方案以后还?x)有效吗Q?br />aQ抛开intel的体pȝ构不谈,内存模式是一个对象,装?jin)有x针的信息Q这个指针的整型寸和距ȝ型是什么,相关的引用类型是什么,{等。如果我们想利用各种内存Q比如持久性内存,׃n内存{等Q抽象化的工作就非常重要?jin)。stl的一个很漂亮的特性是整个库中唯一与机器类型相关的部分——代表真实指针,真实引用的组件——被装到大U?6行代码里Q其他的一切,容器、算法等{,都与机器无关Q真是牛啊!Q。从UL的观点看Q所有及(qing)其相关的东西Q象是地址记法Q指针等Q都被封装到一个微的Q很好理解的机制里面。这样一来,allocator对于stl而言׃是那么重要了(jin)Q至不像对于基本数据结构和法的分解那么重要?br />

qQansi/iso c标准委员?x)认为像内存模式q类问题是^台相关的Q没有对此做Z么具体规定。c++委员?x)?x)不会(x)采取不同的态度Qؓ(f)什么?
aQ我认ؓ(f)stl在内存模式这一点上跟c++标准相比是超前的。但是在c和c++之间有着显著的不同。c++有构造函数和new操作W来对付内存模式问题Q而且它们是语a的一部分。现在看来似乎让new操作W像stl容器使用allocater那样来工作是很有意义的。不q现在对问题的重要性不像stl出现之前那么显著?jin),因?f)在大多数场合Qstl数据l构让new׃。大部分Z再需要分配一个数l,因ؓ(f)stl在做q类事情上更为高效。要知道我对效率的迷信是无以复加的,可我在我的代码里从不使用newQ汇~代码表明其效率比用new时更高。随着stl的广泛用,new?x)逐渐淡出江湖。而且stl永远都会(x)C回收内存Q因为当一个容器,比如vector退Z用域Ӟ它的析构函数被调用,?x)把容器里的所有东襉K析构。你也不必再担心(j)内存泄漏?jin)。stl可以戏剧性地降低对于垃圾攉机制的需求。用stl容器Q你可以为所Ʋؓ(f)Q不用关?j)内存的理Q自有stl构造函数和析构函数来对付?br />

qQc++标准库子委员?x)正在制订标准名I间QnamespaceQ和异常处理机制。stlcM(x)有名I间吗,?x)抛出?br />常吗Q?br />aQ是的。该委员?x)的几个成员正在考虑qg事,他们的工作非常卓?br />
qQ现在的stl跟最l作为标准的stl?x)有多大不同Q委员会(x)?x)不会(x)干预某些变化,新的设计会(x)不会(x)被严格地?br />制v来?
aQ多Ch的意见看h是不希望对stl做Q何重要的改变?br />
qQ在成ؓ(f)标准之前Q程序员们怎样的一些stll验Q?br />aQ他们可以从butler.hpl.hp.com/stl当下stl头文Ӟ在borland和ibm或其他够强劲的的编译器中用它。学?fn)这U编E技术的唯一途径是编E,看看范例Q试着用这U技术来~程?br />
qQ?zhn)正在和p. j. plauger合作一本stl的书。那本书的重Ҏ(gu)什么?什么时候面世?
aQ计?5q夏天面世,重点是对stl实现技术的详解Q跟他那本标准c库实现和标准c++库实现的书类伹{他?br />q本书的W一作者。该书可以作为stl的参考手册。我希望跟bjarne合作另写一本书Q在c++/stl背景下介l语a与库的交互作用?br />
   好多工作都等着要做。ؓ(f)?jin)stl的成功,Z需要对q种~程技术进行更多的试验性研IӞ更多的文章和书籍应该Ҏ(gu)提供帮助。要准备开设此c课E,写一些入门指南,开发一些工具帮助h们O游stl库。stl是一?br />框架Q应该有好的工具来帮助用这个框架?br />   Q译者注Q他说这番话Ӟq没有预计到在接下来的几q里?x)发生什么。由于internet的大爆炸和java、vb、delphi{语a的巨大成功,工业界的重心(j)一下子从经典的软g工程领域转移到internet上。再加上标准c++直到98q才制订Q完全符合要求的~译器直到现在都q没有出玎ͼstlq没有立LZh们心(j)中的x焦点。他提到的那本书也迟q不能问世,直到前几天(2001q元旦之后)(j)Q这本众Z已期盼的书终于问世,由p. j. plauger, alexander stepanov, meng lee, david musser四大高手联手奉献Qprentice hall出版。不q该书主要关注的是stl的实现技术,不适用于普通程序员?br />
     另外p. j. plauger做一个简介:(x)其h是标准c中stdio库的早期实现者之一Q?1q的一本关于标准c库的书他名满天下。他现在是c/c++ use's journal的主~,与microsoft保持着良好的,甚至是过分亲密的关系Qvisual c++中的stl和其他的一些内容就是出自他的那只生花妙W。不q由于跟ms的关pdl媄(jing)响到?jin)他的中立Ş象,现在有不h对他有意见?br />
     至于stepanov惌中的那本与stroustrup的书Qv码目前是没听说。其实这两位都是典型的编E圣手,跟ken thompson和dennis ritchie是一路的Q懒得亲自写书,往往做个W二作者。如果作为第一作者,写出来的书肯定是学院呛_I跟标准文件似的,不适合一般程序员阅读。在计算机科学领域,~程圣手同时又是写作高手的h是凤毛麟角,最著名的可能是外星人d. e. knuth, c++领域里则首推前面提到的andrew koenig。可惜我们中国程序员无缘看到他的书。)(j)

qQ通用~程跟oop之间有什么关p?
aQ一句话Q通用~程是oop基本思想的自然gl。什么是oop的基本思想呢?把组件的实现和接口分开Qƈ且让lgh多态性。不q,两者还是有Ҏ(gu)的不同。oop在程序构造中语言要素的语法。你必须得承,使用c,使用对象Q对象传递消息。gp不关?j)你l承或是不承,它的开端是分析产品的分c,有些什么种c,他们的行为如何。就是说Q两件东西相{意味着什么?怎样正确地定义相{操作?不单单是相等操作那么单,你往深处分析׃(x)发现“相{”这个一般观忉|味着两个对象部分Q或者至基本部分是相等的,据此我们可以有一个通用的相{操作。再说对象的U类。假讑֭在一个顺序序列和一l对于顺序序列的操作。那么这些操作的语义是什么?从复杂度权衡的角度看Q我们应该向用户提供什么样的顺序序列?该种序列上存在那些操作?那种排序是我们需要的Q只有对q些lg的概念型分类搞清楚了(jin)Q我们才能提到实现的问题Q用模ѝ承还是宏Q用什么语a和技术?gp的基本观Ҏ(gu)把抽象的软glg和它们的行ؓ(f)用标准的分类学分c,出发点就是要建造真实的、高效的和不取决于语a的算法和数据l构。当然最l的载体q是语言Q没有语a没法~程。stl使用c++Q你也可以用ada来实玎ͼ用其他的语言来实C行,l果?x)有所不同Q但基本的东西是一L(fng)。到处都要用C分查扑֒排序Q而这是Z正在做的。对于容器的语义Q不同的语言?x)带来轻微的不同。但是基本的区别很清楚是gp所依存的语义,以及(qing)语义分解。例如,我们军_需要一个组件swapQ然后指?gu)个组件在不同的语a中如果工作。显焉Ҏ(gu)语义以及(qing)语义分类。而oop所的(我认为是q分的)(j)是清楚的定义cM间的层次关系。oop告诉?jin)你如何建立层次关系Q却没有告诉你这些关pȝ实质?br />   Q这D不太好理解Q有一些术语可能要q一D|间才?x)有合适的中文译——译者)(j)

qQ?zhn)对stl和gp的未来怎么?
aQ我刚才提到q,E序员们的梦x拥有一个标准的lg仓库Q其中的lg都具有良好的、易于理解的和标准的接口。ؓ(f)?jin)达成这一点,gp需要有一门专门的U学来作为基和支柱。stl在某U程度上开始了(jin)q项工作Q它对于某些基本的组件进行了(jin)语义上的分类。我们要在这上面下更多的功夫Q目标是要将软g工程从一U手工艺技术{化ؓ(f)工程学科。这需要一门对于基本概늚分类学,以及(qing)一些关于这些基本概늚定理Q这些定理必LҎ(gu)理解和掌握的Q每一个程序员即不能很清楚的知道q些定理Q也能正地使用它。很多hҎ(gu)不知道交换律Q但只要上过学的人都知道2+5{于5+2。我希望所有的E序员都能学?fn)一些基本的语义属性和基本操作Q赋值意味着什么?相等意味着什么?怎样建立数据l构Q等{?br />
   当前Qc++是gp的最佌体。我试过其他的语aQ最后还是c++最理想地达成了(jin)抽象和高效的l一。但是我觉得可能设计ZU语aQ基于c和很多c++的卓思想Q而又更适合于gp。它没有c++的一些缺P特别是不?x)像c++一样庞大。stl处理的东西是概念Q什么是q代子,不是c,不是cdQ是概念。说得更正式一些,q是bourbaki所说的l构cdQstructure typeQ,是逻辑学家所说的理念QtheoryQ,或是cd理论学派的h所说的U类QsortQ,q种东西在c++里没有语a层面上的对应物(原文是incarnationQ直译ؓ(f)肉n——译者)(j)Q但是可以有。你可以拥有一U语aQ用它你可以探讨概念,_֌概念Q最l用一U非常“程序化”(programmaticQ直译ؓ(f)节目的,在这里是指符合程序员?fn)惯的——译者)(j)的手D|它们转化为类。当然确实有一些语a能处理种c(sortsQ,但是当你x序(sortQ时它们没什么用处。我们能够有一U语aQ用它我们能定义叫做foward iteratorQ前向P代子Q的东西Q在stl里这是个概念Q没有c++对应物。然后我们可以从forword iterator中发展出bidirectional iteratorQ双向P代子Q,再发展出random iterator。可能设计一U语a大ؓ(f)化gpQ我完全怿该语a_高效Q其机器模型与c/c++充分接近。我完全怿能够设计ZU语aQ一斚w可能地靠近机器层面以达成绝对的高效Q另一斚w能够处理非常抽象化的实体。我认ؓ(f)该语a的抽象性能够超qc++Q同时又与底层的机器之间契合得天衣无~。我认ؓ(f)gp?x)?jing)响到语言的研I方向,我们?x)有适于gp的实用语a。从q些话中你应该能猜出我下一步的计划?br />
mengyan
译于2001q??br />


仄洛 2006-09-10 20:52 发表评论
]]>
þùһƬѹۿ| һɫþHEZYO| Ʒþùһ㽶 | һƷþ| Ʒþ| Ʒþþþþ | þľƷĻ| ޹㽶ˬAVƬþ| ھƷ˾þþþø| AVþþƷ| þ㽶߿ۿ99| ҹӰԺþþƷѿһ | ޾ƷŮþþ| þ㽶߿ۿ99| þĻ| þþƷëƬѹۿ| پþþƷþ| һɫþ99һۺ| ۿþ| þþƷ޾Ʒ2020 | ˾þƵ| þþþþþƷþþþ| ޾Ʒþ| ޾ƷþþӰԺӰƬ| Բľþþþþ| av˾þۺɫ | þùҹAVӰԺ| ޹Ʒþһ| һƷþ| þþþAV鶹| 㽶þ99| պŷþþwwwۺ| һþ֪ۺϾþ| ŷۺϾþͼƬ| ޹ƷȾþ| ɫۺϾþþþר| պƷþһ| ɫۺϾþ| þ99Ʒþþþ| ۺϾƷ㽶þ| ĻƷþþþþ3Dն|