程序员的底层思维
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 锻炼抽象思维能力

抽象思维能力是我们人类特有的、与生俱来的能力,除了上面说的在编码过程中可以锻炼抽象能力,我们还可以通过一些其他的练习不断地提升抽象能力。

1.多阅读

为什么阅读书籍比看电视更好呢?因为图像比文字更加具象,阅读的过程可以锻炼我们的抽象能力、想象能力,而画面会将我们的大脑铺满,较少需要用到抽象和想象。这也是我们不提倡让小孩子过多地暴露在电视或手机屏幕前的原因,因为这样不利于锻炼他们的抽象思维。

2.勤总结

我小时候不理解语文老师为什么总是要求我们总结段落大意、中心思想,现在回想起来,这种思维训练在基础教育中非常必要,其实质就是帮助学生提升抽象思维能力。

记录也是很好的总结习惯。就拿读书笔记来说,最好不要原文摘录书中的内容,而是要用自己的话总结和归纳书中的内容,这样不仅可以让我们加深理解,还可以提升抽象思维能力。

我从4年前开始系统地记录笔记,做总结沉淀,构建自己的知识体系。这种思维训练的好处显而易见,可以说《代码精进之路》和本书的写作都得益于我总结沉淀的习惯。

3.命名训练

每一次的变量命名、方法命名、类命名都是难得的训练抽象思维的机会。前面提到,语言和抽象是一体的,命名的好坏直接反映了我们对问题域的思考是否清晰、抽象是否合理。

然而现实情况是,很多工程师常常忽略了命名的重要性,只要能实现业务功能,名字从来就不是重点。实际上,这既是对系统的不负责任,也是对自己的不负责任,更是对后期维护系统的人不负责任。写程序和写文章有极强的相似性,本质上都是用语言阐述一件事情。试想,如果文章中用的都是一些词不达意的句子,这样的文章谁能看得懂,谁又愿意去看呢?

同样,我一直强调代码要显性化地表达业务语义,命名在这个过程中扮演了极其重要的角色。为了代码的可读性,为了系统的长期可维护性,为了我们自身抽象思维的训练,我们都不应该放过任何一个带有歧义、表达模糊、语义不清的命名。

4.领域建模训练

对于技术领域的读者来说,还有一个非常好的提升抽象能力的手段——领域建模。当我们对问题域进行分析、整理和抽象的时候,当我们对领域进行划分和建模的时候,实际上都是在锻炼我们的抽象能力。

我们可以对自己工作中的问题域进行建模,当然也可以通过研究一些优秀源码背后的模型设计来学习如何抽象、如何建模。比如,我们知道Spring的核心功能是Bean容器,那么在看Spring源码的时候,可以着重去看它是如何进行Bean管理的、它使用的核心抽象是什么。不难发现,Spring使用BeanDefinition、BeanFactory、BeanDefinitionRegistry、BeanDefinitionReader等核心抽象实现了Bean的定义、获取和创建。抓住了这些核心抽象,我们就抓住了Spring设计主脉。

除此之外,我们还可以进一步深入思考:它为什么要这么抽象?这样抽象的好处是什么?它是如何支持XML和Annotation(注解)这两种关于Bean的定义的?

这样的思考和对抽象思维的锻炼,对提升抽象能力和建模能力非常重要。关于这一点,我深有感触,初入职场,当我尝试对问题域进行抽象和建模的时候,会觉得无从下手,建出来的模型也感觉很别扭。然而,经过长期、刻意地学习和锻炼之后,我可以很明显地感觉到自己的建模能力和抽象能力都有很大的提升,不但分析问题的速度更快了,而且建出来的模型也更加优雅了。