Skip to content

程序员的底层思维:解密 16 种底层思维能力

《程序员底层思维》阅读笔记,介绍程序员应该具备的 16 种底层思维能力。

核心观点

只有意识到思维能力的存在,我们才有可能去学习、练习和提升。底层思维中蕴藏着解决问题的强大力量,当它们与软件设计相遇时,会擦出耀眼的"火花"。

程序员的底层思维


基础思维能力

1. 抽象思维

抽象思维是程序员最重要的思维能力之一。抽象的过程就是通过归纳概括、分析综合来寻找共性、提炼相关概念的过程。

层次性

  • 抽象层次越高,内涵越小,外延越大,扩展性越好
  • 抽象层次越低,内涵越大,外延越小,扩展性越差,但语义表达能力越强

2. 逻辑思维

逻辑思维包含 3 个要素:

  • 概念:思维的基本单位
  • 判断:通过概念对事物是否具有某种属性进行肯定或否定
  • 推理:由一个或几个判断推出另一判断

5Why 思考法:对一个问题连续多次追问为什么,直到找出根本原因。

问:"为什么机器停了?" 答:"因为机器超载,保险丝烧断了。" 问:"为什么机器会超载?" 答:"因为轴承的润滑不足。" ...(连续 5 个为什么)

3. 结构化思维

结构化思维是以逻辑为基础,从无序到有序搭建结构的思维过程,目的是降低复杂度和认知成本。

核心:大脑更喜欢概念少、有规律的信息。

4. 批判性思维

批判性思维不是批评、否定或抨击别人,而是教你如何提升分辨能力、判断力。

定义:对思维过程的再思考。

古希腊哲学家苏格拉底说,未经审视的人生不值得过。同样,未经批判性思维审视过的结论也是不值得相信的。

5. 维度思维

一个人的思维层级与其思考的维度是正相关:

  • "轴"、"一根筋" = 一维线性思维
  • "全面" = 至少两个维度
  • "体系化" = 至少三个维度

多维度思考是思考的高级阶段,是解决复杂问题的一把利器。

6. 分类思维

当信息量过大时,归类分组能帮助我们理解和处理问题。分类是人类大脑的识别模式,是我们化繁为简的不二法宝。

核心:找到问题域中的"核心抽象",基于这些核心抽象设计领域模型和数据模型。

没有完美的分类,任何分类都与进行分类的观察者的视角和目的有关。

7. 分治思维

分治的价值在于,我们不应该在同一时间把整个问题域都塞进大脑,而应该以某种方式组织问题,以便在一个时刻专注于一个特定的部分。

三个步骤

  1. :递归地将原问题分解成小问题
  2. :解决各个小问题
  3. :将子问题的解逐层合并

软件中的分治思想:管道模式、分层架构、分布式架构等。

8. 简单思维

把一件事情搞复杂是一件简单的事,但要把一件复杂的事变简单,这是一件复杂的事。

核心

  • 简化本质上是一个熵减活动
  • KISS 原则(Keep It Simple, Stupid)
  • 简单不是简陋,是洞察问题本质、化繁为简的能力
  • 往往需要经历"简单→复杂→简单"的演化过程

9. 成长型思维

培养成长型思维的关键:

  1. 学会正确评价自己,客观看待自己的状况和水平
  2. 不要过分相信天分
  3. 不要自我设限

很多所谓的天才,靠的并不是天分,而是努力!


专业思维能力

10. 解耦思维

在软件领域,"耦合"是指两个事物之间联系的紧密程度。解耦就是要减少事物之间联系的紧密程度。

核心原则

  • "高内聚、低耦合"
  • "计算机中的任何问题,都可以通过加一层来解决"
  • 应用架构之道:实现业务逻辑和技术细节的解耦

11. 契约思维

"写代码是自由的,但无往不在规则之下"。

价值:保证代码的一致性,降低认知成本和复杂度。

实践:命名规范、异常处理规范、架构规范等。

编程在很大程度上是一种"制定契约"。

12. 模型思维

软件开发就是从问题空间到解决方案空间的映射转化,而领域模型是连接问题和解决方案的桥梁。

两种模型

  • 领域模型:关注领域知识,是业务领域的核心实体,关键在于能否显性化、清晰地表达业务语义
  • 数据模型:关注数据存储,决策因素主要是扩展性、性能等非功能属性

13. 工具化思维

"懒"的三个境界:

  1. 实在懒:拖延症
  2. 开明懒:迅速做完不喜欢的任务
  3. 智慧懒:使用工具完成任务,一劳永逸

14. 量化思维

No measurement, no improvement.(没有量化,就无法优化。)——"科学管理之父"温斯洛·泰勒

量化三步

  1. 定义指标:找到可以用来量化问题的关键指标
  2. 将指标数字化:明确需要哪些数据来实现指标的计算
  3. 优化指标:围绕指标数据迭代优化,达成业务目标

15. 数据思维

一切业务数据化,一切数据业务化。

  • 业务数据化:用户在 App 上的每一次浏览、点击、搜索等业务行为,都会被沉淀为数据
  • 数据业务化:利用数据为用户进行智能推荐和广告精准投放

16. 产品思维

工程思维和产品思维的区别:

  • 工程师追求技术至上,产品经理追求商业价值和用户体验
  • 工程师关注细节,产品经理关注全局
  • 工程师关注 How(如何做),产品经理关注 Why(为什么)

产品三要素

  1. 用户:产品要服务的对象
  2. 需求:产品要解决的核心问题(表象→目的→人性)
  3. 场景:用户何时何地需要使用产品

总结

优秀的工程师,心中都有一团火——一种对美的追求和渴望。这需要我们经历无数个不眠之夜,承受很大的压力,看很多的书,尝试很多别人没有实践过的东西,要具有一颗"不妥协、不将就、不放弃"的倔强的心。

软件开发行业的匠心,不是重复做简单的事情。你需要不断地学习、不断地思考、不断地积累、不断地尝试、不断地失败、不断地创新,才有可能做得好。


相关资源

Released under the MIT License.