2009 年的时候买了一本《卓有成效的程序员》,看的热血沸腾,当时还写了一篇读后感《程序员的共鸣 - 读《卓有成效的程序员》》,现在翻来看还觉得蛮有意思的。从此后,开始用 Launchy , ClipX 等提高效率的工具,也开始接触代码编辑器神器 Emacs 和 Vim 。当时年少无知先学了 Emacs ,还全程用 Emacs 开发过一个小项目。后来实在是小指按 ctrl 键按到桑爽的不行了,才发现 Vim 是多么和谐的存在。
这本书是由 ThoughtWorks 中国公司翻译的,再加上当时用的持续集成工具 CCNet 就是 ThoughtWorks 开发的,瞬间觉得这个公司好牛逼。 更加牛逼的是,世界顶级的 OO 专家,敏捷开发创始人之一的 Martin Fowler 大牛就在 ThoughtWorks 担任首席科学家。
当时对持续集成,敏捷开发还挺感兴趣,在博客里写了点东西,还特意关注了几个 ThoughtWorks 员工的博客。没事还在博客里留了几次言,突然有一天博客园的短消息里来了这么一条消息:
标题:如果你真的对coding有如此的热情
可曾想过来ThoughtWorks?
我看到你在我Blog上的留言了。如果你对代码如此热情,如果你喜欢体会作为程序员更多的可能,可曾想过来ThoughtWorks? 有兴趣的话请与我联系。作为前3年在各种类型的软件公司混过,后4年一直很enjoy的公司,看到你的Blog, 也许,这里是适合你的地方。
陈金洲
PS. 为了能联系到你,专门注册了博客园的账号
当时的我工作快 3 年,正处于年少轻狂,自信爆棚,感觉啥都能干就缺一个机会的时代。把《设计模式》来回翻了几遍后,就和 Michael Chen 联系面试了。直到很多年后,我才听说, ThoughtWorks 被人称为“最难面试的 IT 公司”。首先说结论,最后我并没有去 ThoughtWorks 。具体情况见下文。
第一面是 HR 的英文电话面试,我英语也就四级的水平,听和看还行,但平时口语完全没机会训练。我在家设想了 HR 大概会问的几个问题,简单写了写,列了几个关键字就去了。当然,我还是很紧张,平时我就不太擅长电话里和别人沟通,而且还是要用英文,而且还是面试。 HR 的每个问题我还是听的很清楚的,我也就硬撑着把该说的说了。现在记得 HR 问了类似这样的问题:你的同事都是怎么评价你的?你平时遇到过什么难题又是如何解决的。我当时心里想着,当然要说一些同事夸奖我的话了,技术牛逼,喜欢分享,乐于助人之类的。也没遇到什么特别的难题啊,怎么编呢,一时又乱了方寸。
第一轮电话面试后,我感觉糟透了,感觉没戏了。等了几周也未见回复,感觉就这样被淘汰了,不甘心就发邮件问了 HR 是不是被 out 了 ,HR 回复说还并没有结果让我再等等,又让我感觉到了一丝的希望。
不久后,收到了邮件进入下一轮面试:Home Work 。给了几道题,让选其中一道,在家写代码,写好后发给他们。我觉得这个环节不错,不像现场面试需要在高度压力的情况下用笔在纸上写代码。Home Work 是你自己在家做的,是在很自然放松的情况下,可以 google ,可以参考任何别人代码的情况下写的你的代码,是最接近真实工作时的状况。
一共有三个可选题目:
- PROBLEM ONE: TRAINS
- PROBLEM TWO: SALES TAXES
- PROBLEM THREE: MARS ROVERS
**我选了题目意思是我最容易看懂的 MARS ROVERS (火星漫游者)。**大意是给定火星探测机器人的一个坐标位置,然后给它发送一系列的指令,比如左转、右转、前进,最后输出他的目标点的坐标和朝向。
我当时是这么想的,这题的算法很简单, ThoughtWorks 考察的肯定不是我能不能实现需求这么简单,而是考察我面向对象设计的能力,以及抽象的能力,能否把代码写的足够优雅,同时又具备很好的未来扩展性。而测试驱动开发作为敏捷开发的一个重要理念,我的 Home Work 里至少是需要包含测试代码的。虽然他们并不知道我是先写的代码还是先写的测试,嗯,我还是尝试先写测试代码,至少它的文件创建日期比功能代码会早一些,哈哈。
**这题肯定要用一些设计模式,但是又要避免过度设计。**于是我把最有可能关联的几个模式套了进去:工厂模式,状态模式,好像还有命令模式。把类分的很清晰,每个函数也很短,命名也是反复琢磨,最后还配上了单元测试案例。最后,把感觉非常完美的一份代码提交了上去。
然后又等了漫长的几周,通知进入下一轮面试:电话技术面试。面试我的就是 Michael Chen 。前面主要聊我现在的工作,做了一些什么项目,用了一些什么技术,问的很细,聊的挺愉快。聊完项目后,Michael Chen 提示我进入纯粹的答题环节,问了我一些设计模式相关的问题。
这次电话技术面试聊完后,我感觉有戏,感觉 ThoughtWorks 正在向我招手。这是我理想中的,非常舒服的面试。但是我当时真的准备好了吗?真的准备好了从珠海赶赴西安或者北京去上班吗?我当时觉得地点无所谓,其实是没有太想清楚的。
又是漫长的等待,心里面想着下一轮应该是飞到西安去和 ThoughtWorks 的工程师一起 Pair 结对编程了。但等了好几周依然没有消息,我也开始考虑真的要去西安工作吗?我能适应那种经常出差的工作的?我以后真的要走咨询师的路线吗?我想了很久,最后某天 HR 突然来了一个电话,说前面面试的都很不错,但是英语方面还想和我再确认一次,要加一轮电话英语面试。听完后,我感觉很不好,辛苦面试了这么久,又让我苦苦等待了这么久,最后又回到了第一轮的英语面试。我当时有点情绪,所以在加试的电话面试里表现的比第一次还差。
HR 最后和我说,可能是毕业工作后英语口语用太少了,再复习多练习练习是可以的。建议我再花一个月的时间复习和练习一下英语口语,然后再来面试。我当时已经有情绪了,这个面试折腾了 1 个多月,有点心累了。所以,后面我给 HR 发邮件说我不来了。
直到最近,我才发现在 ThoughtWorks 的面试者中,被要求回去学习一段时间再回来面试的人大有人在,而且很多人最后都成功入职了。也许当时的我处理的是有点草率了。但命运这种东西谁知道呢,当时的一个决定对未来有什么影响,谁也说不清。我们还是要感恩现在的自己,以及之前做过的所有正确的和不正确的决定,是它们成就了现在的你。
这篇聊 ThoughtWorks 是因为上篇文章提到的,认识了 ThoughtWorks 的前员工 Seaborn Lee (小波) ,又让我想到了之前的面试经历。于是就和 Seaborn Lee 八卦了一下当年面试我的 Michael Chen 到底是怎样的一个存在。
小波说了五个字:“他也是传奇”,然后是这样描述的 :
一是技术牛
二是立志做产品
承诺三年不调薪
做了几款产品
金数据成了被收购
瞬间让我佩服的五体投地。我从很多 ThoughtWorks 员工那了解到,不管是离职的还是在职的,他们对 ThoughtWorks 公司都是满口的称赞,对公司的认可度非常非常的高,说明这真是一家不错的公司呢。
作者:CoderZh
微信关注:hacker-thinking (代码随想)
本文出处:https://blog.coderzh.com/2016/01/18/thoughtworks-story/
文章版权归本人所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。