上一篇文章聊到了软件工程师的核心竞争力主要分为三个方面:快速学习能力、解决问题能力和个人影响力,且核心竞争力的培养和提高需要长时间实践和积累,并不是短时间就可以达到的。这篇文章, 来聊聊如何培养和提高自己的核心竞争力。
学习能力是软件工程师最基本的核心竞争力,快速学习能力决定了掌握技术的速度,并且是解决问题能力的前提。要培养快速学习能力的前提,是构建自己的知识体系。那么如何构建自己的知识体系呢?我个人有如下几点建议:
在某一个技术领域深耕;
向相近领域逐步横向扩展;
这其实是一个技术的深度与广度的话题。之前很多同学问我,技术的深度和广度,哪个更重要?我认为在不同的阶段,有不同的侧重点,而非单独的只能二选一。
职场生涯前期,我个人的看法是应该在技术的深度上投入更多的精力,在细分的技术领域做到一定程度的熟练掌握,成为某个圈子里面前20%优秀的人。当然,由于技术是成体系的,在这个过程中,你会触类旁通的掌握一些其他领域的知识,这个阶段我称之为“以点破面”。
当在某个细分领域达到一定程度后,可以横向扩展,投入较多的精力去学习了解和你擅长领域有直接关系的技术知识,扩大自己的已知面,这个过程中所收获汲取的知识,又会反过来帮助你解决之前的一些困惑,总体来说是相辅相成的。这个阶段我称之为“构建知识体系”的过程。
只有你将一个领域的知识深度掌握和吃透,才能高效的迁移到其他领域,构建自己的知识体系。
遇到过一些同学,唯技术论,觉得只要技术比较优秀到哪儿都是香饽饽。但技术真的有这么大作用么?不见得。在讨论这个结论之前,首先要明确一点:技术的价值是通过业务运营的增长来实现的。简单来说就是,技术需要更好的支撑业务的发展,通过业务的增长来体现自己的价值。大家可以看看下面这张图:
如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337&vd_source=488d25e59e6c5b111f7a1a1a16ecbe9a
我们在日常工作中,要实现一个需求,也要考虑到需求的特点/用户使用场景,然后再制定对应的技术方案。工作经验多了之后,我自己也明白了一个道理:越靠近业务和商业化,越容易赚钱/体现自己的价值。因为业务的增长结果便于量化的,技术该如何量化?这是个很有意思的话题。
解决问题能力是软件工程师的进阶核心竞争力,其实具备这种能力的人大家在日常工作中应该都遇到过。
线上出现了某个问题,大家都束手无策时,有个同事可以逻辑清晰有条不紊的快速分析和解决问题,往往具备这种能力的人在职场中也是有一定的影响力的,或者说大家对他能力和经验是有口皆碑的。那么如何提升解决问题能力呢?
大家可以参考我前面写的软件工程的文章,软件工程的初衷是防止软件系统出现风险而构建高质量软件系统的方法论,它的理念也可以用于解决问题。
培养解决问题能力,可以从日常工作中遇到的问题着手,遵循如下几点步骤:
明确定义问题:问题是什么?影响了哪些模块?造成了哪些影响?和它有依赖的模块是否受到影响?
定位拆分问题:造成这个问题的原因是哪些因素?之前是怎么做的?之前的做法有哪些不足和遗漏?
提出方案并解决:针对问题的解决方案是什么?从哪些方向去解决?执行解决方案,观察效果直至问题得到解决;
复盘并跟进优化:全面复盘问题出现的前因后果以及解决后的效果,分析不足,找到改进措施并跟进落地优化结果;
上面的几点,在日常工作中用于提升解决问题能力是有很大帮助的,但还有个更好的方式,就是应急预案。
从技术角度来讲,任何一个细微问题都可能导致生产出现重大故障,因此针对性的设计对应的预案就显得至关重要。
从业务角度来讲,无论技术做任何的改动和优化,最终的目的都是为了业务目标的达成。而系统的稳定性,无论从用户体验还是业务目标达成的角度来看,都是不可忽视的一环。
因此预案的作用就呼之欲出:从技术的角度出发,为业务目标的达成提供多维度的稳定性保障。
在我看来制定预案是一个经验+评估的问题。常见的制定预案的方式如下:
从日常的线上问题着手,汇总问题和解决方案,复盘得到TODO项和落地验证;
从系统设计和业务需求分析角度开始,前置性的进行评估分析,设定对应的预案;
从用户体验和用户行为分析角度出发,优化用户操作过程和交互逻辑,避免类似问题;
所有预案都需要经过评估分析;
没有验证的预案都是潜在的风险;
预案都是有风险和成本的,避免过度设计;
预案的最终目标是保障业务目标达成,而非秀技术;
提升个人影响力可能很多同学会觉得摸不着头脑,那我换句话形容大家应该就懂了:提升在团队的话语权。
那么如何提升自己在团队中的影响力(话语权)呢?我自己有如下几点经验:
这点对技术同学来说很好理解,厉不厉害出来show一圈就知道。
“talk is cheap, show me the code”,这句经典名言大家都懂得。
我到现在还记得之前就职的某家公司CTO的一句话:打硬仗,拿结果。
扩展来说,应该是解决复杂的问题,做难度更大的项目,拿到超出预期的结果。
影响力是需要在实践中来获得认同的。
当然,如何达到超出预期的结果,建议大家学学“期望管理”,这是个很有意思的软技能。
帮助他人很好理解,无论是日常工作中帮同事解决技术难题,还是在技术社区帮助同行分析解决问题,都可以获得认同。
分享方式更多,无论是企业内部技术/业务分享,还是行业大会/技术沙龙/直播都可以分享自己的实践经验、职场心得。
当然,分享这件事要看个人的性格。我个人性格并不是那种特别外向的社交性格,我更愿意通过写文章写博客的方式来和大家交流,分享自己的经验。就像大家在看到这篇文章的时,就是我在分享的一种方式。