代码改变世界

[置顶]博客搬家了

2013-09-03 20:43 by 菜阿彬, 438 阅读, 0 推荐, 收藏, 编辑
摘要:因为学习并喜欢上了使用Markdown写作喜欢Github喜欢Ruby喜欢Twitter的Bootstrap喜欢开源……所以有了http://johncai.github.io程序员就应该每天用git push来发表博客。欢迎围观。http://johncai.github.io 阅读全文

泰国行敏捷培训第一天:欣赏式探询(Appreciative Inquiry)(上)

2012-09-09 13:23 by 菜阿彬, 1701 阅读, 2 推荐, 收藏, 编辑
摘要:9月3号到9月7号,部门到泰国华欣offsite meeting。其中有两天是Daniel Teng给我们做的敏捷培训,很多人本以为培训就是老师讲,我们听,结果完全不是这样,那两天都是需要每个参与者积极参与,完全没有打酱油的机会。 9月4号是敏捷培训的第一天,主题是欣赏式探询(Appreciative Inquiry),以下简称AI。什么是AI 传统上,当一个组织反省过去时,总是去总结出过去做的不好的地方,避免以后再犯。而AI反其道而行之,它聚焦在过去做的好的地方,继续强化。——这就是“欣赏式”的意思所在。(AI focuses on increasing what an organi... 阅读全文

我的常识——程序员应该“道”“术”双修

2011-11-24 22:16 by 菜阿彬, 3236 阅读, 11 推荐, 收藏, 编辑
摘要:“道”和“术”分别是什么?设计模式是“道”还是“术”?你写的或者读的博客,有多少是关于“术”的?有多少是关于“道”的? 阅读全文

我的常识—— Do it early, do it often, do it automatically

2011-11-12 21:02 by 菜阿彬, 5083 阅读, 19 推荐, 收藏, 编辑
摘要:1,不要完全依赖人来测试我们的代码——用代码来测试我们的代码。   2,不要完全依赖人来验证我们系统的集成——用自动化脚本,用持续集成软件。   3,不要依赖人工一次性的劳动来确保软件的正确——用分而治之、迭代开发来“反复确保”。   4,不要等软件腐化后再来“重写”软件——时时刻刻“重构”它。   5,不要期待设计/架构可以一步到位——时时刻刻进化它。   Do it often。 阅读全文

为什么要让我们的“领域模型”裸奔?(下)

2011-05-09 22:22 by 菜阿彬, 6077 阅读, 13 推荐, 收藏, 编辑
摘要:上篇文章引起不少有价值的回复,我也学到不少东西,谢谢大家。 在此对上篇做下补充说明: 1,因本人毕业以来从事的项目全是业务逻辑复杂的企业应用软件,ERP,SCM,HRP,CRM……,这种系统,如Martin Fowler在PEAA一书中所说,是适合使用Domain Model的,上文和本篇讨论的都是基于这样的场景和前提。 2,正如一哥们回复中说的,天下没有绝对的东西,我们都在写随笔,不是写论文。这两篇文章只是提供一种看待问题的视角,看问题的视角多了,到了具体的项目,就会有更多的选择。 3,写上篇时没想到要分上下篇,导致整个上篇没有说明啥叫“裸奔”,不过从评论看,大部分人都读懂了:就是让“领域. 阅读全文

为什么要让我们的“领域模型”裸奔?(上)

2011-05-08 00:03 by 菜阿彬, 7764 阅读, 43 推荐, 收藏, 编辑
摘要:三层架构里,往往认为中间的业务逻辑层(BLL)依赖于最下面的数据存储层(DAL),可是每个应用系统的“业务逻辑”才是应用系统存在的理由,才是开发它的目的所在。而UI展现、数据库存储、Cache等都是为了实现“业务逻辑”这个目的所提供的手段,都有成熟的框架、模式可用,都可以是雷同的。那么为什么“业务逻辑”要依赖于“存储技术”?为什么“目的”要依赖于“手段”? 阅读全文

大家是怎么做Code Review的?

2011-04-09 19:25 by 菜阿彬, 7815 阅读, 6 推荐, 收藏, 编辑
摘要:先说说我们公司现在的做法,一个团队被人为地分为两个阵营:Senior Developers和Junior Developers,比例差不多是1:1,Senior Developers就担负着对Junior Developers的代码进行Review的职责,每天Review一次,对有问题的代码写上comments,然后也check in到代码库中。这种comments有特殊格式(比如//\\CodeReview:blah blah),要求Junior Developers每天下班前一小时去代码库中找这种格式的comments,然后修复自己的有问题的代码,修复时删除Reviewer留下的Comm. 阅读全文

团队学习日记(0)——用wiki来记录团队的学习日记

2010-10-26 22:42 by 菜阿彬, 2257 阅读, 1 推荐, 收藏, 编辑
摘要:准备尝试一个实践:团队作为一个整体,来写“工作日记”,记录一切跟工作相关的、让我们团队成长的知识点,包括写代码、做事的方式方法、敏捷实践、团队建设、团队学习……而这篇文章——“用wiki来记录团队学习日记”,就当做我们团队的第一篇“团队学习日记”吧(传说中的递归?!)。 阅读全文

我在敏捷中国Open Space上发起的讨论主题——如何激励,用绩效考核吗?

2010-10-15 22:25 by 菜阿彬, 2335 阅读, 4 推荐, 收藏, 编辑
摘要:第五届敏捷中国大会刚刚落幕,两天听了14场演讲(因为每天的下午都有两个分会场,有8场演讲没有听到),整体还是不错的,给我印象比较深的是Mary的《Making Change Happen and Making Change Stick》、Jean Tabaka的《敏捷运用之12种成功模式》、阳陆育的《大型企业应用系统的敏捷需求管理》,其它演讲也可圈可点,尤其是我今天听的最后一场Alan Atlas... 阅读全文

我的JavaScript之旅——this到底是啥?

2010-09-25 22:17 by 菜阿彬, 3336 阅读, 3 推荐, 收藏, 编辑
摘要:下图是在ASP.NET中为button挂上客户端onclick事件的两种办法:图中的2和3/1。结果发现两种方式调用同样一个函数clickMe,this却不一样。    如果采用3或1的做法,那么点击button1后将alert出[object DOMWindow];而采用2的做法,将alert出[object HTMLInputElement](在chrome下测试。)  显然,在1的做法中,t... 阅读全文

QA不是QC,兼谈Lean、Kanban和TDD(下)——对所在团队的反思

2010-09-18 21:09 by 菜阿彬, 2178 阅读, 2 推荐, 收藏, 编辑
摘要:上篇文章说了QA与QC的区别,以及一种不太好的流程所造成的浪费,这篇对我所在团队的状况进行反思。为什么这么多bug?  1个月200多个,按工作日平均下来1天10个,触目惊心。我认为原因很多,列举如下:环境。在进度第一的观念下,代码库中渐渐充斥着设计拙劣、充满陷阱的代码。殊不知慢就是快,而表面上的快实际上严重拖慢了团队的脚步。造成的结果不仅bug多,而且被fix后,不知哪天又冒出来了。程序员习惯。... 阅读全文

我的JavaScript之旅——“闭包”是什么时候创建的

2010-09-14 21:43 by 菜阿彬, 3462 阅读, 4 推荐, 收藏, 编辑
摘要:[代码]对于这样一个简单的闭包函数,下面两种调用方式有什么不一样的地方?[代码][代码]此篇试图解答这个问题。先复习一下:上篇文章说到,每次执行一个function时,就会进入一个新的“执行上下文”(execution context)。context的几个重要属性:  1, 有一个对应的variable object;在global context中就是global ob... 阅读全文

QA不是QC,兼谈Lean、Kanban和TDD(上)

2010-09-11 20:08 by 菜阿彬, 2470 阅读, 1 推荐, 收藏, 编辑
摘要:如果QA总是在Verify的阶段发现缺陷。那么有缺陷的不仅是你的软件,更是你的流程——Mary Poppendieck。有一家很糟糕的餐厅,里面的厨师几乎总是把盐放得过多。顾客少的时候,他炒好菜会自己尝一下,发现太咸了,就再倒回锅里再加工一下;顾客多时,就不管那么多了,直接上菜,然后等不能忍受的顾客把菜拿回来,再加工,而就算那些能忍受的顾客呢,下次也不会再来了。这样的餐厅有... 阅读全文

我的JavaScript之旅——从Scope Chain到Closure

2010-09-05 16:46 by 菜阿彬, 3023 阅读, 3 推荐, 收藏, 编辑
摘要:[代码]执行上面这段代码的过程中,有哪些事情发生?Inner函数为什么可以引用Outer函数的参数x?closure是怎么实现的?本文试图回答这些问题。术语本文虽然所讲理论并不复杂,但用到不少名词,初读时相对比较晦涩,下面列出术语和简短解释,便于阅读时随时查看。global:engine预先创建好的一个object,里面有所有built-in objects的属性。globalContext:本文... 阅读全文

我的Javascript之旅——new关键字的玄机,以及其它

2010-08-25 16:29 by 菜阿彬, 4249 阅读, 9 推荐, 收藏, 编辑
摘要:(接上)先看张对老手不新鲜但对菜鸟很有趣的图: What the heck is that? 简直是luan lun。new抛开上面的图,先看看上篇文章留下的第二个问题,让我们在构造器的函数体内加点东西,看会发生什么。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->function A(){this.p =1}var a =new A()会得到如下结果: 为什么用new关键字构造出来的a,会获得p这个属性?new A()这行代码做了什么... 阅读全文