2011-11-24 22:16 by 菜阿彬, 2104 visits, 网摘, 收藏, 编辑
摘要:“道”和“术”分别是什么?设计模式是“道”还是“术”?你写的或者读的博客,有多少是关于“术”的?有多少是关于“道”的?
阅读全文
2011-11-12 21:02 by 菜阿彬, 2335 visits, 网摘, 收藏, 编辑
摘要:1,不要完全依赖人来测试我们的代码——用代码来测试我们的代码。
2,不要完全依赖人来验证我们系统的集成——用自动化脚本,用持续集成软件。
3,不要依赖人工一次性的劳动来确保软件的正确——用分而治之、迭代开发来“反复确保”。
4,不要等软件腐化后再来“重写”软件——时时刻刻“重构”它。
5,不要期待设计/架构可以一步到位——时时刻刻进化它。
Do it often。
阅读全文
2011-05-09 22:22 by 菜阿彬, 3138 visits, 网摘, 收藏, 编辑
摘要:上篇文章引起不少有价值的回复,我也学到不少东西,谢谢大家。 在此对上篇做下补充说明: 1,因本人毕业以来从事的项目全是业务逻辑复杂的企业应用软件,ERP,SCM,HRP,CRM……,这种系统,如Martin Fowler在PEAA一书中所说,是适合使用Domain Model的,上文和本篇讨论的都是基于这样的场景和前提。 2,正如一哥们回复中说的,天下没有绝对的东西,我们都在写随笔,不是写论文。这两篇文章只是提供一种看待问题的视角,看问题的视角多了,到了具体的项目,就会有更多的选择。 3,写上篇时没想到要分上下篇,导致整个上篇没有说明啥叫“裸奔”,不过从评论看,大部分人都读懂了:就是让“领域.
阅读全文
2011-05-08 00:03 by 菜阿彬, 4730 visits, 网摘, 收藏, 编辑
摘要:三层架构里,往往认为中间的业务逻辑层(BLL)依赖于最下面的数据存储层(DAL),可是每个应用系统的“业务逻辑”才是应用系统存在的理由,才是开发它的目的所在。而UI展现、数据库存储、Cache等都是为了实现“业务逻辑”这个目的所提供的手段,都有成熟的框架、模式可用,都可以是雷同的。那么为什么“业务逻辑”要依赖于“存储技术”?为什么“目的”要依赖于“手段”?
阅读全文
2011-04-09 19:25 by 菜阿彬, 3059 visits, 网摘, 收藏, 编辑
摘要:先说说我们公司现在的做法,一个团队被人为地分为两个阵营:Senior Developers和Junior Developers,比例差不多是1:1,Senior Developers就担负着对Junior Developers的代码进行Review的职责,每天Review一次,对有问题的代码写上comments,然后也check in到代码库中。这种comments有特殊格式(比如//\\CodeReview:blah blah),要求Junior Developers每天下班前一小时去代码库中找这种格式的comments,然后修复自己的有问题的代码,修复时删除Reviewer留下的Comm.
阅读全文
2010-10-26 22:42 by 菜阿彬, 1570 visits, 网摘, 收藏, 编辑
摘要:准备尝试一个实践:团队作为一个整体,来写“工作日记”,记录一切跟工作相关的、让我们团队成长的知识点,包括写代码、做事的方式方法、敏捷实践、团队建设、团队学习……而这篇文章——“用wiki来记录团队学习日记”,就当做我们团队的第一篇“团队学习日记”吧(传说中的递归?!)。
阅读全文
2010-10-15 22:25 by 菜阿彬, 1637 visits, 网摘, 收藏, 编辑
摘要:第五届敏捷中国大会刚刚落幕,两天听了14场演讲(因为每天的下午都有两个分会场,有8场演讲没有听到),整体还是不错的,给我印象比较深的是Mary的《Making Change Happen and Making Change Stick》、Jean Tabaka的《敏捷运用之12种成功模式》、阳陆育的《大型企业应用系统的敏捷需求管理》,其它演讲也可圈可点,尤其是我今天听的最后一场Alan Atlas...
阅读全文
2010-09-25 22:17 by 菜阿彬, 2410 visits, 网摘, 收藏, 编辑
摘要:下图是在ASP.NET中为button挂上客户端onclick事件的两种办法:图中的2和3/1。结果发现两种方式调用同样一个函数clickMe,this却不一样。 如果采用3或1的做法,那么点击button1后将alert出[object DOMWindow];而采用2的做法,将alert出[object HTMLInputElement](在chrome下测试。) 显然,在1的做法中,t...
阅读全文
2010-09-18 21:09 by 菜阿彬, 1370 visits, 网摘, 收藏, 编辑
摘要:上篇文章说了QA与QC的区别,以及一种不太好的流程所造成的浪费,这篇对我所在团队的状况进行反思。为什么这么多bug? 1个月200多个,按工作日平均下来1天10个,触目惊心。我认为原因很多,列举如下:环境。在进度第一的观念下,代码库中渐渐充斥着设计拙劣、充满陷阱的代码。殊不知慢就是快,而表面上的快实际上严重拖慢了团队的脚步。造成的结果不仅bug多,而且被fix后,不知哪天又冒出来了。程序员习惯。...
阅读全文
2010-09-14 21:43 by 菜阿彬, 2199 visits, 网摘, 收藏, 编辑
摘要:[代码]对于这样一个简单的闭包函数,下面两种调用方式有什么不一样的地方?[代码][代码]此篇试图解答这个问题。先复习一下:上篇文章说到,每次执行一个function时,就会进入一个新的“执行上下文”(execution context)。context的几个重要属性: 1, 有一个对应的variable object;在global context中就是global ob...
阅读全文
2010-09-11 20:08 by 菜阿彬, 1707 visits, 网摘, 收藏, 编辑
摘要:如果QA总是在Verify的阶段发现缺陷。那么有缺陷的不仅是你的软件,更是你的流程——Mary Poppendieck。有一家很糟糕的餐厅,里面的厨师几乎总是把盐放得过多。顾客少的时候,他炒好菜会自己尝一下,发现太咸了,就再倒回锅里再加工一下;顾客多时,就不管那么多了,直接上菜,然后等不能忍受的顾客把菜拿回来,再加工,而就算那些能忍受的顾客呢,下次也不会再来了。这样的餐厅有...
阅读全文
2010-09-05 16:46 by 菜阿彬, 1839 visits, 网摘, 收藏, 编辑
摘要:[代码]执行上面这段代码的过程中,有哪些事情发生?Inner函数为什么可以引用Outer函数的参数x?closure是怎么实现的?本文试图回答这些问题。术语本文虽然所讲理论并不复杂,但用到不少名词,初读时相对比较晦涩,下面列出术语和简短解释,便于阅读时随时查看。global:engine预先创建好的一个object,里面有所有built-in objects的属性。globalContext:本文...
阅读全文
2010-08-25 16:29 by 菜阿彬, 2434 visits, 网摘, 收藏, 编辑
摘要:(接上)先看张对老手不新鲜但对菜鸟很有趣的图: What the heck is that? 简直是luan lun。new抛开上面的图,先看看上篇文章留下的第二个问题,让我们在构造器的函数体内加点东西,看会发生什么。[代码]会得到如下结果: 为什么用new关键字构造出来的a,会获得p这个属性?new A()这行代码做了什么事情?根据上篇文章中Function的创建过程第4步,A这个对...
阅读全文
2010-08-25 11:30 by 菜阿彬, 2339 visits, 网摘, 收藏, 编辑
摘要:本人是Javascript菜鸟,下面是前几天学习Javascript的旅程心得,希望对和我一样的入门者有点用,也希望高手批评指正。以问题开始:[代码]上面两行代码会创建几个对象(object)?要回答这个问题,先明确一下Javascript里object的概念。Objects在Javascript里,几乎一切都是object(Arrays、Functions、Numbers、Objects&hel...
阅读全文
2010-07-25 21:21 by 菜阿彬, 306 visits, 网摘, 收藏, 编辑
摘要:众所周知,Scrum Team里只有三种角色:Product Owner,Scrum Master,Team Members。因此谈到多个Scrum Team之间的协作时,CounterPart之间的协作问题就会顺理成章地浮现出来。本文先谈谈Product Owner之间的协作。 如果在一个产品团队,不同Scrum Team的PO连对方最近的Sprint做了什么功能都不知道,那他们显然缺乏最基本...
阅读全文