[InfoQ:][利用][壁上]InfoQ: 利用“壁上长蛇”来量化障碍

【InfoQ中文站】Kevin Schlabach在他的 Agile Commentary网志上 提到关于一个叫”壁上长蛇”(原文

软件研发

[InfoQ:][Scrum][Scrums]InfoQ: Scrum of Scrums

【InfoQ中文站】Mike Cohn(《敏捷估计与规划》一书的作者)认为,Scrum of Scrums(SoS)会议“是把Scrum扩展到大型项目团队的一件利器。这些会议可以让多个团队讨论他们的工作,尤其关注工作重叠和集成的领域。”

Allan Shalloway正在写一本新书《Lean Software Development: Scaling Agile to the Enterprise》, 他在以下方面征求过大家的经验:”使用Scrum-of-Scrums协调团队(我已经有成功经验),把Scrum扩展到企业级别(很多人告诉过我由于多 种原因,他们没有成功)。”Alan发现,当大型团队(有个例子中多达350人)使用Scrum时,问题悄然出现。这个案例中,多个产品共用一些通用的组 件。他引用了发生的3个问题作为例子:

技术方面。由于我们采用迭代开发,团队满怀信心地遵守自然设计(emergent design)的原则。这意味着我们编写高质量的代码,但是只有必要的时候才会增加功能或者设计结构。团队A可能写了一个加密器,因为只有一个地方在用, 他们就没有使用接口。团队B可能后来也需要一个加密器,但与团队A的稍微不同。对组织来说最好的办法是让团队A修改代码,使用接口

软件研发

[硬件][便宜][程序员]硬件很便宜程序员很昂贵

摩尔定律认为:集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍,而价格下降一半;或者说每一美元能买到的计算机性能,将在每隔18个月翻两倍以上。

这提出了一个有趣的问题:用越来越便宜的硬件去解决程序问题是否可行? 在美国,程序员的平均薪水是水涨船高。IT部门或多或少都有几位男或女程序员,用简单的数学进行计算,你会发现与其养这么多程序员去优化代码,还不如购买一台更先进的服务器。

举个例子,一台价值5000美元的新服务器,相比现有的服务器:CPU速度提高约50%,内存容量增加2到6倍,硬盘空间增加2倍。使用新服务器后,可以预计页面响应时间减少至原来的一半,所需钱只不过是普通程序员一个月的薪水。显而易见,硬件越来越便宜,程序员越来越昂贵,竟然没人想到用硬件替换几位程序员。

http://www.codinghorror.com/blog/archives/001198.html

软件研发

[InfoQ:][结对][编程]InfoQ: 结对编程 vs. 代码复查

【InfoQ中文站】结对编程、代码复查、鼓励知识共享,这些都可以有助于提升软件质量。当敏捷 vs.精益,XP vs.Scrum,vi vs.Emacs的争论渐渐消隐,开发人员又对结对编程和代码复查的价值所在展开了争论。Theodore Nguyen-Cao在他的文章中将代码复查者比作鸡,结对编程者比作猪。

在敏捷论文中常常会提到小鸡和猪的故事。在用熏肉和鸡蛋做的早餐中,鸡只是参与,而猪则是付出。所以,“猪”这个词用来形容对某件事情付出全部精力的人,而“鸡”虽然参与了,但是投入的程度比“猪”小。

软件研发

[学习][技术][三部曲]学习技术的三部曲:WHAT、HOW、WHY

最近几天有些网友在邮件里面问我关于学习的问题。有很多人觉得工作了几年,也学会了不少的类库、框架、甚至语言,但是感觉自己的能力没有太大的提高。因此今天来说一下我个人对这方面的体会。
  我把学习归类为三个步骤:What、How、Why。经过我对周围同事和朋友的观察,大部分感觉自己技术没有提高的人,都仅仅停留在What阶段。下面我把这三个步骤解释一下。

  ★第一步:WHAT
  所谓的“WHAT”,就是搞清楚某个东东是什么?有什么用?有什么语法?有什么功能特性?……
  对于学习语言(比如C++、Java),大部分人都能够掌握基本的语法和标准库,然后用它写一些小程序(诸如二分查找、冒泡排序、简单文件操作等)。
  对于学习类库(比如JDBC类库),大部分Java程序员都能明白JDBC主要包含哪些类,也能够用JDBC进行简单的数据库查询和增删改操作。
  由于这个步骤是最基本的,假如你连这都做不到(可能你的理解力不够好),也别在IT界混了。
  但是光会What是不够的。仅仅停留在这个步骤,导致了很多程序员只知其然,不知其所以然。这就是目前大部分开发人员的现状。

  ★第二步:HOW
  所谓的“HOW”,就是搞清楚某个东西是如何运作的?实现机制如何?等一系列相关问题。
  举例如下:
  假如你在学习C++语言,你是否搞明白函数传参数的实现机制?虚函数是如何实现?抛出异常时的栈回退是怎么回事?……
  假如你在学习Java语言,你是否搞清楚GC如何实现?反射是如何实现?……
  假如你在学习JDBC库,你是否清楚JDBC Driver的4种类型?不同游标类型的实现机制?事务的机制?……
  在这个阶段,你必须多想想类似这些问题。然后通过各种途径(参见“关于自学能力”的几个方法),把问题彻底搞清楚。自然而然,你的提高就会比较明显。而且如果碰到一些深层次的问题(比如性能优化),也就知道该如何解决。
  完成这个阶段之后,你基本上就属于该技术领域最优秀的20%的人(根据二八原理,80%的人不会去思考HOW的问题)。

  ★第三步:WHY
  一般来说,只有你把HOW的问题想清楚,才开始考虑步骤WHY。
  所谓的“WHY”,就是搞清楚某个东西为什么设计成这样?为什么不是另外的样子?这样的设计有什么讲究?
  说实在的,善于问“为什么”有一定的天赋成分?好像某个科学大牛曾经说过“提出问题有时候比解决问题更难”。一般来说,只有当你深刻理解了某个东西,才能够针对这个东东的设计问出一些问题。所以,我前面强调过,要先把HOW的问题搞清楚,再来考虑WHY的问题。
  举例如下:
  对于C++语言:为什么C++没有类似Java的finally关键字?为什么C++当初没有考虑GC?……
  对于Java语言:为什么Java没有类似C++的类析构函数?为什么Java要同时提供String和StringBuffer两个似乎冗余的类?……
  如果你能够自己问出诸如上述的“为什么”问题,并且能够通过各种途径找到解答,那你基本上已经吃透这个技术了,并且你已经有可能自己去设计一个类似的玩意儿了。到这时,你已经踏上了通向技术高手的康庄大道。

  由于本博客偏重IT方面,所以今天举的这些例子多半都是IT相关的,但是这个三部曲在IT以外的行业/领域其实也能适用,就看读者自己的领悟了。

转载必须包含本声明、保持本文完整。并以超链接形式注明作者编程随想和本文原始地址:
http://program-think.blogspot.com/2009/02/study-technology-in-three-steps.html

软件研发

[系统][程序员][成长]系统程序员成长计划

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静

并发(二)(下)

面对这个需求,一些初学者可能有点蒙了。以前在学校的时候,对于课本后面的练习,我总是信心百倍,原因很简单,我确信这些练习不管它的出现方式有多么不同,但总是与前面学过的知识有关。记得《如何求解问题

软件研发

[delphi][透明][组件]delphi透明组件开发

透明的控件, 一般继承自TGraphicControl的(就是那些没有handle属性, 不能有focus的控件, 如image)
都有Transparent属性. 对TWinControl类的控件, 要实现透明只要完成以下
四步基本上就成了.

1.在Create中设定ControlStyle :=ControlStyle - [csOpaque];

2. override 它的CreateParams方法, exstyle 里加上WS_EX_TRANSPARENT.

3. 修改它的parent的window style, 去掉WS_CLIPCHILDREN.
inherited CreateParams(Params);
with Params do
begin
{ 完全重画 }
Style := Style and not WS_CLIPCHILDREN;
Style := Style and not WS_CLIPSIBLINGS;
{ 增加透明 }
ExStyle := ExStyle or WS_EX_TRANSPARENT;
end;

4. 截获WM_ERASEBKGND, 什么都不做直接返回1.(不搽除背景)

一般有上面3步能成. 有些控件比如TPanel, 在它的paint中用了fillrect,
所以要实现透明的话还要override 它的paint方法, 自己画.
按钮透明需要进一步处理.
createparams里加上style := style or BS_OWNERDRAW;
然后在WM_DRAWITEM中自己画吧

软件研发

[09年][开发][语言]09年开发语言使用率前景分析

来源:IT专家网

  计算机在中国被大众所接受已经有十几个年头了,近几年,更是成为了人们在工作中不可或缺的重要工具.而开发语言对于IT行业从业者来说,也并不在陌生,谈到开发语言,也许每个人都能说出来几种或十几种.那么目前通用的编程语言有两种形式:分别是汇编语言和高级语言。汇编语言的实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的标识符,更容易识别和记忆。高级语言是目前绝大多数编程者的选择。它并不是特指某一种具体的语言,而是包括了很多编程语言, 如目前流行的Java、VB、VC、FoxPro、Delphi等.它不但将许多相关的机器指令合成为单条指令,并且去掉了与具体操作有关但与完成工作无关的细节,大大简化了程序中的指令。

  今天我们要说的开发语言,指的就是高级语言.随着计算机科技日新月异的发展,软件编程行业受到的关注越来越高,从事编程工作的人员

软件研发

[InfoQ:][利用][壁上]InfoQ: 利用“壁上长蛇”来量化障碍

【InfoQ中文站】Kevin Schlabach在他的 Agile Commentary网志上 提到关于一个叫”壁上长蛇”(原文

软件研发

[InfoQ:][Scrum][Scrums]InfoQ: Scrum of Scrums

【InfoQ中文站】Mike Cohn(《敏捷估计与规划》一书的作者)认为,Scrum of Scrums(SoS)会议“是把Scrum扩展到大型项目团队的一件利器。这些会议可以让多个团队讨论他们的工作,尤其关注工作重叠和集成的领域。”

Allan Shalloway正在写一本新书《Lean Software Development: Scaling Agile to the Enterprise》, 他在以下方面征求过大家的经验:”使用Scrum-of-Scrums协调团队(我已经有成功经验),把Scrum扩展到企业级别(很多人告诉过我由于多 种原因,他们没有成功)。”Alan发现,当大型团队(有个例子中多达350人)使用Scrum时,问题悄然出现。这个案例中,多个产品共用一些通用的组 件。他引用了发生的3个问题作为例子:

技术方面。由于我们采用迭代开发,团队满怀信心地遵守自然设计(emergent design)的原则。这意味着我们编写高质量的代码,但是只有必要的时候才会增加功能或者设计结构。团队A可能写了一个加密器,因为只有一个地方在用, 他们就没有使用接口。团队B可能后来也需要一个加密器,但与团队A的稍微不同。对组织来说最好的办法是让团队A修改代码,使用接口

软件研发