程序员的高产与否和地域无关。我供职的ThoughtWorks是一家素以其独特的企业文化而闻名的跨国咨询公司,当我遇到来自其他国家(包括中国)的ThoughtWorks员工时,我们之间总是相似多过差异。在我看来,不管来自哪个国家,软件开发者总是我们的第一身份,然后才是国籍和文化的区别。

世界各地的软件开发者都大致相同,也就是说我们在尝试提高生产率时也面临同样的挑战。正因为如此,在听说《The Productive Programmer》一书被翻译成其他语言(当然也包括中文)时我才会如此高兴。我希望书中所有的技巧与思考都能原汁原味地翻译给具有不同文化背景的读者,更希望这本书能帮助它的读者们变得更加卓有成效,不论他们来自哪个国家。

Programmer productivity has no geographic boundaries. I work for ThoughtWorks, an international consulting company known for its strong corporate culture. When I meet ThoughtWorkers from other parts of the world (including China), I’m struck more by our similarities than our differences. To me, developers from other countries are developers first, and citizens from another culture second.

Developers are pretty much the same all over the world, meaning that we face the same challenges for productivity. That’s why I was so glad when I heard about the translations of The Productive Programmer to other languages, including (obviously) Chinese. I hope that all the techniques and concerns translate to another culture easily, and mostly I hope that readers from no matter what country find that this book makes them more productive.

(样章试读请见 《卓有成效的程序员》CSDN宣传页面

JRuby/LDAP over SSL

March 25th, 2009

Integrating ActiveDirectory with JRuby on Rails. Blocked by SSL issue. (Actually not AD but ADAM. Check how to configure ADAM for SSL on Windows XP without a certificate server )

Jeff: Here we have a question about JRuby/LDAP: how to establish SSLConn to ActiveDirectory, given we have got the certificate file (xxx.cer)?

Ola: Very good question. At the moment I don’t have the answer – and I’m not sure it’s possible. Have you considered using net/ldap instead? It’s pure Ruby and very nice.

~~(╯﹏╰)~~

And then I figured it out. What we need is (1) import the certificate to a keystore, and (2) specify the location of keystore to JRuby.

# command line
keytool -keystore "./cacerts" -import -file Authority.cer
# JRuby
java.lang.System::setProperty("javax.net.ssl.trustStore", "/path/to/cacerts");

And…that’s it. Now we can connect to ADAM over SSL.

conn = LDAP::SSLConn.new(host=LDAP_HOST, port=636)

China-pub的推荐页面这本书 夸成了“影响全球程序员的经典之作”、“航标灯塔般的经典名著”、“脍炙人口的传世之作”…唔,不过,又加上了这么一句:

如果您是一名刚踏入编程开发领域的新手,我们幸庆你可以阅读到《卓有成效的程序员》,因为它可以告诉你作为一名优秀的程序员你应该具备的思考模式和优秀习惯。

与此同时,PHPChina的cnkiller写了一个 很有意思的书评

我是你《卓有成效的程序员》的一个读者。在这里,我非常的想和你说一下,你是我的敌人,我要像你挑战,你接受吗?

曾经,无论是从那个方面,我在别人的眼中是一个计算机高手,我错了,我从一开始就错,我如果不是一开始就这么认为,我现在就不会这么低落,如果我不低落,我就不会错了…...(什么?你听不懂?那你得去看看我国的《武林外传》,就知道我在说什么了)

看过你的书之后,才知道什么是正真的高手,而我,就从高手的夷为菜鸟。

周伟明的推荐语也令人感动

程序员总有学不完的东西,许多看过我写的“程序员的十层楼”的人觉得自己仍然是“菜鸟”。同样,当我看到Neal的这本书时,发现自己十几年的程序员生涯仍然是一个低效的程序员,书中介绍的许多提高效率的工具和方法以前没有用过或没有用好。要是在“菜鸟”或“大虾”阶段就能看到这样一本好书多好啊!

第一,我喜欢的书别人也喜欢,很美好。第二,如果所有程序员都像这本书里所说的那样工作,这世界该多美好。

实施敏捷要不要面面俱到? 其实这本 《卓有成效的程序员》 已经从另一个角度给了我们答案。就像我在 译者序 里说的,

在钢铁厂,泰勒的科学管理方法让一个搬运铁块的工人每天的工作效率提高了3倍;而在软件开发中对细节的重视甚至能让程序员的效率提升更多,因为人的体力终归有限,而脑力的开发程度则远未达到极限。

那么反过来想想,如果只有方法学没有细节,难道不是会让浪费成倍增加,效率成倍降低吗?那么这种脱离细节、无助于提高生产率的“敏捷方法学”、“敏捷专家”,要来有什么用?(所以一个SCRUM Master证只值4000块──这是成交价,花一万块去培训的master们下次记得要讲价。)

所以,友情提供参考判据:如果一个自称“敏捷专家”的家伙告诉你,搞敏捷用不着面面俱到,什么结对编程啦持续集成啦测试驱动啦,没有也没关系,不影响你搞你的敏捷…

  1. 请想想你是不是喜欢一个对提高生产率没啥帮助的敏捷。
  2. 这个家伙很可能就是个只值4000块的敏捷专家──他之所以这么说,是因为他自己也做不来。

消除浪费,始于细节

March 18th, 2009

《卓有成效的程序员》 译者序)

在一次关于敏捷的讨论中,我说了一句令很多人不解的话:我不要敏捷。

和很多话一样,断章取义的理解很容易造成误会。我当时说的整句话是:我不要敏捷,我要致力于消除软件开发中的一切浪费。当“敏捷”渐渐变成一个人见人爱的“大词”,越来越多的人开始发现,其实自己要的不是“be agile”,而是切实地消除浪费、提高效率。

所以,作为ThoughtWorks员工的Neal Ford在他的这本书里闭口不谈“敏捷”。他只是实实在在地告诉你,作为一个程序员,你每天都在什么地方浪费着自己的生产率,以及如何去有效地消除这些浪费。

也许你甚至意识不到这些细小环节上浪费的存在。随便举个例子吧,在你一天的工作中,你有多少次从资源管理器里导航到源代码文件夹查看代码,然后又导航到另一个文件夹寻找文档,然后打开命令行窗口并进入项目目录,以及在密密麻麻的任务栏里找到正确的浏览器窗口?Neal Ford说,这些都是浪费:做这些与核心任务──软件开发──无关的事情是在浪费生产率。有兴趣知道这些自己每天做无数次的事还能如何改进吗?即便不是专业程序员,这本书的第2章也将对你不无裨益。

从某种意义上来说,Neal Ford在这本书里做的事,正是现代科学管理理论的鼻祖弗雷德里克·泰勒在伯利恒钢铁厂做过的“泰勒实验”:剖析每个个体日常工作中的每个细节,对细节进行持续优化,通过对细节的改进提升生产率。在钢铁厂,泰勒的科学管理方法让一个搬运铁块的工人每天的工作效率提高了3倍;而在软件开发中对细节的重视甚至能让程序员的效率提升更多,因为人的体力终归有限,而脑力的开发程度则远未达到极限。

这并非痴人说梦,因为ThoughtWorks就是这样的例证。据说ThoughtWorks有一群天才的程序员,只有近距离接触才会发现,这些人之所以能做到如此高效,很大程度上是因为他们有一些根深蒂固的好习惯,而且不断在细节上精益求精。ThoughtWorks中国公司的几位同事一起来翻译这本书,也正是为了把我们的经验分享给更多人。

从每天的细节开始,让自己成为一个高产的程序员,其实每个人都能做到。

熊节
ThoughtWorks,咨询师
2008年11月17日

懒于行,是故勤于思

March 16th, 2009

首先感谢李剑为这本 《卓有成效的程序员》 所做的 推荐序

如果你想做一个真正的懒人

就请继续读完这本书

因为这本书是天堂

很显然要想做一个行动上的懒人,要让计算机拼命的跑而自己有点空闲抽根烟,需要花很多心思。不然,很容易就会变成Neal Ford说的,人们忙忙碌碌干些重复劳动,计算机扎堆闲聊嘲笑这些勤快人。

计算机应该用于执行重复劳动。而人,尤其是程序员,应该保持对重复劳动的敏感与不妥协。每个网址输入相同的“www.<domain>.com”是重复吗?每次循环写同样的for…each是重复吗?每个项目copy同样的一堆配置文件是重复吗?每天打开资源管理器进入同一个目录是重复吗?

所以,很大程度上,程序员的高效与否,与这种对重复的敏感与不妥协程度,有着必然的关联。如同强迫症一般,发现一切隐藏着的重复劳动(或者说,浪费),势必除之──自动化之──而后快。这不仅仅是生产效率的问题,更是自我完善的过程。

(BTW,一切把程序员与建筑工地上搬砖的工人做类比的人都应该被拖出去挖坑埋掉。软件的一切价值就在于消除重复劳动。软件领域中一切能够被自动化的工作一定会被自动化。连这一点都看不出来还妄谈软件的人应该被强制收声。)

偷懒是一项需要很多思考来完成的任务。很不幸(或者幸运)程序员是被认为应该为这个社会做这些思考的人。这就是这本书存在的原因。

纯属实验

March 15th, 2009

COPY_ME_WHOLE{{	     	   
	         	
	    	   
	     	    
	     	   
 	 	  
 	  	 
 	 	     
	     	   
	       	      
 		     
	       	     
	     	   
 	 	  
 		 
 		   
	     	   
	         	       
	     	    
 	  	  
	 	
}}END_COPY

冰河也会绽放笑容

March 13th, 2009

一、很恶的遗留系统

坏消息是,Cumulus还是跑不掉要搞。好消息是,原来这块代码基本上靠谱。

下午倒了一个Catalog进来。太大打不开。下周要搞一个developer version来玩。

Endeca 5.1.4它是不支持web services接口的…要把Java API bridge成web services或者JSON的话,要买他们的professional service才行…

经全项目人民代表大会举手表决,用JRuby开发的提案全票通过,全体代表热烈鼓掌,这是一次成功的大会胜利的大会

二、很妖的小龙龙

我:小龙龙,这个时候应该听风继续吹…如何止哭只得轻吻你发边让风继续吹…

龙:唉 找个长头发的轻吻不如自己留头长发来吻靠谱

我:你这话分明就在暗指五姑娘…低俗了低俗了…

龙:… 你唱首梦到内核吧,想听了

我:爱上层楼, 为赋新词强说愁

三、很SUI的苏毓秀

小胡说,I’m feeling a little scared about our BA’s name: issue.

Yusiew说,我们至少有10行story cards,每行至少有8个,总共大概有60多个吧。

Yusiew把照片checkin到svn里了…好吧…姐姐我服了你了…

Yusiew说,你还不下班在干嘛?我说,你管我干嘛?Yusiew说,我是你的妈啊~~姐姐你行不行啊~~

好吧~我忍~小熊快来喊奶奶~

四、冰河的笑容

我说,拒绝忘记,拒绝原谅。不原谅自己,也不原谅他人。

风说,忘记了,原谅了,才会有将来。

原谅了,其实也就意味着忘记了。

13号的星期五,融出泪水的冰河,绽放笑容。

宇凌译过一本书 《是从中国,我给你写信》 。写信,貌似是很有味道的一件事呢。从另一个国家,哪怕只是明信片。

于是…行为艺术,像风一样 :D

首先要找到邮票。听说Visitor Centre有international stamp卖的,可是,去了以后,发现,木有~~卖光了~~当然post office肯定也不会工作啦…正要山穷水尽的时候,它又柳暗花明了…在Swanston Street的一个报亭找到了,于是买了10张。

接下来,就是,绕着城市,转圈…转到一个喜欢的地方,就写一个明信片。有些地方有免费的,有些地方没有,有些地方有专门针对那个地方的明信片。总之,有时候买,有时候拿。走到哪儿,写到哪儿。邮筒不成问题,到处街边都有的,随手扔进去就好啦。

Prince’s Bridge Hotel. St Paul’s Cathedral. Arts Centre. MCG. City Museum. Parliament. St Patrick’s Cathedral. Melbourne Museum. Docklands. Immigration Museum. Southgate. Melbourne Central. Old Gaol.

于是,邮票就用完啦。

P.S. 我看到南十字星了…不过涅…我觉得…它好像一个考拉的脸…然后就笑喷了。然后跟一起住的Josh说,然后他也笑喷了。

P.P.S. 夜里去河边看了Waterfest的烟花秀。好多人啊~~好像从西湖烟花节以后就没再见过那么多人一起看烟花了。从小船上升起的绚烂烟花,所有人一起欢呼鼓掌,很美好。

基本上无害

March 7th, 2009

以今天的云,能看到月亮已属鲜见,更遑论星星

于是放弃了拍摄星空的打算。回家就看到了很口耐的小动物~~

澳洲大旱,逼得小考拉拦路抱大腿讨水!

考拉轻易不下树的,抱着桉树过一辈子

桉树叶富含桉树油,桉树油是制造镇静剂的主要原料。于是…考拉吃着吃着就睡着了…嘴边还吊着半块叶子,醒来又接着吃。

有次看到一个考拉在树叉叉上坐着,便便。便便到一半…睡着了…醒来又便了一点…

能做一只基本上无害的动物,是多么幸福的一件事啊

P.S. 出国时忘了买烟,郁闷~~Yusiew居然买了两条,欣慰~~三天长假中~~

和Yusiew吃着牛排的时候,又扯出了我的那套歪理斜说。

现代西方资本主义或者说盎格鲁-撒克逊体系的商业传统本质上是基于航海贸易的。航海贸易的特征是,我和你做一次生意,然后这辈子也不会再见到你。因此交易的双方倾向于把合同条款订立得绝对明晰并且严格遵循合同。而中国的商业传统是基于农业贸易的,农业社会的重土安迁使得百年老店和几十年老主顾屡见不鲜。所以中国人做生意把合同看得很淡,更看重良好的关系和长久的共赢。

《十亿消费者》 说中国人没有双赢的传统,显然这不是真的,他只是在一个特殊的时间看到对一切都丧失信任的中国社会。另外某人说读《十亿消费者》读得郁闷,我恰恰相反,读得挺愉快,因为中国是并且仍然是不同的。“不同”与好坏无关,何况西方资本主义的席卷是从马歇尔开始的,何况里根-撒切尔体系正在被置疑──每次走在西安的唐城墙遗址或者北京的元大都遗址,都会冒出这样的想法。

就好像《十亿消费者》说到中国商人对合同的不重视。我赞同他的观察但认为这是中国商业传统的优点而非缺点。一个看重良好关系与长久共赢的商业环境不会太计较一时一事的得失。多付出的会有收获,多攫取的会有报应。这是一个高效率低浪费的体系,但还没有进入这个生态圈的外来者必须经受考验才能享受它的好处。与此同时地域局限性是建立关系与声誉的先决条件,所以80年代的外来者有充分的理由抱怨中国的商业传统。

但,麦克卢汉说,地球村。更要紧的是,这一次我们逃无可逃。我们只能在这个村里做生意。口碑会被留下,一辈子。地球村让人们回归农业社会,也让商业传统一道回归。北美的大师们说,客户合作重于合同谈判。单就这一条而言,中国人比西方人更能理解其中的深意。

(纯吐槽,目的就是为了写一些字。然而,仍然觉得,正襟危坐的文字写得很累。再拜麦克卢汉。)

重逢墨尔本

March 3rd, 2009

星期六

城铁,快线,机场

薯条是美好的,冰激凌也是

在浦东机场,等着上飞机,然后睡一个很难受的觉。

乘坐中国航空CA177次航班前往墨尔本的乘客请注意,请手持登机牌到D85登机口登机

打算看我叫刘跃进。可是,这个剧情,实在是…既仓促,又拖沓

舷窗外是满天的星星,好热闹。

星期天

不如我们先在鱼吧相见吧,看上去是个不错的地方。

From 墨尔本街头

想坐 南方之星摩天轮 ,可是,它,坏掉了,几个月才能修好。

From 墨尔本街头

于是,信步的走着,经过 一些地方 ,看到 一些景色,一些人

星期一

First day in Melbourne new office. It’s cute.

Be online with a “3 modem” made by Huawei

今晚有极端天气,大风可能引发山火,市民没事请不要出城

夜了

From 夜幕下的墨尔本

在那无数的平行宇宙中,我们只需要找出可以相遇的……那无数个。