起因
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: 比如开源投入这个事。。许多人开始会坚持,后面慢慢觉得没有收益就放弃。但如果你喜欢技术并愿意为之分享,在分享的那一刻你会感觉到开心,这已经让你立于不败之地了。如果能有额外收获,那叫充话费送的。 这样即便没有外部投入,你自己也会有动力持续投入。喜欢它,为它付出。否则你就会成为生活的奴隶。