Sat 19 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furlFri 18 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlWed 16 July, 2008

昨天,一个同事跟我说,这块太乱了,做不动了。
两次,我做了相同的选择:重构。
重构和开发新功能在很多PM眼里一直是一对很难调和的矛盾。对于PM来说,来自客户的压力让他更关注项目的进展,而重构往往代表项目的原地踏步,只有开发新功能才是“正道”。放弃“正道”,选择看不见进展的重构,站在PM的角度上,这是难以接受的。
“破窗户”理论告诉我们,一旦置破烂于不理,其结果通常是烂得更多更快。
一个同事和我聊天时,提到了他正在做的一个系统,他们在开发的过程中发现了很多问题,很多bug改起来都非常困难。他们想重构,但是强势的PM坚持要开发新功能,于是,这些问题有幸在代码中继续生存下去。随着项目的进行,这些问题暴露得越来越明显,以致于有些问题已经成为项目继续开发新功能的障碍。当问题到了不得不进行修改时,发布的日期也逐渐临近了。
当我做出重构的选择时,我知道,我会失去对当前进度的控制。但我期望得到的是一个合理的设计,以此,后续的一些开发工作会得到大幅度加快,前面失去的进度后面在一定程度可以得到弥补。
几个月前,那段时间,项目进度如预期的慢了下来,但随着重构的进行,我对代码质量也逐渐的越来越有信心了。事实证明,项目后期出现了进度井喷的现象,原本耽误的进度到最后居然出现了提前完成。
这次,当我和那个同事讨论了新版设计之后,我从那个曾经失望的眼里看到了光芒。今天开始工作之前,项目组的所有开发人员又在一起重新讨论了这个新的设计,并进行了一些完善。于是,一个Pair开始采用这个新的设计方案进行编码。事实出乎意料的顺利,原本预计耽误很多的进度,在他们生花妙手的努力下,在今天下班之前,就将大部分赶了回来,让我着实惊讶于他们的开发速度。
从这几个项目的经验来看,重构,短期上在阻碍开发的进度,但是站在长期的角度,却可以大幅度提升软件开发速度,也提高了软件本身的质量,更重要的是,通过重构,解决掉一些原有实现中固有的缺点,可以将程序员从痛苦中解救出来。编程本应该是快乐的,不是吗?
忍无可忍,无须再忍,重构吧!
add to del.icio.us. look up in del.icio.us.
add to furl
Sehr geehrte Damen und Herren,
liebe Biberacher und Biberacherinnen,
Schützen ist nur einmal im Jahr. Bitte geht auf den Berg.
Danke,
Christian Neukirchen
NP: Fields of the Nephilim—Mourning Sun
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlMon 14 July, 2008

2. Grammar Of or being a verb or verbal form that designates the beginning of an action, state, or event, such as the Latin verb tumescere, “to begin to swell”.
add to del.icio.us. look up in del.icio.us.
add to furl
The same procedure as last year, Miss Sophie?
— The same
procedure as every year, James!
Die Motivation der Schüler beim Bunten Umzug ist ja immer recht fraglich. Hier daher einige Vorschläge, die vielleicht mehr Spass gemacht hätten:
- Wir roden den Regenwald
- Firefox 3
DopingEine Klasse der DRS hatte “Anna Bolika”. Und ich wartete soo auf den Muskel-Kater.- Bahnstreik
Wir boykottieren die OlympiadeDas WG hatte ein Free-Tibet-Schild.- Legalize it
- H.P. Lovecraft
- Narkolepsie
- Hedonismus
Übrigens hat in roten Tüchern rumlaufen nix mit Türkei zu tun.
Scheene Schütza!
NP: Corpus Delicti—Sylphes
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furl
“ Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and perhaps weigh 1.5 tons. ”
Popular Mechanics, March 1949
add to del.icio.us. look up in del.icio.us.
add to furlSun 13 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl
Wenn man den Jahrgängerumzug sieht, will man gar nicht alt werden.
…übrig bleibt der fahle Nachgeschmack einer Konsumgesellschaft voller überflüssiger Angelizismen.
Was macht eigentlich Biberach im Web 2.0? Weder auf Youtube noch auf Flickr find ich irgendwas von diesen Schützen…
Scheene Schütza!
NP: The Sisters of Mercy—More
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlSat 12 July, 2008

所以,我讲一些自身的经历。
说到QA,首先想起的便是测试。从我刚开始接触编程的时候,我就知道测试是必需的,否则,怎么能够知道自己写的程序是对的,就像考完试需要检查一下卷子一样。那个时候,除了了一些最基本的程序之外,我还写过一些有界面的Windows程序,于是,关于测试,留给我的第一印象就是点这点那,到处乱点。
工作之后,虽然知道了QA这个角色的存在,但很长一段时间都没有和QA在一起工作过,所以,客观的说,那段时间一直觉得QA是一种没有技术含量的工作。直到有一天,一个长时间没有QA的项目,能够卖钱了,领导觉得有必要提高产品质量了,于是派了个QA进到项目组。他是我后来的一个非常好的朋友,当时是部门QA方面的负责人。
我们的项目是一个服务器的应用,所以,从外部的角度来看,主要就是一个发起一个符合我们用到协议的消息包,然后看看得到的应答。其实,我一直对这个项目很有信心,因为它已经在一些地方上线运行了,而且从当时的情况来看,我们还算舒服,没有经常性的被客户从睡梦中叫醒。
QA进行的第一个测试就是发了空消息包,结果系统报错了。我第一反应是“你怎么能这么用”,是的,感情上有些接受不了,甚至有些气愤,我一向很有信心的代码,就这么非常轻松让人给弄崩溃了。稍微平静了一下,我觉得其实也没有什么大不了的,毕竟是自己的代码中真的有问题,所以才让人抓住。
经过一段时间,我越发深刻的认识到QA在项目中的作用,虽然我们在写代码的时候,已经考虑了很多的异常情况,但总还是有很多我们意料之外的情况被QA发现,随着项目的进行,发现和修改的bug越来越多,我们对自己的项目也越发有信心了,不过,回想起之前的代码,那样的产品质量也在线上运行了好长时间,多少有些后怕。
这时QA在我心目中,已经不再是那个没有技术含量的工种,我对QA开始充满了敬畏。真的是敬畏,尊敬和畏惧并存,敬的是他们总能给产品质量带来提升,畏的是他们总能不断在自己感到骄傲的代码中发现问题。和我们的QA聊过几次才知道,原来QA的工作也分验证性和破坏性的,原来他们的工作也是需要缜密思考的,原来他们的工作也是需要很详细的计划。突然发现自己曾经对QA的理解,基本上完全是门外汉的水平,误解是很让人郁闷的,就如同每每我说自己是做软件开发的,家里的邻居通常会说,什么时候有空帮我们家装台机器吧!
后来,我和这个QA兄弟一起跳槽到了另外一个部门。他的工作范围本质上说还是在QA的范畴。由于这个部门做的是偏研究性质的,所以,他的工作名义上称为验证,主要是看部门研发的算法有多大的进步。最开始的时候,一般是一周做一次验证,主要的原因就是因为运行加上总结需要很长的时间,于是,这位兄弟想办法开始把一些工作自动化,随着自动化程度的提高,验证周期也逐渐缩短,后来,我离开了这里,据说,现在这个自动化验证系统已经达到了很方便的程度,只要敲一下命令,它会自动部署到几台机器上运行,然后,搜集结果产生报表。就这样,原本一周一次的过程,简化到几乎随时可以做。如果让我选择这个部门产生出最有价值的东西,我会把票投给这个自动验证系统,甚至超过了部门研发的算法,只可惜养在深闺无人识。
为了讨论这个关于QA的话题,我问了自己一个问题,为什么QA能够想到我们开发人员想不到的地方。我自己给出的答案是,二者站的角度不一样。开发人员通常是站在实现的角度,所以,通常我们会更多的关注如何把这个功能做出来,也就是规定动作,而QA是站在用户的角度,如同我们自己使用软件通常是不会看软件使用手册一样,QA总会用到一些规定动作之外的用法,也就是自选动作,所以,二者之间必然存在一些差别。既然存在差异,QA发现一些自己无法发现的东西。
如同我之前对QA有一些误解,想必也有很多开发人员对QA也存在一些误解。所以,对于QA而言,增加与项目成员之间的沟通应该是一个很好澄清误解的方式。沟通,对于任何项目都很重要,不仅仅局限于开发人员和业务分析人员之间,QA也应该是这个沟通环节中重要的一部分。只要有可能,QA都应该是从项目最初介入,这样一方面保证了QA与项目成员之间在一开始就建立起良好的沟通环境,另一方面,他们的经验和技能可以保证大家在最初的阶段就注意到一些问题,正如我们QA Lead在Agile China所讲的一样,Build Quality In。
这个关于QA的话题的最后,再聊聊ThoughtWorks QA。作为一个ThoughtWorker,除了做好自己本职工作之外,我们也要把自己工作中总结出的好的方面告诉别人,无论是以文章、blog或是讲演的方式,所以,QA也不应该例外。
add to del.icio.us. look up in del.icio.us.
add to furl
Zwei kurze Szenen vom Berg:
Ein kleines, dickes Mädchen kommt zur Frittenbude mit einer leeren
Pappschale in der Hand und fragt: Kann ich Mayo haben?
—
Nimm dir, so viel du willst.
Ein Mädchen, vielleicht 16 oder 17, nimmt ihrem Freund (wohl etwas
älter) die Martini-Flasche weg, leert sie aus und brüllt: Jetzt
gibts nix mehr! Du blamierst mich nicht mehr in der
Öffentlichkeit!
(Tipp: nicht heiraten, wer weiss wie die in 30
Jahren drauf ist.)
Desweiteren fordere ich die Schützendirektion auf, Schützen auf den alten Termin mit gutem Wetter zurück zu verlegen.
Und noch ein Nachtrag zu gestern: Schützen 2022.
Mag es soweit nicht kommen,
Scheene Schütza!
NP: London After Midnight—Kiss
add to del.icio.us. look up in del.icio.us.
add to furl
Welcome to the third edition of This Week in Rails, a weekly report with highlights from the Rails community. My apologies for the delay of this post, the past two weeks have been pretty crazy, so this edition covers the most interesting articles and news from the past two weeks.
Let’s kick off this report with a couple of maintenance releases by Jamis Buck. Both Capistrano 2.4.3 and Net::SSH 2.0.3 were published two weeks ago. If you use them, consider upgrading.
Rails 2.1 has been out for a while now, but in case you didn’t have a chance to catch up yet, this post collects several links to useful resources which will help bring you up-to-date.
The Pathfinder Development’s blog put out three highly interesting posts. The first is More Named Scope Awesomeness by Noel Rappin, while the second and third ones are Pretty blocks in Rails views and DRYing up Rails Controllers: Polymorphic and Super Controllers, both by Josh Symonds. Another good (and quick) recent read about controllers, was MVC: How to write controllers.
The same Noel also published the second part of “Developing iPhone applications using Ruby on Rails and Eclipse” for DeveloperWorks (part 1 and 2).
FiveRuns released a valuable gem called data_fabric which adds support for sharding and replication to Active Record. The same company also has a contest up and they’re offering two free tickets to RailsConf Europe in Berlin. Speaking of conferences, Fabio Akita announced that there will be a Rails Summit Brazil 2008 this coming October in São Paulo. This will be the first event of its kind for the Rails community in South America.
An improved version (i.e. 1.1.1) of the Oracle enhanced adapter was released, as well as version 0.9.5 of the IBM_DB adapter for DB2 and Informix, which adds support for Rails 2.1.
In purely chronological order, I found the following articles to be worth pointing out: Speed up slow Rails development in vista – a handy tip for developers using Vista, Adding Google Maps To Your Rails Applications, Live fulltext search in Ruby on Rails and Useful Flash Messages in Rails.
The Railscasts website published two new episodes, one on testing through Selenium, and another on semi-static pages.
Finally, let’s close this edition on a lighter note. The next time you are about to create an acts_as_an_evil_genius plugin or other imaginatively named one, think about this post. ;-)
If you’d like to read more updates from the Ruby side of things, please head over to This Week in Ruby.
add to del.icio.us. look up in del.icio.us.
add to furl
add to del.icio.us. look up in del.icio.us.
add to furlFri 11 July, 2008

add to del.icio.us. look up in del.icio.us.
add to furl





