`
taowen
  • 浏览: 193872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
OK,敏捷哈。不争论什么是敏捷。我们来看一些现象,然后你来告诉我,你有没有遇到过这些问题。 没人提真正的Feedback 每个迭代结束之后,我都会做Showcase。但是从Showcase上收集到最多的,就是UI的问题,字体太小之类的。每 ...
效仿敏捷宣言,有人也搞了一个软件工艺(Craftsmanship)宣言。在标题的下面是一行小字,提高准入门槛(Raising the bar)。 UncleBob就这个Topic在世界各地发表演讲。他曾经把程序员与医生做比较:既然程序员与医生一样都是提供职业服务(Professional Service),那么他们就应该遵守类似的行为准则。医生在做手术之前需要洗手洗三遍以防止病人被细菌感染,而且需要用特殊的方式内搓三下外搓三下。假如病人说,我不希望你洗手。医生会拒绝这样的要求,因为这是他们的职业准则。程序员给代码做整理,不屈服于客户(在医生例子就是病人)的不合理的时间要求,因为程序员相比客户来 ...
原话是“Continuous Deployment is the holy grail”。在听到的这句话的时候,我的灯泡突然被点亮了。说得实在是太对了。有一句老话是“纲举目张”。意思是提起渔网上总绳,一个个网眼就会被张开。我们的很多实践,就像这渔网上的 ...
企业定制软件开发不是计算机科学,需要解决的不是编译原理也不是组合数学。那么,企业定制软件开发的核心问题是什么?   越来越感觉到,从事一个领域不需要有特别深刻的理解,但起码要知道做这个领域的事情,需要解 ...
从设计模式开始,已经有很多人尝试总结了各方个面的很多模式。不管是写的人多,读的人也多。甚至考的人也多。数年前去IBM面试实习生,Mentor问我的问题就是知道什么是Visitor模式不。但是模式为什么出现,这些牛人为什么花 ...
最近在读James Coplien的组织模式。觉得最有意思的还是这张图。 最近公司级别组织了一次Open Discussion,总结来总结去,问题都是“沟通问题”,根源呢就是“价值观”。项目级别也做过好多次Retrospective,也是那句老话“沟通问题 ...
http://dreamhead.blogbus.com/logs/57388446.html 那么我们经常说要重构,那么凭什么呢?有什么指标可以说明必须要重构了呢?Bad smell吗?那么Bad smell是不是某种度量呢?重构完成之后,你说质量变好了。那么又有什么根据呢?我觉得发现软件的Internal Quality。然后基于Evidence去做判断是非常重要的。只是度量Internal Quality的指标我们还没有找到,而且即便找到了也不是只抓几个数字,因为数字的造假是非常容易的。 目前我比较倾向于从依赖和耦合的角度看待质量问题。如果能够从包的依赖得出一些数据,然后从SCM拿到包的 ...
当Agile已经变成一个贬义词的时候,我们是要把Lean变成下一个贬义词吗?还是脚踏实地去做一些改进? 在这里,向大家推荐 James Coplien 的 Organizational Patterns。它不是一套新的过程,一上来弄十几个实践,也不知道为什么就开始 ...
有这么一个函数: public void increase(String key) { int val = storage.get(key); storage.put(key, val + 1); } 我需要有一系列的key需要操作,那么就必须弄一个循环: for (String key : keys) { increase(key); } 如果storage是一个网络上的设备,key又非常多。这就会造成非常多次的网络操作。假设有500个key,每次网络操作是100ms。那么就需要耗费500 * 0.1 * 2 = 100秒的时间。 那么怎么解决这个问题呢? ...
http://taowen.github.com/bayberry/ Goal of this project is to complement test frameworks for projects using Guice. It has three major features:    1. Dependency Injection    2. Data Injection    3. Test Helper
Guice在大部分时间都是很方便的,简单易用。Guice和Spring等其他容器的最大区别是,Guice相信注入大部分都是根据类型的,而不是根据名字的。Guice在使用上的方便,很大部分都来自于按类型注入。 Bind多个实现 但是,如果对于一个类型,我有多个实现怎么办?最常见的问题是,有两个数据库。 bind(sqlMapClient.class).toInstance(createSqlMapClientForDB1()); 如果有两个数据库的话,这binding能怎么写呢? bind(sqlMapClient.class).toInstance(createSqlMapCli ...
距离上次发帖讨论领域模型,已经有半年了。这么久没有炒,估计饭又冷了。我再来炒炒领域模型这锅冷饭吧。且不着急点回退按钮,最近领域驱动设计社区在Greg Young同学的带领下有不少新的发展。保证这一次不会是重复贫血充 ...
在Hibernate的Jira上,这个两个issue已经放了很久了: Add annotation support for serCollectionType Add the annotations to map the User Collection Type 但是官方一直不给解决,咋办呢?以前唯一的办法就是不用Annotation,回到hbm文件的时代。 经过我几天的跟踪Hibernate的源代码,终于找到了解决办法,在这里分享给大家。 如果我们有这样的实体 @Entity public class Cat { @Id @GeneratedValue ...
很久以前大家就关于这个方面有很多讨论了。前两天我又挖了一个坑来集思广益,非常感谢没有把我的帖子投为新手帖的同志。我不是在装傻,只是想让大家跳出自己的立场,从根本的价值出发来考虑问题。之前有很多讨论,都是在讨论我又发明了一种新方法可以让领域模型充血啦,等等之类的。当提出一个解决方案的时候,一定要有明确的问题。那么领域模型的价值是什么?为什么没有被广泛应用,其困境在哪里? 价值 数据,一定是数据。做企业系统,最核心的东西一定是数据。关于数据,人们有许多需求,但是最根本的一点就是,数据要是对的。在关系数据库的上下文下,为了保证数据是对的,我们有外键,我们有COLUMN的数据类型,我们有主键,我们 ...
最近做的几个项目都是证券研究行业的。总结了一下,这个行业根本的一个目标是: “尽可能快的编写专业的研究报告,并分发给正确的人群” 定义专业的的研究报告,有三个侧面: 1、内容 2、格式 3、分类 内容 质量 从IT系 ...
Global site tag (gtag.js) - Google Analytics