亲爱的小伙伴:你好,我是黄Sir,一名在技术领域从业15年的IT老兵,从刚走入企业的一名程序员到央企的研发经理再到互联网上市公司CTO,直到现在自己创业做CEO,一路走来对技术人员的成长和发展有了越来越多的感悟。看到了很多技术研发人员长期从事着重复且没有太多技术含量的工作,整日都在被繁重的业务需求压的喘不过气,每日通过体力劳动和加班来获取自己生活的保障以及微弱的加薪晋级机会,更不要谈自己的生活和个人情感规划了,对于大家来说996和日渐稀少的发丝才是标配,连想要升职加薪的想法都慢慢变得微弱,甚至已经向生活妥协。从新兵蛋子走向研发负责人的成长史想起十几年前的自己刚刚从学校毕业走向工作岗位,也是壮志满怀,希望通过努力改变自己的人生,确实我也做到了,但非常辛苦……记得当时自己所在的项目是一个在甲方现场研发的项目,主要业务方向是金融行业(请大家不要对号入座,这里只谈我自己的成长感受),项目组常年保持在50人以上的团队,作为一个年轻程序员非常憧憬成为研发经理,研发总监,但在这样一个团队里,如何才能脱颖而出呢?尤其是在这样一个研发环境和研发技术要求以稳定为主的传统行业里则显的更加困难,每一个程序开发人员都只是一个螺丝钉,即便你转的再快也无法使整个环境发生改变,这种状态也是现在刚进入工作的程序员的一个普遍工作状态,虽有工作热情,但能力和经验不足,是难堪大任的,想要成长和提升也不会再像学校里有老师不厌其烦的教导,学习资料也没有现在互联网上这么丰富,可这些都阻挡不了一颗想要努力向上的心。没人教,没地方学那就自己努力,每天在完成了自己工作的前提下,不断了解其他模块的业务逻辑和代码架构及相关技术,每天下班后在工作学习到深夜,有的时候甚至到晚上凌晨2点,周末休息也会主动到公司加班,在这样半年的持续努力下,我的职业生涯终于进入了快车道,两年时间从程序员升级为高级软件工程师,再升级为研发主管,研发经理,研发总监,但这一路走来期间的辛苦只有自己知道,我想看到这篇文章的你们如果这个时候也在努力改变自己的人生轨迹,个中滋味只有自己能体会到。多年后离开了这个项目,偶然有一次和我们集团副总裁吃饭时无意间聊起,为什么当时会给予我这样快速成长的机会,我们副总一席话让我很有感触。他说不论是晚上还是周末,只要到甲方现场,都能看到我认真编写或阅读代码的身影(我当时的工位恰巧背对门口,进入办公室我这里是必经之路),那份沉沁在代码世界的认真非常感动他,他愿意把机会给到这样一个努力的年轻人,即便他现在技术能力和管理能力都比较弱,但冲着这份认真和持之以恒,肯定能做好。从我们副总裁的话语中我悟出了一个道理,当你有能力的时候,只要认真就一定有机会从人群中凸显出来,而能力不足就得靠几倍甚至几十倍的认真和努力才能获得上升空间的机会,但也需要少许运气,如果我当时的工位恰巧不是背对门口而是在公司的一个不显眼的角落,可能我的人生际遇就会改写也未可知。离开舒适区,投身互联网浪潮在传统软件行业努力工作几年后,发现互联网行业的蓬勃发展一定是以后软件发展的方向,毅然决然的投入到一家互联网创业公司中去,短短一年时间将技术研发能力薄弱的公司研发团队带领成为在相应领域数一数二的研发团队。回望公司业务刚刚开始起步,我初到公司开始进行系统重构,一开始C端系统、管理系统、数据库都放在一台服务器上,没有进行运维监控和版本发布管理,对于系统的稳定和健康运行既无法监控也无法获取系统的负载状况,对于没有什么用户流量来说是不会出现大问题的,但随着用户量增加,后台业务报表复杂度提升,系统就频繁出现502、503的错误:而原研发主管却置若罔闻,总认为自己的系统代码没有问题,但系统已经到了非常脆弱的地步,连我们自己访问都可以点出502、503的错误来,BOSS经常在办公室里大喊系统又502了,而当时的研发人员却都对现状已经麻木,我就是在这样一个状态下临危受命,快速分析定位问题,首先发现所有应用都在一个服务器上部署,业务间耦合度非常高,这就是个典型的单一应用,系统非常脆弱,需要尽快解耦并进行服务化改造,我做了以下八项措施:
1、将应用服务器和数据库服务分离并单独部署;
2、对MySQL数据库进行主从服务设置,将应用进行读写业务分离;
3、将应用服务进行无状态化改造并进行分布式负载均衡,支持柔性扩展;
4、对应用服务进行改造,基础业务下沉,做服务隔离;
5、进行数据缓存架构设计,并将缓存服务化;
6、所用业务以及服务系统进行集群化设置并保证服务一致性;
7、进行关键时刻流量控制、服务降级设计,确保主服务稳定;
8、对各项服务进行线上监控和运行时检测确保服务稳定。我当时梳理的我公司跨境电商系统的应用构架,大家可以参考我通过上面的优化和改造后服务终于稳定下来并能支撑单日过亿的用户访问,服务上百个国家(我们目前的跨境电商解决方案已经服务了来自全球140多个国家的用户,包含meiguo、中国、南非、印度、菲律宾、墨西哥、澳大利亚、德国、西班牙、大不列颠联合王国、秘鲁、法国、韩国、智利等国家。)虽然结果达到了预期,但在历时一年多的实施过程中确实发现了很多问题,各服务集群参数配置的问题,服务一致性的问题,数据多级缓存后更新不同步的问题等,其中一方面原因是对相关技术在生产环境应用中缺乏经验导致,但总结下来更多的是研发人员知识结构体系单一,缺乏对复杂问题分析解决的能力。获得认可到自我实现,成为企业布道师在当今这个互联网时代下,想要系统能够稳定健康的运行并提供高可用的服务就要面对高并发大流量的所有问题,而现在大部分的技术研发人员仅具备基本的业务开发能力,仅是实现业务功能的CURD,而互联网企业不是传统软件公司,他要面对的不是简单的业务需求。而是巨大用户量的并发访问压力及频繁复杂多变的业务需求,这个时候努力工作、加班仅仅是完成业务需求多变带来的工作压力,根本没有机会也没有方法去掌握互联网的技术架构和相应研发解决方案。最后就变成我前面所说的996和日渐稀少的发丝标配了。通过我的努力,公司系统已非常稳定,业务发展的也越来越好,业务不断壮大,需要更多的技术负责人去架构和实现新的业务系统,从这个时候开始我就从一名架构师演变成了一名帮助技术人员成长的布道师。把我的经验和技术总结出来帮助这些工作不久或在系统架构方面有着浓厚兴趣和工作向往的同事,也正是由于我对知识总结的系统化和讲授过程的授业解惑,大家都亲切的叫我黄老师,至此这个称呼一直伴随至今,我也收获了人生自我价值的实现,在一线城市也把房子从80平换成了200平,车子也换成了特斯拉Model X(PS:其实是为了不限号),我培养的员工也从普通研发人员晋升为架构师,研发经理,跳槽到其他公司的年薪平均涨幅都在10万左右。看到别人因自己成功,收获巨大幸福感而对于现在创业的我,更是将过去这些年总结的方法和经验进行了更系统的归纳和提升,不仅仅希望帮助公司内部的同事,也想将我这些年总结的知识分享给大家,让大家从中受益。对于技术研发人员,成长最快的黄金阶段往往是刚参加工作的第2-5年这个阶段,这个阶段如果抓住成长和学习的机会单从薪资上来讲平均每年就有10万以上的涨幅,可是大家在这个时候又在做什么呢?我上面已经讲到了,做着重复而没有创造性的工作。在过去的几年里由于我所在的企业随着跨境电商shichang的不断发展,企业迅速壮大,由最初服务几个国家到服务近百国家,项目也在不断的涌现,需要大量的系统架构人才,就这样开始带领和培养技术人员成长,由于项目时间都非常紧张,从而总结了一套行之有效的培养方式,使得很多初中级技术人员一下迈入了系统架构人才的行列,平均年薪至少涨幅了10万。这些技术人员经过我的培养和带领不仅薪资得到了很大的提升,工作效率也得到了明显的提高,之前996的工作方式也在自身能力提升后得到了改善,不仅自己的个人生活得以改善,感情生活也得到了充实,更不可思议的是这些同事通过合理的工作安排和规划能够不需要加班就能完成平时的工作,晚上和家人就有很多时间留给自己和家人,陪老婆、陪男/女朋友、陪孩子,使自己在工作和生活之间做到更好的平衡。想要收获更多就要先学会努力付出如果上面我讲的这些是你梦寐以求的目标,接下来的信息将会令你心潮澎湃!
经过我这些年的研究证实:
1、几乎任何技术研发人员都可以做到;
2、快速提升技术水平;
3、高效完成工作目标;
4、告别996的工作时间。几乎现在所有的互联网公司都常常996工作,而大部分的技术研发从业者,并没有充分发挥他们的能力去改变这一现状,在这些年中,团队中很多人通过我的方法,快速提升了技术水平,薪水也得到了进一步提升,但是在公司之外,我并没有让更多人掌握这个能力。
为了解决这一困境,更为了让技术人互相帮助,共同成长这一目标,必须接受下面严格的训练:
第一项训练精准训练和掌握编程之道编程核心思维不是所有的技术都是时间累积可以实现提升的,也不是所有的技术都是反复流水线一样的重复就可以提升。一旦陷入了代码搬砖模式,你不仅劳心费神,工作效率低下,而且无法满足公司的产品需求。在这一项训练中,我训练你掌握什么样的编程思维,什么样的分析和解决问题的方法可以让你工作效率大幅度提升。算法、数据结构、设计模式这些基础内功不仅仅能提升你的逻辑思维和底层架构能力,还能在面试和笔试中帮你加很多分。
第二项训练系统化训练和掌握系统架构设计思想和方法这个世界上没有最好的系统架构设计,只有最适合的系统架构设计,但是否能设计出适合业务发展需要的系统架构,这就需要系统化的掌握架构设计的能力,在这个部分,将从一下几个部分对架构设计能力进行强化训练。
1、系统架构的目标:高可用性、高可扩展性、低成本、多快好省;
2、系统架构的原则:单一原则、DID原则、N+1原则、功能可开关、版本可回退等;
3、架构设计组成的关键点:业务架构、应用架构、数据架构、技术架构;
4、系统架构设计的演进方式;
5、在资源有限的情况下如何进行架构设计;
6、系统架构设计如何和项目管理进行关联并取得相应的平衡。
第三项训练结合企业真实场景,自己独立设计一套系统架构并进行架构演进可能你之前也了解过一些系统架构知识,也知道系统架构的一些关键事项,但看的再多都不如从实践中获得真知。这部分讲根据企业的真实业务场景训练大家从业务架构、应用架构、数据架构、技术架构这几个方面进行入手,全面掌握系统架构的能力,主要从以下几个方面进行强化训练:
1、系统业务服务设计、隔离、基础服务下沉;
2、系统数据模型、数据对象的设计、数据表设计、数据库应用架构设计;
3、研发代码架构及系统分层和接口— 服务设计;
4、服务一致性设计、以及中间件选型和应用:
5、系统缓存架构设计;
6、各服务系统缓存服务设计;
7、系统自动化运维部署架构设计;
8、系统防止恶意攻击的预案设计等。
第四项训练深入架构进行各个环节的功能代码及部署实现对于系统架构师,不仅能运筹帷幄设计系统整体的架构和系统演进路线,更能够实现具体的业务功能代码和服务部署,否则架构中存在的问题就无法提前预知和规避了,在这个部分讲训练对具体业务实施和中间件使用的能力,确保遇到具体技术问题也能够及时有效的解决,这里将对以下架构中需要使用到的中间件和具体技术进行掌握:
1、数据库读写分离、数据库索引及数据库运行调优;
2、Maven使用、Nginx负载均衡、CDN使用;
3、Quartz、消息队列RabbitMQ、Redis集群、Solr搜索引擎集群、zookeeper、Docker+Jenkins;
4、域名HTTPS安全证书安装、Jemter等中间件的掌握和使用。第五项训练刻意练习,提升综合能力技术人员的综合提升,不是仅仅完成现有的工作,一遍遍的重复,这样很容易陷入低水平重复的误区,还应该刻意做一些训练。我们会对以下几个方面对学生提出要求,对以下方面进行【刻意练习】,不断突破自己的舒适区,提升自己综合能力,在职场上进步。
【刻意练习1】代码:每个人必须要有github账号,按时提交作业代码,代码review。
【刻意练习2】写作:每周一篇技术周报、总结近一周自己的工作学习所获,写文章是梳理技术知识的最佳途径。
【刻意练习3】讲解:很多人职场上受限的原因是因为不够open ,无法表达自己的思路,进而就无法跟优秀的人交流,这个往往是技术人员忽略的地方,本课程要求每人每月提交至少30分钟的对某一技术点的讲解视频。