前言
最近从工作了9年的外企毕业,正好趁此机会回顾下这9年来的职业生涯。我是一个不善于用文字记录或者分享学习生活的人,即使是朋友圈也很少发。之所以写下这篇博客,仅是想要尝试做一点改变,同时也希望留下一些文字以便将来回顾这段经历。
初入职场
毕业之后就来到了这家公司,既是第一份工作,也是到目前为止的唯一一份。这是一家在金融圈还算知名的外企,虽然薪酬竞争力一般,但在人均996的当下,能做到WLB加上开放,包容,平等的企业文化,还是吸引我在此经历了一段不算短的时光(错过了一次被社会毒打的机会)。另一个重要的原因是我一直在成长,公司的规模也给了我有足够的成长空间。
刚开始是在数据部门做面向内部人员的产品开发,技术是基于C# (或许是金融行业尤其是国外的公司多基于C#技术栈),从此就走上了死磕.NET 这条路。由于是开发面向内部人员的系统,各种开发流程还停留在比较原始的阶段,当时敏捷开发的理念已经深入人心,后来就转入了流程更加规范的产品研发部。恰巧赶上了部门从瀑布式开发到敏捷模式的转型,从引入JIRA,Kanban流程,到Git代码管理,Jenkins自动代码构建,我逐渐了解到企业级软件开发的流程。
开始主导小规模项目
除了正常的需求开发,领导交给我一个日志分析系统重写的任务。系统本身技术非常简单,主要就是大段的T-SQL,从数据库拿到数据,经过一些简单的处理,然后生成Excel报表。经过短时间对SQL相关的语法的学习,项目很快就上手了,但是整个系统最复杂的并不是用到的技术,而是所涉及的业务。比如每个表的字段代表什么意义,为什么要这样Join两个表,这些都是需要熟悉业务才能理解的。也正是这个项目,使我对部门业务的了解比其他开发快得多,也为后续接触核心业务,跟产品经理扯皮打下了坚实基础。
接下来接触的另一个项目是重写一个基于ASP.NET Web Form开发的系统。当时前端技术正发生着翻天覆地的变化,前端开发一下子从技术鄙视链的末端窜到了前列,各个大厂也争相高薪抢夺前端人才。不可避免的,在技术选型上,我们也选择了现代前端技术框架。跟现在Angular, React, Vue三分天下不同,我们选择了当时还很火的Ember.JS,后端采用NodeJS + Express。不过遗憾的是,这个项目后来由于公司战略调整黄了,不过从这个项目中还是得到了一些收获,从HTML+CSS+JQuery到ES6 + NodeJS + Sass,让我对前端相关的技术有了相对系统的了解。虽然熟悉了前端开发的技术,但是我对UI繁复的设计总是感到吃力,经常花费很多时间就只为调某个样式,很难获得成就感。在一些没有设计稿的情况下,做出的页面很难达到自己的期望的效果,最终没有选择在前端这条路走下去。我觉得做前端还是需要一点天赋的,尤其是独特的审美很重要(当然仅凭后天的学习也可以应付大多数情况)。
技术成长最快的一段时间
距离AWS发布S3已经10年,云计算技术已经相当成熟并得到了大规模的应用。公司开始尝试将现有业务上云,作为团队新人和对“新”技术的热爱,我被领导选中参与上云的项目,从此以后我感觉才真正踏入了软件开发的门槛。在传统数据中心模式下,一些核心架构,如负载均衡,数据库集群,缓存集群,DNS等等都是由资深技术人员掌管,或者由专门的部门负责,作为普通功能开发人员,很难有机会接触到这些技术。但是在云上不一样,所有的的资源都被抽象成可灵活调用的服务,你可以随时创建销毁一台虚拟机,可以轻松搭建可弹性扩展的计算集群。作为资历尚浅的程序员,从接触云计算开始才了解到软件开发的核心技术和架构。在这一阶段,从硬件的虚拟化技术,网络模型到应用架构设计,从虚拟机到容器到Serverless,从单体服务到高可用,弹性扩展,异地容灾,从传统的产品发布运维到CI/CD以及DevOps,软件开发尤其是后端领域这块巨大的拼图在我的脑海里才变得逐渐清晰。了解这些概念,也让我能从代码之外,从网络,计算,存储,部署等不同维度审视一个软件系统。
开始带团队
在经历了多个核心系统的开发与维护之后,我已经成长为部门的核心成员,慢慢的也开始带一些新人。这时候花费精力最多的就是项目管理,项目初期要做需求分析(跟产品经理撕逼),需要设计技术方案,跟项目经理制定开发计划(跟项目经理撕逼,争取开发时间,找老板要资源),拆分开发任务,跟踪项目进度,跨部门沟通协调。当几个项目并行的时候,已经很难有时间做具体的开发工作,通常是当团队成员碰到技术难题或者需要开发系统原型,才会写一些Code,这个时候Review别人的代码远远多过自己写的。做技术的往往就是这样,自觉或者不自觉的会被推着往前,只要个人没有强烈的抵触情绪,性格不是太孤僻,或多或少都会接触到团队管理的工作,往往这时候就是一个技术管理的分界点。根据个人性格,有的人往管理走的多一点,技术的积累相对就会慢下来,有的人偏向于技术,慢慢的可能走向了架构师的岗位。当然,对于一线管理,技术仍然是核心竞争力。做管理的还有个好处是有了一定程度的决策权,在一定范围内,你可以实践自己的想法。从项目管理转到人员管理,这又是一道坎,如何提升团队战斗力,凝聚力,针对不同的团队成员,哪些需要多授权,哪些需要多辅助。管理是一门艺术,我也还在不断学习中...
对技术的持续探索
领导终于决定要搞微服务了,最近带着几个小伙伴又开始了微服务架构的探索。开始学习.NET跨平台,了解DDD,服务注册发现,RPC等等微服务相关技术,了解Kubernetes。虽然公司在新技术的采用上相对谨慎,但终归是秉承开放的思维在一路追赶,这也是我能留到现在的重要因素(实际就是懒~)。对新技术保持积极的态度我觉得是每个开发人员的基本素养,但是也不要掉入新技术的陷阱,技术上没有所谓的银弹能解决所有问题,在实际架构设计中总是受限于各种资源,针对特定的场景选择适合的方案才是理性的架构思维。
其中一些话题有机会再深入探讨,大学毕业之后就没写过这么多文字了,就到这里吧~ ~
标签:软件开发,回顾,项目,前端,编程,技术,生涯,开发,团队 From: https://www.cnblogs.com/ayang1/p/17227427.html