骑猪兜风

土木工程毕业转码农,十年干到CTO!

骑猪兜风 2016-06-08 12:58:17    201310 次浏览

  老司机介绍

  曾科,现任全国最大土地流转 O2O 平台-土流网 CTO。2016 年加入土流网,负责该公司在线网站,移动端,以及相关交易系统的研发与管理。2012 年就职于 1 号店后台部任资深应用架构师,2009 任美国 Harris 公司架构师。2006 任创发科技高级开发工程师。近 10 年互联网、电信行业分布式系统研发、架构经验。专注与开源技术,系统分析,领域架构设计。对大型电商分布式系统、SOA、微服务、领域驱动架构、工作流、大数据、敏捷开发有较深的理解与实践。

  这段时间跟很多童鞋进行技术、行业的沟通交流,当他们知道我以前在学校学习的不是计算机,而现在从事互联网行业,并在有一定规模的互联网创业公司,带领整个技术团队,他们问我有什么不一样的经验,经过与他们交流后,发现自己的一些经历能帮助到一些童鞋,很开心,他们也希望我能分享出来,给正在成长的童鞋问带来一些参考,找到自己的方向。

  确实,我也该总结下了,这工作十年来,从建筑行业到 IT 互联网行业,十年来经历的风风雨雨,仿佛还在昨天。下面我把自己整个成长历程分为五个阶段,希望给童鞋们做些参考。

  阶段一:行业的抉择

  1. IT 业的屌丝真的是最苦逼的吗?
  2. 行业选择你?还是你选择行业?

  学历一般、内外向兼有的性格,2005 年毕业于普通大学的土木工程专业,在这十年的历程中经历过数不清的困难,有职业迷茫的,有技术的,有为人处世的。在大学期间还挂了一门课,就是C语言,回想起来命运竟是如此的捉弄自己。现在想起来都有点哭笑不得,毕业后,加入了中建三局钢结构公司,并在上海环球金融中心项目做施工,承建的当时世界最高楼,当时刚从土木工程专业毕业的学子想必都期望能够参与这样标志性项目建设,现在想起来也应该是前途无量的。

  但与此同时,上海 IT 业发展得非常迅速,铺天盖地的宣传,感受到了 IT 行业强烈的冲击。让自己坚信 IT 业会给社会带来的变革,于是决定离开建筑业,投身 IT 业,坚定了自己的目标后,白天施工上班,晚上变身 IT 男,自行学习。在此期间培养自己对编程的强烈兴趣。半年后不顾家人强烈反对,追逐自己的梦想。投身 IT 业。

  有的童鞋觉得程序员很苦逼,永远都在应付改不完的需求,加不完的班。甚至都给自己的下一代做出了决定,做什么都可以,一定不要做的程序猿/媛,因为这行不仅累,而且时薪也不算高。做我们这行有个享誉海内外的名称-IT 民工,但很少有人真正深入了解原属于这个称呼的“民工”,你知道在工地与民工交流时,鸡同鸭讲的感受么?

  顶着 40 温度,在烈日连续 10 个小时 在户外放线,零摄氏度以下吹着刺骨寒风在 200 米在户外钢结构吊装施工的感受么?如何处理复杂的包工头、民工、甲方、监理之间关系?我只想说的是,当你经历过两种不一样的行业后,发现根本没有最好的行业,每行都有每行的苦。

没必要去埋怨现在的工作与团队。每行都很苦逼,每个团队都有每个团队的问题,每行都需要自己去努力适应,努力脱离给自己设置的舒适区,往前看,给自己注满正能量。那么我想说的是,行业选择了你,那意味着淘汰。你选择了它,那么请爱上它。

  阶段二:兴趣是自己最好的老师

  1. 转行后悔吗?
  2. 编码工作是枯燥的,如何爱上他?

  在 2005 年到 2012 年是国内建筑业、房地产最火的时间段。曾经有很多人问我转行后悔吗?

  我都很坚定自己的回答,如果在阶段一是做出了选择,那么请坚持自己走的路,让别人说去吧。不要往回头看,坚定信念,往前看。可能是经过这个阶段的磨练,才会知道自己是没有任何退路,抓紧时间学习。哪怕再累,也得坚持下去。前几年每天的工作都会变得枯燥乏味,关键是如何在工作中找到乐趣,提升对自己工作的热情。因为兴趣是自己最好的老师。后面自己做到了。

  我进入的第一家 IT 公司是内地大中型电信企业,承担着省级电信系统研发与系统集成。2006 年加入了一个省级互联星空研发团队,当时互联网技术也算比较前沿的,经历了亿级湖南卫视超女、快男的投票项目,前几年时间跟大多数 IT 狗一样,编码,反复修改着产品的需求。

  拿着不如原来一半的薪水来挑战自己的梦想。四年内在公司内迅速成长。从独立实现模块,到能够承担起独立的项目,从项目管理、技术上都能够独挡一面。在这快速成长时期,学习从 EJB、WebService、Ajax、Struts、Spring……等最基础的框架,从会用到理解,到系统性学习与深入源码。

  刚开始的这几年中,白天完成分配给自己的任务,晚上专注技术细节的专研,发现当前业务代码不合理的部分。最常问自己的一句话,这个是怎么实现的,有没有更好的方式实现,沉浸在看似枯燥的代码中。曾尝试着写一些自认为不错的代码,当能够将自己的代码能实施到项目中并取得不错的效果,开心不已。但后面事实发现这并不是太好的实践。经过大牛的指导,社区有很多优秀的框架都能实现,比自己写的代码更加优美,很佩服他们的才华。

渐渐养成看开源代码的习惯,迅速吸取精华并运用到自己的项目中。在这几年过程中顶着巨大的压力,有家庭的,有工作上的,但从始至终从心底里就认为自己的基础不好,不如那些科班出身的程序员,努力的填补着自己的不足。

  阶段三:深入一点,在点上做技术专才

  1. 学习了那么多的核心技术,哪些才是你的技术亮点?
  2. 作为技术人员,大量学习技术却越来越茫然,找不到出路?

  在过去的那几年中学习了很多专业的技能,也专注深入的学习了一些优秀开源框架,深入了解源码。当时研究这些技术为了更好的去解决问题,后面发现虽然深入的研究了常用的 Spring、Struts、ibatis 等开源技术,好像自己也没什么的技术亮点,没有属于自己的标签。也比较迷茫,发现自己与别人并没有什么差异化。

  虽然期间有不少的获得加薪去其他公司的机会,都婉言拒绝了,除了增加部分薪资,觉得这些岗位对我职业生涯的积累没有任何好处。直到后面有个机会进入了一家美国 Harris 公司**事业部的架构部,负责事业部的工作流系统架构的研发工作,当时国内已经有不少成熟的开源 BPM 框架,我经过半个多月的技术调研,发给我的上级,技术选型的决策人是个老美,喜欢尝试新的东西,最后选择 JBoss 刚发布才 1 个月的 jBMP 5,由我来负责技术实现。由于 jBMP 被 JBoss 收购后。架构整体被重构,不是原有的 jbpm4 发展起来的,而是有 JBoss Drools flow 发展起来的基于消息驱动的分布式工作流引擎。

  由于该框架国内没有任何资料,没有任何团队在真实项目中成功实践该引擎,所以我只能自行研究。这是个非常好提升自己的机会。在研究过程中遇到的许多坑必须要通过研究源码解决,网上没有任何相关解决方案可参考。于是经常提交 Bug 和一些想法到社区,深入参与开源软件的发展。由于扩展性问题,经过上级支持与许可,我自行实现了 jBPM 5 持久化方案。经过这两年代码的深入研究,对分布式系统、ESB、OSGi、EDA、敏捷开发都有较清晰的认识。当时在这个领域成为了专才,差异化得到显现。

  阶段四:接地气,以点带面,完善技术栈

  1. 如何成为一个好的架构师?
  2. 好的架构师是否仅做好技术就好? 把代码写好就足够? Ownership? 领导力?
  3. 架构师是否就是技术的顶峰?

  由于对工作流上有较好的理解,工作上迎来了一些机会。有幸拿到了阿里巴巴、1 号店的 offer。最后选择了 1 号店做为下站的目的地,原因很简单,平台更好。延续了自己优势,做应用架构。其实架构师我认为是一个比较虚的职位,顶着架构师的光环,实际上就是高级 Coder。去帮助团队解决一些他们解决不了的问题。

  我在入职的第一天我的领导对我说过的一句话,影响了我的职业生涯:要接地气。的确,这个时候的我必须深入团队,了解团队目前的技术上的痛点,去做技术改造。一个合格的架构师必须确认一个想法究竟能不能落地,最直接办法就是自己编写代码。尝试“实现一个系统最难实现的一部分”。与开发团队一起,完成设计与实施的细节,与开发、运维团队一起,完成部署的过程。

  刚开始进入工作流团队的时候碰到的第一个问题就是 Activity 5 源码的性能问题。后面通过优化将该开源框架性能提升数十倍。获得到了整个团队的认可。顺便说一点,在帮助团队解决问题的同时,深入研究后源码,吸取了 CQRS 框架的优势,在此之上扩展了自己的一套框架,并实践运到以后的工作中,收益匪浅。

  接着负责几十个人的项目,当时产品没有好的思路,后面凭借自己的经验,自己主动承担起了项目经理、产品经理、架构师,开发人员的混合角色进入团队。带着团队在制定的时间完成工作任务,在团队中树立起了自己的品牌与口碑。

  后面很多其他团队的童鞋也向我咨询技术细节,积累了一些人脉,我也从他们那里学习到很多其它业务与技术,参与其他团队项目设计。扩充了自己的知识面同时,也发现自己不懂的东西也越来越多,该学习的东西也非常多。为了快速的建立起自己的知识体系,自己在 1 号店的几年时间,不停的学习,管理、技术等等这些统统都要学。在学习的同时,快速树立自己的品牌。

在 1 号店的这几年中,给自己总结了以下六点,认为非常重要:

  1. 给自己制定目标
  2. 规划好自己的时间
  3. 可量化的计划
  4. 强化自己的执行力
  5. 将学到的东西大胆的用于实践,先试点,后推广
  6. 总结与分享

目标:我将目标分为年底目标或季度目标,跟进当年部门的业务目标,制定针对业务的痛点,制定一个技术改造目标。

计划:拆分目标,将目标量化成计划,将计划量化到周,甚至到天。将要学习的技术系统学习,利用好块状的时间系统学习。计划每天需要看的内容。除此之外将碎片化的时间也需要利用起来,上下班不开车,看看一些较好的微信订阅号,吃饭的时候看看 InfoQ 的大牛分享等,将自己业余的时间也充实起来。对于我这种转行的人来说,底子比人家少了几年,需要比科班出身的更加努力,迎头赶上,学会充分利用时间。

执行力:即使有了详细的计划但执行不到位,然并卵。因此对自己也需要有严格的约束,计划好的学习内容。若没有执行完,就用其他的时间补充,由于我家人在外地,常坐火车,我有很多的书都是在火车上看完的。在 1 号店几年中系统学习的书好像比高考读的书还要多。目前还保持着这样的习惯。

学习必须实践:很多同学喜欢学,跟风学,学完了没有机会实践,导致深度不够。那我认为除了能简单扩展自己的知识面与了解,没有实际意义,因为换个平台你只有广度没有深度,体现不出与别人的差异化。个人的价值就大打折扣。我在 1 号店新学习的东西大多都用到了业务实现中,微服务、领域驱动、大数据、EDA....自己的技术知识栈形成了闭环,并全部都经过实战,在专注一个领域的同时,迅速扩大自己的知识面。

个人建议技术上找到突破口,大胆实践,那怕是很小的一块。有的童鞋说领导担心风险,不允许,那就用自己空余的时间做一个实例,用数据来说明你的正确。如果多次尝试都被拒绝,那我觉得可以走人了。因为那里没有技术人待的位置。

总结与分享:在学习与实践过程中,能升华自己的层次,就是总结与分享,将自己实践过的东西通过总结,分享出来,让别人也从中获益同时。加快自己的成长,这个至关重要,所谓分享是将自己的知识体系系统化,将实践变成理论。只有实践与理论相结合才是最有说服力的,分享收获最大的往往是自己。

阶段五:职业路线选择好的平台

  1. 35 岁是否真的如大家所说的是个坎?管理路线?技术路线?
  2. 离职成本很大,如何看待新机会?
  3. CTO 是否是终点?

  随着年龄的增大,相信作为 Coder,日后的选择将是一直困扰着自己的问题,让自己不断的纠结。不知道自己该何去何从,在纠结的同时人生黄金时段也就过去了。我想说的是没必要纠结,顺其自然,在现有的岗位上发挥自己的价值,展现个人强有力的领导力、推动力。

  在自己的岗位上发光发热,辐射周围,展现自己在岗位上的价值,让自己的上级以及周围的人都能知道自己的价值。我一直都认为工作不仅仅只是为了生计或为了上级或者老板做事,而是为自己做事,展现出自己的价值。当然如果是自行创业就是另外一说了。如果上级或者老板还不能好好发现自己的价值,那走人吧,我相信此处不留爷,自有留爷处。找一个更好的平台展现自己,如果当前平台足够好,那么利用好当前这个平台,努力将自己的价值最大化,我相信上级或老板也非常乐意看他的下属给他带来的价值,达到双赢。所谓高调做事就是这个道理吧。

  作为技术流的程序员,每次的离职带来额外的成本是高昂的,选择好的平台至关重要。离开 1 号店也收到不少知名互联网企业的 offer。但为什么选择一家创业公司?

  这里考虑了多重因素,先抛开家庭不说,仅从工作角度来考量的话。 觉得并不是越好的企业越好。

  什么是好的平台?面就比较广了,总结下就是,将自己曾经学到的好知识,值得去实践的东西,那就找个好的平台进行实践。当然这里有技术面的,也有管理面的,我认为是能否将当前的拥有的能力再提高一个层次,怎么说?

  举个技术面的简单例子,现在移动互联网的时代,前端程序员被吵得很热,但花了7-8 年做后台的老程序员,考虑是不是转向 iOS、Android、H5、AngularJS 这样新兴的技术,如果那些对自己的职业有明确的规划的童鞋,我相信这并不是问题,大多数的他们会很坚决的告诉你不考虑,因为他们有清晰的目标,这些新兴的技术对后面的职业规划没有太大的意义。说白了后面可能有广度没深度。但是要不要了解他们呢,了解是必须的。但是是建立在在你作为某项甚至几项领域的专家之后。

  那么每次离职选择公司,是钱重要?还是平台重要?我认为是选择平台更加重要,如果仅仅为了增加 30% ,甚至 100% 的薪资,不能获得好平台的跳槽,个人认为跳槽是失败的,相比平台,短暂的提升了收入,长期来讲对职业规划没有太多的帮助,每个人的职业生涯很短暂,黄金时段更短,个人觉得眼光要放得长远一点。

  做为团队技术的领军人物,CTO 或技术总监,面临的问题与挑战更多,技术、产品、管理、沟通、协调、识人、用人都要面面俱到。目前中国互联网大军中,CTO 多如牛毛,能力也参差不齐。如何在众多 CTO 中脱颖而出?在做好本职工作,把公司的事当做自己事做,倾注一切,为公司创造价值,尽自己所能帮助团队,与团队一同成长,选择了它,相信他,尽自己努力。只有团队成功了,个人价值才能最大化,因为这时的你已经与团队绑定了。

  除此之外加入更多的圈子,在行业内进行技术交流,扩展自己知识面的同时也需要扩大自己在行业内的影响力。由于自己在目前的岗位上还在不断的摸索,不断的学习与前进。虽然已经走上了管理岗位,但是我很清楚自己的真正优势在哪里。从技术出身,那么技术就是自己的根基,目前一有空余时间,写写代码,研究好的技术。IT 技术高速发展的今天,自己不能脱离技术的快车道。

在做职业规划的时候,个人总结与建议:

  1. 择业,先花 1 年左右的时间看看自己是否适合这个行业。
  2. 爱上当前职业,选择了它,就认定它,寻找工作中的乐趣,2-4 年踏实的工作,多学习能提高自己技能的点。
  3. 选择某个点深入进去,成为领域专家。
  4. 以点带面,扩展技术面。学习的东西必须深入实践。
  5. 选择好的平台,与企业一起成长。
内容加载中