查看原文
其他

程序员面对新业务,如何快速融入、规划自身发展?

鹅厂程序员 腾讯技术 2022-11-18

导语|面对新业务、新技术,该如何快速融入与成长,我们盘点了几位鹅厂技术大咖的实战经验和方法论,一起来看看吧。
本文内容来源:mengsenwang 腾讯CSIG后台开发工程师,dylannie 腾讯CDG开发工程师,ziningli 腾讯WXG前端开发工程师,frostlin 腾讯CSIG前端开发工程师

1、如何快速融入技术体系

故事背景

项目介绍:需要重新开始开发一款云产品,满足产品需求和市场定位。

项目背景:经历公司组织架构变化,团队重组,过去的产品和进展owner大部分已不再负责原有的任务,需要在短时间内快速响应需求,开发新产品,同时如何应对历史包袱,都是非常具有挑战性的事

项目重要性:BG业务整合,架构调整需求也随之改变,已有客户迁入的情况下,需要快速开发产品满足产品需求和市场定位,否则会造成用户满意度下降甚至市场份额的减小。

面临的挑战

1、资源有限:团队整合初期,人手有限,几乎每个人都负责了产品的好几个模块。

2、历史包袱较重:历史代码处于无人维护的状态。

分析与思考

1、按重要程度梳理工作和需求,集中精力和时间突破重要且紧急的事情,利用业余时间处理紧急但不重要的事项,积极建设团队,准备人力处理“重要不紧急”的事项,定期回顾缩减“不重要不紧急”的事情。

2、面对历史包袱,积极寻找与在公司任职的相关同事了解项目背景与关键点,在可靠版本基础上快速开发新的产品,持续迭代。

3、已有客户迁入的情况下,需要快速开发产品满足产品需求和市场定位,否则会造成用户满意度下降甚至市场份额的。

4、资源有限:团队整合初期,人手有限,几乎每个人都负责了产品的好几个模块,根据不同人模块充分解耦架构。

解决方案和细节故事

1、引入重要性和紧急性分析框架。分为:重要且紧急,重要非紧急,紧急非重要,非紧急非重要,将所有事项在分析框架中进行梳理;估算每项任务的开发时间和人力成本投入,集中有限资源根据优先级处理各种需求。

2、与团队leader保持积极沟通,召集相关产品与数据人员进行讨论与定期进展沟通,判断任务划分是否合理,新增需求如何进行紧急性与重要性的判断,不同开发人员在进行不同类型项目开始时如何进行协同与沟通。

3、人力调配的工作:

a、与兄弟团队共同承接需求,分担任务的工作量;
b、增加外包商或子公司人员数量,加快融入与开发进度;
c、尽可能利用其他时间来赶项目进度,保证项目的准时交付;
d、保持积极稳定有效沟通,避免重复工作与冗余工作,发挥每个项目参与人的主观能动性,产生1+1>2的效果;

4、利用现有的一些积累资源来加快需求开发:

a、梳理现有沉淀能力与可复用模块,召集相关人员评估现有模块可用性与改造成本;
b、形成代码模块review小组,发现历史代码中潜在的问题和漏洞,避免引入开发的不确定性因素;
c、将新方案尽量与现有能力进行协同,避免重复功能开发。

5、按重要程度梳理工作和需求,集中精力和时间突破重要且紧急的事情,利用业余时间处理紧急但不重要的事项,积极建设团队,准备人力处理重要但非紧急的事项,定期回顾缩减不重要且不紧急的事情。

当时的结果

经过以上环节的工作与大家的积极配合,最终在规定时间内完成了版本的开发,保证平稳发布。

感悟与建议

在工作过程中,经常会遇到很多无法预判的问题。当遇到这些问题时,首先要冷静思考、理智分析,对待任何突发事件都要有足够的预见性。尤其作为一个项目的掌舵人,你的背后可能有很多人,当你失去冷静、出现慌乱的时候,你带给背后人的是一种不安和不确信,这种不安和不确信对当下的情况是毫无意义。

所以,想要顺利的执行一个项目,最重要的是学会冷静思考,懂得分析人心,然后想好计划,果断的去执行。过程中不怕失败,只要你有勇气不断地去尝试,去迎头而上,最终都会收获意想不到的惊喜。


2、新人如何融入团队、规划自身发展

故事背景

当时作为一名校招新人,接手一个重要的项目开发工作,无论是在工作强度还是工作内容方面都存在巨大挑战。当时项目处于立项初期阶段,开发任务繁重,各团队之间的沟通工作也非常重要。

面临的挑战

1、资源有限:项目开发初期,人手有限,接受了许多开发工作以及沟通需求,工作强度大。

2、项目紧急:项目需要尽快拿出来与竞品竞争。

分析与思考

1、项目再紧急事情也是一件一件做出来的,需要保持冷静,把所有需要做的事情列出来的,区分紧急和不紧急的事情,根据优先级处理好每一件事。

2、及时与上级沟通需求,把现阶段的问题抛出,与同事共同思考解决方案,团队合作非常重要。与此同时,尽可能提高自己的工作效率,安排好自己的时间。

3、提升随机应变的能力,在工作中会遇到很多突发状况,这时候需要冷静下来思考问题中不变的部分。在遇到新问题时须快速形成知识转化,保持快速学习能力。在上手新的项目时,不管是司内还是市面上,一般有现成方案直接使用,避免重复造轮子。

解决方案和细节故事

1、首先,梳理不同模块的开发内容和需求,按照重要程度划分优先级,集中时间和精力处理优先级最高的工作,剩余时间处理优先级较低的工作。同时,利用空余的时间思考和梳理工作内容,发现可以优化的部分,从而提升工作效率。

2、其次,及时与团队沟通进度,成员之间的方向保持一致。遇到问题要及时抛出,和leader以及同事共同讨论对策,很有可能自己遇到的问题,其他人也会遇上,及时做沟通可以避免同样的问题再次发生,浪费时间和精力。

同时做好工作记录,为日后的优化和个人提升做准备。团队里面也做了很多的内部分享,方便大家相互了解各自的工作,及时地发现问题。

3、此外,工作上还有一个很大的问题需要解决,那就是人际沟通问题。日常工作中,除了自己的工作之外,还有很多与人合作的部分,需具备一定的沟通技巧才有助于团结合作并高效完成工作。

沟通是一个互助的过程,在沟通之前,我们需要了解对方的需求,对沟通的主要内容有一个全局的判断,提高沟通的效率。此外沟通也能够让我们保持思维的活跃,和他人的思想交互,不陷入自建的信息茧房中。

4、最后,对整个项目有主人公意识,不能仅仅抓住自己负责的那一部分,因为项目间各个模块之间是相互协作的关系,其他模块的问题很有可能与自己负责的部分有交叉,了解整个项目对于理解整个产品以及对问题的定位分析很有帮助。

当时的结果

项目顺利推进并上线,获得了当年的优秀员工。

感悟与建议

1、遇到问题首先要冷静下来思考,形成自己对问题的判断。实在不懂的问题,多和同事导师讨论,并做记录形成知识点。

2、持续学习,在工作的同时也要利用公司的资源学习各种知识。虽然我们属于技术族,但也要多关注产品以及运营相关的领域,提升综合素质。

3、人生不仅仅是工作,还有生活,生活也会反哺到工作中。多关注生活,能给工作带来很多的灵感。

心得体会

1、脸皮厚一点,多问多沟通,学会问问题。

2、做事情要拼尽全力,做到极致才能成长。

3、成长最重要的是提升自己的竞争力。不管是专业能力,还是团队协作的能力。


3、面对新业务、新技术,如何成长?

Q1:对于适应新业务,有什么建议吗?

A1:一般来说,对于问题、业务的介绍,你需要自己去通过应用、代码去进行专研,然后在专研的过程中,对于遇到的问题做下记录,最后整理在一起之后,再集中去问,这样是一种比较高效的熟悉业务和代码的方式。

如果一直企图通过问别人来理解业务的话,首先别人不一定有时间。其次,别人刚开始给你讲业务时,你对业务还没有那么熟悉,可能讲了很多,但是其实因为不能理解,就也没有记住很多,这些是低效率的交流方式。

Q2:这十年间也是前端高速发展的十年,有很多技术的更新迭代,你平时是如何学习新技术的呢?

A2:主要的还是要多看、多学。无论是看书、官网、公众号,甚至是看别人的代码、工程,看开源的项目,都是学习的方式。

同时,组内的分享也是特别重要的,因为一个技术你仅仅是会使用,和你能够清晰地给别人讲解,是两回事。会用只是能够解决我们当前的一些问题,但是分享的话,你不仅自己要理解其中的原理,还要想着怎么讲才能进一步让别人也能够理解。

另外一方面,因为平时工作量也很大,能够自己去学习的时间并不是很多。所以我们要把时间高效地利用起来。我一般会在周末,选一个安静的,不被人打扰的环境去学习,比如去咖啡馆,而不是待在家里。通过给自己一个不被打扰的环境让自己更加高效地学习。因为一般我们和别人的差距就是在休息的时候拉开的。

Q3:进入公司之后我也是发现工程里面有很多旧技术,让学习的难度变得很大,为什么不重构呢,或者怎么看待重构呢?

A3:重构并不是一个必须要做的事情,我们是要从投入产出比来进行衡量的。一个工程即使用到的技术很久了,但是如果他仍然能够在线上稳定的运行,并且没有那么的改动需求的话,那是没有必要重构的。如果是一个要进行长期迭代的项目,虽然重构会带来风险,但是从长远来看的话,是能够有利于以后更好的进行功能迭代开发,那么重构是有必要的。

同时从技术上来说做重构是要做好充分的准备的。首先就是要对于工程要做好分析、梳理,输出汇报的文档,给上级进行汇报。然后是需要新旧系统并行开发的。在替换的时候也是一个模块一个模块的去替换。同时还有做好新老系统兼容、灰度监控,准备好出现问题时的回退计划。


4、技术新人如何快速适应工作节奏

Q1:你印象最深的一个项目是什么?

A1:印象最深的项目,这个项目一开始是否可行,都是未知的。同时还涉及到公司的另一个业务团队,就还要和跟那边的产品团队合作。所以整个项目从分工,到包括最后技术怎么实现,都是很模糊的状态。

后来,经过一步一步拆解之后,我们就清楚了要做哪些工作,就一步一步把它做完。然后还专门跑到外地去跟那个业务团队的一起看。整个项目的前期工作反而花的时间和精力会比较长,当方案确定之后,后面其实就是具体的实施了。

Q2: 对于这个项目,有什么心得?

A2:在接手一个比较大的项目的时候,先想一想整体方向,把它分成哪几个板块?最开始毫无头绪的话,就盘点一下有哪些方案可以选择、以及每个方案的优缺点。在整体规划上耗时长一点,我觉得是比较有价值的。因为整体方向确定了之后,后面就是执行和细节补充了。

Q3:有哪些新人容易踩的雷?

A3:新人最容易踩的雷:一直闷头做,也不去问。对此,导师给我了一个建议:给自己设一个止损时间。有时候你需要去解决一个问题,但是并没有现成的解决方案,是需要自己去查,然后去各种试错。当年我也是为了查一些问题搞过通宵,但是通宵其实是很低效的,且会对第二天的工作效率是有影响的。

我导师跟我说如果你到半夜12点了还没弄完,那你今天就是弄不完。就不要想了,回去休息。就是我们如果陷入牛角尖,或者是很想把这个东西搞完的时候,这个动机是好的,但是当你很累的时候,其实你思维是很混乱的,对这种时候就可以稍微放松一下,也不一定非要睡觉,可以去跑跑步。要跳出来,回头再看的时候可能发现自己忽略了一些点,然后这时候就能解决。

Q4:如何更好地提升自己,而不是陷入到重复的工作中去?

A4:提升自己需要有时间、有目标,先思考一下:我哪里有欠缺,我想往哪个方向发展。例如前端很多方向,比如大前端、nodeJs或者中间件。我们业务上涉及到的面很多,最开始的时候会在需要的时候去补充这方面的知识,慢慢地你才知道更想往哪边去深入。

其次,一个人的精力毕竟有限,不可能面面俱到。有个最简单的方法,去看晋升的雷达图,我的下一次晋升需要哪些能力?那我就对照着去提升自己的能力。

Q5:写代码经常被打断,应该如何去改善或解决呢?

A5:这个问题也是新人容易出现的。首先,我个人会有几个固定时间处理日常工作,比如说早上来了先看看消息处理处理邮件,这个估计也就花个半个小时。

其次,日常工作弄完了之后,我会让自己有一段比较完整的时间,去处理一些复杂的工作。这时候我断绝干扰,我会保护好自己珍贵的、不被打断的时间。如果这时有紧急事务要处理,对方会打电话的。

Q6:对于紧急的事,是优先处理吗?

A6:也不一定是先去处理。就是把事情按重要和紧急会有四个象限:重要且紧急,重要不紧急,不重要紧急,重要不紧急。对于紧急的事情,你是不是能马上把它解决?比如说人家着急交一个文档发给他就好了,几分钟没有关系。然后如果这个事情他不是由你负责,而是另外一个同学负责的话,那么我就会考虑让他去问谁,就是不要让一件事情卡在自己这里。

对于不紧急的事情来说,就每天的固定时间处理。最容易被耽搁的,就是不紧急但是很重要的事项。比如自我提升需要做什么事情?那就可以就把这件事写在一个小纸条上,写在电脑边上,每天提醒自己:还有这件事要做。

Q7: 还有别的方法,可以避免工作没有条理吗?

A7:接着就是定期回顾了,每周或者每个月复盘一下:这个目标处理得怎么样了,是否需要进行动态调整。

另外,重要的一点就是找支持。比如我手上头突然多了很多任务,那我有些计划就完不成了,怎么办?那是不是可以有协调的人,让其他人帮忙来做一下?工作当中不要自己一个人去做,是可以找人去协调的。产品需求评审时,也可以告诉他,就是我手上还有什么事情,那么哪些事情我是没有办法做到的。要学会争取资源,学会拒绝别人。



# 腾讯技术直播 #

腾讯资深工程师分享技术干货

点击预约,get开播提醒
往期回顾:
    程序员老爸:上班代码,下班带娃 
    程序员如何寻找技术突破、体现技术价值?
    如何写好一篇技术文章?看这篇就够了 
    如何在工作之余提升自我?

点个关注,我们下期再见👋

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存