• 这是我在知乎上的一篇回帖:

    要是写代码 写到三十岁没升到管理怎么办啊?

    我每天还在写代码,与人讨论技术实现细节,35岁那年,我写的Moco拿了Oracle的Duke选择奖。

    思维误区

    我还没开始工作的时候,有人就在说:程序员能做到30岁吗?
    我快到30岁时,有人在问:35岁还能做程序员吗?
    过了35之后,我已经看到了新的讨论:40岁程序员怎么办?
    估计10年之后,新的讨论会是:程序员50岁以后的职业发展是什么样子的。

    这反映了一个重要的事实,程序员是中国的一个新兴职业,发展时间还不够长。当时间逐渐拉长,越来越多大龄程序员就会出现。

    写代码和做管理

    如果你热爱写代码,那就去写。但是,这里必须知道一个前提,写代码和写代码是不一样的。

    以现在的普遍情况看,20多岁的程序员大多属于初出茅庐,写代码大多是以完成功能为主,而到了30多岁,写程序大约十年左右,需要考虑的方方面面必然要更多,比如,这个需求是否合理,从架构层面会造成什么样的影响,是否能找到更简洁的解决方案,这个代码写出来别人是否容易理解等等。

    30岁之后,精力会下降,这是生理决定的,如果这时候还和年轻人比拼堆代码的速度,靠加班熬夜,那必然是输了。而且,这种做法始终在低水平徘徊,自己做时间长了也会心生厌倦,所以,这不是一个可持续的模式。

    很多人想30岁就做管理,可是,哪有那么多人让你管理啊!为什么之前有那么多少年得志的故事?还是前面的那个逻辑,之前做的人少,所以,机会多。现在IT行业的人才积累已经达到了相当的规模,机会就会减少。当然,投身创业公司是另外一个选择,但前提是这个创业公司能做起来。不过,即便是有机会,为什么是你?

    不管做什么,自己有本事才是前提。

    成长之路

    以我个人的成长经验来看,不断地和更高水平的人过招,是保证成长的前提。

    初入职场,我也以为自己的成长路径会是写几年程序,然后,做管理。很幸运的是,在职业生涯之初,我遇到一个水平很高的人,他让我看到了一种心生向往的状态,于是,我就下定决心,成为一个优秀的程序员。更为幸运的是,我们俩成了很好的朋友,十几年下来,每当我进步了一些,他却又在我前面更远的地方。虽然我们做的领域截然不同,但从他身上得到的启发却一直激励我前进,比如,看到了他做的一个东西,我便下定决心有一个自己的代表作,这就是后来的Moco。如今,他年近40,依然是各大公司争相高薪邀请的人,而我知道,有他在前面奔跑,我就不能停下来。

    加入ThoughtWorks的选择,也是为了与高手过招。2007年加入时,那里汇聚了当时我听说过的许多牛人,后来,还有机会和Martin Fowler这样的大师请教问题。在ThoughtWorks工作的八年,让我打开了自己的眼界,能够更加虚心地向更多高手学习,得到了个人全方位的综合提高。

    就发展而言,如果身边没有高手怎么办?那就去找一个能和高手近距离过招的地方。

    不过,这里说的并不等价于大公司。大公司里固然有很多高手,但问题是你有多少机会和这些人一起工作。比如,我们知道Jeff Dean很厉害,但加入Google就能和他一起工作吗?所以,比起在哪里工作,和什么样的人在一起工作会更重要。

    从正常选择公司的方式来说,面试是一个了解公司、了解团队的机会。如果负责招聘的人会和你一起工作,那就可以好好考察一番。如果不是,那一定要尝试见见团队,最重要的是,见见团队里的高手。如果这个高手的状态不能让你羡慕,那他就不是你的目标。

    当然,有了高手,如何成长,那就是每个人自己的事情了。

  • 刚刚结束了一个项目,个人觉得颇有意思的一个项目,记录一些发生过的事情,算作备忘。

    这是一个互联网金融的项目,P2P借贷相关,也许有人知道,就是搭建一个借贷平台,个人对个人借款。这个项目大幅度刷新了我对投资理财的一些观念,让我个人受益匪浅。但是,投资这种事,肯定是有风险的,自己想好,所以,我不会特别鼓励别人投资,只会和一些周边的人私下交流。只有几点特别提示,做这种P2P投资,要看背后的平台,发展历史,利率越高,风险越大。

    说一些与做软件相关的吧。

    这是一个金融项目,金融项目时间相关性非常强,这个特性刚好与做敏捷不谋而合。举个例子,我们这个项目第一阶段,做了借款相关的业务流程,而还款部分,我们一开始只处理了提前全额还款这一种情况。为什么?因为这个系统上线后,最早的正常还款、逾期还款等情况,最早要在一个月以后出现,只有提前全额还款可能在第一个月内发生,所以,在第一期上线之后,我们还有一个月时间去处理正常还款等情况。

    只做当前优先级最高的,这就是敏捷软件开发的思路。我们还开发了一个理财计划的方案,采用了同样的思路,上线之初,我们只做用户购买理财计划,至于到期赎回,一开始根本没有做,因为根据产品的特点,最早的赎回会发生在6个月后,只要能在6个月内把赎回开发出来就够了。

    根据客户的反馈,这次合作开发给他们留下印象最深的并不是代码或是技术能力,而是我们帮他们打造出了一个有特点的团队。合作之初,客户的开发团队还没有组建起来,只有一两个人,在双方合作的过程中,他们的新团队成员才逐渐加入进来。我们的合作模式也在这个过程中不断调整,第一期,我们的开发团队负责了所有的开发,第二期,客户的团队开始介入开发,负责一些边缘业务的开发,我们依然是开发主体,第三期,双方当做一个团队,平分主要业务的开发,第四期,他们成了主力,我们则只负责一些边缘业务的开发,至此,客户完全把项目接了过去。

    相比于单纯的业务开发,客户开发团队的开发方式完全遵从了我们的方式。通过每天的代码评审,我们共同分享着对整洁的理解。因为工作时间比大多数人长,我一直在这个过程中扮演着恶人,很多人辛辛苦苦写了一天的代码,到最后都批得一无是处,不得不拿回去重写。犹记得当时,许多人都很不理解我为什么要求这么严格,但几个月下来,大家都认同了好代码,最初的不理解只是因为从来没有人这么要求过。在合作过程中,他们见识了怎么去做自动化,怎么用git管理源码和发布,认识到了测试的重要性。有了这些基础,发布不再是战战兢兢如履薄冰。

    这些习惯闷着头干活的人,经过几个月的合作,已经变得开朗了许多,彼此肆无忌惮地开着玩笑,欢声笑语多了起来。每天下午4点,准时有人号召大家做平板支撑,最厉害的家伙甚至可以一次性撑个五六分钟。桌子上的技术书多了起来,这是他们的技术经理给大家买的。有不少人购买了Kindle,把它用在了上下班的路上。我们还给他们定期做了一些分享,各个方面,从前端到后端,从安全到构建。

    相比于从前几个月的出差,这次的时间过得飞快,我打心眼里喜欢这个项目,它让我有所学,更重要的是,有一群有趣的人,这样的合作是值得记录的。

  • 2013-12-31

    回望2013

    2013年就这么又过去了,站在又一年的门槛上,想想这过去的一年,如果选择一个主题词,我想是“坚持”。

    Moco,我在2012年无意间开启的一个开源项目,居然让我坚持住了。我经常会兴之所至,开始写一些小项目,但如果不是有像Github之类的站点,我都不记得我曾经这么想过。但Moco,我就这么一直做下来了。回想起来,Moco从一开始就是一个相对完整的小项目,从一开始就有用户,有反馈,我也就乐呵呵地一直做着。每天为Moco写点代码已经成了我日常生活的一部分,所以,我有了超过300天连续提交。

    坚持的回报是,Moco在2013年拿了两个大奖,一个是ThoughtWorks中国区技术大赛最具技术创新奖,另一个则是更具外部影响力,2013年Oracle的Duke选择奖,这个奖让更多人认识了Moco,也让Moco有了更多的用户,更多的反馈,也促使我不断地,美滋滋地继续为Moco写代码。在可见的未来,Moco还有不少要实现的东西。

    2013年11月,我用了大半年翻译的《The Joy of Clojure》终于正式出版了,也算是为之前的辛苦划上一个句号。正是因为我花了很多时间和精力在上面,所以,我觉得,翻书这活这不好干:不好好干,对不起别人;好好干,对不起自己。于是,我暗下决心,洗手不干了。就在我决定洗手不干了之后,我又组织翻译了《ThoughtWorks文集2》,虽然我没有翻译初稿,但后续的审校花费的时间和精力不比任何一个译者少,所以,最终写译者序的人,居然是我。

    2013年,我还偶尔出去讲了几次东西。在Open Party成都,我讲过Moco,讲过《Java as a Platform》。因为Duke选择奖的原因,我又得到了一个机会,在QCon上分享Moco的故事:《不可思议的Moco》。运气很不错,除了免费差旅,我还拿到了优秀讲师的称号,奖品是一个Kindle Paperwhite 2,据说InfoQ中文站的老大Kevin肉身翻墙背回来的。去年年底,因为出差澳洲的原因,错过了敏捷之旅成都站,今年组织者竟然还记得有我这个人存在,于是,年底又在敏捷之旅讲了一个《你应该更新的开发知识》,还被放到了主题演讲的位置。

    从2013年5月份底开始,ThoughtWorks中国区这边开始有了一个小栏目,ThoughtWorker好声音。我们每周会选择几篇ThoughtWorker写的技术方面的文章组织起来,分享给更多的人看。从一开始的成都办公室内部分享,到后来中国区的内部分享,再到后来,我们搭建了自己的网站,通过ThoughtWorks的微博、微信对外分享。这个小栏目已经逐渐受到越来越多人的关注,它已经成为ThoughtWorker对外展示的舞台。在内部发行版里,我们甚至会把它翻译成英文,让我们更多的外国同事了解到中国区这边的技术发展情况。之所以我把公司的小栏目放到自己的年终总结里面,因为我是这个活动背后的发起者,好声音最初的几期完全是由我一手打造的。现在,我已经不再是这个栏目的瓶颈了,背后已经有了更多的人。我很欣慰,因为我们坚持下来了。

    2013年初,我给自己制定了一个读书目标,一年读30本书。最终的结果是,一年读了52本书。原来制定目标,只是为了让自己多读书,且不会压力太大,结果养成了读书的习惯,每天早晚都会拿起书读一会。虽然我一直号称自己喜欢读书,但还真没抓紧时间读过,有不少以前“想”读的书,这次是真读了。感谢Kindle,让读书变得比以往更容易了。

    2013年,也是我写blog的第十个年头,也许因为时间关系,现在已经没有从前写得那么频繁了,但脚步没有停下。用它总结“坚持”的一年是很恰当的。在年中做的一篇CSDN访谈中,我说过:“找到一个适合自己的平台,坚持写程序,坚持思考,十年后,便会与众不同。”现在,我越发相信坚持的力量了。

    2013年就这么结束了,从结果上来看,这是我值得骄傲的一年,做出了以往不曾做过的一些事。2014年,我还希望自己能够做一些不同以往的事。

  • 2013-12-11

    十年

    刚开始工作的时候,我很愿意了解关于计算机发展的各种各样故事,俗称八卦,因为我特别想知道,我所从事的职业是如何走到今天的。如今,我偶尔会梳理一下经历过的事情,讲给其他人听,他们的神情和我当年了解各种八卦时,别无二致。原来,我前面经历过的时代业已成为历史的一部分。

    十年前,初出茅庐不久的我,选择了一种表达方式,blog,那时候绝对算是个新东西,知道这个名字的人都算是站在时代的风口浪尖,更别说自己写了。不记得在blog上说过多少次了,我能坚持下来的东西不多,编程是一个,写blog居然成了另外一个。

    是的,我写blog,整整十年了。

    十年过去了,blog已经成了落寞贵族,连Google都不玩Reader,微博这个后来才兴起的东西,现在也快被微信挤掉了。人们喜欢表达,只是表达方式越来越简洁,越来越便利。不过,当我觉得自己需要整理一下自己的思路时,blog依然是我的首选,在我看来,安安静静写字时,会有更多的思考。

    曾经有许多人问过我,为什么不自己搭建一个独立blog,或者是在Github上弄个至少有代码样式的blog。懒,是一个很重要的原因。另外一个原因是,习惯。十年了,我甚至连blog的模板都没有换过,所以,今天看我的blog,样子上和十年前如出一辙,我还是从前的那个我。也许未来我会换,但我不知道那一天什么时候到来。

    十年前,我选择了blogbus作为blog的存放地,如今看来是件很幸运的事。但很多人不知道或者不记得当年的BSP之争,十年后,回过头来看,当年的BSP留到现在的几乎没有几家了,而我的blog十年了,依然还在,只有运气可以形容。

    还记得第一年写了100篇,之后,几乎就是一个稳步减产的过程。不管怎样,十年下来,我还是写了500多篇blog。偶尔翻看从前的blog,那是一个追忆似水年华的过程,我会感叹,年轻就是生猛,或者我还有这么傻的时候。感谢这些blog,让我有了一些可以追溯的往事,让我不曾遗忘曾经发生过的事情。

    我想我还会写下去,我现在格外相信坚持的力量,我的一些坚持让我变得和从前不一样,不再只是纯粹的三分钟热血。总的说来,我喜欢这种改变,并没有滑向“成为自己讨厌的人”的深渊。

    希望十年之后,我还可以说,我又坚持了十年。

  • 因为Moco,我得到了一个演讲的机会,在QCon上海的上做一个关于Moco的分享。上一次参加QCon还是几年前的事,短短几年时间,QCon已经成为了中国技术人员心目中干货众多的顶尖技术大会。参加这样的大会,分享只是其中很小的一部分,更多的是,出来见见世面,看看别人在做些什么,结交些新朋友。

    如今,国内技术社区的分享精神要比以往好了很多,这次大会大公司都站了出来,BAT的分享有很多,新浪、搜狐、豆瓣等也有自己的分享。这和前些年都是靠个体热情做社区、做大会的状况已经有了很大的转变。我依然记得很早以前,一说大会,基本上就会和广告挂钩的印象。而且,同阿里人聊天时,听说他们现在要在公司内成为高级技术专家,很重要的一个指标是,在社区内的影响力。能够把这个指标纳入考量体系内,确实是一个很好的引导方式,这也不难理解,为什么阿里系最近几年眼瞅着在技术社区内的名声越来越好。其它大公司在这个方面也有长进,但还有很长的路要走。

    出来讲是进步,但讲东西的水平实在让人不敢恭维。讲东西,最重要的是面向观众。遗憾的是,很多讲师就是在为自己讲,根本没有考虑过用怎样的一个思路讲能够更有代入感,更能让人接受。有一个腾讯的演讲,里面常常听到讲师说,这也没什么,那也很简单,一笔带过很多东西。实在是愧对那么多冲着大公司名头去的观众,也实在砸自己公司的牌子。当然,在后续的评分环节里,我很客气地给他打了很低的分数。

    其实,作为讲师,我是知道的,在这次大会之前,InfoQ专门请了专业的演讲培训师给讲师们做培训,我因为人不在京沪两地而遗憾错过。这些大公司的很多演讲者很多人都离京沪不远,如果没参加这个培训算是遗憾,如果参加了,那还真对不起老师。

    我个人最喜欢的一个分享是来自Facebook的,他介绍了Facebook的一个开源项目React.js,对于这个东西,我是完全意义上的门外汉。但他一步一步地把React.js的来龙去脉讲得非常清楚,在我脑子里留下了深刻的印象。在未来的技术选型里,如果有相关的场景,我会考虑使用这个项目的。

    其它在脑子中留下印象的东西还有,

    • github提出的“干掉”Product Owner,实际上是说全功能团队
    • github的Hubot,构建团队自己的“机器人”,把一切尽可能自动化
    • 豆瓣的CODE,用一个无人管理的项目,打造构建一种工程师文化
    • 百度的Clouda,快速构建跨终端应用
    • 阿里的朴灵分享关于Node.js的设计与实现,理清了Node中最基本的几个概念:事件、非阻塞、Watcher等
    • 腾讯的QZone跨终端应用,用Node.js做代理,把JS模板渲染搬回了服务器

    在QCon期间,还找来了几个自媒体人来“扯淡”:鬼脚七、池建强、蔡学镛、道哥、厉哥,从IT老男人开始讨论,大家弄得很欢乐。遗憾的是,这几位少有还拼搏在第一线的程序员,多多少少给人一些误导,似乎程序员发展方向都不再是程序员了一般。也许矛盾就在于此,能一门心思写程序的,估计没他们几个这么能扯。:)

    最后,感谢一下InfoQ,给了我一个机会,在门票高达几千块钱的情况下,不仅让我没花钱买票,还包吃包住包往返路费的,顺便夹带私货介绍自己的开源项目。如果你也想免费蹭大会,不妨去做个讲师。