扩展性思维:举一反三,拓展思维
扩展性思维的核心目标是提升我们思维的广度,也就是让我们的知识树变得更加开阔;
我在工作中总结出来的扩展性思维的两个关键的扩展方向:
(1)举一反三:解决同类型的N个问题
举一反三的好处是:“我们能否用同样的知识和手段去解决类似的相关联的几个类似问题”,先举一些案例:
当发现某个系统的jvm参数配置存在一个错误配置,不是仅仅修复这个系统的jvm配置,而是把负责的几个系统都检查一下是否需要统一修改;
系统中存在某个bug导致产生了脏数据,不是直接订正已发现的脏数据,而是根据特征拉取出所有的脏数据,进行一次性处理;
这种思维方式的特征是举一反三,触类旁通,相当于产生批处理的效果,可以大大提升解决问题的效率,避免重复处理。
(2)寻求更多的可能性:拓展解决问题的不同手段
拓展思维常见的手段是:是否能够换更多的理解方式,或者更多的解法,举一些案例:
产生故障的时候,快速止血除了回滚以外,还有哪些方案?如果故障处理经验丰富的人一定知道,除了回滚,其实还有系统降级,运营活动降级等多种方案;
除了写更加健壮的代码,还有哪些手段都可以提升系统的容错性?还有数据监控,单据闭环等多种手段;
当解决问题的手段更多了,思维就开阔了。
抓重点思维:提升效率,方便记忆和传递
当我们发现知识树构建起来以后,怎么样使得记忆和使用的效率变高?而且对外传递的时候更加容易让人理解?抓重点思维要解决的场景是:
如果每件事情都按照知识树方式做,效率可能不会特别高,有更快的办法么?
在对外沟通表达的时候,要表达核心思想,否则别人会很难理解你的表达内容;比如大家再晋升答辩、项目汇报的时候一定会有体会。
解决这两类困惑,核心思路是要抓住重点和脉络。
但是抓住重点和知识结构化之间并不矛盾,而且我认为是有先后次序的,一定要先建立知识结构化,然后才能从里面筛选出重点,否则知识的体系是不完整的。
那么筛选重点的思路有哪些呢?
(1)归纳法
采用归纳法,把细节隐藏掉,呈现知识的脉络,这是一种非常好的思路;尤其是大家在准备晋升ppt时,ppt的每一页都需要归纳一个核心观点,不是全是细节,这个非常重要!并且训练归纳的能力,本身就是对知识理解深刻程度的一种反映;
(2)优先级法
优先级策略往往应用于在多项任务之间找到最最关键或者收益最大的那个任务项,比如完成一个事情可能有若干个步骤,其中哪个步骤是最有效的,大致可以做一个排序。在实施的时候,你可以按照优先级去落实。
但是找到效果最好的那个任务项,在不同场景下是不同的,跟我们的熟练程度和经验有关。就像老中医把脉,越有经验判断越准,这块没有什么捷径,只能不断练习自己找到哪些任务项在什么场景下更加重要。
反思性思维:思考哪里可以做得更好
反思性思维是提升知识质量和深度的一个关键能力。因为只有不断反思才能让下一次在上一次基础上升级,而不是重复循环。
常见的反思案例:
有个问题我查了2个小时,师兄只花了10分钟,这是为什么呢?是他的业务比我熟悉?思路比我清晰?还是知道某个我不知道的工具?一定要找到关键的差异点,然后弥补掉这个差距;
一个项目项目做完了,从方案设计,研发过程,质量保障上面,哪些地方下次可以做得更好?找到不足,下次避免;
对于我们技术团队,哪些内容值得反思,我们团队的经验是:
这个项目商业价值OK吗?是否取得了预期的效果?
项目中我的能力有哪些问题,有哪些做得好的和不好的?
系统设计的优势和不足?
项目质量保障是否可以做得更好一些?
研发过程和项目管理是否有不足?
反思性思维的实践,注意有两个点比较关键:
反思性思维最重要的意识:做事情的过程总有优化的空间,每次都要有进步;如果没有这种心态,那么很难持续地进行反思;
反思是一种习惯和潜意识,可以在不经意之间经常进行,其实不需要很形式化地花很多时间,有时候做完一个事情,习惯性思考一下就可以。
锻炼思考力的有效实践
1.意识觉醒
意识觉醒是提升思考力最重要的一个点,我认为。只要形成了这种意识,就已经成功了一半。
很多同学思维能力没有上去,是没有意识到思考力这个概念,只是机械地做事情,做事情,做事情……每次都在同一个思维层次上面转悠,不可能有本质的提升。
从初级工程师,高级工程师,技术专家,高级专家,资深专家……级别提升靠什么?多接了多少需求?多写了多少代码?这些因素会有,但是关键因素不是这些,而是思考力在不断提升,思维方式在不断进化,进而导致业绩产出必变得更加优秀,产生的是事半功倍的效果。
能够坚持看到这里的同学,一定是能够知道思考力的重要性了。
2.保持信心
现在知道思考力的重要性了,很多同学可能认为自己是一个不够聪明的人。为什么我努力了,还是不行?
给大家一个信心:有位大师说过:在相同的文明程度和种族背景下,每一个正常人的潜意识与意识相加之和,在精神能量意义上基本上是相等的。
我几乎接触到的很努力但是成长速度不快的同学都是因为没有没有掌握正确的方法;
只要掌握了正确的方法并坚持训练,思考力绝对可以提升。
3.空杯心态
思考的过程其实是对人的知识进行不断刷新和重构的过程,这里一定要保证空杯心态,对新的环境,新的理念,新的技术持开放态度,否则就是自己给自己制造阻力。
4.思考的时间从哪里来?
常见的借口是“我连需求都做不完,哪来的时间思考”?
训练思考力其实并不需要太完整的时间,我的口诀是:“1.利用碎片时间;2.抓住工作的过程”。
利用碎片时间,比如上下班路上的时间,吃饭的时候,可以把刚才或者今天的事情想一想,想通了,然后定期汇总一下就可以;
抓住工作的过程,注意,每次每次出技术方案,优化代码,排查问题,处理故障,准备晋升……都是一次训练的机会,在做事情的过程中就可以思考并快速实践。
5.思考力提升有没有什么判断标准?
有的,一般来说思考力有三个度:广度、深度、速度,这你自己就能够感觉出来的:
广度:就是你自己的知识树能够长多大的范围,越广知识越渊博;比如从“如何写一个多线程程序”,提升到“如何做系统性能优化“,再到“如何做系统稳定性备战”,这就是一种广度的提升;
深度:就是你自己的知识树的叶子节点有多深,越深对知识了解越透彻;比如从“分布式事务问题解决思路”,到“利用最终一致性解决分布式事务”,再到“利用DTS解决分布式事务”,这就是一种深度的提升;
速度:就是建立和刷新知识树的速度了。比如原来你想清楚一个建模方案要一天,现在只需要半小时可以想清楚,那就是速度的提升了。
6.好的工具有推荐么?
还是推荐一个工具:Xmind,这个最土的工具最有效。可以下载手机版和PC版本,随时进行记录。
7.一定要相互分享
思考虽然主要是靠自己,但是一定要相互分享。因为思考是智力活动,相互分享完全能够取得1+1>2的效果;
注意分享可以有很多形式,比如我们团队最经常的是:
项目分享:重大项目是一定要分享的,包括架构设计经验,过程经验,质量提升经验,都需要分享出来;
周会分享:团队周会重点过进度?那太浪费啦,了解进度和风险看周报就可以了。周会是学习分享的好时机重点就是一些关键的方案,架构设计理念,好的工具,甚至工作无关的内容;
群内分享:当有个人踩坑以后,在群里面提醒一下大家,这是一个很及时的分享方案;
年度/季度分享:这时候适合找个风景优美喝茶的地方,大家讲一讲自己的成长和思考,非常有帮助;
小圈子:大家形成自己的小圈子,随时都可以相互倾诉一下自己的心得体会,其实这种效果也很好;
8.技术Leader在训练大家思考力中的职责
在技术团队中,技术Leader的思考力意识、能力和实际行动,决定了一个团队的整体思考力水平和成长速度!
一个团队要提高思考和学习的能力,首先得这个团队Leader的思考意识就要提上来,如果团队Leader没有思考意识,也没有把团队同学的成长放在心上,那么整个团队的思考力和成长速度绝对快不起来。
在提升团队整体思考力的实践中,技术Leader的职责:
先要把自己变成一个思考者,自己做表率,以身作则;
意识心态上先变过来,要把团队同学的成长速度最为最重要的职责之一,没有这个意识都是空谈;
多创造思考的条件和氛围,一定要抓住任何机会(代码reivew、方案评审、周会都可以)鼓励大家去思考和分享;
控制团队节奏,给大家学习和思考留出一定的时间;
及时的引导和示范,有的同学可能掌握会偏慢一些,这时候需要有耐心去引导同学找到思考的感觉;
不必过多干预细节,发挥大家的群体智慧,而不必做过多干预,更不能以个人的意志去强迫别人接受。
重要观点小结
好了,到这里可以给重要观点做个小结,时间紧的同学们可以直接读这一段:
1.思考力对程序员的成长至关重要,团队和个人都需要有意或者无意识地提升思考能力。
2.对程序员最重要的思考力有:原理性思维、结构化思维、反思性思维、扩展性思维、抓重点思维。
原理性思维是根基,因为没有搞懂的情况下所有的知识建构都是空谈;
结构化思维帮助我们建立了我们的知识树;
反思性思维不断对知识进行重构,是实现认知升级的必备条件;
扩展性思维可以提升知识的广度和深度;
抓重点思维可以加快知识的使用效率和传递效率;
3. 在提升思考力的实践中:
思考力提升最关键的是意识的转变;
要对思考力的提升充满信心;
多在工作中去锻炼思考力,不需要花太多额外的休息时间;
多相互分享;
团队Leader要团队同学的成长和把思考力提升作为最重要的内容,并拿出实际行动。