博客主页 😑
文章

Count:

计 24 篇
105
CPP学习DAY2
无标签
CPP学习DAY2
分类: C++
简介:链接器的工作方式当我们将源代码编译成 obj 文件后,需要通过链接器将这些文件连接起来,使之生成我们所需要的可执行文件。那么在这个过程中,链接器究竟做了哪些工作呢?链接的主要工作是找到每个符号和函数的位置,并将它们链接在一起。之前我们提到过,每一个 cpp 源代码文件实际上就是一个 translation unit,他们之间无法相互沟通,彼此之间还没有建立联系。当我们将程序写在多个 cpp 文件中时,就必须使用链接器了。链接器除了找到每个符号和函数的位置外,还有一个很重要的功能,就是找到程序的入口点(Enter point),也就时我们所说的main函数。当我们 build 一个项目时,实际上是执行了两个步骤:编译和链接。在VS中,假设我们有一份 cpp 代码如下:#include <iostream> void Log (const char* message){ std::cout << message <<std::endl; }当我们执行编译命令时(快捷键:CTRL + F7),我们会发现编译成功完成,没有报错;但当我们执行 build 或者运行(快捷键:F5)时,会产生一个 linking error,其大意时"没有找到程序入口点"。这是因为上面的代码中并没有包含 main 函数,在链接时链接器找不到程序的入口点,就无法知道程序应当从哪一步开始。但是入口点并不一定必须是 main 函数,实际上我们可以自行定义程序的入口点,这可以在链接器中修改,但绝大多数情况我们无需改动,使用 main 作为程序的入口点即可。下面我们用一个例子来小结一下:首先我要声明一个用于打印的函数,将其写在 Log.cpp 文件中:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; }这里我们可以尝试去编译,会发现我们编译成功了!(即使里面没有main函数);然后我们想写一个简单的两数相乘的程序,命名为 Math.cpp :#include <iostream> void Log(const char* message); int Multiply(int a, int b) { Log("Multiply"); return a * b; } int main() { std::cout << Multiply(5, 8) << std::endl; std::cin.get(); }此处的 void Log(const char* message); 是告诉编译器我们有一个名为 Log 的函数存在(尽管我们并没有给出其详细定义),而编译器也会相信缺失有一个Log 函数存在,这样在下面的 Multiply 函数中才能使用 Log 函数。将两份文件编译完成后,我们会得到两个 obj 文件,这两个文件在生成时会被 linker 所连接。如果我们将上述 Log.cpp 文件中的 Log 改成 Logr 或别的什么名字,我们再编译时会发现这两个文件依旧会编译成功。这说明这两个文件之间没有联系的。但如果我们按下生成又会发生什么呢?我们会得到一个 Linking error,会告诉你无法解析的外部符号。这就体现出 Linker 的功能了。linker 会在每个 obj 文件之间建立联系,从而生成最终的程序。重新回到上面的例子。如果我们将写在 Multiply 函数中的 Log("Multiply"); 注释掉,那么链接器将不会报错,因为在编译过程中,编译器识别到我们并没有使用 Log 函数,那么在链接时将不会去寻找和 Log 有关的信息。然而如果我们不是注释掉Log("Multiply"); 而是将 main 函数中的输出语句注释掉,那么链接器依旧会报错。可是我们既然将输出语句注释了,说明我们并没有使用 Multiply 函数,自然也就没有用到 Log 函数,那么怎么会报与 Log 有关的链接错误呢?这是因为我们在此文件中声明的 Multiply 函数中使用到了 Log 函数,而编译器无法确定这个声明的函数是否会在其他地方被使用,所以一同进行了编译,那么链接器自然就会去找包含在 Multiply 函数中的信息。而在之前我们注释掉 Log 语句时,编译器发现并没有使用到 Log 函数,自然就不会将它放入这个 translation unit 的编译结果中。这里需要注意的两个关键词是“使用”与“定义”。那么如何解决后者的问题呢?我们可以在 Multiply 函数的定义前加上 static ,即static int Multiply(int a, int b) { Log("Multiply"); return a * b; }这样我们这个函数的使用范围(作用域)就是当前文件了,也就是说其他的文件无法与之建立连接。这样我们在编译此文件时,如果发现此函数没有在当前 Translation unit 中被调用,即便是声明了此函数,也不会对其进行编译。这样我们的链接也就能顺利通过了。在这里我们再强调一点:函数的返回类型,函数名、参数类型及参数个数都是十分重要的。如果我们将上例中的 Log.cpp 文件中的 void Log 改成 int Log 并添加代码 return 0;,一样会出现链接错误。因为在 Math.cpp 文件中,链接器试图去寻找一个返回类型为 void 的名为 Log 的函数,当然是找不到的,所以会出现错误。参数同理。还有一种链接错误就是当我们有相同符号,也就是有两个名称相同的函数具有相同的返回值和相同的参数,此时我们的linker不知道要链接到哪个函数,此时就会出现链接错误。而当这两个相同函数出现在同一个代码文件中,即使没有发生链接,编译器也能够通过报错来告诉我们此处出现了两个相同函数。也许你会说这么傻的错误怎么会发生,但是请考虑以下情况:我们先写一个头文件 Log.h#pragma one void Log(const char* message) { std::cout << message << std::endl; }再写文件1:#include <iostream> #include "Log.h" int main() { Log("hello"); }再写文件2:#include <iostream> #include "Log.h" void IntLog () { Log("world!"); }我们可以看到,这三个文件中 Log 只被定义了一次,但是如果我们将它进行生成,那么我们仍会得到链接错误!这就要重新说回 #include 的作用了:#include 就是将后面文件中所有的代码复制到此处。所以实际上我们的文件1和文件2是这样:文件1:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; } int main() { Log("hello"); }文件2:#include <iostream> void Log(const char* message) { std::cout << message << std::endl; } void IntLog () { Log("world!"); }这样就很明显了,我们将 Log 函数定义了三次,链接器当然会报错了。那么我们要怎样避免这样的错误呢?方法一:在 Log.h 文件中对 Log 函数的定义前添加 static 即可,也就是说,被复制过去的对于 Log 函数的定义仅在当前文件中生效。这样就可以解决链接方面的问题了。方法二:在 Log.h 文件中对 Log 函数的定义前添加 inline 即可,也就是说,被复制过去的仅仅是 Log 函数的定义的内部的文件仅在当前文件中生效。拿文件1举例:方法1:#include <iostream> stastic Log(const char* message) { std::cout << message << std::endl; } int main() { Log("hello"); }方法2:#include <iostream> int main() { std::cout << "hello" << std::endl; }还有一种方法,就是将其写作一个单独的 Translation unit,然后在头文件中仅保留对此函数的声明(再次区分定义与声明的区别!)。最后再重复一次:链接器(Linking)的作用就是要将编译过程中生成的所有对象文件(.obj)链接起来。它还会导入我们所需要的其他的一些库文件,例如 C运行时库、C++标准库、平台API以及其它的一些东西,这是非常常见的。同时也有不同类型的链接:静态链接和动态链接 。这些内容在后续的学习中将会被涉及。
73
CPP学习DAY1
无标签
CPP学习DAY1
分类: C++
简介:简单的HelloWorld程序其实并不简单"#include"处为预处理语句,在#号后面的都是预处理语句,在编译之前会把里面文件所包含的内容copy到此文件中。include所包含的文件通常被称为“头文件 (header file) ”。例如:#include <iostream>这句的意思就是把iostream文件里的内容拷贝到当前文件中。每一个C++程序都有一个main函数。main函数是程序的入口。c++程序是逐行执行返回类型是int,但main函数比较特殊,当不需要返回值时,其默认会返回0。注意:仅对main函数起作用,此为一个特殊情况。<< 符号叫做重载运算符,实际上是一个函数,相当于print() ,所作的操作就是将“hello world” 字符串传入cout,而cout就是将其打印在控制台里。endl就是前进到另一行。.get() 含义是等待输入。当预处理结束后,编译器就会将我们的代码转换为机器码。VS中的 solution configuration (解决方案配置) 用于定义如何为这个平台编译的一系列规则; solution platfotm(解决方案平台)则是我们当前编译的目标平台,例如我们选择x86,就是生成 windows 32位系统下的可以运行的文件(x86和win32是一回事)。所有的 .cpp 文件都会被编译,而头文件则不会,头文件只有在编译的时候其内容会被放入 .cpp 文件中。所以我们会有一堆 .cpp 文件被编译,而且他们是被一个个单独编译的。每个 cpp 文件会被编译成一个 object 文件,在Windows下的拓展名为 .obj 。这些 obj 会由链接器 (linker) 链接成一个整体,也就是最后的 exe 文件。linker会将所有的obj拿来,并将它们联系起来组成一个 exe 文件。在vs中,仅编译 cpp 文件的快捷键为 ctrl+F7 。P.S. 不要依赖错误列表 (error list),使用输出窗口查看错误!如果我们不想在main文件中显示太多代码,则可以将代码写在多个文件中,但是需要在使用时进行声明。declaration(声明)definition(定义)linker 会将它们相互关联。在生成的时候,linker 会去找 log 的定义,然后跟 main 里调用的联系起来。如果找不到就会产生一个 linking error 的错误。linker的工作就是 resolve symbols,联通各个函数。本例中,linker会把log的定义拿到一个公共的binary里,也就是 hello world.exe编译器(compiler)的工作原理c++ 编译器唯一的功能就是要把代码文本变为从代码到程序这一过程中的中继格式——obj。之后 obj 们会被传入 linker,linker 会将其链接起来,从而生成一份可执行文件,也就是我们最后得到的程序。关于 linker 的部分之后再谈,这部分先讨论编译器的工作。事实上,compiler 在产出这些 obj 时,做了好几件事:首先它需要预处理(pre process)我们的代码,也就是所有的预处理语句会在那时被评估;预处理后,我们会进入标记解释(tokenizing)和解析(parsing)阶段,这个阶段用通俗的语言来讲就是把我们所写的c++代码处理成编译器能懂和处理的语言,这个阶段的结果就是创建某种叫做抽象语法树(abstract syntax tree),也就是将我们的代码以抽象语法树的形式表达出来。说到底,编译器的工作就是把代码转化成常数资料(constant data)和指令(instruction),当编译器创建了这颗抽象语法树后,就可以产生代码了,这个代码是真正的 CPU 会执行的代码。项目里的每个 cpp 文件都会被编译器编译成一个 obj,而这些 cpp 文件也被称为编译单元(translation unit)。我们要有一种意识,那就是 c++ 中没有“文件”这一说法,文件只是一种用来给编译器提供源码的方法。我们需要告诉编译器文件类型和编译器该如何处理它,当我们创建一个.cpp 文件时,编译器就知道它是 c++ 的代码而不是头文件代码;同样的,当我们创建一个 .h 文件,则编译器会将它识别为头文件代码而不是 c++ 代码。这是一种默认的方式,我们完全可以自行定义(可能要对编译器进行设置或者做一些改动),但如果我们不主动告诉编译器怎么处理,编译器就会按照自己的默认规则进行处理。我们完全可以定义一个后缀名为 .chi 的文件,然后告诉编译器这是 c++ 代码,请按照 c++ 代码进行处理。所以,文件不代表任何东西,只是一种用来给编译器提供源码的方法(再次强调)。当我们告诉编译器这个文件是c++代码时,编译器就会将其当作一个 translation unit,然后 translation unit 会得到一个 obj。在 cpp 文件 include 其它 cpp 其实时很常见的做法。实际上就是一个大的 cpp 文件里面有很多小的 cpp 文件。如果我们只编译那一个cpp文件,也就是只有一个 translation util,也就只有一个 obj。这就是为什么我们这里要用两个术语(translation unit 和 cpp文件),如果我们所编译的 cpp 文件相互没有 include ,则会生成多份 obj,然而多份 cpp 文件如果相互 include,那么我们生成的 obj 文件可能会少于 cpp 文件数。但是通常我们的解决方案(这里以vs为例)是 Debug 模式,所以每一份 cpp 文件无论是否包含,还是会生成一份 obj 文件。有了上述的 obj 文件后,我们就可以使用链接器生成我们的程序了。
158
2023年度总结
无标签
2023年度总结
分类: 默认分类
简介:很快又到了年末,今年的年终总结如期而至了,除了要回顾一下今年什么做的好什么做的不好,也要寄希望于明年,做一些明年的打算。希望今年的总结能为即将结束的2023画上一个句号,也为2024开一个好头。学习/知识管理今年的主要目标就是考研了,不能说满满一整年,最起码也有大半年都围着这么一件事情转了。说实话,一年的备考下来,让我明白了,网上那些学长学姐经验什么的,听听就好。真正在备考的还是自己,所以指定一份适合自己的高效方案才是最重要的。但如何“适合”,如何“高效”却很难把持。可我要说的还是,不能一味听学长学姐的建议之类的,重点还是要回归到自己所面临的问题上,要根据自己情况有所侧重。现在考研已经考完了,可能这场战斗下来并没有丰硕的果实,但是这段过程确实让我受益匪浅。在孤军奋战备考的时间里,我学会了怎样和自己相处,怎样耐得住孤独和寂寞,怎样去独自解决一些问题。更重要的是,我感觉考研磨练了我的韧劲,就是一种忍受力,让我的下限降低很多。同时我也发现了很多原本觉得很有意思的事情其实是浪费时间的,比如玩游戏和看视频。我考完研后本来想好好玩玩游戏,但真到打开游戏的时候却又觉得有些索然无味了。当然一定程度上的娱乐和消遣是必要的,但不能让它们充满自己的生活。今年备考过程中,积攒了很多想看的书和想看的电影和动漫,但碍于考研就一直没敢下手,现在也可以慢慢拿出来品一品了。接下来的一年里,我的目标是最少看完15本书(不是网络小说),然后坚持练字,培养整理收集到的知识和做笔记的能力,争取学会能够搭建属于自己的清晰的知识框架,并且能够高效利用起来,在此期间要搭建属于自己的稳定的多端的 knowledge kit。健康/锻炼今年参加了四场龙舟赛,两场在福州本地,一场在厦门,还有一场在云南。也做了两场龙舟赛事的裁判。总的来说在竞赛方面还算不错,也有拿到一点小荣誉,也去了别的城市观光游览体验了一番,同时还从赛场上走到赛场下,扮演了一下裁判的角色。有点可惜的就是今年因为考研的原因,错过了去内蒙古的冰上龙舟的活动,希望以后还能够有机会参加这种活动吧。今年有幸还作为龙舟队队长接受了东南卫视的采访,虽然我平时挺善于交际,但是面对镜头还是好尴尬哈哈哈。今年年中开始因为决定专心备考,中断了坚持了两年多的健身习惯。好像也就是从终端健身后不久,我就开始犯很严重的鼻炎,到现在还没有好。而且11月底12月初的时候还有很严重的过敏,从先开始的几个小点到后面大半个身子都红的发紫而且又痒又痛。做检查抽了7管血也没查出来到底是什么原因,最后得出的结论是因为内分泌失调而引起的过敏性荨麻疹。不过那段时间确实是天天熬夜,不锻炼,压力也大。这可能是我目前得过的最严重的病了,好在现在身上的不适的症状已经没有了,身上也是只有的皮肤颜色有点黯淡,之后多吃些维生素帮助色素沉降就好了。接下来的一年要注意坚持锻炼,恢复身体机能。昨天去了趟健身房发现自己连半年前三分之一的重量都推不起来了,而且也有了小肚子。今年务必加强锻炼提高身体素质,坚持健身。今年的半年目标是回复到原来水平,年度目标是增肌到70kg,坚决避免虚胖。情绪/精神状况今年我自我感觉我的精神状况不是很好,情绪方面也偶尔有失控的状况。但我能确定百分百是由于考研所引起的,所以之后也是可以避免的。今年情绪偶尔失控了两三次,主要是焦虑和内耗,这些我都有明确的意识到,但是没有合适的解决方法,纯靠熬过去。精神状况的话也没有以往那么积极乐观,总体来说趋于平稳,但有时候会有些消极。后面我会尽可能让自己的情绪更加稳定,也尽量保持积极乐观的心理状态。我也得去学习一些如何化解情绪波动、缓解内耗和应对情绪临界的方法,尽可能保证自己的心理健康,同时要加强对自己心理状态的监控和记录,并不断强化自己的情绪耐受力,提高情绪阈值。兴趣/创造我个人是对一些嵌入式开发和计算机程序设计以及一些平面设计感兴趣的,但今年实在是没有时间投入进去,我的个人博客更新频率也很低,后半年基本没有更新。之后我会尝试分配出一些时间去培养这种兴趣爱好,并创造性地做一些小玩意或者进行一些改装。目前的初步设想是在租的房子里尝试一下客制化智能家居,3月开始慢慢进行改造,个人预计8月初能有一个初步的成效,主要侧重与兼容性和成本节约,还有实用性。还有就是博客更新方面,我也会尽可能去提高博客更新频率,内容的话还没有一个明确的定向,到时候再看。个人生活/家庭说实话今年家里给予的支持是至关重要的,不管是经济方面还是精神方面。我的母亲担负起了主要角色,我与她的交流也较为频繁。她始终支持我做出的决定,总会无条件地赞同,支持。在我产生开摆的想法时候会鼓励我,但在知道我劳累的时候也会劝我休息。我跟她提起我可能考不上的额时候她会安慰我说考不考得上无所谓等等……可能正是因为她对我的无限的宽容、支持和理解,才能让我坚持到走上考场完成考试,不然可能我也是半途而废的人中的一员。至于我的父亲,我与他说实话没有太多的共同语言,而且每次打电话都会吵架。我认为他对我的教育理念没有我母亲那么更容易让我接受。可能大部分是由于他的不善言辞和坏脾气。所以我也没有太多想去写他的。我知道他的出发点确实是为了我好,但是吧,有时候还是先别出发会比较好。而我自己的话,今年由于已经毕业,而且想要换一个更好的环境去备考考研,所以选择了在外租房,也算是提前体验了社会生活的一部分。租房生活确实自由了很多,但也对自我的自律性提了更高的要求,好在我的自律性还凑合,所以也是维持了正常的备考生活。今年这一年的自己在外面住的经历,让我的自立自理能力更上一层,有些本来需要舍友合作帮忙的事情也能够自己应付了,所以这对我个人生活而言是一种比较大的进步,也积累了挺多的经验。友情/社交其实说实话,这一年下来我的社交频率急剧下降,尤其是下半年,几乎没咋和人打交道。但是我确实是发现,我自己的独处能力变强了很多,而且也发现有些社交其实并没那么重要。可能我以前的社交方式原先也是有待于优化的。今年我会去试着调整一下,让自己的社交活动变得更高效更有质量一些。今年也有一些很不错的朋友,在我各个阶段能够给我一些激励,包括我的队友,我的发小,还有我的老师。我的发小不用多说,相处了十几年了,彼此之间都心里有些默契的,这种关系是不用刻意花心思去打理也能维持在一个很要好的状态。今年也和一些新队员建立起了一些不错的关系,从他们身上看到了我刚开始划船时候的那种热情。和老队员之间的关系也有所加深,彼此之间也有了更深的了解。我的教练在我考研期间不断激励我,他自己也顺利拿到了博士学位,用亲身经历教导我们要努力读书。我的高中老师和本科老师也在我考研期间给了我很大的帮助以及鼓励,对此我也很感谢他们。感谢所有在我背后默默支持我,给我鼓励的所有人。、接下来我会更认真地经营这些已拥有的情谊,也会去尝试拓宽我的交际圈,尽可能接触一些不同的人,同时也优化自己的社交方式,改正以往的不足之处。工作/职业说实话我觉得我这回大概率是考不上了,但我也不能够再花费一整年脱产备考。所以我应该将中心放在工作上了。并不是说读书不重要,但我现在需要将工作排在第一位,然后再考虑考学的事情了。好在我认识的老师都是很难得的贵人,我的大学本科老师给我提供了一份还不错的岗位,我的高中老师也愿意在上海帮我介绍工作。我并没有主动找他们,反倒是他们先联系上了我。在找到一条出路的同时,我是真的很感谢这两位老师在我一筹莫展的时候为我解决了燃眉之急,并且给我了相对较为长远的发展机会。接下来我要认真工作,努力学习技术知识和岗位相关的知识,尽可能快速成长起来,提升自己的个人价值。财务状况今年开支巨大,没收入不说,还要付一些房租水电,购买学习资料,吃饭也是个大头。年初时候手机还坏了一次,真的是曹乐。今年没有什么积蓄,反倒是增加了不少开支。现在的目标是:前两个月稳定一下现在的收支情况,从现在的净支出切换到能够有所储蓄。年中前根据实际情况看一下是不是需要新添置一台电脑,然后每个月或多或少给家里能打一些钱。今年的目标是给家里升级一下电脑手机之类的电子产品,我自己的话手机是刚换的,主力笔记本也还行,但是考虑到工作出差,可能需要添置一台续航久一点的电脑,这都是后话了,等到后期再看。主要的几个目标先实现。今年最大的挑战考研考研还是考研(真的好难啊)今年最骄傲的成就顺利完成考研确定了一份目前看还不错的工作明年最主要的愿望稳定工作(或者考研上岸)小有积蓄能换一整套衣柜,给家里换换电子产品熟练掌握工作内容健身健身健身!!过去一年有好有坏,有成功也有失败,但不管怎样,2024又是一个新的起点。尽管走下去,不必逗留着。愿我们的2024会更加精彩!
626
圆桌分享会—写日记的力量:探索内心,提升自我
无标签
圆桌分享会—写日记的力量:探索内心,提升自我
简介:今天是第一次听人生管理指南这个公众号组织的圆桌分享会,主题是从写日记中得到了什么改变。碰巧我有时也会在Blog上面记录自己的日常生活,所以对这期节目特别有兴趣,想听听他人从写日记中得到了什么。分享人叫K,他说他一开始写日记的目的是为了给失恋找一个情绪的出口,在宣泄后发现写日记能让自己平静下来,所以慢慢养成了写日记的习惯。而我开始写Blog的原因纯粹是因为好玩。去年的春节过后,我开始准备找一份前端的工作,看技术文章的时候看到了别的技术大牛写的Blog,觉得就像是在互联网上有一片自己的空间,于是便着手搭建起这个博客来了。除此之外,他平时会有一些记忆力缺失的状况,比如说昨天刚做的事情回想起来好像是好几天前做的,又或者是明明前一阵子想好的重要的计划,偏偏在关键时候就忘记了,所以他会通过写日记的这种形式来记录每天发生的事情,从而弥补这种记忆力缺失的现象。他在分享会中提到了几点他从写日记中得到的好处。首先第一点就是情绪管理的能力。他讲了他前一阵子出了一场小的车祸,然后发现自己在处理这种应急事件的时候不是像以前的样会产生一些恐慌,或者是不知所措的负面情绪,而是变得非常的冷静理性,他认为写这种改变是写日记带来的,写日记可以让自己拥有一种情绪管理的能力。所谓的情绪管理,他说,是将情绪置之不理,去通过一种理性的观点去看待问题。这就使他的情绪变得更为冷静,以至于即使心情不好的时候也能够正常跟他人交流,而不会将自己的情绪宣泄到他人身上,甚至使得情绪被激化。第二点是分析总结能力。K有提到说,他在最近和别人交流的时候,会听到别人问他“对不对”、“是不是”这样的话,也就是说,他的朋友们逐渐开始开始咨询他的意见。他分析说这可能是经常写日记所带来的一种分析总结的能力,通过写日记,使他更容易从事情中抓到本质。反复这样的练习之后,就可以将这种能力很自然地运用到日常生活中。在跟朋友交流相处的过程中,他所表述的东西就会更有价值,他的朋友们也就更愿意去征求他的看法和意见了。第三点是逻辑表达能力。K说,在面对即将与对方辩论的情况下,他会先在脑海中想象一个虚构的辩论对手,然后进行说服和逻辑论证的思想练习,以便在现实生活中的真实对话中,能够展现出更强大的逻辑说服力。在这个过程中,他还谈到了一个题外话——“你有没有自己定义的自由?”关于这个话题,本文暂不展开。此外,他认为写日记可以训练逻辑思维能力并使表达更加条理清晰。他说,之前写作时只注重华丽词藻的堆砌,而现在写日记更看重清晰、朴素、踏实的语言。他不再为了华丽而华丽,而是以表达意思为中心。他说,作为一个表达者,应具备清晰传达意图的责任,尽量避免对话中的误解。第四点是解决问题的能力。在这一点中,K提到以前总是在大脑中思考分析,然后获得最终的结果,但是思考和分析的过程并不会被记录下来。这样在下一次遇到类似问题时,就要重新从头开始思考,很难借鉴以前解决问题的经验。而通过日记,可以将思考的过程完整地记录下来,将思考过程拆解之后,能够更清晰地分析和认识问题。然后,可以在此基础上反思自己的思考过程,从而逐步优化自己解决问题的方式、方法和思路。日记的记录让思考过程具体化,也让思路更清晰,这也提高了在日后解决问题的能力。第五点是定力,他也称之为耐力。他说,当环境发生突然变化,会引起强烈的不适感,例如聚会后突然散场,旅游后突然要上班,玩乐一天后回到空虚的家中等。K提到的这种反差给许多人带来共鸣,大家都有这样的感受。然后K表示,通过在日记中记录和复盘这种过程,可以重新调整这种空虚感。将自己带回之前的环境,以相对更平静缓和的态度去评估和回顾当时的感受。因此,这种方式可以在一定程度上消除不适应感。然后他还提到了一个综合的能力——随机应变的能力。他认为这种能力是一种自然涌现出来,而非刻意培养的能力。在我理解来看,K所说的随机应变更可能是在面对事情时,能够灵活组合运用前五种能力解决眼前的问题的一种能力。这时,听众Echo分享了自己的看法。她认为随机应变的能力在于通过记日记不断加深对自我的认知和理解,从而在面对事情时,能快速做出判断和评估。比如对某事作出“我能否解决”“需要投入多大精力”“目前需要多少时间”等客观评价,并与自身认知相符合。她还提出,我们往往会听取他人经验,但面对具体情况时,发现大多数经验并不适用。因此,需要通过前期分析、整合已经发生的事件,从中归纳出自己的处事方式。如果不进行这些思考,在遇到突发事件时就会手忙脚乱。她认为,培养这种能力最重要的是保持对事物的疑问态度,不仅依靠传统经验,更要形成自己的看法。此外K还提到了写日记带来的三种体验,有的角度是我从来没有想到的。首先是一种类似时空对话的体验。用现在的认知体系回顾过去,与当时的自己进行心灵对话。日记记录下了每一个时段的思考过程,在回看时就出现了一种时空交汇的感受。将现在的思维方式与过去的思路进行对比,可以实现思维方式的优化升华。有时候也可能发现,以前的某些想法其实更合理。但在大多数情况下,通过这种对话式的回顾,我们还是能够发现自己获得了重要的成长与进步。其次是一种进入心流的体验,这种进入心灵的体验是一种沉浸,其中专心致志的感受K也没有说的非常的详细,只是说这种投入写作的感觉是一种完全沉浸,专心致志地忘我工作的状态,这与玩游戏时的专注状态有很大不同。我理解K所描述的心流就是全身心投入写作中,忘记时间的流逝,思路异常清晰流畅的状态。你可以全神贯注地做当下的事情,效率会明显提高,思绪也会变得前所未有的清晰。最后是自我认知的觉醒。K提到,通过写日记他感受到自我认知有了显著的提升,这是非常有效的自我体悟手段。我也有同感,写日记可以在一定程度上反映一个人的成长过程。这个过程不一定只发生在人生大阶段,日常的一周一天里也都在发生着微小的变化。通过日记来对比反思,就可以看到自己在哪些方面还需努力,在哪些方面获得了进步。这会给我们指明方向,知道如何进行自我改进与提升。日记让我们更深入地理解自己,取得自我成长的动力。K说,写日记还让自己对人生管理系统有了更多思考和启发。从微观层面来看,写日记让K获得了结构化的思维方式。K的日记形式采用了框架化的体系,会清晰记录实践的情境、结果、时间、地点、人物等要素,并配以自己的思考反思和总结。这是一种逻辑清晰的条理方式。而我的日记则更加随性,没有那么明确的时间线和逻辑结构。这一点我认为有必要改进,但也不想采用固定的模板方式记录,我更希望以某种类似聊天的方式来写日记。而从更宏观的层面来看,K明白了要以目标引领行动。从“目标+原则”的角度思考我想要实现什么,我的底线和原则是什么。这一点我也觉得很重要,没有目标的话行动就会盲目。我们应该在行动前明确想要的结果,然后在实现过程中考虑自己需要坚守的原则。例如我在准备考研的过程中,目标就是考上研究生,那么我的原则就是每天坚持背诵单词。然后再在其他各个方面进行合理规划,最终达成目标,这只是很小一方面。当然,这更适用于一些较大的人生目标,如事业规划、储蓄计划等。最后,K认为日记的意义,就是在迭代人生管理系统,同时也在迭代升级自己。我也认同记录日记是了解自我、与内心对话的有效途径,可以全面认识自己,且是一种更自由轻松的沟通方式。我会把日记分享到博客上,我觉得博客就像互联网世界里专属自己的一间屋子,偶尔会有陌生人过来留下踪迹,有的也会来留个言,这我感觉非常有意思。大部分评论都是正面鼓励的,这也让我在记录过程中收获到了信心。我也感受到自己在K提到的几个方面都有所进步,特别是在情绪管理方面,写日记的确能帮助一个人平静心绪。希望大家都可以去尝试用日记的方式记录和分析自己,也希望我们都能够更加了解自己。
499
《当呼吸化为空气》保罗·卡拉尼什
无标签
《当呼吸化为空气》保罗·卡拉尼什
分类: 读书笔记
简介:阅读背景前些时间准备戒烟,在网上浏览一些戒烟的方法,看到了有人说通过阅读一些文学作品,可以从精神层面戒除烟瘾。从很多的读物中,我选择了《当呼吸化为空气》这本书。我被书中从医生到病人的视角转化所吸引。读这本书用了大概半个多月的时间。实际上这本书的篇幅并不是很长,只是因为一些繁杂琐事导致没有时间去阅读。内容简介本书分为上下两篇。上篇从一个外科医生的角度展开,写了作者从学生到学徒,再到主治医师的过程。在讲述遗体捐献者的时候,似乎并没有表现出十分的敬意,而是真正从一个学生的角度出发来描写当时面对遗体的心境。而当在描写他住院(在医院工作)多年后的部分中,也没有很崇高地展示作为医生的责任感和荣誉感,而是将面对无数病人和无数手术的那种麻木与无情展现出来了。上篇展现出来的虽然不是那么一位伟大光荣的医生,但却将医生与读者、小说与生活的距离大幅度缩短了。下篇自然讲述的是作者被确诊为肺癌后的历程。这里进行了一个视角的转换,从医生转为病人,从病床边的人转为病床上的人。从作者被肺癌击倒,到重新振作,再到倒下;从丈夫到父亲;从活着到死去。中间的描写真的不好细说,因为每一个点都令我难以言喻但又深有影响。这部分是本书的重点,但是却难以进行一个总的概括。摘录文章中有些话语让人印象深刻。保罗的父亲对保罗说:“做第一很容易:找到那个第一名,然后比他多得一分。”这是保罗父亲对小时候的保罗说的话。书中也有保罗身为一名医生的感想感悟:“我们背负着无形的枷锁,肩负着生死攸关的责任。也许病人鲜活的生命就握在我们手中,但死神总是最后的胜者。就算你是完美的,这个世界却不是。秘诀在于,支撑我们继续下去的秘诀在于,明白打从发牌的那刻起,你已必输无疑,你会手滑,你会判断失误,但即便如此也要拼尽全力为病人奋战到底。你永远无法到达完美的境地,但通过不懈的努力奋斗和追求,你能看见那无限接近完美的渐进曲线。”“医者的职责,不是延缓死亡或让病人重回过去的生活,而是在病人和家属的生活分崩离析时,给他们庇护与看顾,直到他们可以重新站起来,面对挑战,并想清楚今后何去何从。”同样的,作为病人,保罗也给出了他对于死亡的思索:“如果死亡的沉重感不会减轻一分一毫,那么至少,能不能变得更习以为常一些?”“达尔文和尼采有一个观点是一致的:生物体最重要的特征就是奋斗求生。没有奋斗的人生,就像一幅画里身上没有条纹的老虎。多年来与死亡并肩而行的经历,让我更深刻地懂得,最轻易的死亡有时候并非最好的结局。”“我们至少需要培养几个试管胚胎,然后移植最健康的那个。其他胚胎只能自生自灭。就连一个新生命诞生的过程,死亡也占有一席之地。”(这是保罗决定和她妻子进行试管时的感想)“关于未来的那种巨大的不确定感令人死气沉沉;不管我走到哪里,死亡的阴影都会模糊任何行动的意义。我还记得那豁然开朗的一刻,压倒一切的不安终于消散,似乎不可逾越的惶恐之海里终于显现出前进之路。”“人一旦遭遇顽疾,最需要小心的,是价值观的不断变化。你努力思考自己到底看重些什么,答案也会接踵而至。”可是,作为一位病人,他并没有自暴自弃,而是在生命进入倒计时后,仍能找到自己想要的。“那天早上,我做出了一个决定:我要逼迫自己,回归手术室。为什么?因为我做得到。因为那就是我。因为我必须学会以不同的方式活着。我会把死神看作一个威风凛凛、不时造访的贵客,但心里要清楚,即使我是个将死之人,我仍然还活着,直到真正死去的那一刻。”“道德义务是有重量的,有重量的东西就有引力,所以道德责任的引力又将我拉回手术室。”他甚至在病痛中,能感悟到科学与人类生命之间的一些难以解释的点:“科学的方法论是人们的双手创造出来的,因此无法涉及一些永恒的真理。我们建立科学理论,是为了组织和掌控这个世界,将各种现象局限在可控的范围内。科学的基础,就是各种现象的重复出现以及人为制造的客观性。这是很强的后盾,让科学有能力去建立并阐释各种关于物质和能量的主张,但也让科学知识无法解释人类生命中存在主义的本能特性。人类生命本身就是独特的,主观的,无法预测的。也许在组织和研究重复出现的经验主义数据时,科学提供了最有用的方法,但另一方面,科学却无法用来解释人类生命中最为核心的方面:希望、恐惧、爱、恨、美、妒忌、荣誉、软弱、奋斗、痛苦和美德。”“古老的圣言已经灰飞烟灭,人类终于知道,自己是这冷酷无情的广阔宇宙中孤独的存在,而自己在这宇宙的诞生,也是偶然的。”面对他的主治医师,他会想:“此时此刻她不是医生,只是个普通人,对抗不了冥冥中真正掌控这些的力量和命运。我们面对面,一个是医生,一个是病人,我们之间的关系有时候是前者对后者绝对的权威和把控,有时候呢,就像现在,只是两个凑在一起互相安慰的人,而其中一个正面对着死亡的深渊。 原来,医生们也是需要希望的。”对于生命,他留下了这样的感悟:“面对生命的界限,人人都会屈服。我想,进入这种过去完成时的人,应该不止我一个。大多数的梦想和抱负,要么被实现,要么被抛弃,无论如何,都属于过去。而我的未来已经不是一架天梯,通往逐步升高的人生目标,而是一路平坦,铺陈为永恒的现在。金钱、地位,这一切的虚荣浮华,都像《传道书》69里对其毫无兴趣的传道者所说的:不过是捕风而已。”而他也给他的小女儿留下了这样的话:“在往后的生命中,你会有很多时刻,要去回顾自己的过去,罗列出你去过的地方,做过的事,对这个世界的意义。我衷心希冀,遇到这样的时刻,你一定不要忘了,你曾经让一个将死之人的余生充满了欢乐。在你到来之前的岁月,我对这种欢乐一无所知。我不奢求这样的欢乐永无止境,只觉得平和喜乐,心满意足。此时此刻的当下,这是我生命中最重大的事。”而他的妻子,在保罗完成这本书去世后,为他撰写了后记,后记中的话没有像前面那么深刻,但却体现了一位妻子对丈夫的无限的爱:“我们各自都对很亲密的朋友开过同样的玩笑,说挽救婚姻关系的秘诀,就是其中一人患上绝症。相反地,我们其实是明白了,直面绝症的方法之一,就是深爱——袒露自己的脆弱,满怀善良、慷慨与感恩。”“我本以为,保罗去世后,我只会觉得空虚和心碎,却从未想过即使一个人去了,你还是能够一如既往地爱他;从未想过我会在强烈的悲伤之余,一直感受到浓烈的爱意与感恩。”感悟这本书实际上似乎并没有很明显的催促戒烟的目的性,即使是我抱有戒烟的目的性去阅读这本书。但不可否认的是,这本书确实能够引起我们对生命的思考。从看别人生病到自己躺在病床上,从见证死亡到亲临死亡。我很难去想作者是经历了多久的思考,才能将其描写的如此生动。”我们身负奇迹而行,却在自身之外寻找奇迹。“或者,我们本就该热爱自己的生命。
博客主页 CHI's blog 今春不见桃花
闽ICP备2022003806号 闽公网安备35012102500456号 本站由又拍云提供CDN加速/云存储服务 本站已运行 1 年 211 天 14 小时 26 分 自豪地使用 Typecho 建站,并搭配 MyDiary 主题 Copyright © 2022 ~ 2024. CHI's blog All rights reserved.
打赏图
打赏博主
欢迎
欢迎
欢迎访问CHI's blog
欢迎您来评论,但首次评论需经过审核才能显示,之后就不用啦^_^
搜 索
足 迹
分 类
  • 默认分类
  • 相册
  • 随想录
  • 技术向
  • 读书笔记
  • 生活小记