iTechTag恢复运行:重建软件开发者的声望
August 30th, 2007
孤独的敏捷实践者,我们能帮你
August 30th, 2007
在实施敏捷的过程中感到孤独了吗?
还有更多敏捷视频。
Rails部署环境:各就位,预备,跑
August 24th, 2007
有人评论了RubyWorks Production Stack。“Damn those ThoughtWorks people are smart!” 这话听着很振奋。不过第二天,他又爱上了FiveRuns的RM-Manage。“With built in notification it’s definitely a winner”
毫无疑问,FiveRuns的RM-Install是一个好东西。完整的Rails stack,丰富的附加功能,使用简便。但试用以后却加深了我对RubyWorks的信心。因为:
- 我们的stack是在现有标准(apt和yum)基础上搭建起来的,这就意味着用户能够以他们习惯的方式安装和(更重要的)升级所有软件;一个以自定义格式包装的工具包将不得不提供自己的更新升级方式,甚至根本就无法升级。
- 我们的stack是逐步组合出来的,这就意味着我们提供的始终是对绝大多数用户最有价值的东西,并且给用户选择的机会;一个大包大揽的工具包很可能包含一些看上去很酷、但很多用户并不需要的庞大的组件(例如ImageMagick)。
- 我们的stack是开源的,这就意味着我们能够得到整个社区的反馈和贡献;一个闭源工具包的开发者需要花费更多的工夫才能弄清系统管理员们的工作方式和习惯。
归根结底,我的信心来自于对Unix传统的信心:开放的、遵循标准的、组合协作的软件,应该好过封闭的、自立山头的、大包大揽的软件。谁能在这场Rails stack的赛跑中最终获胜,走着看吧。
抛弃一个错误,选择一个魔鬼
August 24th, 2007
自从用Typo做blog并且放到Dreamhost以后,就一直遇到“Typo failed to start”的问题。今天终于忍不下去了,搜索一下发现原来是因为Typo耗用太多的内存,而Dreamhost有严格的内存限制,所以Typo经常不能工作。
于是用了几个小时的时间,先把Mephisto装上,然后从Typo转换到Mephisto。再把各种各样的样式、边栏……都调好,最后加上tag云。好了,现在“透明思考”不再有讨厌的500问题。
请更新RSS订阅的地址:http://gigix.thoughtworkers.org/feed/rss2.xml
ThoughtWorks中国公司持续招聘最优秀的软件开发者
August 24th, 2007
招聘流程

在ThoughtWorks,我们寻找的是象我们一样以努力工作,有创造力,力图创新,追求卓越为贵的个人。我们的文化非常注重团队协作,职业发展,个人发展,和生活质量。
查看在ThoughtWorks中国的招聘职位
为了在确保找到的人才能够象我们每一个人一样热爱在ThoughtWorks的经历,我们建立了一套在IT行业里非常独特的招聘方法。
网上申请。 通过我们的在线申请页面来进行自我介绍,请务必注明你对什么职位感兴趣。
电话面试。 如果技能相符,我们就会与你联系,安排一次电话面试。这次电话交谈是为了确定ThoughtWorks是否适合你,也为了看看你是否适合 ThoughtWorks。在这次电话面试中,我们需要对你的态度,动机,薪资要求,出差意愿等等取得一致意见,保证我们双方都觉得合适。在这之后,许多 候选人都会与我们的顾问进行一次电话技术面试。
代码评估。 给我们看看你的代码。能说一些响亮的名词并不表明一个人是个有所心得的开发人员。我们认为,真正的软件开发本领并不能在一个简历或一次面试中完全表现出来。因此,在你的第一次面试之前,我们有一个需要写代码的考题,让你在家里做好了以后再通过电子邮件寄回给我们。
办公室面试。 这才是真正乐趣的开始。我们会让你来我们在Chicago, New York, San Francisco, Nashville, Calgary, Toronto, London, Melbourne, Sydney, 西安或Bangalore(班加罗尔)的办公室之一。首先,我们会对你进行一套评估,来帮助我们衡量你能够多快地学习新的技术,方法论,等等。然后,你会 和好几个ThoughtWorks员工进行面谈,这样我们互相之间就可以对彼此有更好的了解。注意:尽管在某些场合下应该衣着正式,但在我们的办公室里面 试可以穿随意的服装。大多数时候,你穿T恤或苏格兰方格呢短裙的效果会比戴领带还好。
录用通知。经过上面这些步骤之后,我们尽量不会让你等待。如果你能加入,你就能加入。一旦你加入了,你就不会再想退出。所以,现在就开始吧!第一步就是 在线申请。
应届生招聘流程与这个略有不同,如果你想查看应届生招聘请点击应届生应聘流程获得更多信息。
iTechTag: 重建软件开发者的声望
August 18th, 2007
我的blog右边栏里多出了一个mashup的小框:我的技能云。提供者是iTechTag。iTechTag出自我的一个点子,被1sters!变成了现实。iTechTag到底是什么?抄一段“网站介绍”。
********
作为软件开发者,我们从一个又一个的项目中得到了什么?除了学到新的知识、得到应有的薪酬与职位,我们还积累了良好的声望:我们生产有用的软件,我们又快又好地完成工作,我们用自己的专业技能为客户创造了巨大的价值。作为一个软件开发者,我们无时无刻不在为此骄傲。
但声望给我们带来了多少利益?还有谁记得你几年前完成的那些“不可能的任务”?还有谁记得你通宵加班为项目做出的贡献?还有谁记得客户和领导曾给你的赞扬?我们的声望还没来得及给我们带来回报,就匆匆地销声匿迹了。
我们的声望被严重低估了。
我们创建“技能云”就是为了重建软件开发者的声望。我们希望记录下自己辛勤工作的成果,并与他人分享我们的骄傲。我们希望让别人知道我们掌握什么技能、参 与过什么项目、帮助过什么客户、做出过什么贡献。我们希望让自己、让同事、让朋友、让所有关注我们的人有机会了解:我们是多么优秀的软件开发者。
********
记录自己做过的项目,在自己的blog里放上“我的技能云”,让所有看到你blog的人都知道你有多么了不起。这就是我的——iTechTag的——想法。
(关于1sters!团队,请看InfoQ中文站的报道:梦想上铁道。)
JRubyWorks: J2EE on Rails
August 18th, 2007
(NOTE: JRubyWorks keeps moving forward and this article may not be up to date.)
How to run your Rails application with J2EE web servers (such as Jetty and Tomcat)? Here’s a solution:
1. Set JRUBY_HOME environment variable properly.
export JRUBY_HOME=/usr/lib/jruby
2. Install ActiveRecord-JDBC.
jruby -S gem install ActiveRecord-JDBC -y
3. Install JRubyWorks plugin.
script/plugin install \ http://jrubyworks.rubyforge.org/svn/trunk/jrubyworks/
4. Configure your Rails application as this article. JRubyWorks plugin includes mysql-connector by default. If you use database other than MySQL, you can put corresponding JDBC driver in ${RAILS_ROOT}/lib/java directory and JRubyWorks will take care of it conventionally.
5. Run your application and try it at http://localhost:8080. Also you can find a WAR file of your application in ${RAILS_ROOT}/war directory. You can deploy it to other J2EE web servers.
jruby -S rake retty
JRubyWorks is based on JRuby Rails Integration and hope to make the integration easier. It’s quite immature so far, apparently. Your feedback and contribution will be very helpful and highly appreciated.
如何对private方法进行单元测试
August 12th, 2007
(有很多人很多次问过我这个问题。以下是标准答案。)
问:如何对私有方法进行单元测试?
答:重点在于,你不应该有任何方法是从一开始设计出来就是private的,因为你的每段程序都应该在单元测试的驱动之下产生,而测试是不可能驱动出 来一个private方法的。那么private方法从哪里来?只能从重构而来。所以答案是:private方法是不需要测试的,因为它是重构的产物,而 重构是不改变程序可观察之行为的。既然行为不改变,测试自然也不需要有任何改变,所以不需要针对private方法建立任何新的测试。
问:但是,如果private方法确实出现问题了怎么办?如果确实希望用测试来弄清一个private方法里面到底发生了什么,该怎么办?
答:如果一个private方法复杂到你不能一眼看清它,那它就太复杂了,你应该把它重构成为一个独立的class,然后针对这个class来建立单元测试。



