版本 0.1, 2022-10-01

《程序员的认知心得》

跳出技术视角,从哲学、逻辑、认知科学的角度重新理解软件工程

开始阅读
code.js
/**
 * 程序员的认知心得
 * 
 * 1. 哲学思考帮助我们跳出思维定势
 * 2. 认知模型帮助我们更好地理解软件
 * 3. 生活经验是最好的设计灵感来源
 */

function mindset() {
  return {
    philosophy: "打破局限,看清本质",
    logic: "建立清晰的概念和推理",
    models: "使用多元化思维模型",
    business: "理解软件背后的商业逻辑",
    teamwork: "把团队也看做一个系统"
  }
}
                        

认知变化的来源

在 IT 行业谋生并不轻松,无数混乱的事让人应接不暇。认知能力的提升可以帮助我们看清事物的本质,解决困难的问题。

以哲学为师

从苏格拉底、柏拉图到黑格尔、尼采,哲学家为我们建立了浩瀚的思想宇宙,通过哲学我们可以建立强大的认知体系。

以生活为师

哲学思辨无法代替客观世界,哲学离开生活就变得空洞。软件工程产出的成果需要服务大众生活,软件的需求也来源于生活。

以旁观者为师

思维定势无处不在,即使划时代的思想家也无法幸免。引入旁观者视角可以打破思维定势,消除认知局限。

在低谷中苦思

认知提升需要特别的条件:认知提升的动力、合适的环境以及收集足够的信息。困难提供了认知的进化压力。

核心要点

这本电子书包含了程序员能用上的认知心得

我曾在认知中获得甜头,想通一个问题背后的逻辑,可以抵消大量的努力。在软件工程中,提升认知能力将帮助我们做出更好的决策。

哲学内容

建立接收、判断信息的基本原则

逻辑学内容

将逻辑学的内容和软件工程结合起来

模型思维

模型思维、软件业务理解、架构相关的心得

团队系统

将团队和计算分布式系统连接起来的认知心得

"花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运"

《教父》电影

经典台词

章节内容

本书从哲学、逻辑学、模型思维、商业理解到团队管理,全方位提升程序员的认知能力

第1章 哲学

软件工程中的哲学

探讨软件行业中的对错观、柏拉图的洞穴寓言、货物崇拜、奥卡姆剃刀等哲学概念如何帮助我们打破思维局限。

软件行业中的对错观
打破局限:柏拉图的洞穴寓言
精英中的宗教:货物崇拜
软件行业中的奥卡姆剃刀
第2章 逻辑学

软件工程中的逻辑学

探讨理解概念、形式语言、概念的内涵和外延、同一律等逻辑学原理在软件开发中的应用。

理解概念
形式语言和非形式语言
概念的内涵和外延
同一律、矛盾律、排中律
第3章 模型

编程中的模型思维

探讨什么是模型思维、计算机科学中的模型、应用开发中的模型以及如何评估模型的有效性。

模型思维
计算机科学中的模型
应用开发中的模型
模型有效性评估
第4章 商业

理解软件背后的生意

探讨快速了解一个全新的应用软件、需求变化的原因、理解商业和业务以及产品设计经济性原则。

快速了解一个全新的应用软件
需求变化的原因:软件价值金字塔
理解商业与业务
产品设计经济性原则
第5章 设计

领域建模,设计软件的骨相

探讨认识领域驱动设计、建模方法元模型、多对多关系主客体分析以及领域建模的原则。

认识领域驱动设计
建模方法元模型
多对多关系主客体分析
领域建模的原则
第6章 架构

分层,软件架构和实现

探讨复杂性管理、系统水平分层、系统垂直划分、架构演进路线图以及架构的关键因素。

复杂性管理
系统水平分层
系统垂直划分
架构演进路线图
第7章 团队

把软件团队也看做系统

探讨团队管理和分布式系统的相似之处,主从调度模型、市场模型以及对管理者和被管理者的启示。

团队管理和分布式系统
主从调度模型
市场模型
对管理者和被管理者的启示
软件哲学

软件工程中的哲学思考

哲学并非缥缈虚无,建立在哲学之上的认知无比坚韧。通过哲学的视角,我们可以重新审视软件开发中的许多问题,破除思维定势,获得更高层次的认知。

柏拉图的洞穴寓言

如果一群人从出生就被囚禁在洞穴中,只能看到墙上的影子,他们会认为这些影子就是真实的。软件开发者也常被自己的经验和思维定势所囚禁,无法看到问题的本质。

第1章第2节 深入阅读 →

货物崇拜现象

二战时,太平洋岛民看到美军建机场后会有飞机降落带来物资,便模仿建造"机场"来招引飞机。软件界的"货物崇拜"是指不理解本质、盲目模仿表面形式的现象。

第1章第3节 深入阅读 →

奥卡姆剃刀原则

如无必要,勿增实体。在软件设计中,简单的解决方案往往优于复杂的解决方案。不要为了未来可能出现的需求过度设计,应该在确实需要时再增加复杂性。

第1章第4节 深入阅读 →
模型思维

编程中的模型思维

模型是我们理解复杂系统的工具。在软件开发中,通过模型可以抽象现实世界的复杂性,帮助我们设计出优雅、高效的系统。

// 模型是抽象的表示
class Model {
  constructor(name, purpose) {
    this.name = name;
    this.purpose = purpose;
    this.accuracy = 0;
    this.usefulness = 0;
  }
  
  // 模型有效性评估
  evaluate(realWorldData) {
    // 评估模型与现实的匹配度
    this.accuracy = calculateAccuracy(
      this, realWorldData
    );
    
    // 评估模型的实用性
    this.usefulness = calculateUsefulness(
      this.purpose
    );
    
    return {
      isValid: this.accuracy > 0.7 
              && this.usefulness > 0.8,
      feedback: "模型应当简单且有效"
    };
  }
}
                        

什么是模型思维?

模型是对现实世界的简化表示,它帮助我们理解复杂系统。好的模型能够捕捉到系统的关键特性,同时忽略不相关的细节。在软件开发中,我们使用各种模型来描述系统的不同方面。

计算机科学中的模型

计算机科学中存在各种模型,如图灵机、λ演算、数据模型、进程模型等。这些模型帮助我们理解计算的本质、设计算法和数据结构,以及构建复杂的软件系统。

应用开发中的模型

在应用开发中,我们使用领域模型、数据模型、视图模型等来组织代码和表示业务逻辑。这些模型帮助我们将复杂的业务需求转化为可实现的软件系统。

模型有效性评估

一个好的模型应当是简单的、可理解的、与现实世界有良好匹配的。评估模型的有效性需要考虑它的准确性、实用性、简洁性和可扩展性等因素。

作者简介

少个分号

2012年从编写第一个网站开始,有幸进入程序员的行列已经接近10年。喜欢思考以及写写东西,将工作、生活中收集到的一些关于软件工程中的认知心得从不同地方整理出来,构成了这本个人风格非常强烈的电子书。

作者的话

"我给这本小小的电子书起名为认知心得,你可能会好奇,为什么我把程序员和认知这两种看似毫无关联的内容联系到一起呢?因为在工作中,我们需要解决大量的问题,而解决问题则需要对事物有充分的认识,这就是认知。"

认知,是一个非常"虚"的概念。但是认知能力的提升可以帮助我们看清事物的本质,解决困难的问题。我希望通过分享这些心得,能够帮助更多的程序员提升认知能力,在软件开发中获得更多的乐趣和成就。

版本 0.1

2022-10-01 发布

提升认知,改变思维

从哲学、逻辑、模型思维的角度重新审视软件开发,让我们一起成长。