自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 收藏
  • 关注

对”为什么Scrum不行?“的评价

coolshell 发布 ”为什么scrum不行?“的文章:评价的原文:http://coolshell.cn/articles/5044.html/comment-page-1#comment-67737。我有不同的看法。原帖有我的评论。为了集中期间,这个博客把全部我的评论集中到一起。 如下就是我的看法: 尽管你和原作者的内容基本不离谱,但是出发点好像非常不同。原来的作者更多...

2011-07-24 12:19:14 146

《设计原本》书评

1000copy Review for “the design of design".  从论坛和微博和同事等渠道,我知道fredicks brooks ,那个《人月神话》的作者有出书了。 同事买了一本《设计原本》,昨天晚上清净的时候,就顺便看看,所幸厚度不大,花了N个小时通读,这本书的架构基本上比较清晰了。 可是从阅读以来就不太平静。想要说说我的看法。 首先是...

2011-04-17 01:19:25 160

c和c++的转换-2 list

 c++ 标准库内有很帅的容器,比如list,hash等等。需要构造一个字符串列表,只要:  // list#include <list>#include <algorithm>using namespace std;list<string> list_make(){ // c++ style str...

2011-04-08 21:22:42 138

c和c++的转换-1

用c连接字符串还是比较麻烦的。因为string并非c的内置类型。我们看看麻烦的情况。以连接字符串为例: c的代码是这样的:  char * strcat_cstyle(){ // c++ style char* a ="hello "; char* b ="world by c"; int len = strlen(a)+strle...

2011-04-08 21:15:00 124

Ruby 10 Minutes (摘要自---Ruby 用户指南)

======类  简单类  ruby> class Mammal   |   def initialize   |   end   |   def breathe   |     print "inhale and exhale\n"   |   end   | end  nil 继承,用<ruby> class Cat&...

2011-03-31 11:27:12 96

为何引入Code diff?

2011年1月26日13:52   2510年。考古队挖出一块硬盘,记录这2010年R公司的代码。他们从redgate公司的档案柜内找到 reflector反向出来了这些源代码,发现古人已经在编码方面注意标准化并且使用工具自动化这个过程。大家惊呼,哇咦,古人已经很聪明了。 我们的重构流程推行了两年。经过一段时间对重构流程的梳理、慢慢的建立和抛弃一系列的思想,然后不断的简化...

2011-03-19 10:37:47 379

行至水穷处,坐看云起时——单入单出规则的使用场合

2011年3月16日11:41  这两天CodeDiff,看到如下的代码,功能比较简单,技术判断两个HashObject对象是否相等:  private bool Equals(IHashObject data1,IHashObject data2) { bool value = true; foreach (stringtempString ...

2011-03-19 10:36:03 157

采用OO的回忆

 很早的时候, C++如此神圣。一次周末,我跑到yqd那里,边吃面边看他写程序,Borland C++的,看到对话框闪烁下面掩映着代码,有不少 ::Foo()之类的写法。觉得很酷。这个::是做什么的?不过当时没有好意思问,下来也没有搞的很清晰。相对于C,Pascal那些翻来覆去的Function ,struct ,C++有 tons of features 值得探索,显得如此的...

2011-01-28 11:06:29 112

保持对技术的敏感

2010年10月20日15:38 引子 “民国14年,费孝通到湖南永顺考察,当地人问他:‘如今谁坐龙位?’,14年光阴弹指一瞬,龙位看来和山坳上的百姓毫无关系。 某天早晨,我和公司内的一个程序员碰到了一起,我和他随便谈了谈项目的当前状况,他说,“我们的系统变成假3层了”。语气中看来非常寥落。 回头来说3层。7年前,3-ties开发刚刚兴起,但是是否使用3-tie...

2010-12-29 17:36:00 205

scrum,CMMI以及其他

2010年11月29日16:31 有团队就需要过程管理,以便协调资源,高效合作。我们公司的“青蛙王子”,“三顶法”都是这样的代表。尽管透着朴实,但是曾经比较起作用的。 现成的主流方法论如何呢?现成的方法论有两个大类,一个大类是以RUP,CMMI为代表的重型方法;一类是集中于敏捷旗帜下的若干方法,如XP(极限编程),Scrum等。首先,我需要做一个声明,就是我并不打算评价这些方面...

2010-12-29 17:34:58 96

Scrum带来的好处

2010年11月29日10:07 一个人写软件可以仅仅面对屏幕,奋力敲入代码就好。而团队开发模式下需要方法论指导大家的协作,以便达到共同的产品目标。方法论是必要的。 一个项目经理在推进团队“更快的解决Bug”过程中有些经验。他说:“我们在采用一种叫做‘青蛙王子’的方法来推动大家积极的解决Bug。方法是把一段时间捉虫最多最好的程序员叫做青蛙王子,并且给予奖励”。 在谈及“...

2010-12-29 17:34:04 1257

什么推动软件开发的进步?

有人说,软件大牛们都是懒人,因为懒而发明新的事物,以便让大家懒得有利,懒得有成果。还有人说是热情,激情什么的?听起来是不是太正面了!其实,还有一种可能,也许更加令人信服的可能——关键在于人心的差异——不管是什么东西,只要不是自己做的,就总是能够挑出毛病,看到不喜欢——程序员总是希望创造新的,而不是维护旧的。”windows 革命简史“一文(自己搜索)就是这样的一篇文章。无论是DDE,OLE...

2010-12-28 16:12:39 105

古旧的sql应该有点新样子

 sql曾经让人惊喜。一个初哥刚刚写程序的时候,发现需要连接两张表,并且做些排序之类的工作。在不知道sql的情况下,觉得真的很麻烦:需要自己做循环,装入A和b两张表, 循环一个,然后根据键值和另一个表的键值匹配,然后自己做排序。想起来好头痛。我和他说,OK,这是sql可以搞定的。只要select * from a join b on a.id =b.aid order by ...

2010-11-17 20:50:42 77

玩排列的图和日用图

scrum在我们的公司内终于落地了。我喜欢它。为了展示我们几个月来的实践,我觉得做一个ppt给大家看看。做的过程中,我想对比还是必要的吧,想起2003年我们曾经研究过的rup,2005年的cmmi等等。我想也许通过这样的对比让大家更加喜欢它。我决定弄些rup,cmmi之类的模型大图来看。首先是rup的​​​​​​​​阶段图:把整个开发过程分为inception,elab...

2010-10-07 12:53:32 109

重新发明和共同创造

推动软件进步的到底是什么?有人说,软件大牛们都是懒人,因为懒而发明新的事物,以便让大家懒得有利,懒得有成果。还有人说是热情,激情什么的?听起来是不是太正面了!其实,还有一种可能,也许更加令人信服的可能——关键在于人心的差异——不管是什么东西,只要不是自己做的,就总是能够挑出毛病,看到不喜欢——程序员总是希望创造新的,而不是维护旧的。”windows 革命简史“一文就是这样的一篇文章...

2010-10-07 11:33:32 107

作为口诀来用的“对象健身操”九步

 这一块小文字,在我的笔记内多时了,近半年来我一直在编码中体会和验证它们。面向对象含含混晦涩,不容易理解,说实话,我现在也没有看到一本书让我很快的明白的——总是需要长期的摸索和体会才慢慢的得到精髓。------------------对象健身操——九步迈向优秀软件设计2010年03月12日 星期五 来自《thoughtworks文集》 1.方法只使用一级缩进。2...

2010-08-26 20:56:19 273

分函数,还是放在一起?

在演示passalert函数的抽取的时候,有人提出了这样的意见: “我更加喜欢所有和这个功能有关的代码放到一起。这样看起来一目了然,而且调试的时候不需要跳来跳去的”。 抽取函数后,一个函数等效于一个代码块。就是说一个代码块变成了一行语句,显然看一行比看一块代码更加一目了然吧。 至于调试的时候跳来跳去的,这是事实,如果可以不跳当然对调试来说更加方便。可是在TDD...

2010-08-26 20:53:58 96

标注函数,而不是标注代码块

  我听过很多关于标注的看法了。比如jf说,“我发现我们都不太写标注,我们新来的,看起来比较困难”。那么,让你看不懂的真的是因为没有标注吗?在我的经验中,大部分原因在于:首先是因为代码本身不够清晰,导致需要标注,因此,真正的症结在于代码,而不在于标注。尤其是应用程序,大部分代码距离用户界面都不远,因此,只要用户界面走得通流程,通常不必但是在代码中迷路,因此代码都应该是比较容易...

2010-08-26 20:16:54 98

综合演练重构 ——以Passalert为案例

2010年6月12日9:29 我超爱这个函数 ,它真是讲解重构的极品。这段代码意图是比较容易看得到的,因为它就写在alertword变量内——检查密码如果符合以下其情况,就返回提示文字1. 密码为空2. 密码为连续字符1. 密码总共只用了不超过2个符号2. 密码位数不到6位;我一直在寻找各种各样的案例,然后看到这个案例后,我觉得好像找到了“终极案例”——可...

2010-08-25 21:01:02 92

从oo角度看with的使用

一个同事维护delphi代码的时候发现原来 的软件内有很多with。过多的with让代码难以调试。引入with的本意在于节省重复出现的对象名。比如说,如果有这样的调用:Functionfoo ()beginObjectA.Prop1 = "a";ObjectA.Prop2 ="b";ObjectA.Run();end 那么可以采用with让代码显得简洁...

2010-08-01 18:27:29 94

深度.net——成都2010年仲夏.NET社区精英活动

深度.net——成都2010年仲夏.NET社区精英活动  Visual Studio 2010的发布意味着大量新产品特性的全新亮相,更重要的是——行业巨人微软优雅转身,全面应用敏捷编程到日常工作中。那么我们程序员如何学习微软,让敏捷成为自己的工作利器呢?.NET俱乐部(在成都微软社区精英计划、成都软件技术沙龙的支持下)将举办dotnet的社区交流活动。本次活动目标就是揭秘高效程序员...

2010-07-19 16:10:53 74

对数据结构的看法--优美代码必备基础

 1. 数据结构初体验在大学期间学习数据结构时觉得很优美,因为选择一个好的数据结构可以让代码更加简短、容易阅读。并且很快也有了一个实践机会,就是自己决定做一个LISP 解释器。这个软件的代码总共花了3周写完,但是设计时间很长。实际上,其中的LISP的语法非常简单,而实现的时候主要涉及到数据结构中广义表,概念很多,但是在数据结构的书中介绍不多,只有自己逐步去理解,可以说,LISP解释器程序的...

2010-07-10 09:40:24 143

改善sql字符串的可读性(4) - 多Join拼接的性能测试

 * 测试,当on的条件为false的时候,join是否会被优化? -- 插入测试表CREATE TABLE person        (id INT NOT NULL ,NAME VARCHAR(20));CREATE TABLE bill        (id INT NOT NULL ,NAME VARCHAR(20),personId INT ); -- ...

2010-06-23 19:25:19 74

改善sql字符串的可读性(3) - 多个可选Join 拼接优化

 报表众多的系统,不仅仅是where子句存在拼接,join子句也可能需要拼接。还是看代码:String sql=" select * from bill  ";if (queryParams.pTypeId != null){  dbHelper.AddParameter("@ptypeid", ptypeid);  sqlWhere += " and  p.typei...

2010-06-18 21:59:07 131

改善sql字符串的可读性(2) - 多个可选条件拼接的优化

 报表众多的系统,“多个可选条件拼接”就会大量存在。因为程序员需要根据条件录入框的的值是否存在来决定是否拼接这个对应条件。有点抽象,还是看代码。 string sql =@"select n.vchcode,n.summary,n.Comment,e.fullname efullname                        from dlyndx n left j...

2010-06-17 20:56:06 121

改善sql字符串的可读性 - sql字符串常见编写风格

 所谓的动态sql,就是在t-sql字符串内的sql,而静态sql就是直接写在t-sql 存储过程内的。动态sql的好处是可以写出非常复杂的,表达能力很强的sql,并且,因为某些条件下sql更简单,因此号称效率更好。而静态sql的好处在于可以调试,可以代码提示。不管怎样,我发现我们的sql很多都是动态的。尤其是在sqlserver缺乏分页支持的sql2000,很多需要分页的存储过程都是这样...

2010-06-16 19:12:21 158

Sqlserver 缺乏很多基本类型

 编写了n年的T-SQL,一回头,发现这门语言居然缺少很多基本的类型。  1.枚举虽然枚举看起来就是数字,但是枚举比起数字来说更加好读。mysql有enum,比如billtype(单据类型)把它定义为枚举,从而在编写sql的时候更加方便。 mysql支持枚举案例: mysql> CREATE TABLE enum_test(e ENUM('fi...

2010-06-12 21:37:50 112

如今谁坐龙位?

某天早晨,我和一个程序员随便谈谈,他说,我们的系统变成假3层了。语气中看来非常寥落。我脑中便一下子跳出这个“龙位”的故事: “民国14年,费孝通到湖南永顺考察,当地人问他:‘如今谁坐龙位?’,14年光阴一瞬间,在很多人看来如此重要的政权更迭竟然传播到如此不堪的状态。” 回头来说3层。7年前,3-ties开发刚刚兴起,但是是否使用3-ties理念的开发是有分歧的。有些人认...

2010-06-11 19:16:00 74

Best practise ——什么样的代码更应该精雕细琢

 代码的价值不在本身大小和复杂度,而在于多少其他代码在用它。 我们的一个产品依然有很多代码采用了“点连接的长行代码”,比如权限检查代码: // 检查当前用户是否有对象搜索的权限AppUtils.UserInfo.CheckLimit(CarpaServer.Common.OperatorLimit.LIMIT_OBJECT_HISTORY_SEARCH) ; 这...

2010-06-10 20:52:20 283

best practice 封装存储过程(续4)——越抽象,就越容易封装变化。

 上回书 Tony  says:“看起来它似乎并没有改善不同层次代码的耦合关系,以前例看,所有的针对数据库的调用都是通过C#层的RunProc实现的,似乎它本身就充当了隔离层的作用,为什么还要增加一个无用的层delete_dept(1)呢? ” 你的问题提的很好。我会更加细致的解答你的疑问。 简单说,delete_dept语义上比RunProc更加抽象,没有那么...

2010-06-09 22:04:23 96

Svn vs VSS : 用数字说话

 图来自于MartinFolwer(简称MF)本人的博客中的文章:VcsSurvey。他做的一个调查,调查样本为ThoughtWorks公司的100名(咨询师)。图的纵坐标为“回应比例”,横坐标为“赞成比例”。分别表明使用的普及程度和美誉度方面。 1.          只要看VSS,Subversion即可.其他的版本管理我们不必看。2.          VSS赞成比例...

2010-06-05 13:46:42 64

Best practise : 封装存储过程 (续2)

 继续以delete_dept为例。 作为存储过程,当“如果dept内有对应的person,那么提示用户不能删除”这个需求提出的时候,delete_dept是无法在运行时提醒用户的,因此它必须和UI代码达成协议:当delete_dept返回-1的时候,就是不能删除的意思,然后由UI代码提示用户“不能删除”。就是说,检查部分在存储过程,而检查后的结果有UI来执行。两者通过re...

2010-05-26 22:25:42 57

Best practise : 封装存储过程 (续)

 还是以上面提到的存储过程delete_dept为例。delete_dept实在是太过粗糙,缺乏基本的错误检查。现在用户需要在删除前给它加入一个检查,和现实的代码更接近一些。检查为:“如果dept内有对应的person,那么提示用户不能删除”,代码如下: CREATE PROCEDURE [dbo].[delete_dept]          @id intAS...

2010-05-26 22:23:43 74

Best practise : 封装存储过程

 如果我们写了一个存储过程,比如叫做delete_dept,功能非常简单——就是删除指定id的部门: CREATE PROCEDURE [dbo].[delete_dept]          @id intASdelete  from dept where id=@idRETURN 0 那么这样的存储过程,我们应该在代码中如何调用呢?现在的大部分做...

2010-05-25 23:02:03 93

原创 “一键运行” ——全面自动化delphi开发环境 -

 在平台和产品合作开发的模式下,产品并不拥有全部代码。因此有些产品的问题,需要和平台代码联调,如果环境搭配对了,解决问题往往是比较容易的事情。但是没有调试环境下,仅仅静态查看代码就常常陷入僵局。因此,环境安装是平台和产品程序员顺利高效合作的重要部分。这里面最为重要的是一键运行——拿来代码,打开工程,按Run——然后该干嘛干嘛。 但是现在的情况并不乐观。局部来自于delphi...

2010-05-25 22:57:59 243

Visual studio 2010 Database Project 的命令行发布方法

“声明型数据库发布”在IDE内操作起来是非常方便的。但是在做安装包给用户的时候,或者在DailyBuild服务器上不可能也不应该安装Visual Studio。还好MS提供了auto deploy的命令行方法。这个命令叫做vsdbcmd 。 这是一个vsdbcmd的运行命令行的模板 Cd <PROJECT_HOME>\sql\debug\vsdbcmd /M...

2010-05-20 21:05:44 151

原创 寻找IDE for sql

某天早晨,我问一个程序员:“如果你接受了一个修改一个存储过程的任务,那么你会如何一步步的完成这个工作"?他的回答是:“先启动vss,找到这个文件,然后用‘查询分析器’修改,调试,然后提交”。 都是些什么阿猫阿狗的啊。vss就不怎么样了,用它来定位文件是很麻烦的。通过查询分析器修改sql也很老套。并且这个工具没有代码提示,没有重构支持,也没有TDD!sql开发是应用开发的不可或缺的一...

2010-05-20 20:35:58 277

sql server 2008 R2 Data-tier Application 提供新的数据库升级方法

sql server 2008 R2  Data-tier Application 提供新的数据库升级方法 数据库的升级总是比应用程序的升级要困难。应用程序升级不外乎就是完整的覆盖文件。而数据库的升级不能简单的做文件整体覆盖,而必须考虑用户数据的存在,保证用户数据是完整性和可用性。 以往我们升级数据库的方法可以简称为Create then Alter 。这个方法常常有两个文件构成,...

2010-05-14 09:52:22 142

SQL SERVER 2008 R2 的豪门夜宴

SQL Server 2008 R2开发代号 “Kilimanjaro”,我用中华人民屡试不爽的拼音来猛力一拼,就觉得好像是挺熟悉的样子。还别说,它还真的就是乞力马扎罗(非洲最高峰)。这个名字绝对暗藏着微软开发人员的雄心:我们的SQL SERVER 2008 R2虽然不过十几年的技术,但是敢于和几百万年就在那里的苍茫的雪山相比肩。拿什么来和高山相比?不外乎是要有...

2010-05-09 20:40:48 81

编码中的不安全感

任何事件都会在人身上体现出情感。愉快令人奋进,懊恼令人无力——这些都意味着改变,意味着潜能的发挥,新的一扇门在你的面前打开。今天谈到的是安全感。程序中有些不必要的代码如何产生的?比较典型的老代码:bool foo = IsBook ?true:false其实等效于:bool foo = IsBook 多出了“?true:false”这样的语句,其实并无必要,也不能提...

2010-04-25 21:40:56 79

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除