来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

发布时间:2020-07-12 13:32:41 作者:wx5d2194994b210
来源:网络 阅读:424

引言

我们来看一下几类在程序员成长、发展的常见问题,如果你或多或少存在一些,那么恭喜你,这篇文章值得你仔细往下看了:

在这篇文章里,我会告诉大家一些技术成长的误区,我先点出来:

先抛一个非常重要的结论:“思考力”是程序员需要具备的一种至关重要的素质。掌握了思考力,你就掌握了在互联网领域,这种高度“智力密集型”行业成长的钥匙。上面这几个成长的问题和误区,跟没有掌握思考力有着非常重要的关系,而且我发现所有发展比较顺畅的同学,他们的思考和学习能力是非常强悍的。


来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?


我个人在工作中,一直有意或者无意地锻炼自己和团队同学的思考力,包括哪些是对我们最重要的思考力,如何去训练思考力,有一些心得,希望能够分享给大家。

关于思考力

思考力是一门很深的学问,包括认知科学,心理学、教育学、逻辑学,如果要系统化学习,是需要看很多书的,我推荐以下几本:

1.《金字塔原理:思考、表达和解决问题的逻辑》-[美] 芭芭拉·明托,这本书系统阐述了思考、表达和解决问题的逻辑,也是麦肯锡的思维能力基础,算是一本比较标准的思考力教材;

2.《麦肯锡教我的思考武器》- [日] 安宅和人,作者根据自己在麦肯锡公司工作时积累的丰富经验以及脑神经学的专业背景,设计出一套极具逻辑性的问题解决思维模式;

3.《思维的本质》-[美]约翰·杜威 ,这本书是美国著名教育家约翰·杜威的代表作,阐述了思维训练的基础理论和实践;

本文并不是探讨思考力的深层理论,而是分享我们从日常的技术学习和项目过程中沉淀下来的思考力,以及如何培养这些思考力,这些思考力几乎我们每天都可以用到,只要你有一定体感,你一定会感同身受。

有哪些对程序员最重要的思考力

原理性思维:找出知识背后的原理

有的人会说,为什么要思考原理,而不是直接掌握知识就可以了?我只需要会用就行了啊。

我们先来举一些技术方案设计的案例:

这其实是一种采用二阶段提交解决分布式事务的思路,只是从一般的事务框架延展到交易领域;

因为消息使用的是观察者模式,观察者模式的好处是可以实现多个消费事务与触发事务的解耦;

这本质上是一种最终一致性BASE理论解决分布式事务的一种思路;

这本质上是一种借助DB实现的乐观锁机制。

进一步,你会发现再大到系统架构和顶层设计的案例:

实际上除了软件领域的原理,还有商业设计的原理,比如案例:


来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?


此外,我们的工作流程、管理手段,同样也蕴含着深层的原理,非常有意思,大家可以抽空仔细推敲一下,比如:

  1. 为什么团队机制要透明?沟通要透明?

  2. 为什么要有owner意识,都是在工作,owner意识会有什么不同呢?

  3. 为什么管理者不能管得太细,也不能放羊?到底哪些该管,哪些不该管?

所以,掌握了知识背后的原理,带来的好处是:

好,那么我们程序员的工作中,究竟有哪些与原理性知识是需要我们掌握的呢?按我们团队的实战经验来看:

如何在工作中学习和运用这些原理,我觉得有一个最佳实践:


来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?


结构化思维:构建自己的知识树

知识树要解决的问题,我们看一些场景:

  1. 为什么我知道很多东西,但是当场景来的时候老是会记不起来使用;

  2. 完成一个方案你只能想到一些点状的手段,还有其他方案被漏掉了;

  3. 讲一件事情的时候逻辑非常混乱,前后没有逻辑性关联。

但是很有可能你的知识都是知道的,为什么会出现这种悲剧?

这个就跟大脑中的知识结构有关,这是知识学习中“索引”没有建立,也就是说,你的知识只有点,没有线!大家想一想,把东西乱七八糟地丢在房间中,到用的时候没有查找的线索和路径,怎么找得到呢?

来看一下我们工作场景的结构化的典型案例,大家体会一下:

项目中测试MM提了一个bug,我总结出来的比较标准的问题定位步骤:

  1. 确认刚才是否有过代码变更和部署,因为有比较高的概率是刚才变更的代码又搞坏了……

  2. 追踪链路日志看链路是否有异常;

  3. 通过RPC的控制台调用看接口输入输出是否符合预期;

  4. 追踪关键方法的入参和出参,看是否有问题;

  5. 定位到方法细节后,推理逻辑是否有问题;

  6. 如果无法通过推理,那就最后一招,回放异常流量debug,这样肯定能够找到原因。

某个链路耗时比较长,需要进行性能优化,我的分析步骤是:

  1. 通过实际流量制造一个耗时较高的trace;

  2. 进行trace分析,看清楚耗时最多的原因,然后按优先级进行排序;

  3. 针对对原因找解决方案,可能的方案有:

4.改掉以后,回放同样的case,看性能消耗是否满足预期,不满足预期继续优化;

如何熟悉一个新系统,我的步骤是:

  1. 要一个测试账号,把相关功能走一遍,这样能非常快地了解一个系统的功能;

  2. 看关键的核心表结构,这样可以快速了解系统的领域模型;

  3. 根据功能步骤找到系统对外的接口列表,了解系统的L0业务流程;

  4. 下载系统工程,熟悉整个工程结构和模块职责;

  5. 以一个最重要的流程为入手点,阅读代码,看清楚核心的执行逻辑,可以变看边画时序图;

  6. 制造一个debug场景,以debug方式走一遍流程,这样可以实际加深一下对系统的理解;

  7. 做一个小需求,掌握相关的流程和权限;


来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?


下单这里来了一个新的需求,出一个技术方案的步骤:

  1. 看清楚之前的需求,把这个需求所在的场景和链路大致阅读一遍,搞懂;

  2. 找到需求的变化点;

  3. 分析变更的方案,涉及的内容可能会有:

数据结构会不会变,如何变;

交互协议会不会变,如何变,交互协议分为:端和组件要不要变;和下游接口要不要变;

执行逻辑会不会变,如何变,执行逻辑变更的细化考虑点:是否变更域服务;是否变更流程编排;是否变更主干逻辑;是否变更扩展点是否变更扩展点的内部逻辑,变更内部逻辑的时候,又可以进一步拆解:

a.重构原有的方法,覆盖之前的逻辑,那就需要进行回归;
b.通过逻辑路由到新的方法,这里需要增加路由逻辑;
4. 稳定性方案;
5. 发布方案;

可以看到,面对任何一个场景,不管多大多小,我们所需要掌握的知识或者技能都可以构建成一个树结构,同类之间是顺序关系,上下之间是父子关系(或者粗细颗粒度)。

当这个树在大脑中构建起来以后,你会发现你做什么事情都是有一个明确的分析和执行逻辑,不太可能产生遗漏和混乱!

那么如何训练出自己的知识树呢?我给一些比较有效的实践方案:

  1. 习惯性总结,做完任何一个事情,都习惯性地回顾一下,往自己的树上面挂新东西,这个是构建知识树的必备手段,这个总结不需要花很多时间,比如做完事情后花个几分钟回顾一下就可以,但是需要坚持;

  2. 推荐一个很常见的工具:xmind,把自己的树记录下来;

  3. 训练自己的思维习惯和做事方式变得结构化,当你做事情的时候,习惯性用树的方式推进,强迫自己按照这个方式来。

这个给大家分享下我的学习路线吧:

分为六个部分,同时也有相关的视频分享,私信Java即可获取免费领取方式。

框架源码

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

性能调优

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

微服务

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

分布式

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

互联网工程

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

并发编程

来自阿里P7岗Java优秀工程师分享的必备技能,你解锁了吗?

欢迎做Java的工程师朋友们加入我的q群,小朔哥的技术交流:857402185,即可免费获取这个完整版思维导图,还有更多免费的Java架构学习资料,其中覆盖了互联网的方方面面,期间碰到各种产品各种场景下的各种问题,希望可以帮助大家扩展自己的技术广度和知识面。


推荐阅读:
  1. 掌握这11项技能,你就是优秀的前端开发工程师
  2. 架构师的必备技能是什么?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java 程序员 互联网

上一篇:控制文件丢失,重建控制文件

下一篇:消息中间件概述

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》