2010年初写过一篇博客(我们是一群和平年代充满浮躁与抱怨的程序员),一年过去了,社会好像更浮躁,也有网友问我这方面的问题,于是有了下面这篇文章,再次写给我们这些刚入行浮躁的程序员,如何成长,以下是列出了一些成长的心得,我们不必每条都去实践,但是优秀的程序员成长过程中总会实践里面的几条。
多做项目,多思考
不要害怕做事,刚毕业的同学最缺的就是工作经验,乱七八糟的项目能让你很快就了解了一个公司的业务与使用的技术,并且可以多接触同事与客户。
当你毕业后刚进一家公司时,如果主管没有把你安排到项目组工作,那真的很杯具,因为他认为你还不能胜任工作或者你的加入会让项目组更糟。
还有人说,我刚进公司,公司就把我当成了苦工,工资又低,项目组加入好几个,也做了很多事情,每天都要加班。我估计有很多人感觉是这种状态,为什么会是这样,因为全国人民(不只是程序员)里有90%可能都和你一样的感觉,这说明你现在状况是很普遍的,也说明你现在的能力并没有很多出众的地方。也许是逆境才能让人成长,如果有一天你让你的团队从这些苦力工作中解脱出来或者能给你的团队前进的动力,那你就升华了,你就比他们出众。你没有能力去改变现状,所以只能接受,而不要认为是自己生不逢时,或者说公司环境太差。创业也一样,不要认为公司没发展的主要原因是环境太差,那你不要去当老板算了,投资环境都非常好还能轮到你吗。
还有很多同学感觉自己付出了很多,回报太少,这个问题很难平衡,首先一点,公司在聘你进来后不会因为你没有成绩就先给你回报,公司也不可能会在你有了成绩后就立即给你回报,但是长时间付出没有回报,那这个公司就不值得你付出。我不赞成频繁换公司,这么做至少可以说明你是一个只求回报不求付出的人。
至于薪资的问题,这个很难去评估,因为每个企业的收益相差太远。但是刚毕业的同学工作需要关注薪资+成长环境,当薪资可以满足普通生活需求后,成长环境更为重要,就好比,给你一月5000元,或者6000元,真的不那么重要,因为这些收入在你以后的人生中基本没有影响。当然,如果你现在在大城市几年里每个月只拿着1000元,那还是需要选择一下收入更好的公司,因为这么低的收入会严重影响你的工作学习计划,也说明你的公司不重视员工,没有能力给员工好生活的公司,将来的发展也是有限的。
特别说明一点,互联网公司与传统信息化企业不一样,互联网一直是风险比较高的行业,也许你选择了一个看好的企业,也佩服老板的眼光,可能你现在需要的是与公司同甘共苦。不要指望在刚创业的团队里拿到非常好的待遇,因为你现在就是在投资,也许几年后公司成功了,你就是功臣,不怎么出色的你也可以当上总监或副总裁。
自己开发框架与工具来提高工作效率
当你参与了很多项目,当你发现自己经常做一些COPY,PASTE的操作时,你可以考虑花时间去提取问题的共性,做一些自动化工具去摆平问题,或者是写一些基础框架来屏蔽这些无聊并且累赘的代码。
自己开发框架与工具,可以让你快速的从一个初级程序员转变成更高级的程序员或分析师或架构师,因为这个过程中给你提供了为其他程序员服务的机会,你有动力去了解其它程序员的工作需求,你可以把你的框架或工具写得很好,接口简单灵活并且性能好,分析师和架构师就经常要干这种让人力成本降低的事。但要记住一点,不要以为自己开发框架与工具就认为很NB了,因为这种工作并不会体现多少技术含量,而只是提高个人抽象问题的能力,这个活很多程序员都能干,但是很少人去干好。
参与开源项目
参与开源项目可以让你领略到不同程序员的沟通方法,开发习惯,技术思维,可以认识更多的朋友,如果你足够强,也可能一举成名哦。可以让你更深入了解这个开源东西,所以最好是感兴趣或者是与工作有关的,不要说什么流行就参与什么。开源项目可以自己贡献一个新的项目,或者参与一个感兴趣的项目。
不要指望开源项目会给你带来直接的金钱,如果你想拿着开源项目封装一下去发财,那我真不知道如何做,可以去问问什么什么芯,什么什么国产操作系统的人,他们更有经验。
英语
在这个全球信息时代,英语真的是一个很重要的工具,我真的很羡慕那些学校里英语就很好的同学,好的英语能力可以更快速的了解到更多知识。当前,新的技术与知识大部份语言都是英语或翻译成英语,如果能把英语学好,可以让你人生少奋斗10年。
写技术博客
写技术博客是一种可以快速提高的方法,但是一个人能坚持每周写技术博客,那是需要付出很多代价,写博客并不是要我们写出高质量的文章才发表,我们可以分享自己的一些小经验,也可以分享自己的体会。一样东西在你大脑里,并不表示你已经掌握了,如果你能说给别人听,或者用文字表达出来,那首先你要将这些知识点整理清楚才好表达。我经常认为自己已经对某个问题了解了,但是在整理技术博客时发现自己的知识盲点,然后再去查找知识来补充自己的盲点,直到最后搞清楚了才算告一段落。
有些人不喜欢分享或者害怕分享,但是在这个世界,只要不是公司机密或商业秘密,拿出来分享可以让你得到更多同行的反馈,网络上的人会给你相对真实的反馈,因为大部份人与你没有利益关系。
新人不要害怕自己分享的知识是否有技术含量,只要你认为有价值,都可以拿出来,这不仅可以给别人提供知识,也可以自己整理思路,还可以得到网友的反馈。如果你的知识没有价值,分享出来也没有关系,如果你的文章技术含量低,怕被人鄙视,那是你这个人不敢承认现实,因为同事与朋友可能不会说你的文章很菜,就算被鄙视了又如何,有时被人鄙视也是一种前进的动力。有人说如果几年后我进步了很多,但还让人看到我这些初学时弱智的文档,误人子弟,不好意思,Ok,那个时候有可以完全把文档删除,其实我更喜欢放在那里品味自己成长的过程,把有误导的地方更正。
我知道有一个技术博客作者,数据库专家杨廷琨(http://yangtingkun.itpub.net/),他几年来,每天坚持写一篇技术博客,现在已经有2千多篇,我的ORACLE数据库水平比他差很多,但是我也偶尔看到一些他新写的文档我几年前就会了,但这些并不妨碍我对这位博客作者的敬佩,因为他的博客让我学到了很多知识。
加入感兴趣的技术论坛
每个公司使用的技术与产品及环境都不太一样,也许你在公司里感觉什么东西都是别人做好了,我只是个流水线工人,我们的系统由于有严格的规范也不太出问题,自己的实践提高机会太少,那建议你加入感兴趣的技术论坛。
技术论坛上你可以看到很多人各种各样的问题与分享讨论,你也可以试着去帮别人解决问题。技术论坛可以让你进一步成长,但不要告诉我你只是会沙发、顶或接分的那种。
国内CSDN、ITPUB、CHINAUNIX、JAVAEYE、MSDN、51TESTING都是人气很旺,里面也不缺技术大牛与无敌大菜鸟。
常看参考手册
很多程序员,遇到问题喜欢直接去请教别人,或是Google找结果,通过别人或Google也许问题可以解决,但是只能形成知识点,不能形成知识体系。
要全面掌握一个东西最快的方法是看产品的官方参考手册,参考手册一般是代表正规的用法或者是推荐的用法,对于小产品最好是先将参考手册全部看一遍。如果是比较大的产品如(ORACLE、JAVA、.NET)那可以选择看经常使用到的部分。只有当你在看完参考手册还不懂的时候再去Google或与别人探讨,这样的方式会让你的知识更体系化。
深入分析问题原因
程序员一定要具备对技术问题刨根问底的想法,很多程序员能解决问题,但是不想去了解问题的根源。我们经常遇到问题,而且很多问题重启程序或者重启机器就好了,有多少程序员会去挖掘重启就解决问题的原因。我是从事数据库的,也经常看到很多人遇到数据库有问题,重装一下搞定,而没有深入分析问题产生的原因。也许在生产环境我们没有时间去分析,但是在开发环境、测试环境你是不是也经常重启解决问题。如果能在开发环境与测试环境遇到问题,这是技术人员成长的最好机会,我们在自己的领域一定不能放过这种成长的机会,因为大部份专家都是在这种历练中出来的。
不要害怕复杂
很多程序员习惯了利用各种框架及工具解决问题,自己只是写一些简单逻辑,当有一天遇到一个问题,没有对应的框架或工具时就放弃需求。我们不要害怕困难,如果你每天的代码都没有挑战,那何来提高,我们应该在适当的时候给自己一些压力,这样可以让自己提高得更快一些。比如你的系统需要一个轻量级的工作流引擎、编译器、解析器、界面设计器、屏幕控制器,或者一个http服务器之类的东东,但是现有的东西都感觉不太满意,你可以自己去搞一个试试,不要害怕不成功,不要害怕自己做不好。这些东西看起来有点复杂,但是当你深入去做时,你会发现里面有很多有意思的东西,你需要去逐步改进你的小系统,直到它能很好的运行为止,这是个很好的成长过程,可以让你对程序有更深的理解,也可打开思路。
学习计算机基础,深入技术原理
有时候我们经常迷惘,感觉技术水平没有提高,感觉技术能力总是浮在表面,特别是当你发现自己算法分析、性能分析、故障诊断能力有限时,也许这是你再次需要学习计算机基础的时候,因为基础不牢,所以你的问题诊断准确率不高。每个程序员应该都学过计算机基础(计算机体系、操作系统、网络、数据库原理、算法等等),这些知识对很多人来说是很枯燥。在当前高级编程语言时代,你的计算机基础不好也能编码,而且效率也不低,但是当你要想成为技术牛人,计算机基础就是一道坎,因为不扎实的计算机基础知识会让你在忽悠与被忽悠中成长。
关心产品市场与商业动态
程序员是否需要关心产品市场与商业动态,我认为是有必要的,除非你真是技术天才,能闭关十年后横扫江湖。计算机技术发展太快,每年都有新的流行产品与技术,大公司也经常改变战略或易主。如果你想引领技术潮流,想创业,那一定要关心产品市场与商业动态。
不要去轻视任何一种职位、语言、工具
在IT岗位里,没有高低之分,不要去轻视任何一种岗位,有些程序员认为自己的成果最有价值,美工、测试只是边缘岗位,项目经理就只会瞎指挥,不干活,销售人员与售前人员接到定单后屁事都没有,整个项目基本上就是我一个人的成果。这种心态是最要不得的。其实你的领导并不会这么想,很多事情是你不知道的,如客户关系就可能不是你一个人搞定的。还有最重要的一点,如果这个项目没有你参加怎么样?项目可能换成另外一个人做,也许他也能做得也不错,这就说明你的价值或重要性并不像你想象的那么重要。举个例子:
就好比你买一台联想电脑4000块,卖给一个没看过电脑的火星人20000块,这台电脑是最后的成果,但是否表示联想这台电脑是最重要的,可能你买一台戴尔的电脑还赚的钱更多,也可能你只要给对方一台杂牌电脑就可以拿到20000块。在这个例子里更重要的也许是客户关系与抓住商机,而买什么样的电脑影响不大(你在项目里的地位可能就是这台电脑的作用,没有你肯定不完整,但是很容易找到你的替代品,所以你的价值并不是最重要的)。
计算机编程语言是初学者最喜欢对比的话题,有的大师也经常对比各种语言的优缺点。我并不反对的评论那种语言的优劣,但我们不能去鄙视某种语言的及其使用者,因为流行的语言都有它生存的环境,可能是我们对技术的见识太窄,也可能是我们对人类的思维习惯了解的不全面,不要总是拿自己的习惯去评价。有很多系统管理员喜欢用命令行,喜欢用shell,perl等脚本语言,这些东西在我看来简直是低效且易读性差的东西,但是当你经常在没有图形界面下工作时,脚本语言可能真是更高效的选择。
最后写上一句浮躁的根源:
不要把祖国当母亲,应该把祖国当自己的孩子。
本不想讲这句话的,但是现实就是如此,浮躁的人群总是对社会充满了意见。我认为所有的这些浮躁都有一个共同点,就是认为自己无法改变这个社会,改变这个社会是国家的事,是其他人的事。
小时候老师总是讲祖国是母亲,我们是花朵,但是实际上我们也不是什么花朵,我们就是郑智化歌里的那根“小小的草,风吹雨打后依然不倒”。现实的社会总是充满着种种不平衡,但是浮躁并不能解决问题。有时总在想祖国并不像我的母亲,她更像是我的孩子,她还很小,经历过很多坎坷,我们经常感觉自家的孩子比不上别人的孩子的某个方面,于是对孩子多加责骂,也可能会让她花一个暑假的时间去补习。小孩子有一些成绩后也会骄傲,有时还会欺骗,我们不能容忍的是她的恶意谎言,但是她还没有到无药可救的程度,她依然还在成长。我们经常拿孩子与别人的孩子对比,而且总是发现别人孩子更好的一面,但是你是否希望与别人交换孩子呢,除了感情外你是否了解别人孩子的全部,我们需要更多的面对现实,应该在孩子成长的时候及时指出她的缺点,她不可能什么都是优秀的,所以我们应该尽自己的能力让她更好一些。你不太可能改变母亲,但是你的行动会影响孩子,你抛弃孩子,你真正的孩子将来可能也会抛弃你,所以说祖国可能并不像母亲,更像孩子,如果你把祖国当孩子,也许是另一种人生价值。
零
为什么我们要自己做职业生涯规划?记得电影《社交网络》里边,CFO同学在知道自己股权被稀释时说了一句话,“我以为那些律师是我的律师。”
其实我们大多数人对HR几乎都存在类似的误解—— 你以为她是你的HR,其实她只是公司的HR。她们care的是如何编个理由用老板给的那点小钱留住一个高性价比的人才,而不是真正有助于你发展的职业路线图。昨天还含情脉脉和你讨论人生的知心姐姐明天就可能变成拿着劳动合同逼你主动离职的凶婆娘。和人性无关——这就是她们的工作,越专业的HR越擅长。
所以,你要自己来做这件事情。另外还有一个原因,你该去什么样的公司、做什么样的事情、拿多少钱,都取决于一个问题:你想成为一个什么样的人。工作只是人生的一部分,是用来支撑你人生价值的核心框架之一。在你自己没有想明白的时候,没有人能帮你。这就是为什么猎头基本只谈钱——他们没空去和客户讨论人生的意义。
一
我曾花了很长的时间去思考人生的意义,最终发现其实人生本来没有意义,意义都是我们赋予它的。
在创业做人才服务后,我开始和很多的程序员聊天,开始去了解他们的现状和他们对于自己职业的RoadMap。我发现技术人员的职业生涯形态并不是千变万化的,绝大多数都大同小异,可以用四个象限和两条主线概括清楚。虽然我无法代替你去定义人生的意义,但是我可以和大家分享下各种职业规划下的人生都是什么样子的。
当然,这些想法只是我总结出来的东西,未必正确、更不权威,大体是一些自以为是的最佳实践。如果你觉得有用,就把它分享给更多的程序员;如果你觉得无趣,就无视掉吧,毕竟我也只能从自己的视角来讨论这个事情。
二
写《穷爸爸富爸爸》的那个胖子——罗伯特清崎,从现金流向将人类分到了四个象限,从而总结出来了这么一张图。
你也许已经看过,但这次我会从程序员的角度来进行解读。
E象限
E象限是雇员象限,绝大多数程序员都在这个象限里边。这里是风险最小的地方,只要你准时上下班别一个SQL把公司的数据库Drop掉,基本都能每月领到应得的银子。这里本应该是程序员们的天堂,因为比起改变世界,他们更多的只是很单纯的喜欢写代码。但现实很残酷,北上广的房价高不可攀。你可以不在乎房子,你女朋友能不在乎吗?你女朋友不在乎,她妈能不在乎吗?再考虑到将来小孩上学之类,只要你还打算留下来,房子其实还是必需品。
在E象限要低风险的搞定房子,只有一个攻略:靠股票和期权。找一家上市公司,或者即将要上市的公司,在里边成为核心员工,再待上几年,就能拿到一定数量的股票或期权。如果运气好,变卖掉这些东西,可以有百万级的收益。前几年这些钱还可以买房子,现在大概只能交首付了。
S象限
E象限的整体薪资是有天花板的,很多公司总监的月薪也就3万到5万,扣掉税和每月花销,其实攒不了太多钱。所以有一部分人就选择了S象限——自由职业者和小企业主的领域。
S象限的魅力在于你的收益不再完全由你的劳动来获得,你可以开始雇人了。比方说,你可以开一个外包公司,给微博的粉丝服务平台做应用。面向企业的业务一般难在拿到单子,而利润是很高的,一个项目上百万完全不算大,之前有人开玩笑说这些公司一年一个单子就够了、两个单子就赚了。
在S象限要活得舒服还是有技巧的:如果做外包,一定要有一个不错的客户渠道;依赖于大平台的项目最好能花点钱成为平台的合作伙伴;建站也是Web程序员们做得多的方向,现在可以顺便把移动APP也给做了,很多简单需求用HTML5打个包就能卖几万块钱。
如果你人脉不好,好吧,程序员人脉好的其实很少,那么就只能用免费+收费模式了。首先把你要做的业务中标准化的部分开发成产品(如CMS)在网络上免费传播,而其中需要定制的部分就可以收费了。开源和免费的Web产品很多,但同质化严重,很少有细分市场的产品,用心定位的话,养活一个小公司绰绰有余的。
S象限还有一种很悠闲的活法,那就是逃离北上广、回归大自然。去一个风景优美空气清新的二三线城市,雇三五个人(当然就你自己也行)开一个小工作室,给美国人写iOS和Android应用。既没有房价的压力,还能发着人民币挣美金,貌似成都高新区还免税。
B象限
按罗伯特他亲戚的定义,B象限本来是大企业主的,那种员工超过500人的。不过在互联网领域这个定义不靠谱,我更乐意把它看成是上市公司和为了上市的创业公司的象限。
同样是开公司,B象限的玩法和S象限不同,它是以规模化为前提的。天使、种子、VC、上市和出售是这个象限的关键词。
很少有技术人员适合独立创业,不是说你能力不够,而是很多东西你都没接触过,需要补很多课。之前创业成本比较高,现在有了微博和微信这些开放平台、有了App Store和Google Play这些开放市场,技术人员创业也开始有了一点的优势:自己做个小产品,不停的快速失败,直到成功。说得更直白一点就是你找业余时间开发一个商业应用,放到市场上去卖试试,让客户骂试试。等你经过了共享软件的洗礼,你基本上就知道做生意是怎么一回事了。
上帝其实挺公平的,他还为程序员们准备了另外一条低风险的捷径——上市公司或者快要上市公司的CTO。在这里要和大家强调一点,同样是CTO职位,初创团队的CTO和相对成熟公司的CTO差别是非常大的。
A轮(不一定精确,大致如此)及以前的公司,主要在寻找商业模式,会频繁的变更需求,对开发速度要求更高,这时候CTO只要能敏捷的开发产品就OK;B轮以后的公司,着力于规模化,会有大量的推广,可能在某些时间点遭遇高并发,同时技术人员、设备会迅速增加,这时候CTO需要考虑业务的高可用、还要能处理好团队、资源的管理工作。如果原来的CTO没有大型互联网公司的背景,往往很难做好这些事情,所以一般会考虑从大公司去挖一个。
如果你的规划足够好,是可以从小公司到大公司再即将上市的公司,加薪升职迎娶白富美出任CTO成为人生赢家的,这个等下我们还会具体讨论。
I象限
这个土豪和高富帅的象限我还没有待过,所以不多讲。大体是钱多得没处花的人通过投资来保证资产增值的地方。所谓的财务自由(就是一直不干活,钱也够你花),就是通过进入这个象限来实现的。投资未必都是技术活,直接银行存个定期也算是投资,如果你钱够多的话,也能财务自由。对了,投行的投资经理是E象限的,他们其实是雇员。
三
当你在上边四个象限里选好了想要的人生区间后,就要设计一个可行的RoadMap来实现它。但既然你都读到这里了,大概既没有一个I象限的亲爹、也没有一个I象限的干爹,所以唯一可以推动你前进的,只能是自身的成长。
技术人员的成长路径主要就分两条,技术线和管理线。总体来讲,选技术线的同学要选好技术方向;而选管理线的同学要把握好节奏。
技术线
这里的技术线是纯技术路线,是专家方向,做到最后title应该是首席科学家、首席架构师或者首席技术顾问之类。如果你对某个方向的技术非常感兴趣,又不喜欢做项目、团队管理工作,那么技术线就是不错的选择。
选技术线的同学一定要选对技术方向,因为你会在自己选择的这个细分市场里投入三年、五年、甚至十年的时间。
和大家讲讲我自己的经历。我是2002年开始学习PHP的,当时ASP非常流行,而我只是一个计算机系的学生,并不具备对行业趋势的判断能力,只是因为ASP太受欢迎,以至于图书馆的书都被借完了,我只好借了一本放在旁边的PHP。
于是在大学时我用PHP写了很多开源项目:留言板、相册、CMS;靠这些东西得到了一家建站公司的兼职工作,除了把学费挣回来以外,还轻松进入新浪实习。到新浪刚过了几个月,受雅虎影响,新浪也全面转向了PHP——而我正好是我们组最懂PHP的。你可以想象接下来我是多么如鱼得水,我和我的小伙伴们用PHP写完一个人才项目后,又用PHP重写了PV近亿的手机新浪网发布系统,一切都风调雨顺有惊无险,以至于后来去另一家公司面试时,面试官问我经历过最失败的项目时,我完全答不出来。
十年时间过去了,PHP依然如日中天,用我十年前学习的PHP技能,依然可以在一流互联网公司找到一份不错的工作,而ASP——现在谁还知道ASP是什么?
好了,我无意来仇恨,其实我只是想说同样是一门语言,它的投入产出比是非常不同的。选择技术方向时一定要谨慎。
那么,怎么选择技术方向呢?我给两个建议。
学会观察技术潮流
有一本老外写的书里边讲,如果你要知道什么语言流行,就去看看技术Guru们都在用什么。这话固然不错,但知其然不知其所以然并不是件好事。
从根源上讲,一个技术是否流行,和人们使用技术的方式密切相关。PHP能大规模流行,并不是因为它的语法好看,而是因为人们使用技术的方式从单机转向了网络,而PHP正好是所有语言里边最专注于Web的。苹果手机大规模流行后,Objective-C 的使用量开始极速上升。在很多程序员眼里OC的语法完全是异端,但这丝毫没有影响他们用异端语言大把挣钱。
仔细观察下周围,现在人类(是的,普通人类而不是其他程序员)是怎么使用技术的?很多人晚上回家已经不开电脑了,他们用电视盒看电视,用平板玩游戏,用手机吐槽。而这些设备很多都是Android系统,那么你觉得Andriod程序员会便宜吗?
由于有了多个设备,个人的数据需要在多个设备之间进行同步、分散到各处的数据也需要统一管理,所以云计算尤其是云存储的需求会凸现出来。
知道了多屏合一以及APP流行的背景,你还会觉得现在投入PHP会是一个好选择吗?我们来分析下。PHP最大的优势在于它的胶水特性——简单快速的把HTML和业务数据粘在一起然后显示出来。如果只有浏览器,那么PHP还可以通过响应式设计的方式来兼容移动设备。但是当我们有了手机APP的时候,服务器就必然需要API了。换句话说,多屏合一其实是要求数据和显示分离的——这不是PHP最擅长的,单纯写API接口的话,无论是NodeJS还是Go都更具优势。
当然,作为PHP的铁杆粉丝,我要说明,PHP也有很多强化API性能的项目,比如Yar,O+。这些东西让PHP在全平台时代获得了新的竞争资本,具体的大家可以去看看鸟哥在今年infoQ大会上的PPT。http://vdisk.weibo.com/s/A0GI9rYhWVk6
投资新兴市场和细分市场
这是第二个建议。如果把选择一门技术当做一个投资的话,新兴市场和细分市场是特别值得留意的。
新兴市场对程序员来说,就是一种新的语言、一个新的平台、一套新的框架。新兴市场因为刚刚兴起,所以几乎所有人都在同一个起跑线,特别适合后进者。我认识从一个2011年开始学习iOS开发的同学,他能力中等,但现在已经算是很资深的iOS工程师了,月薪超过2万;而如果他那时选择去学习PHP,那他现在只能算个初级程序员。
并非只有一个平台的兴起才有机会,很多框架技术也会带来机会。比如说Cocos2d Javascript版。以前开发游戏需要学习OC或者Java,而Cocos2d Javascript版本的出现,让你可以用纯JS同时开发一套运行在浏览器、iOS和Android平台上的游戏——不用改一行代码,由于是把JS解析后直接扔给OpenGL运行,在手机上性能也很不错。这对JS工程师来讲,就是一个全新的、可以进入游戏行业的机会。
如果你只能进入一个成熟市场,那么记得给自己确立一个细分的定位。前几天国内知名的漏洞报告平台乌云招聘PHP开发工程师,职位薪资不是很高,但是我觉得是一个很不错的机会。乌云平台每天被攻击一百多次, 在乌云工作几个月以后,你就能写出来可能是国内最安全的PHP代码,如果再适时的分享下你在乌云工作的经验教训,一个专注于安全的PHP专家就跃然纸上了。这就是细分市场,比你懂安全的没你懂PHP、比你懂PHP的没你懂安全。
技术线属于那些赖得住寂寞,还得了房贷,喜欢风险最低化的同学。在自身技术实力不错,专攻的技术方向还未衰落的情况下,踏踏实实熬个五到十年,还是可以有车有房的。如果中间遇到公司上市、出售,那么时间可能更短。
管理线
用玩游戏来打比方的话,技术线比较单一,在同一个地方不停的打怪就好了;而管理线则有相对复杂的剧情。技术管理虽然有技术两个字,但更多的是和人相关的管理工作,所以在这条线上,职业逻辑也更不正常(在HR看来可能是更正常)一些——title和资历很重要。
一个只在小公司上过班的PHP程序员,不管他能力有多好,是不可能直接成为一家500人规模还有半年就上市的企业的CTO的。即使CEO非常相信你的能力,他也需要拿出让投资人和团队其他人信服的证据,很显然一个大型互联网公司的技术总监职位更容易服众。所以别去相信那些没开过公司没当过高管或者就是别有居心的人说的,title很重要,它标记了你做过什么样的事、有怎么样的成绩。虽然它只能证明你的过去,但我们其实都是从别人的过去去判读一个人的将来的。
不想当CTO的程序员不是好项目经理,所以庸俗的讲,管理线其实就是一个不断升级自己的title,直到CTO的游戏,它有点像某些排序算法的动画。当然,随着title越来越高,管理的人和资源就越多,对沟通能力、管理能力的要求也越高。
在稍微扁平一点的互联网公司,职位分布大概是这样的:工程师 – 技术主管/技术经理/项目经理 -总监 – CTO。和技术线不同,管理线每一次升级除了能力,还需要机遇的。因为越是高级的管理职位就越少,如果你遇到一位年富力强又对公司衷心耿耿的直接上级,那这条线基本就被堵住了。
好在我们生活的这个年代换公司比换衣裳还容易,所以我们可以通过跳槽来调节。除了可以跳到相同水平但是发展更好的公司外,也可以去稍微低一级的公司,这样你的title(还有薪资)就可以先调上来,等这家公司发展起来,你的价值就增加了。
跳槽的时间间隔要把握好,一般两到三年为宜;不要太频繁,否则会让人对你的稳定性产生怀疑。每一次跳槽要设定好自己想要得到的空间、资源、薪资和title。对去创业公司的同学多说一句,虽然我不想承认,但的确99%的创业公司都会失败的,不过公司的失败未必是你的失败,你只要确保在每一家公司都能得到成长,就可以踩着河里的竹竿逆流而上。
写到这里连我自己都觉得有些势利了,但大部分公司和员工本身就是赤裸裸的利用关系,你不替自己打算是没人帮你的,老实也未必能有好结果。当年有个和我一起入职的同学,因为是应届,所以月薪只有3k,她一直勤勤恳恳的工作了四年,期望能靠自己的努力得到认可,但最后薪水也只有7k,远低于行业平均水平。后来终于想开了,跳槽去了竞争对手那边,直接13k+。
公司的人才政策很多时候取决于高管,即使你的直接主管想帮你,也未必能帮上忙。比如之前,我们部门一个技术的同学结婚后经济压力上来了,想找份报酬更高的工作,我们好说歹说愿意留下,但想调调薪资,但公司死活不乐意,宁愿花着同样的钱去新招一个……
嗯,吐槽就到这里吧,总之,用多家公司作为自己职业生涯的调节杠杆,就像用并行进程处理高并发一样,是非常有意义的。你未必要真的跳来跳去,但多个选择总不是坏事。
至于要怎么去选择公司,尤其是小公司,你只需要注意两件事:公司的业务方向靠谱不?公司的老板对员工好不好?前者关系到公司能不能挣钱,后者关系到公司挣的钱有不有你的份。
四
就写到这里吧,虽然不全面,但如果能在某些点上引发你的思考,那就不枉我打这么多字了。如果你有什么要和我讨论,或者有什么要和大家分享,可以发邮件到 easychen@gmail.com ,我会找时间整理出来的。
—————-
反馈回复
关于能力
很多同学都问到如何才能快速的提升自己的能力,其实你自己眼中的能力和别人眼中的能力是不同的。自己眼中的能力是你能做成什么事,而别人眼中(尤其是在非招聘的情况下)的能力是你做的事情能给他带来多少价值。
比如LazyREST吧,它是一个非常简单的框架,因为写得匆忙,技术评分可能也就60分。但我经常收到它的用户夸我能力好 —— 其实只是因为LazyREST实实在在的帮到了他们。公司雇人也是一样,他们要找的是能干活的人,能帮他们解决问题的人,单纯能力好,就算你知道A标签有四种写法,那又如何呢。
所以对于学习新技术、新知识,我一直有一个原则:用以致学。在学习一门新技术之前,先定一个目标——用它做一个日常生活和工作用得上的项目,然后根据项目的需求反向的去学习需要的知识。方便的话,把它开源出来,让大家都能用,慢慢的,你的实力和影响力都会成长起来。
读者来信
昨天收到了XiaoDong Miao同学的来信,分享了他的经历和想法。我觉得他提出来的几点思考都是大家经常会遇到的问题,写得非常好,在得到他许可的情况下,贴到这里供大家参考。再次感谢分享 :)
easychen,你好。看完你的《程序人生的四个象限和两条主线》文章,感触颇多。
你的这篇文章,其实可以算是探讨程序员职业生涯规划的文章。在我前一家公司离职之前,还没有接触过职业生涯规划的概念,当时公司加班很厉害,原因很多,首先是所在行业竞争激烈,加班确实是常事,其次公司的产品没有竞争力,利润很低,于是公司高层只是通过堆项目来保证公司的收益,最后公司的技术总监信奉加班至上的原则,只要你加班时间多就是好员工,至于你做的怎么样,是其次。
于是乎,整个公司就只是在比拼加班时间,即使自己的事情做完了,也不好意思早走,非要坐在位置上假装看文档学习,熬到11点,当然大部分情况你都会忙到晚上1,2点才能回家,熬夜通宵是经常的事情。
有次周末,跟团队里的小弟喝酒聊天交心,他跟我说:哥,我知道在这个公司,只要继续加班熬下去,我也可以坐到你那个位置,可是那不是我想要的生活。当时,我听完了很难受,因为我自己在我那个位置都不知道如何去发展自己,我又如何带领团队,让别人信服的跟着自己一起努力呢。我知道自己遇到瓶颈了,而且4,5年的这种朝九晚一的生活让自己的身体变的很差。
去年在身心疲惫的情况下离职了,在休息的时候无意中看到了古典的《拆掉思维里的墙》,接触到了职业生涯规划的概念,后来抽空去北京参加培训,也做了一对一的咨询。拓展了不少的眼界,也认识了不少做职业生涯规划的朋友。
这方面的知识其实不光是对自己有用,对于一个团队领导者来说,其实也有很大的帮助,当你能够帮助你的下属解决他的困惑和发展问题时,他对你会更认可,也会在工作中更努力主动,而职业生涯规划方面的知识对帮助下属解决这方面的问题有很大的帮助。
现在仔细想来,或许这也是当今中国教育的缺失,只注重专业技能的培训,而忽视了这块意识的培养,很多人或许有不错的学校和专业背景,却对自己要做什么,如何发展很是迷茫。
关于生涯规划的东西你讲的挺多,基本认可,我想讲讲自己的一些思考。
1.虽然职业生涯规划很重要,可毕竟思考层面的东西会多一些,实际执行起来往往又会是另外一回事情。所以动态调整也很重要,这点倒有点像创业,就好像刚开始规划好了产品,做出来给用户用就发现很多问题,跟当初自己想的不一样,需要做出及时的调整。
回到你文中的两条主线来说,假设开始你很想走技术路线,可各种机缘你进入了创业公司,而创业公司往往是需要多面手的,并且随着发展是需要有人可以带领团队,提高生产力的,这时就需要你向管理方向发展。
如果你能改变自己原有发展路线,适应公司的发展,可能就会有更高的收益。说白了,就是当好的机会出现时,不用过分的拘泥于原来的路线规划。
2.不管什么象限,不管什么路线,沟通能力都很重要。为什么我要单独提出来,这是因为程序员的沟通能力的名声不怎么好。见过不少的朋友都跟我吐槽过这样的问题,更甚至曾看到微博上的吐槽,招程序员:可以接受产品经理的需求变更而不会对其进行人身攻击。
当然自己也走过这方面的弯路。我自己的感悟就是,改变自己的思维模式。由于程序员大部分时间是跟电脑打交道,严格的01,true or false,长期的惯性导致了他们会往往用同样的思维方式去和人沟通,去和人打交道,结果可想而知,最怕的就是还不知道自己错在哪里。
细致,究根问底对于编程做技术来说,确实是好的性格或者说是处事方式,可当跟人打交道,场景就变了,再这样做原来的逻辑就错了。所以多跟不同行业的人接触交流能拓展自己的思维,让自己在跟人交流时不会再拘泥于程序员的思维方式上,那么沟通就会好很多。
3.跨界。当你接触不同领域的知识之后,你才有可能走向更高的层次,然后考虑问题才会更全面。对于一个整天只接受需求然后实现的程序员来说,他只考虑到自己的技术要如何发展,代码要写的如何的漂亮,架构要做的如何得优雅,可这些往往就会需要很多的开发成本(不仅仅是时间)。
而当某个需求很紧急的时候就需要去平衡时间和技术。如果程序员没有带过项目,那么他就只会从技术角度出发考虑问题,于是乎就会出现程序员不理解项目经理,项目经理不理解程序员的情况,而对于程序员自身来说职业发展也会遇到瓶颈。
反过来对于培养程序员其实也是如此。记得有次跟朋友聊天,他跟我抱怨说,下面的程序员为什么只会考虑自己的那块东西。然后我就问,你有让他有机会去接触其他方面的东西了吗?他回到:没有。我说:你也是做技术出身的,但是你后来还经历过售前,售后,产品等不同的岗位,乃至后来了解行业的整个市场,自己出来开公司创业,这些跨领域的锻炼使得你可以从更高的层次去考虑问题,去平衡。
而你抱怨的那个程序员没有让他有这方面的锻炼,他当然只会从自己单一的技术角度出发来考虑问题,因为他的见识就只有那么一些,在他的技术世界里那些逻辑确实是对的啊。当然你不一定需要让他像你那样去轮岗做不同的岗位,可以让他带个项目,或者直接跟客户沟通,或者让他了解其他方面的东西,到时说不定他就会像你一样去思考问题了而不会变得那么难沟通了。
跨界并非是要让你做技术浅尝则止,而是让其他领域的知识对你的技术发展助力。借用大前研一的话说就是培养自己成为T字型人才-----T的竖是深度,可以代表程序员的专业技术;T的横是宽度,代表程序员的不同领域的知识面。
前面说了接触更多领域的知识可以让你从更高的层次上去思考问题,这算是一个帮助。那又比如说去了解商业市场发展,了解这块资讯,你就会知道将来会是大数据时代,有意识的去培养自己大数据方面的技术,那么将来薪资待遇和发展就会比较顺利。