起因
5 月 31 日,我们公司的产品负责人在内部群发消息说招人,经过一翻友好的磋商后达成一致,我开始兼任一部分产品,转岗了又没完全转。记录一篇感想给迷茫的朋友也当个日志。嫌长的可以直接拉到最后看重点~
回顾职业发展
0.盲目摸索
大学的头一年做了许多非技术的事,然后打算选择一门高级编程语言做为主力发展,在JAVA和C#之间调研许久后选择了C#
。选择 C#的原因仅仅是因为他有比较好的中文支持(微软文档、VS、智能感知也是中文),而且 C#相比 JAVA,在代码上更能描述要做的事,而 java 给我的感觉就是代码量不小(比如 java8 中想把日期数据转成字符串,熟悉的朋友都知道多啰嗦)。
无论怎样,在当时外部环境看选择 JAVA 都是更好的选择,但我有种强烈的第 6 感让我有点排斥 JAVA,最后选择更舒服的 C#。我相信只有做一事让自己舒服时才能持续付出投入下去
。
随之而来就是资源问题--学校里没有 C#相关的课程,上课全是 JAVA!老师会 c#的也只有寥寥几人。现在回顾,我也不知道怎么一个人坚持下来的,长达半年的学习让我连一个小程序也做不出来..但这段时间的盲目摸索,探索了一些非编程语法的东西(比如对面向对象的认知),后来网上报名了一个喜科堂的在线培训才开始真正入门。
1. 大学项目组
喜科堂的 C#培训课前面几乎都是打基础,除了语法还包括一些工程经验(比如要做一个事,如何分析,从哪里下手分析思考),到毕业前 2 年时,已经能独立做出一个学员管理系统
。恰好此时从朋友处打听到学校有个项目组可以不用上课,这对我来说是一个接触真正开发的机会。。但他们开发已经满了,测试缺人,在恶补了一个暑假的测试知识和selenium后,我面试通过进入测试组
。
测试的工作相对清闲,但对我来说是个难得从另一个角度看待项目
的机会,而且还有时间让我继续打磨自己。比较骄傲的事有一个:当时在测试时发现一个BUG
,我在浏览器上排查后发现是正则表达式写错,然后我把正确的写好发给开发
,让她直接丢到代码中。老油条可能知道这是测试开发
的事,既懂测试也懂开发。
在此期间还去了一次VS20周年聚会
,当时有个老哥公司招人,我去面试没过,原因是因为我不会 web。回来之后开始从 C/S 向 B/S 转,2 个月内开了一个个人博客,包括前台和管理后台还丢到公有云上,自己申请域名并备案,使用 https 和 CDN 和一些其它技术。 这个时候已经从开发到部署这一套开始流程打通了。
这个阶段我的关键字是:不要把自己局限在开发
。因为种种经历我在学校时没有真正参与过项目开发,意外的接触到各种非技术的东西了。
2. 在新蛋中国实习
后来无心插柳式的来到新蛋开始实习,此时正好有 2 个大事件: .NET Core 2.0 发布和微服务
。 我在那台奔4的CPU的实习机
上面,被卡到用记事本+命令行写代码.....也因为是新框架,我们实习小组是我自己搭建的简单三层架构,而且还把基本的.NET Core Web 框架搞懂(中间件、http 管道)。然后去到 MKPL 组,当时组里正好在做.NET Core 方面的探索,我在里面就做 Core 的 SDK 和项目框架、UT 研究、部署等杂活。
这个阶段我的关键字是:开源
。
后来离开新蛋重新面试时面试官问我.NET Framework 和.NET Core 最大的区别是什么。我的回答就是:Framework 时代低层库是黑盒子,而 Core 时代是思想从封闭转向开放。以前的开发资源(比较 SDK 库)都是微软提供,非微软的要思考许久是否能够采纳。而 Core 时代后更相信的是社区, 并且也积极参与进去。
说回在新蛋的经历,另一个就是夯实基础能力
,情况是这样的:
- 新蛋是个 20 年以上的公司,我们组的项目都有 10 年了...这其中不知道有多少坑。
- MKPL 负责的卖家平台,要对接其它组(比如订单、退换货),对卖家来说其它组的问题也会在我们负责的项目中爆发。
- 新蛋整体氛围是:需要成员主动去推动项目进程而不是等领导安排。比如让我负责这个项目的某个接口,那就需要自己去和其它组协商具体字段、交互逻辑、测试逻辑梳理、写开发文档...总之就是我是这个接口的直接负责人,而不是我的 PM。
在这期间,不仅提高了自己的基本技术知识,还有更多的是职业基础素质的沉淀。比如我从实习时的 BUG 排名前几到后面跌落到 7、8 位样子,而开发工作却是比实习多多了。
这个阶段我的关键字是:职业基础素质
。新蛋麻雀虽小但五脏俱全,大的有工作管理流程到互联网架构,小的就是员工基本素质,相比其它公司会全面许多。这让我后面去到比它小的公司时,显得游刃有余。
3. 短命的 2 份工作
19 年离开新蛋,原因是不到 20 个人的组里摆了 2 个架构师级别的人,职业发展空间太小了,连续 2 家公司都只呆了 3、4 个月。
第 1 个公司:产品出发点很好,老板也有钱。但老板不懂软件!导致每次都到项目末期了又开始大改... 他不知道这种改动是什么级别的,最后埋怨软件部门 1 年多没有任何产出..结果就是我离职后 2 个月内,之前的老人全部走光,和软件相关的人基本都走了。。我提离职的当天才知道我的部门经理、我们的产品经理也要离职。。????
第 2 个公司:是做政府项目的,基本是把一套代码改改卖给多个地区的部门...只讲究团队建设,只讲究客户要用项目的时候,能正常工作就行。。至于工作几天就宕机..似乎没人会关心。。我呆了一段时间后感觉这里更多是需要老油条而不是我这样的人..
这个阶段我的关键字是:被新蛋好氛围保护的太好了
。第 1 个公司我做的主要是协调工作??团队内部的协调、部门之间的协调。2、3 个月代码没写多少,人际的事到是不少.....第 2 个公司完全是落到 X 坑里了。但收获也不是没有:让我在技术以外,工作交际上面获得了非常多的经验。
4. 高级打杂
然后就来到了现在这家公司。长话短说就是我负责了:新技术推广、项目框架搭建、公共代码库维护、内部服务器维护、和产品部沟通、偶尔协调下同事之间的工作.....
技术上几乎是:35%的 C#代码,55%的 js 代码,10%的 shell 脚本或其它配置,而在这家公司之前,我是打死不写 JS 的人。。 在做部门的 CI/CD 的时候,我们的镜像名和 tag 要符合管理要求..我用 C#写了一个小工具放在 CI/CD 管道里了。而业界搞 CI/CD 几乎只有 shell 脚本和 yml 配置。
转折点也就是在这里..我们的测试只懂点点点,而开发只管开发..产品不懂技术,我在这里经常当个中转点。 在 2、3 阶段中的经理让我能知道测试脑子里想的什么。。产品脑子里想的什么。。然后把这些东西转给开发或转回去。 公司内部人员的关系是非常好的,但不同职业的人常年养成的思维习惯是不一样的,当工作忙起来的时候往往会忘记转成对方能听懂的话
。毕竟现在我们都是在做一套产品,产品的收入高了我们才能更好的存活(福利和奖金),也是这个情况让我能顺利去兼产品,而其它人是转岗。
这个阶段我的关键字是:成功不是偶然的
。其实我想兼产品是想给自己留个后路,而能谈成困难的兼任(兼任在公司中的管理成本比较高,公司有 800 多号人了),也是前面的积累。
5. 总结
写文章的时候回顾了自己的发展经历,主要是没有浪费精力。可能做了效率低的事(比如大学时选 C#,半年都没什么成果),而经历的积淀在另一个时间点却发挥了作用。阴差阳错的经历让我懂点网络、懂点软件开发和软件工程、懂点软件项目从出发到结束,各方面都有点积累,然后主力--后端开发也没有落下。
未来
据说 35 岁时间点是把大刀。。我也迷茫,但不焦虑
。。不行了还可以转岗去产品。 现在的医药软件行业也是比较吃行业经验的(这也是产品部许久没有招到人需要内部招聘),未来或许还有其它的机会。这样一步步走下去,虽然效率不如其它人,但总不至于开倒车或崩盘。另一方面,也可以借助产品经验
来突破目前的中级开发瓶颈
,向我心中的高级
前行。
给你的建议
每个人的诉求和情况不一样,可以多方面的去投入,不要死磕一点
,除了搞 IT,我周末还在跑团,这又是另一个领域的东西了。
- 如果目前的工作或现状不能让你满意。不要急着跳,沉下来想想自己到底想要什么,然后做好未来 3-5 年的规划并且不要轻易放弃。那怕这个规划让你失败了,但失败也是经验不是?日子还长着呢。
- 如果目前的工作或现状还可以。不要觉得太安稳,没有绝对的安稳。同样可以为自己的规划做一些准备或沉淀,以备不测。
- 做对而耗时的事。
针对 3: 比如开源投入这个事。。许多人开始会坚持,后面慢慢觉得没有收益就放弃。但如果你喜欢技术并愿意为之分享,在分享的那一刻你会感觉到开心,这已经让你立于不败之地了。如果能有额外收获,那叫充话费送的
。 这样即便没有外部投入,你自己也会有动力持续投入。喜欢它,为它付出。否则你就会成为生活的奴隶
。