- 博客(211)
- 收藏
- 关注
卡尔.波普尔摘要: 科学的方法
波普尔浩瀚的思想中, 有几个基础的观点, 构成了他其它思想的基石:存在客观真理, 但我们无从知晓, 因此:科学知识都是假设, 猜想的知识, 我们只能通过试错法, 理性批评去证伪, 去发现更好的猜想, 去接近真理 可错论, 对一切人类知识可错性的承认, 充分意识到自己无可置辩的无知, 理智的谦虚, 意识到自己知道的何其少波普尔: ...
2009-09-25 23:49:00 149
原创 排行榜悖论, 及如何消除
所有排行榜从被公布的那一刻开始便使它的所有后续版本失去客观性, 虽然它本来也不一定有多大程度的客观性 因为排行榜会自我增强. 上榜的事物会受到更多的关注, 刺激更多的人购买或评论, 于是更加流行, 便继续待在后续的榜单上. 而这一点又会被商家利用, 大肆宣传其商品连续多少周位居畅销榜. 正反馈开始, 直到时间使其逐渐冷却 这带来了不公平, 虽然公平本来就是罕有之物.
2009-09-15 22:55:00 1772 1
排行榜悖论, 及如何消除
所有排行榜从被公布的那一刻开始便使它的所有后续版本失去客观性, 虽然它本来也不一定有多大程度的客观性 因为排行榜会自我增强. 上榜的事物会受到更多的关注, 刺激更多的人购买或评论, 于是更加流行, 便继续待在后续的榜单上. 而这一点又会被商家利用, 大肆宣传其商品连续多少周位居畅销榜. 正反馈开始, 直到时间使其逐渐冷却 这带来了不公平, 虽然公平本来就是罕有之物. ...
2009-09-15 22:55:00 85
原创 Matrix 本质论
HTML clipboard22世纪的时候, 人类和机器爆发了一场战争, 最终人类被打败了, 机器统治了世界. 但人类最后关头做了一件事, 就是把天空遮盖起来了; 没有了太阳, 机器失去了能量来源. 一个偶然的机会, 机器发现人类身上的生物电可以为其提供能量.于是机器把人像种水稻一样种在田野里. 为了维持人类长时间的生命以便提供更多的能源, 机器创造了一套程序或者系统来控
2009-09-05 21:10:00 1100
Matrix 本质论
HTML clipboard22世纪的时候, 人类和机器爆发了一场战争, 最终人类被打败了, 机器统治了世界. 但人类最后关头做了一件事, 就是把天空遮盖起来了; 没有了太阳, 机器失去了能量来源. 一个偶然的机会, 机器发现人类身上的生物电可以为其提供能量.于是机器把人像种水稻一样种在田野里. 为了维持人类长时间的生命以便提供更多的能源, 机器创造了一套程序或者系统来控制...
2009-09-05 21:10:00 75
原创 跨团队的持续集成: 几个基本矛盾
单个团队内部的持续集成已经是成熟的实践. 跨团队的集成则碰到了很多问题, 包括全部测试运行时间过长, 合并成本高等问题. 针对这些问题有一些对应的解决方案, 如合理的分支策略, 分层的集成等.这里想讨论一下几个基本的矛盾, 和理想中的解决方案 1. 并行开发 与 集成 之间的矛盾这是本质问题, 如果所有功能都是由单一开发者循序渐进的完成, 则集成并不是大问题. 由于团
2009-07-05 22:33:00 1799 2
跨团队的持续集成: 几个基本矛盾
单个团队内部的持续集成已经是成熟的实践. 跨团队的集成则碰到了很多问题, 包括全部测试运行时间过长, 合并成本高等问题. 针对这些问题有一些对应的解决方案, 如合理的分支策略, 分层的集成等.这里想讨论一下几个基本的矛盾, 和理想中的解决方案 1. 并行开发 与 集成 之间的矛盾这是本质问题, 如果所有功能都是由单一开发者循序渐进的完成, 则集成并不是大问题. 由于团...
2009-07-05 22:33:00 77
原创 敏捷质疑: 迭代开发
迭代在于我们明确的承认信息和知识的不完备性, 不可完备性. 而项目的成功, 需要某种程度的完备性.这种认知的局限与成功的条件之间的矛盾, 促成了人们解决这类问题的通用方法: 渐进的试错法 试错法参考一: http://en.wikipedia.org/wiki/Trial_and_error.试错法参考二: http://zh.wikipedia.org/wiki/%E8%A
2009-07-01 20:46:00 2875 1
敏捷质疑: 迭代开发
迭代在于我们明确的承认信息和知识的不完备性, 不可完备性. 而项目的成功, 需要某种程度的完备性.这种认知的局限与成功的条件之间的矛盾, 促成了人们解决这类问题的通用方法: 渐进的试错法 试错法参考一: http://en.wikipedia.org/wiki/Trial_and_error.试错法参考二: http://zh.wikipedia.org/wiki/%E8%A...
2009-07-01 20:46:00 79
Feature Team vs. Component Team: 摘要
http://www.infoq.com/articles/scaling-lean-agile-feature-teamsFeature Teamlong-lived—the team stays together so they can ‘jell’ for higher performance; they take on n...
2009-06-28 22:30:00 260
原创 敏捷质疑: 持续集成
Q: 我的产品是电信级的设备, 几百人分成几十个项目组在开发, 各个项目组进度不统一, 如何集成?A: 你要做的其实跟技术无关, 更多的是管理工作, 就是制定你的产品级别的集成策略.这涉及到需求分析和发布计划(依赖管理, 价值和风险识别), 开发方法(自顶向下还是自底向上, 横向分层还是垂直特性), 集成粒度划分(完整特性的集成还是API的集成), 集成间隔计划, 版本控制策略, 还有
2009-06-25 22:24:00 1164
敏捷质疑: 持续集成
Q: 我的产品是电信级的设备, 几百人分成几十个项目组在开发, 各个项目组进度不统一, 如何集成?A: 你要做的其实跟技术无关, 更多的是管理工作, 就是制定你的产品级别的集成策略.这涉及到需求分析和发布计划(依赖管理, 价值和风险识别), 开发方法(自顶向下还是自底向上, 横向分层还是垂直特性), 集成粒度划分(完整特性的集成还是API的集成), 集成间隔计划, 版本控制策略, 还有...
2009-06-25 22:24:00 79
领域驱动的设计: 摘要
第1部分让领域模型发挥作用第1章 汲取知识第2章 沟通和语言的使用: 通用语言, 大声读出模型, 一个团队, 一种语言第3章 将模型和实现相绑定第2部分模型驱动设计的构造块第4章 分离出领域: 分层架构, 领域层中存放着模型第5章 模型在软件中的表现形式: 关联, 实体(...
2009-06-25 22:18:00 113
敏捷的可能起源
HTML clipboard做了半年的东西又被否定了, 这里有两个可以改进的地方, 一个是半年, 一个是否定; 那以后干脆两星期让他们看一次, 顶多浪费两星期的工作; 想不被否定, 干脆拉他们一起来干活, 现场让他们说要啥, 立马就做啥给他看. 可两个星期就演示一次能演示啥? 架构还没设计好. 那干脆先简单直接一点, 把功能实现, 别的以后再说, 有问题再改, 别两周啥功能也没实现,...
2009-06-09 23:01:00 84
xUnit 测试模式: 摘要
xUnit测试模式--测试码重构“脆弱测试”问题15a15c15ac151515c151515a15a154017使用商业“记录与回放”或“机器人用户”工具的测试自动化在这些工具的早期用户中名声狼籍.a使用这种方法的自动化测试通常因为看起来不太重要的原因而失败.a重要的是要理解这类测试自动化的局限性,16以...
2009-06-06 11:37:00 386
原创 敏捷外传
敏捷外传之FBI: 世界上最敏捷的团队 事实上, 世界上有一支最著名的敏捷团队, 一直很少有人意识到, 这就是美国的 FBI. 虽然我们不知道它内部实际的情况, 也有不少电影把FBI 描述的很白痴, 但是至少在>中他们的做事方法所反应出来的思想, 与敏捷如出一辙.跨功能的团队:各方面的专家组成一个抓捕团队, 归一个人指挥, 而不是说虽然组成了项目组, 但项目
2008-10-16 22:20:00 5653 4
敏捷外传
敏捷外传之FBI: 世界上最敏捷的团队 事实上, 世界上有一支最著名的敏捷团队, 一直很少有人意识到, 这就是美国的 FBI. 虽然我们不知道它内部实际的情况, 也有不少电影把FBI 描述的很白痴, 但是至少在<<越狱>>中他们的做事方法所反应出来的思想, 与敏捷如出一辙.跨功能的团队:各方面的专家组成一个抓捕团队, 归一个人指挥, 而...
2008-10-16 22:20:00 74
ThrowawayObject :在Java中实现Rails里的Flash Message
需求是表单提交后, 转到另外一个已经存在的页面, 并在页面上方的空白处显示一条醒目的消息, 而且只显示一次 (刷新后这条消息不应该再出现). 对 Web 开发相当不熟, Pair说这需求类似 RoR里的 flash message, 问Java里有没有. 我们用SpringMVC + Velocity, 看了看文档, 问了问人, 短时间没有得到确定方案.那就试一试吧, 明知几乎不可能成功, 还是写...
2008-10-06 22:07:00 90
持续集成: 实践指南
第一部分. 实现 0. 持续集成工具的作用降低风险? No提高质量? No快速反馈? Yes !工具本身并不能降低项目风险, 提高代码质量. 工具唯一能做的是给你快速反馈. 你收到反馈之后的行为, 才是降低风险, 提高质量的关键 (好几天不check in, 工具再牛也白搭; 失败的build不修复, 工具也无能为力)所以持续集成是一个以人为核心的过程, 工具...
2008-09-07 22:41:00 202
持续集成: 流程指南
/** * 本没有流程, 公司采用CMMI, 要求有个流程, 就写了一个 */Continuous Integration Process Guide 持续集成实施指南像" 版本控制", "配置管理"一样, "每日构建", "持续集成(Continuous Integration, 简称CI)"等实践也成为现代软件开发的必备配置. 一个好的CI环境, 能够让你实时监控软...
2008-09-07 22:38:00 117
原创 敏捷质疑: 结对编程, 代码集体所有权
Q: 结对编程、责任共享,完全是胡说,代码找不到作者,开发人员哪里会有责任心!A: 这个疑问基于一个假设: 开发人员的责任心来自于问责制度, 开发人员只有在恐惧的驱使下才会细心去编码.我不知道你的职位是什么, 你或许是某个大中型企业的中高层领导, 或许手下有不少的人, 但你不会得到手下的尊敬, 他们只有"畏".或许在对死亡之类的恐惧面前, 人类会爆发出强大的力量, 对于医疗系统,
2008-07-27 22:20:00 7258 15
敏捷质疑: 结对编程, 代码集体所有权
Q: 结对编程、责任共享,完全是胡说,代码找不到作者,开发人员哪里会有责任心!A: 这个疑问基于一个假设: 开发人员的责任心来自于问责制度, 开发人员只有在恐惧的驱使下才会细心去编码.我不知道你的职位是什么, 你或许是某个大中型企业的中高层领导, 或许手下有不少的人, 但你不会得到手下的尊敬, 他们只有"畏".或许在对死亡之类的恐惧面前, 人类会爆发出强大的力量, 对于医疗系统,...
2008-07-27 22:20:00 71
原创 敏捷质疑: TDD
Q: 为什么通过单元测试发现的 Bug 很少 ?A: 单元测试不是用来发现 Bug 的, 而是用来预防 Bug 的. 如果采用 TDD, 测试用例完成之时, 产品代码尚未编写, Bug更无从谈起. Q: 那是否写单元测试就能提高代码质量了 ?A: 关于这一点, 似乎有人不这么看, TDD Opinion: Quality Is a Function of Thought and R
2008-07-13 23:47:00 9368 13
敏捷质疑: TDD
Q: 为什么通过单元测试发现的 Bug 很少 ?A: 单元测试不是用来发现 Bug 的, 而是用来预防 Bug 的. 如果采用 TDD, 测试用例完成之时, 产品代码尚未编写, Bug更无从谈起. Q: 那是否写单元测试就能提高代码质量了 ?A: 关于这一点, 似乎有人不这么看, <<TDD Opinion: Quality Is a Function of Thoug...
2008-07-13 23:47:00 74
原创 假冒的艺术
预处理的接入点 构建脚本中的宏定义可以控制将文本解释为真正的实现还是假的实现 构建脚本中的头文件搜索路径可被用来控制接入真正的声明还是假的声明 头文件中的防卫宏可被用来接入假的声明以遮挡真正的声明被包含进来 上面第二点通常要求提供同名的头文件, 而使用不同的构
2008-07-06 22:39:00 5802 1
假冒的艺术
预处理的接入点构建脚本中的宏定义可以控制将文本解释为真正的实现还是假的实现构建脚本中的头文件搜索路径可被用来控制接入真正的声明还是假的声明头文件中的防卫宏可被用来接入假的声明以遮挡真正的声明被包含进来上面第二点通常要求提供同名的头文件, 而使用不同的构建设置而第三点不要求同名, 只要使用相同的防卫宏, 并保证把包含替代声...
2008-07-06 22:39:00 99
设计原则与模式: 案例介绍--CppUnit
设计原则与模式: 案例介绍--CppUnitCppUnit 是一个单元测试框架, 我们看一看它的设计是如何遵循基础的设计原则和模式的单一职责原则TestRunner 和 TestResult 的分离 class CPPUNIT_API TestRunner {virtual void addTest( Test *test );...
2008-06-01 20:15:00 90
原创 The Ruby Programming Language Notes
/****************************************按名称调用一切都是对象, 且永不关闭钩子无处不在yield/block/proc/lambda, 一等公民符号与哈希模块/类/实例, 随意组装****************************************/ 关于风格 不会区分什么 primitive ty
2008-05-26 23:13:00 2903 1
The Ruby Programming Language Notes
/****************************************按名称调用一切都是对象, 且永不关闭钩子无处不在yield/block/proc/lambda, 一等公民符号与哈希模块/类/实例, 随意组装****************************************/ 关于风格 不会区分什么 primitive ty...
2008-05-26 23:13:00 76
交互设计: 火车上的厕所
有人在动车组的厕所前等了很久, 直到乘务员路过说厕所是被锁住了,其实里面没人.可是设计上没有任何区别! 都是门闩处显示"有人"字样!其实厕所有两种状态, 使用中和停用中, 使用中才分有人和无人, 可似乎设计上只考虑了使用中的情况. 我注意了车厢内的电子显示屏, 也没看出如何指示锁住停用的状态没注意是不是所有的火车都这样, 或者认为这个问题可以由乘务员解决? ...
2008-05-26 17:17:00 280
交互设计: 股市帮凶
同事 Y 在线操作股票时, 把"买入"点成了"卖出", 结果以远远低于市场价的价格差点清仓. 没有看过那个界面, 从他的描述中是这样的:"一排五个按钮, 买入和卖出靠在一起, 字体很小."谁还没有个眼花手抖鼠标乱跳的时候啊!作为业余交互设计爱好者, 我觉得好一点的设计可以这样:0. 使用业务术语, 甚至业务口语来标识按钮的功能, 比如不要说什么买入卖出, 按钮文字应该是大大的"抄底", "出货"等...
2008-05-04 21:30:00 89
CruiseControl Enterprise 最佳实践 (6) : Scaling up
CruiseControl Enterprise 最佳实践 (6) :Scaling up©Copyright 2008 Julian Simpson. All rights reserved. 英文原文: Scaling up I was an Infrastructure Specialist at ThoughtWorks. In my role I make s...
2008-04-12 23:17:00 78
CruiseControl Enterprise 最佳实践 (5) : Refactor your configuration file
©Copyright 2008 Julian Simpson. All rights reserved. 英文原文: Refactor your configuration file I was an Infrastructure Specialist at ThoughtWorks. In my role I make sure that we are building our ...
2008-03-12 10:32:00 83
CruiseControl Enterprise 最佳实践 (4) : Bootstrap with a Bootstrapper
©Copyright 2008 Julian Simpson. All rights reserved. 英文原文: Bootstrap with a Bootstrapper I'm an Infrastructure Specialist at ThoughtWorks. In my role I make sure that we are building our s...
2008-02-18 11:04:00 81
迭代本质论
新年伊始, 可能你又要制定一些计划了, 实际上, 你的生活在开始一个新的迭代迭代, 不是软件业的发明, 而是万物根本社会的迭代 : 王朝的替换, 制度的变革去年你是天王, 今年我是至尊开元盛世, 贞观之治自然界的迭代 : 基因的变迁, DNA的双螺旋地球公转, 四季轮换, 日复一日, 年复一年生理的迭代 : 日升日落, 月圆月缺. 女人, 月当月快乐感情的迭代 :前尘后世轮回中, 谁在宿命里安排....
2008-02-14 13:58:00 211
Ant: 大规模应用中的应用
Large Scale 的应用通常意味着: 目录较多, 层次较深依赖较多, 构建脚本依赖的第三方Ant Task, 项目依赖的第三方库等测试较多, 构建时间反馈周期较长需要在不同操作系统上运行 需要在不同团队成员的机器上运行 由于以上原因, 导致Ant脚本较长 1. 目录较多, 层次较深通常有两种风格的解...
2008-01-12 21:52:00 192
CruiseControl 的 108 种调度模式
/*************************/"拥抱变化" 是敏捷的态度之一, CruiseControl 正是来实证这种态度的作品. 多种类型的"变化"都会触发CruiseControl的一次构建过程.我们知道CruiseControl能根据源代码的变化来调度一次构建, 但你知道CruiseControl支持多少种调度模式吗?---切尔斯基/*********...
2008-01-05 18:19:00 87
Ivy: 搭建本地仓库
基本上, 搭建一个本地的ivy仓库, 包含两件独立的事情: 搭建仓库本身, 和配置如何使用这个仓库 仓库本身Ivy的Repository是由一个个Module组成的, Module则包含自身的artifacts(通常是jar文件)和描述文件.Module的描述文件是ivy的核心, 里面记录了这个module包含哪些artifacts和这个module对其它module的依赖. 这样...
2007-12-23 23:23:00 317
RegexBuilder: A DSL for creating regular expression, Request For Comment
class IP include RegexpBuilder def less_than_255 _0_to_100 = repeat(digit(), 1, 2) _100_to_200 = "1" + _0_to_100 _200_to_250 = "2" + either("0-4") ...
2007-12-16 22:25:00 141
CruiseControl Enterprise 最佳实践 (3) : Configuring CruiseControl the CruiseControl way
©Copyright 2007 Julian Simpson. All rights reserved. 英文原文: Configuring CruiseControl the CruiseControl way I'm an Infrastructure Specialist at ThoughtWorks. In my role I make sure that we are b...
2007-11-09 09:27:00 84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人