/**
* 程序员的认知心得
*
* 1. 哲学思考帮助我们跳出思维定势
* 2. 认知模型帮助我们更好地理解软件
* 3. 生活经验是最好的设计灵感来源
*/
function mindset() {
return {
philosophy: "打破局限,看清本质",
logic: "建立清晰的概念和推理",
models: "使用多元化思维模型",
business: "理解软件背后的商业逻辑",
teamwork: "把团队也看做一个系统"
}
}
在 IT 行业谋生并不轻松,无数混乱的事让人应接不暇。认知能力的提升可以帮助我们看清事物的本质,解决困难的问题。
从苏格拉底、柏拉图到黑格尔、尼采,哲学家为我们建立了浩瀚的思想宇宙,通过哲学我们可以建立强大的认知体系。
哲学思辨无法代替客观世界,哲学离开生活就变得空洞。软件工程产出的成果需要服务大众生活,软件的需求也来源于生活。
思维定势无处不在,即使划时代的思想家也无法幸免。引入旁观者视角可以打破思维定势,消除认知局限。
认知提升需要特别的条件:认知提升的动力、合适的环境以及收集足够的信息。困难提供了认知的进化压力。
我曾在认知中获得甜头,想通一个问题背后的逻辑,可以抵消大量的努力。在软件工程中,提升认知能力将帮助我们做出更好的决策。
建立接收、判断信息的基本原则
将逻辑学的内容和软件工程结合起来
模型思维、软件业务理解、架构相关的心得
将团队和计算分布式系统连接起来的认知心得
"花半秒钟就看透事物本质的人,和花一辈子都看不清事物本质的人,注定是截然不同的命运"
《教父》电影
经典台词
本书从哲学、逻辑学、模型思维、商业理解到团队管理,全方位提升程序员的认知能力
探讨软件行业中的对错观、柏拉图的洞穴寓言、货物崇拜、奥卡姆剃刀等哲学概念如何帮助我们打破思维局限。
探讨理解概念、形式语言、概念的内涵和外延、同一律等逻辑学原理在软件开发中的应用。
探讨什么是模型思维、计算机科学中的模型、应用开发中的模型以及如何评估模型的有效性。
探讨快速了解一个全新的应用软件、需求变化的原因、理解商业和业务以及产品设计经济性原则。
探讨认识领域驱动设计、建模方法元模型、多对多关系主客体分析以及领域建模的原则。
探讨复杂性管理、系统水平分层、系统垂直划分、架构演进路线图以及架构的关键因素。
探讨团队管理和分布式系统的相似之处,主从调度模型、市场模型以及对管理者和被管理者的启示。
哲学并非缥缈虚无,建立在哲学之上的认知无比坚韧。通过哲学的视角,我们可以重新审视软件开发中的许多问题,破除思维定势,获得更高层次的认知。
模型是我们理解复杂系统的工具。在软件开发中,通过模型可以抽象现实世界的复杂性,帮助我们设计出优雅、高效的系统。
// 模型是抽象的表示
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: "模型应当简单且有效"
};
}
}
模型是对现实世界的简化表示,它帮助我们理解复杂系统。好的模型能够捕捉到系统的关键特性,同时忽略不相关的细节。在软件开发中,我们使用各种模型来描述系统的不同方面。
计算机科学中存在各种模型,如图灵机、λ演算、数据模型、进程模型等。这些模型帮助我们理解计算的本质、设计算法和数据结构,以及构建复杂的软件系统。
在应用开发中,我们使用领域模型、数据模型、视图模型等来组织代码和表示业务逻辑。这些模型帮助我们将复杂的业务需求转化为可实现的软件系统。
一个好的模型应当是简单的、可理解的、与现实世界有良好匹配的。评估模型的有效性需要考虑它的准确性、实用性、简洁性和可扩展性等因素。