掌控习惯读书笔记

本书揭示了习惯形成的四步法:提示、渴求、反应和奖励,指出习惯的形成源于大脑对行为的自动化处理。作者强调了改变习惯的关键不在于目标,而在于体系,尤其是身份的转变。习惯与个人身份紧密相连,当我们改变对自身身份的认知,习惯也随之改变。习惯的培养应聚焦于让它显而易见、有吸引力、简便易行和令人愉悦。通过设置执行意图、习惯叠加、消除不良习惯的提示、利用社会影响力和奖励机制,可以更有效地建立新习惯。书中还探讨了自我控制的局限性,提出环境对行为的影响大于个人意愿,建议通过创建支持良好习惯的环境来克服拖延和不良习惯。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一章

成功是日常习惯累积的产物,而不是一生仅有一次的重大转变的结果。

也就是说,你此时此刻是成就辉煌还是一事无成并不重要,重要的是你当前的习惯是否让你走上了通向成功的道路。你应该更关心你在当前前行的轨迹,而不是你已经取得了什么样的结果。

类似地,你在培养习惯的过程中,有相当长时间是感受不到它的影响的,直到某一天,你突破了临界点,跨入新境界。在任何探索的早期和中期,通常都会有一个不如意的低谷区。你期望日新月异,收到立竿见影之效,但是让你感到沮丧的是,在最初的几天、几周甚至几个月里,几乎看不到任何明显的变化。你觉得一切都是在白费功夫。这是任何复利进程的共同特征:最有力的结果总是姗姗来迟。

当你最终突破潜能蓄积期之际,人们会称为一夜之间的成功。外部世界只看到最具戏剧性的薄发一瞬间,而无视之前厚积的漫长过程。但是你要知道,正是你很久以前下的那些功夫----当时你似乎看不到任何进展----才使得你今天的飞跃成为可能。

在这里插入图片描述

那么,究竟是什么决定着我们是否坚持足够长的时间,使我们想要培养的某种习惯安然度过潜能蓄积期,直至突破成为我们固有的习惯呢?又是什么因素导致一些人不由自主地沾染恶习,同时让另一些人享受到好习惯带来的复利效果呢?

体系和目标有什么不同呢?我最初是从"呆伯特漫画"创作者斯科特亚当斯那里了解到了两者的区别。目标是关于你想要达到的结果,而体系是涉及导致这些结果的过程。

如果你想要更好的结果,那么就别再紧盯着目标不放,而要把精力集中到你的体系建设上。

这是什么意思?目标完全无用吗?当然不是。目标的意义在于确定大方向,但是体系会促进你的进步。假如你为目标绞尽脑汁,却对体系设计关注不足的话,就会出现一些问题。

问题1:赢家和输家心怀相同的目标

问题2:实现一个目标只是短暂的改变

你重蹈覆辙的根本原因是,你从未改变导致这种状态一再发生的体系。你所做的一切只是治标不治本。

实现一个目标只会暂时改变你的生活。这正是改进这个概念违反直觉之处。我们本以为需要改变我们的结果,其实结果并不是导致问题产生的根源。真正需要改变的是导致这些结果的体系。假如你只是围绕着结果动脑筋想办法,你只能取得一时的改进。为了取得一劳永逸的成效,你需要解决体系层面上的问题。修正输入端,输出端就会自行修正。

问题3:目标束缚了你的幸福感

此外,目标会导致“非此即彼”的的冲突,你要么实现了预定的目标,最终取得了成功,要么你失败了并令人大失所望。你在精神上把自己禁锢在一种狭隘的幸福观之中,这属于自我误导。你实际走出的人生道路,不太可能与你出发时心目中的旅程完全匹配。成功之路不只有一条,你毫无必要认定只有某个特定场景的出现,才能让你对自己的人生感到满意。

只要你创建的体系在正常运行,你就会在整个过程中感受到快乐。另外,一个体系取得成功的方式有多种,而不仅仅是你最初想象的那一种。

问题4:目标与长远改进的大方向不一致

当你所有的努力都集中在一个特定的目标上时,一旦目标实现,推动你努力前行的动力也失去了依托。这就是为什么许多人在完成预定目标只会又恢复了旧习惯。

设定目标的目的是赢得比赛。构建体系的目的是持续参与这项赛事。意在长远的思维方式不会拘泥于具体的目标。这不是为了取得任何单一成就,而是一个精益求精、日趋进步的循环过程。归根结底,你对这个过程锲而不舍的坚持决定着你的进步。

微习惯体系

不求拔高你的目标,但求落实你的体系。

第2章你的习惯如何塑造你的身份(反之亦然)

改变习惯之举颇具挑战性,原因有两个:

(1)我们没有找对试图改变的东西;
(2)我们试图以错误的方式改变我们的习惯

行为改变的三个层次

行为转变有三层----结果的变化、流程的变化或者是身份的变化。

我们范的第一个错误,是选错了我们试图改变的事情。为了更好地理解我的意思,你可以考虑把变化发生的进程分为三层,就像洋葱一样。

第一层是改变你的结果。这个层次事关改变你的结果:减肥、出版书籍、赢得冠军。你设定的大多数目标都与这个层次的变化相关。

第二层是改变你的过程。这一层次涉及改变你的习惯和体系:定时去健身房锻炼、定期整理你的办公桌以提高工作效率、以及按时练习冥想。你养成的大多数习惯都与这一层次有关。

第三层也是最深入的层次是改变你的身份。这个层次是有关改变你的信仰:你的世界观、你的自我形象,以及你对自己和他人所做的判断。你持有的大多数信念、假设和偏见都与这个层次相关。

结果意味着你得到了什么,过程意味着你做什么,身份则关系到你的信仰。当谈到涉及培养持久习惯,以及创设改进1%的体系时,问题不在于这层比那层“更好”或者“更差”。所有层级的变化都各有用处。关键问题是改变的方向。

许多人开始改变他们的习惯时,把注意力集中在他们想要达到的目标上。这会导致我们养成基于最终结果的习惯。正确的做法是培养基于身份的习惯。借助于这种方式,我们的着眼点是我们希望成为什么样的人。

在这里插入图片描述

大多数人在着手自我提高时甚至不考虑改变身份。他们的想法很简单:“我想变瘦(结果),如果我坚持这种饮食习惯,我就会变瘦(过程)。”他们设定目标并决定他们应该采取什么行动来实现这些目标,根本不考虑激励他们行动的信念。他们从不改变看待自己的方式,也不知道他们的旧身份会破坏新的变革计划。

真正的行为上的改变是身份的改变。你可能会出于某种动机而培养一种习惯,但让你长期保持这种习惯的唯一原因是它已经与你的身份融为一体。任何人都可以说服自己去一两次健身房,或者吃一两次健康食品 ,但是如果你不改变行为背后的信念,那就很难长期坚持下去。改善只是暂时的,除非它们成为你的一部分。

你的行为通常反映了你的身份。你的所作所为表明你相信----无论是有意识地还是下意识地----自己是哪种类型的人。研究表明,一旦一个人完全认同自己身份的某个特定方面,他们就更有可能如此这般地行事。毕竟,当你的行为和身份完全一致时,你所追求的不再是行为上的改变。你的一举一动无非体现着你自以为从属的那类人该有的举动。

年复一年,你对自己讲述同一个故事,你狠容易滑入这种心理定式,并且信以为真。随着时间的推理,你开始抵制某些行为,因为“那不是我”该做的。

这就导向了一个重要的议题:如果你的信仰和世界观在你的行为中起着如此重要的作用,那么它们起初又是从何而来的呢?确切地说,你的身份是怎么样形成的?你怎么能做到既重视自己身份中服务于你的新特性,同时又能逐渐抹去妨碍你的那部分内容?

第3章培养良好习惯的四步法

桑代克根据自己的研究结果,描述了动物的学习过程:“导致结果满意的行为往往会得以重复,而产生不愉快结果的行为得以重复的概率较低”。

还需要回复这些问题,比如:什么是习惯?为什么大脑会费心去建造它们呢?

你的大脑为何会培养习惯

习惯是重复了足够多的次数后而变得自动化的行为。习惯形成的过程始于反复尝试。每当你在生活中遇到新的情况,你的大脑就要做出决定。对此我该如何回应?你初次遭遇难题时,不知道该从如何入手。就像桑代克用来做实验的猫一样,你会尝试不同的做法,看看哪种有效果。

习惯是从经验中学到的心理捷径。从某种意义上来说,习惯只是你过去为解决问题而采取的步骤的记忆。只要条件合适,你就可以调用这种记忆并自动应用相同的解决方案。大脑记忆过去的主要原因是为了预测如何更好地应对未来。

反过来看,当你固有的习惯适时发挥作用,生活的基本状况都得到了妥善解决,你的头脑可以自由地专注于新的挑战并掌握接下来的问题的解决方案。在当前养成习惯会让你在未来做更多你想做的事情。

习惯发挥作用的原理

养成习惯的过程可以分为四个简单的步骤:提示、渴求、反应和奖励。

将它分解

<think>好的,我现在要解决用户在IAR编译器中遇到的错误:“incomplete type is not allowed”。首先,我需要理解这个错误的含义和常见原因。根据我的知识库,这个错误常发生在代码中使用了未完全定义的类型,比如结构体或联合体声明了但未定义,或者前向声明了某个类型但没有提供完整的定义。 首先,我应该检查用户代码中是否有结构体或联合体的声明但没有定义的情况。比如,如果有一个结构体声明为`struct MyStruct;`,但没有后续的完整定义,那么在需要该结构体大小或成员的地方,编译器就会报这个错误。这时候,需要用户补全结构体的定义,包括成员变量。 其次,检查是否在头文件中只声明了类型而没有包含定义。例如,如果在头文件中使用前向声明,但在使用该类型的源文件中没有包含实际的定义头文件,这也会导致错误。此时,需要确保在使用类型的地方包含了正确的头文件,或者将前向声明替换为完整的定义。 另外,还要考虑typedef的问题。如果用户使用了typedef创建别名,但原始类型未完全定义,同样会引发错误。例如,`typedef struct MyStruct MyType;`之后,如果尝试使用MyType但MyStruct尚未定义,就会出错。需要确保在使用typedef之前,原始类型已经被完整定义。 此外,数组声明中的类型不完整也是一个常见原因。比如声明数组时,如果元素类型未完全定义,编译器无法确定数组的大小,导致错误。需要检查数组声明中的类型是否已经完整定义。 可能还有其他情况,比如在C和C++混合编程时,如果没有正确使用extern "C",或者在头文件中遗漏了必要的包含,也可能导致类型不完整。需要用户检查这些方面。 接下来,我需要将这些可能的原因整理成清晰的解决步骤,并给出具体的代码示例,帮助用户理解如何修改。同时,根据用户提供的引用内容,虽然引用[1]和引用[2]是关于其他错误的,但用户可能希望看到类似的结构,即分点说明解决方案,并引用相关资源。 最后,生成相关问题,帮助用户进一步了解可能相关的编译错误,比如类型未定义、前向声明问题等。这样用户可以有更全面的认识,预防其他类似错误的发生。</think>### IAR编译器错误'incomplete type is not allowed'解决方案 该错误表示代码中使用了**未完全定义的类型**,编译器无法确定其内存布局或成员信息。以下是具体原因及解决方法: #### 1. 结构体/联合体未定义完整 若声明了结构体但未定义成员,在实例化时会报错: ```c struct MyStruct; // 前向声明不完整 struct MyStruct var; // 错误:使用未完成类型 ``` **解决方案**:补全类型定义 ```c struct MyStruct { int id; char name[20]; }; ``` #### 2. 头文件包含缺失 当跨文件使用类型时,需确保定义可见: ```c // file.h struct Data; // 前向声明 // file.c struct Data { // 实际定义 int value; }; ``` **解决方案**:在使用该类型的文件中包含定义头文件 ```c #include "file.c" // 包含实际定义 ``` #### 3. typedef别名问题 使用typedef时原始类型必须完整: ```c typedef struct Node NodeT; // 前向声明 NodeT* ptr; // 允许指针声明 NodeT instance; // 错误:不完整类型 ``` **解决方案**:先完成类型定义再typedef ```c struct Node { int data; struct Node* next; }; typedef struct Node NodeT; ``` #### 4. 数组声明不完整 数组元素类型必须完全定义: ```c struct Element; struct Element arr[10]; // 错误:元素类型未定义 ``` **解决方案**: ```c struct Element { int type; float value; }; struct Element arr[10]; // 合法 ``` #### 调试建议 1. 在IAR工程中搜索错误行号定位问题代码 2. 使用Go to Definition功能追踪类型定义 3. 检查所有头文件包含链 4. 确认没有循环依赖的头文件 编译器需要知道类型的完整信息才能: - 计算sizeof大小 - 分配内存空间 - 访问成员变量 - 进行类型对齐 [^1]: 类似类型转换错误可参考浮点转整型的类型适配问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值