程序员的底层思维:解密 16 种底层思维能力
《程序员底层思维》阅读笔记,介绍程序员应该具备的 16 种底层思维能力。
核心观点
只有意识到思维能力的存在,我们才有可能去学习、练习和提升。底层思维中蕴藏着解决问题的强大力量,当它们与软件设计相遇时,会擦出耀眼的"火花"。
基础思维能力
1. 抽象思维
抽象思维是程序员最重要的思维能力之一。抽象的过程就是通过归纳概括、分析综合来寻找共性、提炼相关概念的过程。
层次性:
- 抽象层次越高,内涵越小,外延越大,扩展性越好
- 抽象层次越低,内涵越大,外延越小,扩展性越差,但语义表达能力越强
2. 逻辑思维
逻辑思维包含 3 个要素:
- 概念:思维的基本单位
- 判断:通过概念对事物是否具有某种属性进行肯定或否定
- 推理:由一个或几个判断推出另一判断
5Why 思考法:对一个问题连续多次追问为什么,直到找出根本原因。
问:"为什么机器停了?" 答:"因为机器超载,保险丝烧断了。" 问:"为什么机器会超载?" 答:"因为轴承的润滑不足。" ...(连续 5 个为什么)
3. 结构化思维
结构化思维是以逻辑为基础,从无序到有序搭建结构的思维过程,目的是降低复杂度和认知成本。
核心:大脑更喜欢概念少、有规律的信息。
4. 批判性思维
批判性思维不是批评、否定或抨击别人,而是教你如何提升分辨能力、判断力。
定义:对思维过程的再思考。
古希腊哲学家苏格拉底说,未经审视的人生不值得过。同样,未经批判性思维审视过的结论也是不值得相信的。
5. 维度思维
一个人的思维层级与其思考的维度是正相关:
- "轴"、"一根筋" = 一维线性思维
- "全面" = 至少两个维度
- "体系化" = 至少三个维度
多维度思考是思考的高级阶段,是解决复杂问题的一把利器。
6. 分类思维
当信息量过大时,归类分组能帮助我们理解和处理问题。分类是人类大脑的识别模式,是我们化繁为简的不二法宝。
核心:找到问题域中的"核心抽象",基于这些核心抽象设计领域模型和数据模型。
没有完美的分类,任何分类都与进行分类的观察者的视角和目的有关。
7. 分治思维
分治的价值在于,我们不应该在同一时间把整个问题域都塞进大脑,而应该以某种方式组织问题,以便在一个时刻专注于一个特定的部分。
三个步骤:
- 分:递归地将原问题分解成小问题
- 治:解决各个小问题
- 并:将子问题的解逐层合并
软件中的分治思想:管道模式、分层架构、分布式架构等。
8. 简单思维
把一件事情搞复杂是一件简单的事,但要把一件复杂的事变简单,这是一件复杂的事。
核心:
- 简化本质上是一个熵减活动
- KISS 原则(Keep It Simple, Stupid)
- 简单不是简陋,是洞察问题本质、化繁为简的能力
- 往往需要经历"简单→复杂→简单"的演化过程
9. 成长型思维
培养成长型思维的关键:
- 学会正确评价自己,客观看待自己的状况和水平
- 不要过分相信天分
- 不要自我设限
很多所谓的天才,靠的并不是天分,而是努力!
专业思维能力
10. 解耦思维
在软件领域,"耦合"是指两个事物之间联系的紧密程度。解耦就是要减少事物之间联系的紧密程度。
核心原则:
- "高内聚、低耦合"
- "计算机中的任何问题,都可以通过加一层来解决"
- 应用架构之道:实现业务逻辑和技术细节的解耦
11. 契约思维
"写代码是自由的,但无往不在规则之下"。
价值:保证代码的一致性,降低认知成本和复杂度。
实践:命名规范、异常处理规范、架构规范等。
编程在很大程度上是一种"制定契约"。
12. 模型思维
软件开发就是从问题空间到解决方案空间的映射转化,而领域模型是连接问题和解决方案的桥梁。
两种模型:
- 领域模型:关注领域知识,是业务领域的核心实体,关键在于能否显性化、清晰地表达业务语义
- 数据模型:关注数据存储,决策因素主要是扩展性、性能等非功能属性
13. 工具化思维
"懒"的三个境界:
- 实在懒:拖延症
- 开明懒:迅速做完不喜欢的任务
- 智慧懒:使用工具完成任务,一劳永逸
14. 量化思维
No measurement, no improvement.(没有量化,就无法优化。)——"科学管理之父"温斯洛·泰勒
量化三步:
- 定义指标:找到可以用来量化问题的关键指标
- 将指标数字化:明确需要哪些数据来实现指标的计算
- 优化指标:围绕指标数据迭代优化,达成业务目标
15. 数据思维
一切业务数据化,一切数据业务化。
- 业务数据化:用户在 App 上的每一次浏览、点击、搜索等业务行为,都会被沉淀为数据
- 数据业务化:利用数据为用户进行智能推荐和广告精准投放
16. 产品思维
工程思维和产品思维的区别:
- 工程师追求技术至上,产品经理追求商业价值和用户体验
- 工程师关注细节,产品经理关注全局
- 工程师关注 How(如何做),产品经理关注 Why(为什么)
产品三要素:
- 用户:产品要服务的对象
- 需求:产品要解决的核心问题(表象→目的→人性)
- 场景:用户何时何地需要使用产品
总结
优秀的工程师,心中都有一团火——一种对美的追求和渴望。这需要我们经历无数个不眠之夜,承受很大的压力,看很多的书,尝试很多别人没有实践过的东西,要具有一颗"不妥协、不将就、不放弃"的倔强的心。
软件开发行业的匠心,不是重复做简单的事情。你需要不断地学习、不断地思考、不断地积累、不断地尝试、不断地失败、不断地创新,才有可能做得好。