元知识。
1. 前言
数月前阅读《代码精进之路—从码农到工匠》之时,同步搜索了下作者的COLA开源项目,于是知道了这本书的存在。
一直以来,对于那些在某方面获得突出成就,有着独到,深刻且逻辑自洽观点的人,我都是非常好奇他们对于世界的看法是什么样的,对于问题又有什么独到的视角和方法论是我可以学习和借鉴的。
对我这样的小虾米来说,当面咨询和请教的机会肯定是没啥希望,不过既然作者主动选择总结并分享这方面的信息,那我又岂有交臂而失之的道理。
2. 全书印象
这本书的内容相当直接,只从书名就可以看出所有:
- 底层思维:与表层思维对应,也就说这些思维模式都是需要经过一番刻意练习才能掌握的;而且这些思维模式属于人类用来认清客观世界的通识性知识,对它们的学习属于一本万利的事情。
- 程序员:思维模式有很多种,而本书所要介绍的是与软件研发相关的,能够辅助从业者更加从容应对所面临的问题,甚至能够未卜先知地作出提前准备的思维模式。
全书分为三大块:
- 基础性思维能力的介绍。这一部分所介绍的思维模式不受行业的局限,属于解决日常问题的基础思维能力。包括抽象思维、逻辑思维、结构化思维、批判性思维、维度思维、分治思维、简单思维、成长型思维。这些思维能力属于是武术里的内功心法,收益会随着熟练度的提升而持续增长,并为接下来的外功 —— 专业思维模式提供良好的支撑。
- 专业思维能力的介绍。这一部分介绍与软件行业所紧密相关的思维能力。包括解耦思维、契约思维、模型思维、工具化思维、量化思维、数据思维、产品思维。这些思维能i就属于软件行业所特有的外功了,作为吃这碗饭的行内人,我们有必要勤加练习。
- 综合应用。所谓"只说不练假把式",这一部分作者以自身的职业经历,以及主导开源的COLA架构的演进作为切入点,介绍了在处理现实中的复杂问题时,如何灵活地交替使用上述思维能力来达到目的。
一直以来,我对于元知识的学习这件事情本身抱有浓厚的兴趣,只是限于自身的惰性,以及急于求成的心态,所以对于相关知识的了解持续处于一种游离态 —— 四散在各篇笔记中,始终没有形成系统化,彼此关联促进的,能够自我迭代框架体系。
很明显,作者做到了。正如我在《走出软件作坊》读书总结中袒露的 —— "即使当事人将自己如何做到今天这一步的所有步骤毫无保留地告诉你,并且让你有机会重新来过,你也做到。对于这种人,我只有满心的敬佩,而升不起半分嫉妒"。
另外很明显看得出作者是一个博览群书,并且涉猎广泛的阅读爱好者,本书中对于其他经典著作的引用可谓信手拈来。
而且作者对于所阅读过书籍的思考深度也是值得学习的,作者在本书中反复引用的《刻意练习》,《架构整洁之道》等,我甚至比作者阅读地更早,但很明显并没有作者理解得深刻,基本属于看完就完了的程度。
最后,书中介绍的这些思维能力,想要习得并且融会贯通地使用并不容易,当事人必须付出极大的苦力,受不少罪才能得到顿悟。
将这些底层思维能力内化为"不知道自己知道",并在日常工作和生活中持续性地刻意练习,我们就能不断从中受益,形成正向反馈,最终实现为职业生涯和人生的保驾护航。
3. 摘抄
惯例在这一小节部分我们将摘录一些对于我个人而言具有启发性的句式,并附加简短的个人思考。
3.1 你的成功可以复制吗?
没想到在本书的开篇的前言部分,就看到了这一让我陷入自我怀疑的反问 —— 我自认自己属于成长性思维模式,坚定认为自己能够从坑里爬出来,靠得绝对不是什么聪明这类天赋,也坚定认为身边这些认为我能力强的同事和朋友只要能够认识并践行和我一样的思维模式,他们可以做得比我更好。
但是,仅仅这样就够了吗?就拿书中作者介绍的这些底层思维能力,对于其中部分我已经熟练掌握的,仔细回想起来,习得它们的过程充满了太多的偶然性 —— 例如对于真正开始理解"抽象"这两个子是在反复观看SICP的中译版视频后,突然之间的福至心灵。
我本以为对自身的观察足够多了,但似乎还远远不够,还有大量的知识需要将其显性化出来 —— 一直做对事情的能力才是我的追求。
3.2 通用语言 / 项目核心领域词汇表
和《程序员修炼之道(第2版)》的"使用项目术语表"教导如出一辙。
团队成员之间,跨部门之间的沟通过程中,一词多义或一义多词的现象屡见不鲜,每次都是需要反复拉锯才能确定对方到底想要表达的什么,而且这种现象随着人员更迭,距离上次沟通间隔过程而出现反反复复的情况。 每个人都痛苦不堪,但也没有人去推动这件事情。
3.3 显性化
这个词肯定很早就知道,但将这个词频繁应用到工作和生活中来解释问题,那确实是自看了作者书籍之后开始的。
知识的显性化,这一点有助于降低软件的维护成本,让团队成员之间更好地沟通;相较于那些开发语言的奇技淫巧,我现在越来越看中的是相关人员所编写代码的表达能力 —— 是否将相关的业务逻辑显性化了。
3.4 抽象的限度
所谓过犹不及,任何事情过度了就不大好了。
对于抽象的限度:
- 抽象以概念(词语)来反映现实的过程,每一个概念有一定的外延和内涵。概念的外延就是适合这个概念的一切对象的范围,而概念的内容就是这个概念所反映的对象的本质属性的总和。
- 一个概念的内涵愈广,则其外延愈窄;反之,内涵愈狭,则其外延愈广。
- 上面这两段理论化的表述让人看着眼晕,以下是稍微具体一些的表达:抽象层次越高,内涵越小;外延越大,泛化能力越强,同时业务语义表达能力越弱。
- 越抽象、越通用、可扩展性越强,其语义表达能力就越弱;越具体、越不好延展,其语义表达能力却越强。
3.5 抽象层次一致性原则(SLAP)
这个其实是很具体的编码指导了。这一条可以关联上Bob大叔在《Clean Code》中的表述 —— 像报纸一样排版你的代码:调用层级依次向下,先是概要,然后才是细节,每一层的调用抽象层次保持一致。
3.6 分析矩阵
这个方法论可以说是在阅读本书中最大的,而且是最显著的收获。
过往在解决问题的过程中,偶尔我也会使用到矩阵方法,但都只是属于感觉上需要拿个表格来拆解组合下各种问题场景,以梳理自己的思路。
而在本书中,作者直接以方法论的形式系统介绍了分析矩阵的由来,特点,以及自身如何使用这个方法论来解决实际工作中的问题。
这是一个需要刻意练习以求尽快熟练掌握的技能。
4. 相关
- 《代码精进之路—从码农到工匠》
- 《程序员修炼之道(第2版)》
- 《架构整洁之道》
- 《暗时间》
- 《10x程序员工作法》
- 《给年轻人的跨学科工具箱》 --- 这个网上褒贬不一,看官自行斟酌。贴在这里是因为我个人听过部分章节,感觉可以进行对比验证,加深理解
- 我们并不擅长处理『简单』 - 在现实生活中,简单的做法一直难以实现,因为它有违某些努力寻求复杂化,以证明其工作合理性的人所秉持的精神。
网友评论