摘要: 1. 生成一个名为autover的项目 注意项目的Properties文件夹下有一个名为AssemblyInfo.cs的文件,autover程序的版本号就写在它里面。2. 创建模板文件在Windows的资源管理器中进入Properties文件夹,把AssemblyInfo.cs文件复制一份,命名为AssemblyInfo.template.cs,并把它加入到项目中来。3. 修改AssemblyInfo.template.cs的属性 AssemblyInfo.template.cs文件是用来自动生成版本号的模板文件,它不应该被编译,所以我们要把它的Build Action改成None,如下图所示 阅读全文
posted @ 2013-08-23 14:54 wanghui 阅读(6006) 评论(0) 推荐(0) 编辑
摘要: 如果你喜欢在创业型公司中工作,如果你期望你的工作中充满激情和挑战,如果渴望技术上的升华和事业的成功,来吧,这里是你必然的选择!我们的终极目标是成为全球顶尖的医学影像软件的研发团队。我在说大话?首次创业1800万美元被并购已成往事,如今3000万红杉资本融资更不在话下,哥伦比亚大学医学院的合作水到渠成,对垒GE西门子胜之不武。这里有谢绝微软工程院院长盛情邀请,二次创业的CEO,这里有放弃15万美金年薪毅然归国加入团队的顶尖研发高手,这里有来自清华、北大的博士硕士,这就是我们的研发团队,一个充满豪情和勇气的团队。我们期待你的加入,我们也因有你而更加自豪。想了解我们么?参见http://www.hi 阅读全文
posted @ 2012-01-20 21:00 wanghui 阅读(2484) 评论(0) 推荐(0) 编辑
摘要: 两年前从网上看到一道面试题:用两个栈(Stack)实现一个队列(Queue)。觉得不错,就经常拿来面试,几年下来,做此题的应该有几十人了。通过对面试者的表现和反应,有一些统计和感受,在此做个小结。用C++描述,题目大致是这样的:已知下面Stack类及其3个方法Push、Pop和 Count,请用2个Stack实现Queue类的入队(Enqueue)出队(Dequeue)方法。class Stack{…public: void Push(int x); // Push an element in stack; int Pop(); // Pop an element out of stack; 阅读全文
posted @ 2011-11-22 20:02 wanghui 阅读(101318) 评论(42) 推荐(30) 编辑
摘要: 目录 前言 框架设计 代码实现 单元测试 后记 参考资料 前言 终于结束赋闲在家的状态,又走上研发经理的岗位。老板“教导”我说:“作为‘空降’的管理者,要想得到团队中其他成员的信任和认可,必须身先士卒,去解决开发中难题。”言下之意很明显,得先干Hands-on的工作。于是我便有了做现有系统图形操作的撤销和恢复(Undo/Redo)功能的任务,因为这项工作被其他人认为是比较难啃的骨头(原因是你要在现有功能的实现代码中加入这个 Undo/Redo,而这些代码是由多人写的,要读懂它们就得费不少功夫,最多的一个操作2000多行代码,还不算间接调用的函数)。 当然,实现具体功能的Undo/Re... 阅读全文
posted @ 2011-08-29 22:55 wanghui 阅读(17420) 评论(12) 推荐(13) 编辑
摘要: 一般讲排序算法的文章,为了方便说明算法本身,待排序元素的类型一般使用整型。还有些文章讲泛型排序,待排序元素可以是任意类型,但对于待排序序列,却一般只支持某一种存储形式,比如定长数组,比如std::vector,但不能同时支持它们。那么我们有没有办法使用泛型技术即支持任意元素类型又支持大多数常用的序列类型进行排序呢? 1. 现有的泛型排序 我们知道STL支持几种泛型排序,像sort,stable_sort,partial_sort,list::sort,但是它们都有一些限制。 - sort和partial_sort只支持支持随机访问迭代器RandomAccessIterator的序列,像vect 阅读全文
posted @ 2011-06-23 16:03 wanghui 阅读(3393) 评论(10) 推荐(4) 编辑
摘要: 昨天晚上参加了SCRUM中文网举办的“启动敏捷实施的5项准备”讲座,演讲人是国际知名敏捷顾问、Scrum导入专家Arne Ahlander。他的演讲时间不长,PPT只有10页左右,因为我对导入SCRUM多少也有所了解,所以倒没觉得演讲有什么新东西,但是演讲后的Q/A环节,从他的一些观点中我还是有所收获的。 1. 伤不起的“最佳实践(Best Practice)” 演讲后的Q/A环节,有位与会者问Arne有没有什么“最佳实践”可以帮助企业顺利导入敏捷或SCRUM。Arne马上澄清一点:“我不会使用Best Practice一词,而是使用Good Practice,因为Good Practice意 阅读全文
posted @ 2011-06-11 15:32 wanghui 阅读(1907) 评论(4) 推荐(3) 编辑
摘要: 两个月前,写了篇随笔《XML Web Service示例》,当时是基于.NET 2.0实现的,后来有位网友说现在都用WCF了,于是初步学习了一下WCF,将这个示例在.NET 3.5下用WCF实现了一下,现在再写篇随笔,以记录实现的过程。 服务示例的目的没变,还是根据客户程序的请求返回一幅图像。不过这次改在Windows 7 64位家庭高级版和IIS 7.5上实现,开发环境仍是VS2008。 1. 创建WCF Service Library 打开VS2008,选择File/New/Project菜单项,在打开的New Project对话框中,依次选择Visual C# -> WCF -&g 阅读全文
posted @ 2011-06-10 13:33 wanghui 阅读(4018) 评论(5) 推荐(3) 编辑
摘要: 闺女上一年级,放假了,老师要求假期里每天做20道100以内加减法的算术题。我一想,这好几十天,每天出20道,时间长了也够烦的。再说出出来的题,也不一定各种题目都能出到。干脆编个程序,自动出题得了。于是,程序的需求归纳为: 随机生成N道M以内非负整数加减法的算术题,题目应该在概率上均匀分布。 (注:以下C++代码在VS2008上调试运行通过) 准备: 为了将分布情况可视化,需要一个分布统计的类... 阅读全文
posted @ 2011-06-07 13:51 wanghui 阅读(5398) 评论(49) 推荐(16) 编辑
摘要: 明天又要去参加一次面试。每次面试的时候,面试官都会在最后给面试者一些时间,来问问题。这是个非常好的机会,能按照自己的思路,来了解职位、技术、企业文化、福利待遇、企业状况和前景等情况,以弥补前面面试过程中没有了解到的情况。但较早以前面试准备不太充分,虽然也能地问上一些问题,但挂一漏万,每次回来后,总觉得对企业、对职位没有完全了解清楚,不能依此作出很理性的决断。去?还是不去?往往还是靠大概其的感觉而定。后来,我总结出了一张问题表,等让我问问题的时候,可以有针对性地提出来,来进一步了解职位和企业。今天又把它拿出来,复习复习,同时也跟大家分享一下,看看大家还有那些问题会问,也取取经。1. 关于职位a) 阅读全文
posted @ 2011-05-25 15:28 wanghui 阅读(106718) 评论(62) 推荐(65) 编辑
摘要: 今天收拾东西,收拾出一份打印出来的PPT,内容是2007年搞的一个团队建设活动——“造桥”的说明。当时公司美国总部的工程副总裁和首席构架师来北京这边出差,他们把这个已在美国那边团队搞得比较成功的活动推广到我们这边。活动就是把公司的人分成若干组,每个组按分工,有执行官、经理、设计师和工人。根据“客户”的需求,利用冰棍棍和胶等材料在限定的时间和预算里建造出一座跨度至少47厘米,宽至少10厘米,能承重至少2.5公斤(一包500张复印纸的重量)的桥。活动在紧张、热烈、愉快、兴奋的气氛中进行。最终,最成功的一个团队,他们的桥承受住了5包复印纸的重量(12.5公斤)而没有坍塌。 活动参与者绝大部分是研发工 阅读全文
posted @ 2011-05-24 14:14 wanghui 阅读(4394) 评论(3) 推荐(2) 编辑
摘要: 闺女上一年级,昨天做错一道算术题。题目是这样的: 三名老师带领一年级82名同学去春游,下面两种客车各租1辆。 客车1:限坐44人; 客车2:限坐39人; 请问:座位够吗?多几个或缺几个座位? 闺女的答案是:够。多1个座位。44+39-82=1(个) 但是标准答案是:不够。少2个座位。3+82-44-39=2(个)(因为3个老师还需要3个座位。) 我为了启发闺女应该考虑老师的座位,于是问她:“你觉得老师应该坐在哪?”闺女毫不迟疑地回答说:“我们春游坐车的时候,老师都是站着的。”我当时哑然。 闺女的答案错了么?她并没有忽略三个老师的存在(这跟审题时没有注意到“老师”这个条件是有区别的),但她用自己 阅读全文
posted @ 2011-05-20 11:08 wanghui 阅读(3117) 评论(29) 推荐(7) 编辑
摘要: me.ThisBlog.Goal = “引起一些大家对函数式编程的关注和对面向对象地位的反思”;me.ThisBlog.Style = “侃大山”;if (you.Expectation == “看到一篇技术博客”){ return null;}ReadBlog();return you.Comments;void ReadBlog(){写完《你以为你了解面向对象设计么?》,鬼使神差地看了一些文章,使我对函数式语言产生了极大的好奇。-首先,在博客园“面向对象”栏目,紧接着我那篇随笔,有个网友转发了InfoQ上的一篇文章“对象已死?”。-其次,在“读书区”看了博客“《黑客与画家》:出身于大牛程序 阅读全文
posted @ 2011-05-17 14:56 wanghui 阅读(9057) 评论(12) 推荐(7) 编辑
摘要: 你以为你了解面向对象设计么?你可能说:“是的,我了解!”那么好,来看一个例子。下面这个设计,你认为是面向对象设计么?Button类的代码如下: public class Button { private Lamp lamp; public void Poll() { if (/* some condition*/) { lamp.TurnOn(); } } }你可能会说,这个设计用到了封装、继承和多态,这难道不是面向对象的三大机制么?那么好,你的回答说明你已经很了解面向对象的基础知识了。但是这就是面向对象设计了么?百度百科里关于面向对象设计是这么定义的:“面向对象设计模式是‘好的面向对象设计’ 阅读全文
posted @ 2011-05-10 21:35 wanghui 阅读(5057) 评论(75) 推荐(7) 编辑
摘要: 原文:http://www.infoq.com/cn/articles/scrum-principle-negative-symptoms Scrum框架及其背后的原则(下)——框架背后的原则及实施过程不良症状分析 作者 何勉 发布于 2011年5月4日 上午12时0分 社区 敏捷 主题 企业级敏捷 标签 Scrum , 最佳实践 本文在上半部分以伪代码的形式讲述了Scrum 的基本框架,图(一)是对该框架的总结。如此简单的框架如何能提升组织的能力?做到什么才能保障Scrum实施的成功,并从中受益?理解和贯彻Scrum框架背后的原则是关键。 图(一)Scrum 总体框架 PPT格式大图下载链. 阅读全文
posted @ 2011-05-05 10:44 wanghui 阅读(809) 评论(0) 推荐(1) 编辑
摘要: 爱之花:你能看到玫瑰花瓣中的两个爱人吗? 【解析】瑞士艺术家桑德罗·戴尔·普瑞特创作了这幅充满浪漫情调的、有歧义的、含义模棱两可的幻觉作品。 “弗雷泽螺旋”是最有影响的幻觉图形之一。你所看到的好像是个螺旋,但其实它是一系列完好的同心圆!这幅图形如此巧妙,以至于会促使你的手指沿着错误的方向追寻它的轨迹。 【解析】每一个小圆的“缠绕感”通过大圆传递出去产生了螺旋效应。遮住插图的一半,幻觉将不再起作用。1906年英国心理学家詹姆斯·弗雷泽创造了以整个系列的缠绕线幻觉图片。 长度与透视:线AB和线CD长度完全相等,虽然它们看起来相差很大。 谢泼德桌面:这两个桌面的大小、形 阅读全文
posted @ 2011-05-03 13:10 wanghui 阅读(3052) 评论(0) 推荐(0) 编辑
摘要: 原文:http://www.infoq.com/cn/news/2011/04/how-to-split-user-stories如何切分用户故事 作者 Dan Puckett译者 侯伯薇 发布于 2011年4月21日 上午8时14分 社区 敏捷 主题 敏捷技术 标签 需求分析, 用户故事 在把用户故事切分成小块,从而更好地利用敏捷技术时,很多新组建的敏捷团队都会遇到困难。 敏捷社区的成员在多篇文章中为如何有效地切分用户故事提供了指导。 当把庞大的用户故事切分成小块时,是否有一些一般的准则供我们遵循呢? Rachel Davies建议对每个用户故事都要进行切分,从而让产出的软件: 能够工作交付 阅读全文
posted @ 2011-04-28 20:41 wanghui 阅读(636) 评论(0) 推荐(0) 编辑
摘要: 今天一个偶然的机会打开了自己以前写的旧程序,时间大概是上世纪90年代后期(96-99年左右),代码是用C语言写的,运行在Windows 3.1或Windows 95环境下。看到它们,有一种看上学时照片的感觉,感觉是那么的青涩。拿出一段晒晒://-----------------------------------------------------------------------------//函数:NewPoint//功能:分配一个测点定义缓冲区。//入口参数://lpPNum测点号指针。//出口参数://如成功,返回在测点定义表中的偏移;如失败,返回0xffff。//--------- 阅读全文
posted @ 2011-04-25 23:19 wanghui 阅读(2336) 评论(5) 推荐(7) 编辑
摘要: 老子《道德经》云:“治大国,若烹小鲜。”用简单的贴近生活的例子做比喻,来论述复杂的事情和高深的道理,在古文中很常见。再如荀子《劝学》中满篇的比喻(估计读过中学语文的都能背上几句):“青,取之于蓝,而胜于蓝;冰,水为之,而寒于水”,用来比喻人通过学习改造,可是胜过以前。SCRUM作为一种敏捷框架,也有很多比喻,这些比喻可以使我们更形象地理解其内涵与外延。前一阵子正在拜读SCRUM联盟主席Mike Cohn的《SCRUM敏捷软件开发》(英文名:Succeeding with Agile: Software Development Using Scrum)一书。作者运用了很多形象的比喻,来解释SCR 阅读全文
posted @ 2011-04-21 13:09 wanghui 阅读(2536) 评论(9) 推荐(4) 编辑
摘要: 调查结果包括: 1. 最有效的敏捷实践Top 10 2. 最容易学习的敏捷实践Top 10 3. 最难学习的敏捷实践Top 10 4. 最可能试验但之后放弃的敏捷实践Top 8 5. 人们想要采纳但还没有的敏捷实践Top 10 6. 敏捷开发团队成员数统计 7. 敏捷开发团队遵守工业标准统计 8. 敏捷开发团队顺从CMMI统计 9. 敏捷开发团队地理分布情况统计 原文地址:http://www.ambysoft.com/surveys/practices2009.html 下面贴其中一张统计图,其它见原文: 阅读全文
posted @ 2011-04-14 15:05 wanghui 阅读(551) 评论(0) 推荐(2) 编辑
摘要: 原文地址:http://www.infoq.com/cn/articles/scrum-pseudo-codeScrum框架及其背后的原则(上)——Scrum 框架的伪代码描述作者 何勉 发布于 2011年4月7日 上午12时0分 社区敏捷主题企业级敏捷 标签Scrum , 敏捷理论 Scrum是应用最广泛的敏捷开发方法。同时,它的失败率却非常高,其创始人之一Ken Schwaber估计75%尝试Scrum的组织无法获取他们预期的效果 (http://www.agilecollab.com/interview-with-ken-schwaber)。对此,通常的解释是“对Scrum框架的错误应用 阅读全文
posted @ 2011-04-13 09:07 wanghui 阅读(901) 评论(0) 推荐(1) 编辑
摘要: 这两天参加SCRUM中文网举办CSM认证班,感受挺多。资深讲师Jens Ostergaard经验丰富,活泼风趣。虽然我感觉内容还是比较基础,对于已经对有几年SCRUM实施经验的人来讲,较为浅显,但在授课中间穿插的一些练习活动,感觉还是挺有收获的。下面举2个例子。1. 只通过Specification来传递需求。活动把每个小组(4-5个人)中的2人留在屋子里,其他人到屋子外面等待。在屋子里的人,会得到一张A4纸,上面画着几个比较简单的图形,比如一个十字,2个套着的圆,一个淡蓝色的六边形,等等。要求,留在屋子里的人不能用绘画的方法,只能用文字,描述这些图形的形状、位置、大小、颜色,并写在纸上。写. 阅读全文
posted @ 2011-04-12 23:31 wanghui 阅读(5961) 评论(9) 推荐(4) 编辑
摘要: Font中的Properties都是readonly,并且Font不能被继承,所以序列化和反序列化Font会相对麻烦一点。需要写一个FontSerializer类来实现Font序列化和反序列化。先写测试代码: [TestMethod()] public void FontSerializationTest() { const string _anyFileName = @"D:/FontSerializerTest.xml"; XmlTextWriter writer = new XmlTextWriter(_anyFileName, null); writer.Forma 阅读全文
posted @ 2011-04-08 22:38 wanghui 阅读(1285) 评论(0) 推荐(1) 编辑
摘要: 在VS2008中编写如下代码:PrintDialog printDialog = new PrintDialog();printDialog.ShowDialog();在XP环境下,它可以正常显示出打印对话框。但在Windows 7 64位环境下,什么也显示不出来,也没有异常抛出。将PrintDialog.UseEXDialog属性设置为True,可显示出打印对话框。代码如下:PrintDialog printDialog = new PrintDialog();printDialog.UseEXDialog = true;printDialog.ShowDialog();参见此链接。 阅读全文
posted @ 2011-04-08 22:12 wanghui 阅读(2461) 评论(0) 推荐(2) 编辑
摘要: 一个人员非常稳定的软件研发团队,在绝大多数情况下,对企业来讲有很大好处。但有时也会出现问题:当从事一个领域内的研发时间较长,他们会安于现状,缺乏学习的欲望。他们的专业知识和能力也会受限于当前所从事的工作,缺乏进一步提高和拓展的动力。我原来所带团队就曾处于这样的境地。后来,我在团队内引入了Tech Talk活动,以此希望能引发团队成员学习欲望和加大他们向前的动力。Tech Talk这个名词最早是2002年从我当年的老板(一个美国硅谷的“海龟”)那里听到的。04年的时候,在51cmm.com上看到一篇文章《构建高效软件开发流程和团队》(作者:David Yan),里面有一小段讲述了作者亲历的Tec 阅读全文
posted @ 2011-04-04 23:10 wanghui 阅读(2111) 评论(1) 推荐(3) 编辑
摘要: 最近换了个笔记本电脑,系统从XP SP3变为Win 7,IIS版本也变为7.5。但是原来演示用VS2008来创建Web Service的程序不工作了,在调用Web Service时出现了2个问题。1. 出现 500.19 Error 。错误提示:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny"),或者是通过包含 overrideMode="Deny" 或旧有的 allowOverride="false" 的位置标记明确设置的。发现是在安装II 阅读全文
posted @ 2011-03-31 22:45 wanghui 阅读(5539) 评论(0) 推荐(1) 编辑
摘要: 原文:http://www.infoq.com/cn/articles/agile-contracts敏捷合同作者 Allan Kelly 译者 郑柯 发布于 2011年3月28日 上午12时0分 社区敏捷主题客户及需求 , 许可证 , 法律案件 , 商业 标签合同与谈判 对于敏捷方法,人们常常提出这样的问题:“如果基于敏捷工作方式,应该如何签署合同?”传统的瀑布式模型,与公司采购的方式完全契合:先整理出需求,一家供应商提供一个报价(基于他们对需求的阐释和对成本的估计),大家都签署一个法律上的捆绑协议。一旦合同签署之后,接下来就是一段开发时间段,大家争论到底哪些功能在范围之内,哪些在范围之外, 阅读全文
posted @ 2011-03-30 14:58 wanghui 阅读(685) 评论(0) 推荐(1) 编辑
摘要: 原文:http://www.infoq.com/cn/articles/agile-goal-setting-appelo敏捷目标设定作者 Jurgen Appelo 译者 金明 发布于 2010年11月22日 上午12时0分 社区 敏捷 主题 敏捷技术 标签 Scrum 敏捷文库中关于远景、使命和目标设定的文章已经是汗牛充栋,但似乎很少有专家在“究竟如何才是以敏捷的方式设定目标”方面取得一致的看法。辞典与百科全书上的解释不一致,过程框架与领导顾问的意见也不尽相同,甚至相悖。这篇文章是我“唯恐天下不乱”的尝试,并因此提议了一个稍作修改的方式以设定敏捷目标 。给人们共同的目标我有时交替地使用“目 阅读全文
posted @ 2011-03-21 12:06 wanghui 阅读(582) 评论(0) 推荐(1) 编辑
摘要: 今天下午参加了SCRUM中文网(www.scrumcn.com)举办的第四期敏捷沙龙。本着学习和交流的目的而去,带着些许收获而归。 先点评一下今天的各项活动。 - 活动计划有50人参加,报名的60多,实际到场还要多。说明SCRUM还是很受欢迎的。 - 主持人Jim Wang先生阅历深厚,口才出众。而且能严格控制每项活动时间,不超时,难能可贵。 - 二位演讲嘉宾(SYNNEX李忠利和百度李连华)稍显紧张,尤其在回答有些听众的问题时,不是很成功。 - Open Space环节设计得很不错,要是在今天的活动前就告知这个环节的内容,让参与者事先了解并有所准备更好。 - 最后抽奖名额有点少,运气不行,没 阅读全文
posted @ 2011-03-19 22:47 wanghui 阅读(635) 评论(0) 推荐(0) 编辑
摘要: 最近在与一位总经理交流的时候,他谈到他们公司的软件研发管理,说:“我们公司最大的问题是项目不能按时完成,总要一拖再拖。”他问我有什么办法能改变这个境况。从这样一个问题开始,在随后的交谈中,又引出他一连串在软件研发管理中的遇到的问题,包括:. 现有代码质量不高,新来的开发人员接手时宁愿重写,也不愿意看别人留下的“烂”代码,怎么办?. 重构会造成回退,怎样避免?. 有些开发人员水平相对不高,如何保证他们的代码质量?. 软件研发到底需不需要文档?. 要求提交代码前做Code Review,而开发人员不做,或敷衍了事,怎么办?. 当有开发人员在开发过程中遇到难题,工作无法继续,因而拖延进度,怎么解决? 阅读全文
posted @ 2011-03-18 22:40 wanghui 阅读(20679) 评论(23) 推荐(15) 编辑
摘要: 对于初识XML Web Service并想快速上手的人,可能希望快速了解它的创建和调用方法。本文将用一个小例子来讲述如何用Visual Studio 2008来创建Web Service以及如何来调用它。例子中的Web Service将根据客户程序的请求来返回一幅图像。 1. 创建Web Service项目 打开VS2008,选择File/New/Project菜单项,在打开的New Project对话框中,依次选择Visual C# -> Web -> ASP.NET Web Service Application,然后输入项目名称(Name),存放位置(Position)和解决 阅读全文
posted @ 2011-03-17 18:54 wanghui 阅读(12018) 评论(6) 推荐(7) 编辑
摘要: 上接:SCRUM节外生枝(四)5. Bug!Bug!Bug!理想中的SCRUM世界,不需要验收测试阶段,因为每个Sprint结束,都会交付一个可发布的版本。但是,现实中每个Sprint结束后都会不断涌现新的Bug。所以《硝烟中的Scrum和XP》说:“你大概没法取消验收测试阶段”。但正是这Sprints之外的验收测试阶段,把我们拖入了万劫不复的境地。产品原本计划1年Release,但1年半时我们仍在修复不断涌现的Bug。我们的目标是修复所有Priority 0和1的Bug,并使Bug修复率达到至少80%,才能宣布到达Beta 这个Milestone。但每轮Full Test发现的Bug总是与修 阅读全文
posted @ 2011-03-08 21:33 wanghui 阅读(1461) 评论(3) 推荐(0) 编辑
摘要: 本人对于C#只能算是初学者,写此随笔,也只为和大家一起讨论,共同进步。我看到过一些用C#语言泛化单件(Singleton)的文章和代码,里面有个问题,即用new来创建对象,比如类似下面这段代码:if(_instance==null){_instance=newT();}要想让其工作,你必须让T的构造函数为public。但是,如果T的构造函数为public,那任何客户代码都可调用new T()。你无法用语言本身限制其只能被创建最多一次和只有一个全局访问点,这样也就无法保证你的单件成为“单件”。C++里有友元(friend),T的构造函数可是设为non-public,然后用单件的模板类作为友元去访 阅读全文
posted @ 2011-03-08 13:28 wanghui 阅读(3994) 评论(18) 推荐(2) 编辑
摘要: 如果你在你的某个系统中增加了一个子类,你要创建这个子类的对象,但又不想改变任何原有代码,有可能么?答案是肯定的,用“对象工厂”设计模式。对象工厂(Object Factory)是GoF 23种设计模式之外的模式,它既不是抽象工厂(Abstract Factory),也不是工厂方法(Factory Method),尽管可能跟它们有些渊源。我第一次看到介绍“对象工厂”的书是《C++设计新思维(Modern C++ Design)》,但我第一次看到对象工厂的代码,却比看到这书早,但我当时不知道它叫“对象工厂”。《C++设计新思维》(下载地址:http://d.download.csdn.net/do 阅读全文
posted @ 2011-03-08 10:43 wanghui 阅读(7999) 评论(9) 推荐(8) 编辑
摘要: 上接:SCRUM节外生枝(三)4. 太多的外界干扰很多公司,都面临一个问题,在研发新产品的同时,还要应付对旧产品的维护任务。另外,来自市场、客户服务、人力资源等部门的事情不断地打断专注于研发的SCRUM团队。比如:市场部门需要技术人员参加展览展示会做技术后备,客户服务部门要请技术人员到现场解决在客户那出现的严重问题,人力资源部门布置的工作总结、目标制定、绩效评定等等。这些问题本身跟SCRUM无关,但SCRUM框架需要有一些应对办法来解决这些问题。《硝烟中的Scrum和XP》第十章描述了一些办法,见下(我简化了一下):1) 减少Sprint投入程度。2) 把干扰因素记录得更清楚(以有针对性地减少 阅读全文
posted @ 2011-03-06 12:16 wanghui 阅读(1248) 评论(1) 推荐(2) 编辑
摘要: 上接:SCRUM节外生枝(二)3. 一个程序员卡壳了有了一些工作经验的程序员(也许可以扩展到所有的技术人员),都遇到过这样的情况:在一个本以为容易的技术实现上遇到未能预测到的难关,长时间无法逾越。本来一个小时能完成的Feature,可能因为一个Severe 0 的Bug,折腾得一天下来也无法完成,而后的一段时间,可能还在这个问题上绕来绕去,后续的工作都因此停滞,更糟糕的是,别人的任务也会因为依赖于他的任务而被拌住(Blocked)。相对于程序员的“顺流”状态,我称这时候的程序员“卡壳”了。一个程序员卡壳了,是个微观问题。但是,你卡壳耽误3天时间,过两天他卡壳耽误2天时间,整个项目的交付在不知. 阅读全文
posted @ 2011-03-04 00:07 wanghui 阅读(1602) 评论(6) 推荐(2) 编辑
摘要: 上接:SCRUM节外生枝(一)2. 在Sprint中间改变目标我曾经应聘过一个SCRUM Master的职位,面试官问我这样一个问题:“在一个Sprint进行中,如果用户想改变某个正在这个Sprint中实现的User Story,你觉得应不应该改变它?”SCRUM的规定在我脑海中明明白白的印着:“在Sprint里不许改变任何任务,团队在第一天承诺一系列工作,然后期望它们在整个Sprint保持不变。”我照本宣科地叙述了SCRUM的这个规定,面试官跟着下一个问题来了:“你如果不改变,那么2周以后,当Sprint结束以后,你会发现你这些日子所做的工作完全是徒劳,因为用户有可能已经完全期望一种完全相. 阅读全文
posted @ 2011-03-02 22:31 wanghui 阅读(994) 评论(8) 推荐(0) 编辑
摘要: 每个接触SCRUM的人,可能很快被SCRUM框架所描绘出的美好景象所吸引,SCRUM所运用的方法和流程不难被理解,很容易被拥戴者拿来试验或实施。但当到达某个微观步骤时,一些节外生枝的事情总会发生,SCRUM的圣经里没有药到病除的良方,有的只是过来人亲身体验的痛苦和有关成败的感慨。1. 抵触SCRUM的实施者,最先碰到的节外生枝的事情莫过于在实施刚刚开始时(亦或刚刚被提出来讨论时)来自团队内部的抵触。MountainGoatSoftware的创始人Mike Cohn在《Succeeding with Agile: Software Development Using Scrum》(中译名《Sc. 阅读全文
posted @ 2011-03-02 15:08 wanghui 阅读(917) 评论(2) 推荐(0) 编辑
摘要: 入园两年了,头一回写博客。最近赋闲在家,忽对敏捷开发重燃兴趣。借着过去3年SCRUM的经验,外加上新买的几本书和网上的一些资料,自觉应总结一下,理清自己头脑里的东西。先列列敏捷站点的网址,以便以后查询。敏捷软件开发宣言http://agilemanifesto.org/极限编程http://xprogramming.com/xpmag/whatisxp/ControlChaoshttp://www.controlchaos.com/ScrumAlliancehttp://www.scrumalliance.org/MountainGoatSoftwarehttp://www.mountaing 阅读全文
posted @ 2011-03-02 11:01 wanghui 阅读(523) 评论(0) 推荐(1) 编辑