精华内容
下载资源
问答
  • 作者:阳哥来源:价值前瞻瑞·达利欧《原则》读书笔记大家好,我是 阳哥。投资可以说是对自己认知的变现,因此,广泛的阅读,以增加自己的认知水平,尤为重要。阅读的越多、经历的越多,越能体会到阅读...

    作者:阳哥

    来源:价值前瞻

    瑞·达利欧《原则》读书笔记

    大家好,我是 阳哥。

    投资可以说是对自己认知的变现,因此,广泛的阅读,以增加自己的认知水平,尤为重要。

    阅读的越多、经历的越多,越能体会到阅读的乐趣与实用之处。

    之前,阳哥 已跟大家分享了 《价值》《投资最重要的事》《戴维斯王朝》《巴菲特之道》 等书籍内容。

    今天跟大家一起来读一本经典的书,书名是《原则》,作者是桥水基金的瑞·达利欧。

    这是一本难得的好书,这本书会给大家带来许多有价值的内容。

    桥水基金是谁?

    桥水对冲基金公司成立于1975年,创始人是瑞·达利欧(Ray Dalio),其属于众多对冲基金中比较另类的一家公司。

    通常私募基金客户都是高净值人群,也就是我们常说的有钱人,但桥水的服务对象主要是机构投资者,其客户包括养老基金、捐赠基金、国外的政府以及中央银行等。其管理的资金中几乎三分之二来自于养老基金、约四分之一来自于国家主权基金,比如新加坡政府投资有限公司(Government of Singapore Investment Corporation)。

    2000-2005年期间,“桥水”成为了资产增长速度最快的基金管理公司。

    瑞·达利欧在2012年初被业内评为对冲基金史上最成功的基金经理,公司旗下纯阿尔法基金(Pure Alpha Fund)在1975年至2011年为投资人净赚了358亿美金,超过了索罗斯量子基金自1973年创立以来的总回报。

    但 2020年桥水基金的表现并不好,2020年对冲基金平均回报率为11.6%。桥水基金收益却是亏损;桥水在2020年令投资者损失了121亿美元,不过桥水目前仍位居美国前20大对冲基金榜首。

    《原则》概览

    第一部分:我的历程,在这一部分,达利欧分享了他的一些个人经历,其中最重要的是他失败的一些经历,正是这些经历引导作者发现了那些指导进行决策的原则。

    这部分是关于作者的真实背景的介绍,对于更好的了解本书起到了良好的促进作用。

    当然,如果你不关心作者的个人背景情况或者对作者比较熟悉,跳过此部分也是可以的。

    第二部分:生活原则,在生活原则部分,作者将说明那些在一切事情上引导他的首要原则

    这部分是本书的真正核心,因为它将说明为什么几乎任何人都可以将这些原则应用于几乎所有事情。

    第三部分:工作原则,在这部分,你将看到对桥水非同一般的运营方式的特写式介绍。作者将桥水的原则凝聚为一个理念,即创意择优,力求通过极度的求真和极度的透明实现有意义的工作和有意义的人际关系。

    这些工作原则以生活原则为基础,但由于组织的力量远远大于个人的力量,本书作者相信,这些原则比生活原则更重要。

    下面,将根据书籍的顺序,来逐一进行介绍。

    第一部分:我的历程

    早期的经验与教训

    在桥水创办之初,达利欧在投资上经历了一系列的不顺,达利欧在书中分享了自己的一些教训:

    • 第一,达利欧离谱地过度自信,并放纵自己被情绪左右;

    • 第二,达利欧再次领会到研究历史的价值;

    • 第三,失败的事件提醒达利欧注意,把握市场的时机是多么困难。

    面对失败,达利欧想明白了,如果不想带着再次遭遇重大挫折的高概率继续前行的话,就必须客观地看待自己,并做出改变。

    达利欧希望能够找到一种方法,克服顽固难治的投资问题。

    达利欧学会了让自己保持极度开明的态度,允许其他人指出他可能疏忽的东西。达利欧发现,能够成功的唯一途径将是:

    1. 找到与自己观点不同的最聪明的人,以便自己能够努力理解他们的推理;

    2. 知道自己在什么时候不能有明确的意见,不急于下结论;

    3. 逐步归纳永恒和普适的原则,对其进行测试,将其系统化;

    4. 通过平衡风险来保持较大的回报,并降低下行波动。

    人性的弱点

    所有了不起的投资者和投资策略都是有弱点的。

    在弱点呈现时就对其失去信心是一种常见的错误,就像在其有效运行时对其过于迷恋一样。因为大多数人都有情绪化倾向,不会严格遵守逻辑,所以他们通常会对短期结果反应过度:情况不好时他们放弃,并以过低的价格脱手;好的时候又以过高的价格买进。

    达利欧发现这个道理不仅对投资适用,对人和事物的关系同样适用:

    明智的人在经历各种浮沉时都始终盯紧稳健的基本面;而轻浮的人跟着感觉走,做出情绪化的反应,对于热门的东西一拥而上,不热的时候又马上放弃。

    找到投资的圣杯

    从早期的失败经验中,达利欧明白了不管他在进行押注时多么有信心,他依然可能是错的,而要降低风险又不降低收益,合理的多样化是关键。

    达利欧经过研究发现,想要打造一个高质量的回报流,如果能够拥有 15~20个良好的、互不相关的回报流,就能大大降低风险,同时又不减少预期收益。

    尽管这个过程很艰难,但达利欧最终找到了一条鱼与熊掌兼得的道路,达利欧称之为 “投资的圣杯”,这也正是桥水成功的秘密。

    人事管理的一些经验

    管理一家企业,人事管理是最难的问题之一,达利欧认为在处理人事关系是,有三件事最重要:

    1. 把我们的真实想法摆在桌面上;

    2. 存在经过深思熟虑的分歧,但人们愿意在相互了解的过程中更改观点;

    3. 如果分歧依然存在,拥有一种大家一致同意的决策方式(如投票或拥有清晰的权威),以便我们不带怨气地把分歧留在身后。

    在达利欧看来,一个管理者能够实现的最大成功就是能够组织其他人在没有你的情况下把事情做好。

    第二部分:生活原则

    总的来说,面对生活,我们需要独立思考并决定:

    • (1)你想要什么?

    • (2)事实是什么?

    • (3)面对现实,你如何实现自己的愿望?

    在书中,达利欧将生活原则凝练成以下五个大的方面:

    生活原则

    拥抱现实,应对现实

    世界上最重要的事情是理解现实如何运行,以及如何应对现实。

    达利欧在书中将这个过程分为10个方面来展开讨论:

    拥抱现实,应对现实

    下面,阳哥 也想就其中的部分内容,聊聊 阳哥 的一些想法,大致分为2点:

    • 理解进化

    • 站在更高的层次思考

    理解进化

    在书中,达利欧开始相信:

    进化是宇宙中最强大的力量,是唯一永恒的东西,是一切的驱动力。

    2020年投资和阅读总结:持续进化 这篇文章中,阳哥 也提到了自己在投资中的一些变化,主要还是受投资的可持续性和进化论的影响。

    观察自然,理解生命的进化以及整个社会的螺旋上升进步的过程,对于理解投资,可以从另一个角度提供不同的视野。

    进化是处于本能的,可以说是属于常识性的范畴,经常有不少投资大师提到在投资中尊重常识的重要性,可谓是殊途同归。

    更高层次的思考

    所谓旁观者清,当局者迷。

    当我们陷身于周围的繁杂事务时,反而更难穿过迷雾看清事实。

    如果能够换个角度,站在更高的层次来思考,或许能够找到更好的解决办法。

    人类拥有独特的从更高层次俯视的能力,这不仅适用于理解现实和现实背后的因果关系,也适用于俯视自身和周围的人。

    2020年投资和阅读总结:持续进化 这篇文章中,阳哥 也提到了自己在2020年投资中的一些遗憾,主要是思考问题时站的角度不高,未能从更高层次来思考核心资产的作用和未来。

    五步流程实现人生愿望

    在达利欧看来,个人进化过程通过5个不同的步骤发生。如果你能够把那5件事情做好,几乎可能可以成功。这五步大概是:

    五步流程

    用示意图表示如下:

    五步流程

    这个过程其实跟PDCA循环(即 Plan-Do-Check-Action)是有相通之处的。

    五步流程其实并不复杂,理解起来也不是太难,重要在于我们明白了这个过程之后,如何用于实践,并不断改进,达到进化的目的。

    如果能够做到今天的你比昨天的你或者去年的你有所进步,则是一个好的趋势。

    做到头脑极度开放

    做到头脑极度开放,这也许是全书中最重要的一条。

    书中从以下几个方面对该主题进行了阐述:

    做到头脑极度开放

    影响合理决策的两个最大的障碍是自我意识和思维盲点。这两个障碍让你难以客观地看到你和你所处环境的真相,难以通过最大限度地利用他人的帮助来做出最佳决策。

    这两大障碍造成的最终结果是,出现意见分歧的各方通常始终坚信自己是对的,而且往往以彼此发怒告终。

    这是不理性的,也会导致无法做出最优决策。

    如果你知道自己有盲点,你就能找到一种解决办法,但假如你不知道,你将持续不断栽在相同的问题上。换而言之,如果你能承认自己有盲点,并以开放的心态接受其他人可能在某件事上比你看得更准,他们试图指出的威胁或机会确实存在,那么你就更有可能做出良好的决策。

    头脑极度开放是一种能力: 有效地探讨各种不同观点和不同的可能性,而不是让你的自我意识或思维盲区阻碍你。

    在生活和工作中,人们不可避免的会遇到各种各样的分歧,而分歧的处理,往往会影响到业务的发展、团队的凝聚力等。

    达利欧认为,需要领会并感激深思熟虑的意见分歧。在深思熟虑的意见分歧中,你的目标不是让对方相信你是对的,而是弄明白谁是对的,并决定该怎么做。在深思熟虑的意见分歧中,双方的动机都是真诚担忧错过重要观点。

    关于书中提及的分歧处理,Lemon 曾经有过一段糟糕的工作经历,公司的领导经常说这么一句话:“我支持你们所做的,你们也要支持我所做的。” 但结果却是,该领导想做的事情因私利太重遭到普遍的抵制,经常开会吵架。

    关于头脑封闭和头脑开放的识别,达利欧在书中例举了 7 种不同迹象,有兴趣的同学可以通过该书来了解。

    理解人与人大不相同

    在书中,达利欧从神经科学的角度出发,来理解人与人之间的不同。

    理解人与人大不相同

    人脑的复杂程度超出了我们的想象。一方面,我们拥有各种天生特征,既可能帮助自己,也可能伤害自己,取决于如何应用。

    因此,人们需要学会管理自己,并从某种程度上理解大脑可以改变的程度,以便在某些方面进行自我塑造。

    我们经常会提到21天养成某个习惯等类似的阐述,达利欧在书中提到:

    有研究显示,如果你能坚持某种行为约18个月,你就会形成一种几乎要永远做下去的强烈倾向。

    认识到人与人之间大不相同,我们可以根据不同类型的人的特点,来分别合理的安排工作。

    学习如何有效决策

    尽管世界上并没有最好的决策方式,但存在一些有效决策的普通规则。

    概括如下:

    有效决策

    首先要认识到影响好决策的最大威胁是有害的情绪。在做决策的时候,不要做完美主义者,不必过于精确,要谨记“80/20法则”,并明白关键性的 “20%” 是什么。

    达利欧认为,综合分析现实、理解如何行动的最好工具是逻辑、理性和常识。

    第三部分:工作原则

    达利欧认为,一个机构就像一部机器,主要由两组部件构成:文化和人

    因此,工作原则主要从三个方面展开论述:打造良好的文化、用对人和持续进化。

    工作原则

    优秀的机构拥有优秀的人和优秀的文化,优秀的人具备高尚的品格和出色的能力,优秀的文化不掩盖问题和分歧,而是公开妥善解决,喜欢让想象力驰骋且愿意开创先河。

    打造良好的文化

    在书中,达利欧主要从以下几个方面展开论述:

    打造良好的文化

    打造良好的文化,首先需要相信极度求真和极度透明。

    这一点,我们在投资股票的时候,其实也是可以用来考量的。优秀的公司会活在阳光下,公开透明;而有问题的公司,总想躲躲藏藏,让你总觉得有猫腻,但好像又说不出来。

    此外,打造良好的文化需要妥善处理分歧,并超越分歧,这是很多公司难以做到的。

    用对人

    比做什么事更重要的是找对做事的人。

    在企业中,最重要的决策是选好工作的责任人,要用对人,因为用人不当的代价高昂。

    在工作中,没人能靠一己之力单独取胜,因此与团队合作尤其重要。与他人合作可获得三大益处:

    1. 共同努力比单打独斗能更强、更好地完成既定使命;

    2. 出色的人际关系会造就优秀的团队;

    3. 积累财富以实现和满足我们及他人生活所需。

    在用人方面,达利欧也提到了关于薪酬的论述。达利欧认为,考虑薪酬时,要提供稳定性也要让人看到机会:

    • 要依人发薪,而非依工作岗位发薪;

    • 薪酬至少要大体上与业绩测评结果挂钩;

    • 薪酬要高于一般水平;

    • 要更多想着如何把蛋糕做大,而非怎样切蛋糕才能使自己获得最大的一块。

    创意择优

    达利欧认为,对机构来说,最重要的是建立起创意择优的机制,把从事有意义的工作、发展有意义的人际关系作为目标,以极度求真和极度透明为途径。

    让创意择优发挥作用,需要做三件事:

    1. 坦陈自己最诚实的想法,让大家讨论;

    2. 理性表达分歧,以便大家进行高质量的辩论,拓展思路,尽量形成最有的集体决策;

    3. 用创意择优来处理所有不同意见。

    小结

    在《原则》这本书中,达利欧介绍了许多生活和工作的原则,每一条都是干货。

    站在达利欧的角度,他提出的很多原则或观点,思考的层次本身就比较高,可能大家在平时的生活和工作中并不一定适用。但 阳哥 觉得,书中很多原则还是值得借鉴的。

    在《原则》一书中,作者思虑长远,提出的一些原则超越了许多普通的机构,书籍的内容可以说是常读常新,随着个人见识的增长,也越能体会的本书的实用之处。

    喜欢这本书的读者,也可以去购买一本,详细阅读下:

    阳哥 将本书的主要原则等内容整理在思维导图中,概览如下:

    《原则》

    完整的pdf版思维导图,请点击下面卡片,回复 书单 获取。

    大家读完顺手点下右下角的 “在看”,就是最大的鼓励和支持了。

    拓展阅读

    展开全文
  • 他是位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献,著有...

    马丁·福勒(Martin Fowler),世界级软件开发大师,ThoughtWorks首席科学家。他是一位作家、演说者、咨询师和泛软件开发领域的意见领袖。他致力于改善企业级的软件设计,对优秀的设计以及支撑优秀设计的工程实践孜孜以求。他在重构、面向对象分析设计、模式、XP和UML等领域都有卓越贡献,著有《重构:改善既有代码的设计》《分析模式:可复用的对象模型》《领域特定语言》《企业应用架构模式》等经典著作。
     

    马丁·福勒(Martin Fowler)最新出版著作

    领域特定语言

    世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    世界软件开发大师Martin Fowler历时多年完成,堪称DSL领域的丰碑之作,通过Java和C语言分析具体案例,讲解DSL的构造方式和通用原则,软件开发程序员的必备教程,软件开发大师马丁·福勒全新力作。

    本书介绍的技巧可用于大多数现代面向对象语言。书中给出了许多采用Java和C#编写的示例,并精选了部分适合采用Ruby编写的示例。

    全书共57章,分为6个部分,全面介绍了DSL概念、DSL常见主题、外部DSL主题、内部DSL主题、备选计算模型以及代码生成等内容,揭示了与编程语言无关的通用原则和模式,阐释了如何通过DSL有效提高开发人员的生产力以及增进与领域专家的有效沟通,能为开发人员选择和使用DSL提供有效的决策依据和指导方法。

    原版豆瓣评分8.2

    世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    豆瓣评论

    DSL在中国IT界一直不受重视并且被严重低估。它是应对复杂度的利器。很多人虽然使用过一些类似的手段,但是缺乏明确的DSL设计指导,以至于系统晦涩难懂。例如一直为人所诟病的java企业级开发里面充斥的奇奇怪怪的配置,很多实际上就是一个野生DSL。这本书可以看做是一本手册,也可以看做是一门讨论语言设计的指南。总体来说,每一个有志于成为顶尖工程师的人,都需要读一下。

    简要目录

    第一部分 叙述

    第1章 入门示例 2

    第2章 使用DSL 21

    第3章 实现DSL 34

    第4章 实现内部DSL 53

    第5章 实现外部DSL 71

    第6章 在内部DSL和外部DSL之间做选择 83

    第7章 备选计算模型 89

    第8章 代码生成 95

    第9章 语言工作台 102

    第二部分 常见主题

    第10章 DSL集锦 114

    第11章 语义模型(Semantic Model) 123

    第12章 符号表(Symbol Table) 127

    第13章 上下文变量(Context Variable) 135

    第14章 构造型构建器(Construction Builder) 139

    第15章 宏(Macro) 142

    第16章 通知(Notification) 150

    第三部分 外部DSL主题

    第17章 分隔符制导翻译(Delimiter-Directed Translation) 156

    第18章 语法制导翻译(Syntax-Directed Translation) 171

    第19章 巴克斯-诺尔范式(BNF) 179

    第20章 基于正则表达式表的词法分析器(Regex Table Lexer) 188

    第21章 递归下降语法分析器(Recursive Descent Parser) 193

    第22章 语法分析器组合子(Parser Combinator) 202

    第23章 语法分析器生成器(Parser Generator) 214

    第24章 树构造(Tree Construction) 224

    第25章 内嵌翻译(Embedded Translation) 239

    第26章 内嵌解释(Embedded Interpretation) 244

    第27章 外来代码(Foreign Code) 247

    第28章 可变分词方式(Alternative Tokenization) 255

    第29章 嵌套运算符表达式(Nested Operator Expression) 262

    第30章 换行分隔符(Newline Separator) 267

    第31章 外部DSL拾遗 271

    第四部分 内部DSL主题

    第32章 表达式构建器(Expression Builder) 276

    第33章 函数序列(Function Sequence) 283

    第34章 嵌套函数(Nested Function) 287

    第35章 方法级联(Method Chaining) 300

    第36章 对象作用域(Object Scoping) 310

    第37章 闭包(Closure) 320

    第38章 嵌套闭包(Nested Closure) 325

    第39章 字面量列表(Literal List) 336

    第40章 字面量映射(Literal Map) 338

    第41章 动态接收(Dynamic Reception) 344

    第42章 注解(Annotation) 359

    第43章 语法分析树操作(Parse Tree Manipulation) 367

    第44章 类符号表(Class Symbol Table) 377

    第45章 文本打磨(Textual Polishing) 385

    第46章 字面量扩展(Literal Extension) 389

    第五部分 备选计算模型

    第47章 适应性模型(Adaptive Model) 394

    第48章 决策表(Decision Table) 400

    第49章 依赖网络(Dependency Network) 408

    第50章 产生式规则系统(Production Rule System) 414

    第51章 状态机(State Machine) 426

    第六部分 代码生成

    第52章 基于转换器的代码生成(Transformer Generation) 430

    第53章 基于模板的代码生成(Templated Generation) 435

    第54章 嵌入助手(Embedment Helper) 442

    第55章 基于模型的代码生成(Model-Aware Generation) 448

    第56章 无视模型的代码生成(Model Ignorant Generation) 458

    第57章 代沟(Generation Gap) 461

    模式清单 468

    速查表 470

    第二本

    重构 改善既有代码的设计(第2版 平装版)

    世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    重构,一言以蔽之,是在不改变外部行为的前提下,有条不紊地改善代码。20 多年前,正是《重构:改善既有代码的设计》第1 版的出版,使重构终于从编程高手们的小圈子走出,成为众多普通程序员日常开发工作中不可或缺的一部分。如今,Martin Fowler 的《重构:改善既有代码的设计》一书已经成为全球有经验的程序员手中的利器,既可用来改善既有代码的设计、提升软件的可维护性,又可用于使既有代码更易理解、焕发出新的活力。

    这本备受关注的第2 版在第1 版的基础上做了全面修订,反映了编程领域业已发生的许多变化。第2 版中介绍的重构列表更加内聚,并用JavaScript 语言重写了代码范例。此外,第2 版中还新增了与函数式编程相关的重构范例,旨在教会读者如何在没有类的环境下开展重构。

    新版沿袭了第1 版的结构,依次解释什么是重构,为什么要重构,如何通过“坏味道”识别出需要重构的代码,以及如何在实践中成功实施重构(无论用的是什么编程语言)。

    ● 理解重构的过程和重构的基本原则;
    ● 快速有效地应用各种重构手法,提升程序的表达力和可维护性;
    ● 识别代码中能指示出需要重构的地方的“坏味道”;
    ● 深入了解各种重构手法,每个手法都包含解释、动机、做法和范例4 个部分;
    ● 构建稳固的测试,以支持重构工作的开展;
    ● 理解重构过程的权衡取舍以及重构存在的挑战等。

    豆瓣评分9.2
     

    世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    豆瓣评论

    最近半年代码写太多了,老大直接推荐我看完这本书然后去重构代码

    最近在做代码迁移,顺便要做重构。其实一直不是特别理解重构是什么?之前一直觉得重构是挺难的一件事。好比重新开发!无意发现这本书,讲解还是挺详细的。让我重新认识了重构。开发进行中,小的重构就要加入进来,这可以使你代码更健壮。重构也可以优化逻辑,提高代码质量,减少沉余代码,还可以发现一些功能缺陷等等。重构也可以是一种思想,贯穿你开发过程的始终,这样更有利于后期开发,维护,版本迭代等等。

    很喜欢书中的一句经典语录

    傻瓜都能写出计算机可以理解的代码。唯有能写出人类容易理解的代码的,才是优秀的程序员。

    第三本

    分析模式:可复用的对象模型

    世界级软件开发大师Martin Fowler这三本书经典书你都读过哪一本?

    典型的方法论书籍只关注工具和技术,面向对象社区期望有一本书能够突破这一局限,而这本开创性的著作正好满足了这一需求。在本书中,作者关注的是面向对象分析和设计的最终结果,也就是模型本身。作者在本书中分享了丰富的对象建模经验,以及识别重复问题并将其转化为可复用的模型的敏锐洞察力,并给出了一系列来自不同领域(包括交易、测量、会计和组织关系等)的模式。

    概念模式无法孤立地存在,基于这一认识,作者还给出了一系列“支持模式”。这些模式探讨了如何将概念模型转化为软件,并使其适合于大型信息系统的架构。对每种模式的讲解都包含了其背后的设计思路、应该(或不应该)使用这些模式的时机以及实现中的诀窍。本书中展示的例子构成了一本实用手册,既包含有用的模型,又涵盖对复用技能的深刻洞见,这些都有助于改进分析、建模和实现。

    专业评论:

    “本书是对不断发展的模式文献的一个重要贡献。它捕捉来自不同领域的深奥的对象建模专业知识,形成一个模式目录。这些领域模式将有助于你解决不同领域中具有挑战性的建模问题。”

    ———Erich Gamma

    “Martin Fowler为我们给出答案,而不仅仅是一个可以找到这些答案的过程。在本书中,透过作者平实朴素的语言,你将找到自己下一个业务对象模型的重要内容。”

    ———Ward Cunningham

    “就像‘四人帮’在他们的经典著作《设计模式》中总结出了通用的设计模式,Martin Fowler在这本让人期待已久的书中为我们总结出应用领域的诸多模式。本书是从事面向对象业务建模和业务过程重组工作的所有分析人员和设计人员的必备之书。”

    ——Donald G. Firesmith

    展开全文
  • “Rust是种采用过去的知识解决将来的问题的技术。”——Graydon Hoare “高效开发的关键在于不断制造一些新的有趣错误。”——Tom Love “一切皆有可能。”——Ian Hickson “对发送的内容保守一点,对收到的...

    “Rust是一种采用过去的知识解决将来的问题的技术。”——Graydon Hoare

    “高效开发的关键在于不断制造一些新的有趣错误。”——Tom Love

    “一切皆有可能。”——Ian Hickson

    “对发送的内容保守一点,对收到的内容宽容一点。”——John Postel

    “如果你愿意限制方法的灵活性,那么总是会有意外的收获。”——John Carmack

    “从那时起,当计算机出现任何问题时,我们都说它里面有bug。”——Grace Hopper

    “算法必须名副其实。”——Donald Knuth

    “不断发展的系统会增加其复杂性,除非采取措施优化它。”——Meir Lehman

    “Lisp不是一种语言,它是一种建筑材料。”——Alan Kay

    “你可以这么做,但是最好知道自己在做什么。”——A Rustacean

    “一般而言,程序应该惜字如金。”——Kernighan and Plauger

    “程序和诗差不多,你先得把它写出来。”——E. W. Dijkstra

    “程序最重要的属性在于它是否满足了用户的需求”。——C. A. R. Hoare

    “有时候,优雅的实现只是一个函数。不是一种方法、一个类或者一个框架,只是一个函数。”——John Carmack

    “保持好奇心,广泛阅读,尝试新事物,人们所谓的智慧很多情况下都可以归结为好奇心。”——Aaron Swartz

    “在编程中,关键不在于解决问题,而是决定要解决哪些问题。”——Paul Graham

    “如果调试是消除bug的过程,那么编程必然是引入bug的过程。”——E. W. Dijkstra

    以上这些经典语句出自哪里?

    小编从《精通Rust(第2版)》里筛选出来的。这是怎么的一本书呢?

     

    这本书是关于Rust编程语言的,它能够让你构建各种软件系统——从底层的嵌入式软件到动态的Web应用程序。Rust快速、可靠、安全,它提供了甚至超过C/C++的性能和安全保证,同时还是一种学习曲线比较平滑的热门编程语言。通过逐步完善,与积极友好的社区文化相结合,该语言的前景会非常美好。

    本书内容共17章,由浅入深地讲解Rust相关的知识,涉及基础语法、软件包管理器、测试工具、类型系统、内存管理、异常处理、高级类型、并发模型、宏、外部函数接口、网络编程、HTTP、数据库、WebAssembly、GTK+框架和GDB调试等重要知识点。

    本书适合想学习Rust编程的读者阅读,希望读者能够对C、C++或者Python有一些了解。书中丰富的代码示例和详细的讲解能够帮助读者快速上手,高效率掌握Rust编程。

    样章赏析:截选自第3章部分内容

    3.1 测试的目的

    “一切皆有可能。”

    ——Ian Hickson

    软件系统就像具有齿轮和其他部件的机器。如果任何一个齿轮发生故障,那么整个机器很有可能无法正常运转。在软件中,各个齿轮就是你所使用的功能、模块或程序库。软件系统的各个组件的功能测试是保证代码高质量、有效且实用的方法。它并不能验证代码中是否存在bug,但有助于建立开发人员将代码部署到生产环境中的信心,并在项目长期维护时保持代码的健壮性。

    此外,如果没有单元测试,就很难在软件中进行大规模重构。在软件中明智而均衡地使用单元测试的好处是长远的。在代码实现阶段,编写良好的单元测试是软件组件的非正式规范。在维护阶段,现有的单元测试可以用来防止代码库的回归,从而鼓励系统立即修复问题。在Rust这样的编译语言中,由于编译器提供了有用的错误诊断信息,单元测试的回归所涉及的重构(如果有的话)会受到更多“指导”,因此效果更好。

    单元测试的另一个好处在于,它鼓励程序员编写主要依赖于输入参数的模块化代码,即无状态函数。这使得程序员能够避免编写依赖于全局可变状态的代码。依赖于全局可变状态的测试很难构造,但是,单纯考虑为一段代码编写测试的行为有助于程序员在实现过程中找出一些低级的错误。对任何试图了解代码库的不同部分之间如何相互作用的新手来说,它们也是非常好的文档。

    需要注意的是,测试对任何软件项目都是不可或缺的。现在,让我们看看如何在Rust中编写测试,首先从如何组织测试的结构开始。

    3.2 组织测试

    在开发软件时,我们通常会编写两种测试:单元测试和集成测试。它们用于不同的目的,并与被测试代码进行不同的交互。单元测试总是轻量级、单个组件的测试,开发人员可以经常运行它们,从而提供更快速的反馈循环;而集成测试比较庞大,并根据环境和规格模拟真实的应用场景。Rust内置的测试框架为我们提供了编写和组织这些测试的合理默认参数。

    • 单元测试:单元测试通常编写在包含被测试代码的同一模块中。当这些测试的数量增加时,它们被组织成嵌套模块形式的一个实体。通常在当前模块中创建一个子模块,对该测试进行命名(例如根据约定将之命名为tests),并添加相应的注释属性(#[cfg(test)]),然后将所有与测试有关的函数放入其中。该属性只是告知编译器在测试模块中引用代码,但这只在执行cargo test命令时生效。稍后将详细介绍属性的相关信息。
    • 集成测试:集成测试在程序库根目录下的tests/目录中单独编写。它们被构造成本身就像是被测试程序库的使用者。tests/目录中的任何.rs 文件都可以添加一个 use声明来引入需要测试的任何公共API。

    要编写上述任何一种测试,我们需要先熟悉一些和测试有关的原语。

    测试原语

    Rust内置的测试框架基于一系列主要属性和宏组成的基元。在我们编写任何实际的测试之前,熟悉如何有效地使用它们将非常重要。

    属性

    Rust 代码中的属性是指元素的注释。元素项是软件包(crate)中的顶层语言结构,例如函数、模块、结构体、枚举和声明的常量,以及在软件包根目录下定义的其他内容。属性通常是编译器内置的,不过也可以由用户通过编译器插件创建。它们指示编译器为其下显示的元素注入额外的代码或含义,如果对应的是模块,那么会对该模块应用上述规则。我们将会在第 7 章详细介绍这些内容。为了简化本小节讨论的主题,我们将会讨论两种属性。

    • #[<name>]:这适用于每个元素,通常显示在它们定义的上方。例如,Rust中的测试函数使用#[test]属性进行注释。它表示该函数将被视为测试工具的一部分。
    • #![<name>]:这适用于每个软件包。注意,与#[<name>]相比,其中额外包含一个“!”。它通常位于用户软件包根目录的最顶端部分。

    注意

    如果要创建程序库项目,那么项目根目录中的文件一般是lib.rs文件,而创建二进制项目时,项目根目录中的文件将是main.rs文件。

    还有其他形式的属性,例如在模块中编写测试时使用的#[cfg(test)]。此属性添加在测试模块之上,以提示编译器有条件地编译模块,但仅在测试模式下有效。

    属性不仅限于作用在测试代码上,它们在Rust代码中用途广泛。后文将会介绍与之有关的更多内容。

    断言宏

    在测试中,当给定一个测试用例时,我们尝试在给定的输入区间内断言程序组件的预期行为。语言通常提供被称为断言函数的函数来执行这些断言。Rust为我们提供了通过宏实现的断言函数,帮助我们实现相同的功能。接下来将介绍一些常用的断言函数。

    • assert!:这是最简单的断言宏,它是通过布尔值进行断言的。如果值为false,则测试失败,同时会提示产生错误的代码行。此外还可以额外添加格式化字符串,后跟相应数量的变量,用于提供自定义异常消息:
    assert!(true);
    assert!(a == b, "{} was not equal to {}", a, b);
    • assert_eq!:这会接收两个值,如果它们不相等,则会执行失败。它也可以采用自定义异常信息的格式化字符串:
    let a = 23;
    let b = 87;
    assert_eq!(a, b, "{} and {} are not equal", a, b);
    • assert_ne!:这与assert_eq!类似,因为它需要接收两个值,但只有在两个值互不相等的情况下才进行断言。
    • debug_assert!:这类似于assert!。debug断言宏也可以用在除测试代码之外的代码中。在其他代码中,这主要用于代码运行时,对应该保存的任何契约或不变性进行断言的情况。这些断言仅在调试版本中有效,并且有助于在调试模式下运行代码时捕获断言异常。当代码以优化模式编译时,这些宏调用将被忽略,并被优化为无操作。它还有类似的变体,例如debug_assert_eq!和debug_assert_ne!,它们的工作方式类似assert!宏。

    为了比较这些断言宏中的值,Rust需要依赖特征。例如,“assert!(a == b)”中的“==”,实际上会转变成一个方法调用,即a.eq(&b),eq方法来自特征PartialEq。Rust中的大多数内置类型都实现了PartialEq和Eq特征,因此可以对它们进行比较。在第4章中将讨论这些特征的细节,以及PartialEq和Eq之间的区别。

    但是,对于用户自定义类型,我们需要实现这些特征。幸运的是,Rust为我们提供了一个名为derive的简便宏,它可以根据名称实现一个或多个特征。可以通过将#[derive(Eq, PartialEq)]注释放在任何用户自定义类型上来使用它,但要注意括号内的特征名称。derive是一个过程宏,它只是简单地为实现它的类型的impl块生成代码,并实现特征方法或任何关联函数。第9章我们将详细讨论这些宏。

    接下来,让我们开始编写一些测试。

    3.3 单元测试

    通常,一个单元测试就是一个函数,它实例化应用程序的一小部分,并独立于代码库的其他部分验证其行为。在Rust中,单元测试通常是在模块中编写的。理想情况下,它们应该仅用于涵盖模块的功能及其接口。

    3.3.1 第一个单元测试

    以下是我们的第一个单元测试:

    // first_unit_test.rs
    
    #[test]
    fn basic_test() {
        assert!(true);
    }

    一个单元测试会被构造成一个函数,并使用[test]属性进行标记。前面的basic_test函数中并没有什么复杂的内容。其中有一个基本的断言assert!,将true值作为参数。为了更好地有序组织代码,你还可以创建一个名为tests(根据约定)的子模块,并将所有相关的测试代码放入其中。

    3.3.2 运行测试

    我们运行此测试的方法是在测试模式下编译代码。编译器会忽略带有测试标记的函数的编译,除非它被告知在测试模式下运行。这可以通过在编译测试代码时将--test标记参数传递给rustc实现。之后,只需执行编译后的二进制文件即可运行测试。对于之前的测试,我们将在测试模式下运行以下命令来编译它:

    rustc --test first_unit_test.rs

    通过--test标记参数,rustc将main函数和一些测试工具代码放在一起,并将所有已定义的测试函数作为线程并行调用。默认情况下,所有测试都是并行运行的,除非将下列环境变量设置成“RUST_TEST_THREADS=1”。这意味着如果我们希望在单线程模式下运行之前的测试,那么可以通过“RUST_TEST_THREADS=1”来实现。

    现在Cargo已经支持运行测试,所有这些通常都是通过调用cargo test命令在内部完成的。此命令为我们编译并运行测试已标记的函数。在接下来的示例中,我们将主要使用Cargo来执行测试。

    3.3.3 隔离测试代码

    当我们的测试变得日益复杂时,可能需要创建其他辅助方法,这些方法只能在测试代码的上下文中使用。在这种情况下,将相关的测试代码与实际代码隔离是很有益的。我们可以通过将所有与测试有关的代码封装在模块中,并在其上放置#[cfg(test)]注释标记来达到此目的。

    #[cfg(...)]属性中的 cfg 通常用于条件编译,但不限于测试代码。它可以为不同体系结构或配置标记引用或排除某些代码。这里的配置标记是test。你可能还记得第2章的测试中已经采用了这种格式。这样做的好处是,只有当你运行cargo test命令时,测试代码才会被编译,并包含到已编译的二进制文件中,否则其将会被忽略。

    假如你希望以编程方式生成测试数据,但是不必在正式上线的版本中包含这些代码。让我们通过运行cargo new unit_test --lib命令来演示这一点。在lib.rs中,我们定义了一些测试和函数:

    // unit_test/src/lib.rs
    
    //我们想要测试的函数
    fn sum(a: i8, b: i8) -> i8 {
        a + b
    }
    
    #[cfg(test)]
    mod tests {
        fn sum_inputs_outputs() -> Vec<((i8, i8), i8)> {
            vec![((1, 1), 2), ((0, 0), 0), ((2, -2), 0)]
        }
    
        #[test]
        fn test_sums() {
            for (input, output) in sum_inputs_outputs() {
                assert_eq!(crate::sum(input.0, input.1), output);
            }
        }
    }

    我们可以通过cargo test命令来运行这些测试。让我们详细解读一下上述代码。在sum_inputs_outputs函数中会生成已知的输入和输出对。#[test]属性使得test_sums函数不会出现在正式发布的编译版本中。但是,sum_inputs_outputs并没有使用#[test]进行标记,如果它是在tests模块之外声明的,那么它会被包含到正式发布的编译版本中。通过将#[cfg(test)]标记和一个mod tests子模块搭配使用,并将所有测试代码及其相关函数封装到此模块中,可以确保代码和生成的二进制文件都是纯粹的测试代码。

    我们的sum函数在前面没有pub关键字修饰的情况下是私有的,这意味着模块中的单元测试还允许用户测试私有的函数和方法。这样做会非常方便。

    3.3.4 故障测试

    还有一些测试用例,用户希望API方法基于某些输入而执行失败,并且希望测试框架断言此失败。Rust为此提供了一个名为#[should_panic]的属性。下面是一个使用此属性的测试:

    // panic_test.rs
    
    #[test]
    #[should_panic]
    fn this_panics() {
        assert_eq!(1, 2);
    }

    #[should_panic]属性可以和#[test]属性搭配使用,以表示运行this_panics函数应该导致不可恢复的故障,在Rust中这类异常被称为panic。

    3.3.5 忽略测试

    编写测试时另一个有用的属性是#[ignore]。如果你的测试代码量非常庞大,那么可以使用#[ignore]属性标记告知测试工具在执行cargo test命令时忽略此类测试功能。然后你可以向测试工具或cargo test命令传递--ignored参数来单独运行这些测试。下面的代码包含一个笨拙的循环操作,当运行cargo test命令时,默认情况下会被忽略:

    // silly_loop.rs
    
    pub fn silly_loop() {
        for _ in 1..1_000_000_000 {};
    }
    
    #[cfg(test)]
    mod tests {
        #[test]
        #[ignore]
        pub fn test_silly_loop() {
            ::silly_loop();
        }
    }

    注意test_silly_loop函数上方的#[ignore]属性,下面是忽略测试后的输出结果:

     

    注意

    也可以通过向Cargo提供测试函数名称来运行单个测试,例如cargo test some_test_func。

    3.4 集成测试

    虽然单元测试可以测试用户的软件包和模块内部的私有接口,但是集成测试有点类似于黑盒测试,旨在从消费者的角度测试软件包公共接口端到端的使用。在编写代码方面,编写集成测试和单元测试没有太大的区别,唯一的区别是目录结构和其中的项目需要公开,开发人员已经根据软件包的设计原则公开了这些项目。

    3.4.1 第一个集成测试

    如前所述,Rust希望所有集成测试都在tests/目录下进行。在我们对程序库进行测试时,tests/目录中的文件会被编译成相对独立的二进制程序包。在接下来的示例中,我们将通过运行cargo new integration_test --lib命令创建一个新的程序库。和前面的单元测试一样,其中还包含相同的sum函数,不过我们现在添加了一个tests/目录,其中包含一个集成测试函数,定义如下所示:

    // integration_test/tests/sum.rs
    
    use integration_test::sum;
    
    #[test]
    fn sum_test() {
        assert_eq!(sum(6, 8), 14);
    }

    首先,将sum函数纳入作用域。其次,我们使用一个sum_test函数,它在返回值时会调用sum函数和断言函数。当我们尝试运行cargo test命令时,会出现以下错误:

     

    这个错误似乎很合理。我们希望程序库的用户调用sum函数,但是在程序库中却默认将其定义为私有的。因此,在sum函数之前添加pub修饰符,再次运行cargo test命令后,编译顺利通过:

     

    这里是我们的integration_test示例程序库的目录树视图:

    .
    ├── Cargo.lock
    ├── Cargo.toml
    ├── src
    │   └── lib.rs
    └── tests
         └── sum.rs

    作为一个集成测试的例子,这是非常简单的。它的关键在于,当我们编写集成测试时,可以像程序库的任何其他用户那样使用被测试的软件包。

    展开全文
  • 文章目录《杀死只知更鸟》本心灵成长之,教会孩子善待世界@[toc]经典语录粗略的大纲(????)怪人拉德利疯狗事件汤姆·鲁滨逊事件拉德利救人长大了就没多少东西可学了 经典语录 你永远不可能真正了解个人,...

    《杀死一只知更鸟》一本心灵成长之书,教会孩子善待世界

    在这里插入图片描述


    哈珀·李,女,1926年4月28日出生于美国,1960年发表她一生中唯一的长篇小说《杀死一只知更鸟》,荣获当年的普利策小说奖。


    经典语录

    • 你永远不可能真正了解一个人,除非你从他的角度去看问题。
    • 有一种东西不能遵循从众原则,那就是人的良心。
    • 心智正常的人从不会恃才而傲。
    • 除非你穿上一个人的鞋子,像他一样走来走去,否则你永远无法真正了解一个人。

    粗略的大纲(🙄)

    尤厄尔家族,坎宁安家族,芬奇家(阿迪克斯,斯库特,杰姆),迪尔,

    怪人拉德利、卡波妮佣人,姑姑亚历山德拉

    • (p313)雷蒙德先生
    • (p318-321)芬奇的正义直言
    • (p329)审判结果
    • (p330)站了起来
    • (p332)似乎只有孩子会哭泣
    • (p344)理智
    • (p355)???
    • (p370)姑姑-敬意
    • (p434)泰特先生
    • (p435)感觉就像杀死一只知更鸟
    • (p440)长大了就没多少东西可学了

    怪人拉德利

    ​ 书中内容是以斯库特这个小女孩为第一视角的,这是一本具有教育意义的书,是一本关于孩子的心灵成长之书。第一小节中斯库特因为单纯的直言却不考虑别人的感受,还有老师让她别听他爸爸给她教发音的事情,她爸阿迪克斯和她进行了一番谈话,阿迪克斯(他是小镇的一位律师)告诉她:“你永远也不可能真正了解一个人,除非你站在他的角度考虑问题······”

    在这里插入图片描述

    ​ 在童年时期,每个人心中都会对鬼魂这一类事有不同程度的害怕,在我们成长的土地上,或是童年玩伴中,总会有我们经常提及的鬼故事。小说中拉德利常常闭门不出,小镇上流传着有关怪人拉德利的种种奇谈怪事,斯库特和她的哥哥杰姆、还有玩伴迪尔对这个邻居拉德利此很害怕,每次经过他家门前时都撒腿跑过,但他们还是很好奇拉德利在家干什么,以到拉德利家的院子里为荣,或者打赌跑过去敲拉德利家的房子。有一天晚上他们想去偷偷看看拉德利在家干什么,他们三个人穿过栅栏,刚要透过窗户看时却发出了响声,拉德利在院子里向空中开了一枪,吓得他们感觉跑出去,逃跑的过程中杰姆的裤子被钩缠在栅栏上。杰姆在后来取裤子的时候,裤子却被缝好后工整地放在那边。之后几天,他们在拉德利门前的树洞里相继发现了口香糖、字母拼写奖章和肥皂雕刻像他们的小人儿。在莫迪小姐的房子失火时,街坊邻居在忙着救火时,斯库特在雪天看着这一切,等到她回家的时候,却发现身上多了一条毯子,这是拉德利为他披上的。他们的父亲阿迪克斯一直教导他们不要去打扰拉德利,有关拉德利鬼怪的故事只会在孩子的世界中出现,在大人的世界中,他们是很明了的,有时只是拿那些事来吓唬小孩子。


    疯狗事件

    ​ 在他们听到别的孩子玩枪时,他们也去问阿迪克斯什么时候能有属于自己的枪,阿迪克斯告诉他们等他们有自己的枪后,最多的就是在后院射杀瓶瓶罐罐和知更鸟,但要记住==“随便杀死知更鸟就是罪过”==。

    (此时想起了小时候玩弹弓和玩具枪的小乐趣和小教训🤣🤣🤣)

    在这里插入图片描述

    ​ 阿迪克斯不愿向孩子提及自己的一些往事,孩子让他去参加橄榄球比赛,阿迪克斯也因为年纪大了不能做好多事而推脱,在他们抱怨时,邻居告诉他们阿迪克斯以前可NB了,还是神枪手呢,镇上的人都很尊敬阿迪克斯。此后的一件事让他们改变了对父亲的看法。有一天一只疯狗在他们门前的街上乱跳,佣人卡波妮打电话报警后又通知的小镇的人,之后警长和阿迪克斯坐车赶了过来,警长说自己可能射不中,不能一击毙命,就让给阿迪克斯,显然他很信任阿迪克斯。

    阿迪克斯将眼镜扔到地上,瞄准后一枪就击倒了疯狗,这时斯库特和杰姆都对很惊讶,原来父亲的枪法这么准,这让他们很骄傲~

    在这里插入图片描述


    汤姆·鲁滨逊事件

    先说说这个事件,尤厄尔家中的白人女子马耶拉·尤厄尔喜欢上了黑人汤姆,在汤姆每天回家路过她家的时候,她都要汤姆帮她,汤姆深知,爱上白人是死罪,他死守着这个底线。有一天马耶拉却没控制住自己越界了,汤姆面对马耶拉的举动非常害怕,赶忙逃了出去。但马耶拉的所作所为却被父亲尤厄尔看见了,他父亲是一个酒鬼,他知道这件事若是传出去,自己家族的名声就被玷污了,在对自己的女儿大大出手后,协同女儿诬告了汤姆,说汤姆强奸他女儿(当时黑人的这种罪名会被处以死刑)。

    泰勒法官深知这件案子的特殊性,所以让阿迪克斯担任汤姆的辩护律师。斯库特和杰姆因为父亲担任了黑人的律师而被同学嘲笑,阿迪克斯则耐心教导他们,当杰姆问起他会不会赢时(在当时种族歧视的情况下,大家都知这是必输的事情),阿迪克斯这样回答

    ······勇敢就是,在你还没开始的时候就知道自己注定会输,但依然义无反顾地去做,并且不管发生什么都坚持到底。一个人很少能赢,但也总会有赢的时候。

    在法庭上,阿迪克斯通过自己的巧妙处理与正义直言,揭示了事件的真相,

    ······

    “但是,在这个国家里,从某种意义上来说,一切人是生来平等的——有一种人类社会机构,可以让乞丐和洛克菲勒家族的成员平起平坐,让愚人和爱因斯坦不分尊卑,让粗鄙无知的人和大学校长分庭抗礼。先生们,这种机构就是法庭——可以是美国联邦政府的最高法庭,可以是最基层的地方治安法庭,也可以是你们眼下服务的这个尊重而神圣的法庭。我们的法庭也有缺陷,任何社会机构都不例外,但是,在这个国家里,我们的发法庭是伟大的平等主义者。在我们的法庭里,人人生而平等。”

    “我不是一个理想主义者,我并不坚信我们的法庭和我们的陪审团完美无缺、公正无私——它对我来说,不是理想,而是活生生的工作状态。先生们,法庭不会比坐在我面前的任何一位陪审团成员更公正。法庭只能和它的陪审团一样完善。我对诸位先生充满信心,相信你们会用理性的眼光重新审查你们听到的证词,做出一个裁决,让被告和家人团聚。以上帝的名义,尽你们的职责吧。”

    但最后审判的结果却出人意料,以斯库特的视角,小说中有以下描述:

    接下来发生的事情就像是一场梦:我如坠云雾,眼睁睁地看着陪审员们回到法庭,他们的动作就像在水下游动一般。泰勒法官的声音听起来那么微弱,仿佛是从遥远的地方传到我耳边。眼前的情景只有律师家的孩子才有可能看到,才会担心看到,那就像是眼看着阿迪克斯走上大街,举起步枪,架在肩膀上,随后扣动扳机,但在目睹这一切的过程中,我心里非常清楚——枪里没有子弹。

    陪审团的一致回答是:有罪。

    在陪审团和其他人走后,最后阿迪克斯准备离开时,楼梯上的黑人全体起立,目送阿迪克斯离去,这是最崇高的敬重~(泪目( Ĭ ^ Ĭ ))

    在这里插入图片描述

    杰姆接受不了审判的结果向阿迪克斯哭诉,阿迪克斯开导说:“······在我们生活的这个世界上,总有什么东西让人丧失理智——即使他们努力想做到公平,结果还是事与愿违。”

    在发生了这样的事件后,好像只有孩子在哭泣。

    在与斯库特的讨论中,杰姆说出了自己的看法

    “我像你这么大的时候,也是这么想的”。他(杰姆)终于开口了, “如果世界上只有一种人,那他们为什么不能和睦相处?如果他们都是一样的人,为什么还要互相鄙视?斯库特,我觉得我开始明白一些道理了。我觉得我开始理解怪人拉德利为什么老是闭门不出了······那是因为他‘想’把自己关在屋子里。”

    关此次事件的结果,莫迪小姐对斯库特的姑姑亚历山德拉说

    “亚历山德拉,你有没有这样想过?不管梅科姆人知不知道,我们对他的敬意是一个人在这个世界上能得到的最崇高的敬意。我们坚信他是在伸张正义。事情就这么简单。”


    拉德利救人

    汤姆·鲁滨逊事件虽然没能胜诉,但也揭露了尤厄尔的罪恶,大家都对他表示厌恶唾弃,以他酗酒打人的平常作风,显然会对阿迪克斯表示不满。

    圣诞夜,斯库特在学校表演完节目后,穿着演出服(好可爱😂)和杰姆回家

    在这里插入图片描述

    在经过树林时,杰姆感觉到了不对劲,原来是醉酒的尤厄尔,他竟然要对孩子下手,以此来报复阿迪克斯,斯库特被推倒困在自己的演出服中,杰姆在反抗的过程中被扭断了一条胳膊后昏倒了,最后怪人拉德利救了他们,斯库特跑回家,拉德利将杰姆抱回阿迪克斯家中。阿迪克斯也立马拨通了警长的电话,警长在勘察现场后回来对阿迪克斯说尤厄尔死了,阿迪克斯以为是杰姆杀了尤厄尔,这显然是一起正当防卫,警长示意他是拉德利后并告诉他说:“尤厄尔是倒在自己的刀口上的,就让罪人自己承担罪责吧!”

    泰特先生走到秋千架旁边,拿起他先前放在阿迪克斯身边的帽子,然后向后捋了捋头发,把帽子戴在了头上。

    “我从来没有听说过,一个公民竭尽全力阻止犯罪的发生,是违反法律的行为——这正是他所做的。也许你要说,我有责任把真相告诉镇上所有的人,不应该有所隐瞒。可你知道这会带来什么后果吗?梅科姆所有的女人,包括我太太在内,都会捧着天使蛋糕去敲他的门。芬奇先生,在我看来,这个人为你,为整个镇子做了一件大好事儿,如果人们无视他的隐居习惯,硬要把他拉到聚光灯下——我认为,这就是犯罪。这样的罪恶,我可不想加在自己头上,如果换成任何其他人,就是另一回事儿了。可他不一样,芬奇先生。”

    斯库特在秋千上陪着拉德利,听着他们的谈话

    在这里插入图片描述

    警长走后,这时阿迪克斯和斯库特的对话如下:

    阿迪克斯坐在那里,眼睛盯着地板,沉默良久。最后他终于抬起手来。“斯库特,”他说,“尤厄尔先生是自己倒在刀口上的。你能听明白吗?”

    阿迪克斯看上去需要有人帮他打起精神。我跑过去,使劲儿拥抱他,亲吻他。“是的,我能理解,”我宽慰他说,“泰特先生是对的。”

    阿迪克斯挣脱出来,认真地看着我。“你这话是什么意思?”

    “怎么说呢,这就像是杀死一只知更鸟,对不对?"

    的确,打破拉德利的宁静就像是杀死一只知更鸟


    长大了就没多少东西可学了

    小说后面还有一句话真的深有感慨,

    长大了就没多少东西可学了


    最后,格力高利·派克演阿迪克斯真的再合适不过了

    在这里插入图片描述

    (2021/11/28晚,白鳯记~)

    展开全文
  • 】避免索引失效的一些原则我们编写SQL语句后会进行添加一些索引进行优化,但是有时候确实建了索引,但索引有时候会失效;比如在模糊查询使用 in 关键字的时候索引就失效了,这只是其中的个条件;1.复合索引的时候...
  • 这一年,这些:2020年读书笔记

    万次阅读 2021-01-29 08:06:08
    马尔堡是丝状病毒三姐妹中最温和的位,其中最可怕的是扎伊尔埃博拉病毒,致死率达到了惊人的十分之九,百名感染者有九十名难逃死。扎伊尔埃博拉病毒就像是人命的黑板擦。 我们不怎么清楚埃博拉以前做过什么,...
  • 编程理论:三个思想、六个原则是什么指导编程的思想。在编程的过程中,人们最重视的莫过于编写出高质量的代码。高质量的代码是指拥有多种扩种的方法、不存在多余的要素、可读性高,易于理解的代码。编程...
  • 2020年度程序员新书/经典书TOP10

    千次阅读 2020-12-31 15:49:34
    今年,分为两部分给大家分享,第部分2020年度新书TOP10,第二部分,2020年度经典书TOP10。 2020年新书TOP10 1、C++ Primer Plus 第6版 中文版 [美] 史蒂芬·普拉达(Stephen Prata) 著,张海龙,袁国忠 译 ...
  • sql类原则 sql语句尽可能简单(条sql只能在个cpu运算,大语句拆小语句,减少锁时间,条大sql可以堵死整个库) 简单的事务 避免使用trig/func(触发器、函数不用客户端程序取而代之) 不用select *(消耗cpu,io,内存,...
  • 现在我们将所有图书杂乱无章的摆放在一起,那么找就像大海捞针一样效率非常低。如果我们按分类整理排序后,根据类别去找对应的图书那么效率就很高了。其实这个过程就是在建立索引。查看mysql中语句执行效率...
  • 开闭原则的英文全称是Open Close Principle,缩写是OCP,...勃兰特-梅耶在1988年出版的《面向对象软件构造》一书中提出这一原则---开闭原则。这想法认为,程序一旦开发完成,程序中个类的实现只应该因错误而被修...
  • "般若"是什么意思?般若的含义 什么叫般若呢?大致上说,大智慧就叫做... 由于外文每个气都有个专有的字,而中国字欲不同,气字上面多加个字意思就不同了。空气、煤气、电气,就是人发脾气,都是气字上面加字...
  • 1. 《代码大全》 史蒂夫·迈克康奈尔 推荐数:1684 ...到你准备阅读此书时,你应该已经知道并实践过中 99% 的观念。– esac 2. 《程序员修炼之道》 推荐数:1504 Pragmatic Programmer 程序员修炼之道
  • 新手程序员必读的十本经典著作

    万次阅读 多人点赞 2021-06-14 22:28:42
    下面,小编就为大家整理了个程序员书单,希望能帮助每个想提升自己的程序员伙伴。 作为程序员呢,最终要的是技术,但是,在我看来,在读技术类的书籍之前,我们应当首先去读一些思想层面的书籍。这样,在未来的...
  • c#设计原则

    2021-10-12 18:02:41
    Martin)于《敏捷软件开发:原则、模式和实践》⼀中给出的 定义 ⼀个模块只负责⼀件事。 ⼀个类只负责⼀件事。 ⼀个⽅法只负责⼀件事。 常⻅违背单⼀职责场景 在⽅法中出现多个分⽀,分别去执⾏各⾃的逻辑,...
  • NR.2:不要坚持个函数中只包含个返回语句 Reason(原因) The single-return rule can lead to unnecessarily convoluted code and the introduction of extra state variables. In particular, the single-...
  • 索引不适合哪些场景 数据量少的不适合加索引 更新比较频繁的也不适合加索引 区分度低的字段不适合加索引(如性别) 索引的一些潜规则 覆盖索引 回表 索引数据结构(B+树) 最左前缀原则 索引下推 2. MySQL 遇到过...
  • 】避免索引失效的一些原则我们编写SQL语句后会进行添加一些索引进行优化,但是有时候确实建了索引,但索引有时候会失效;比如在模糊查询使用 in 关键字的时候索引就失效了,这只是其中的个条件;1.复合索引的时候...
  • 语句覆盖 : 程序中每条语句至少被执行次 分支覆盖或判断覆盖 : 程序中的内个分支至少走查次,即每条分支语句的真值判断执行次,假值判断也执行次 条件覆盖:当判定式中含有多个条件时,要求每个...
  • 所以:对于你的第语句: EXPLAIN SELECT * FROM student WHERE cid=1; 判断条件是cid=1,而cid是(name,cid)复合索引的部分,没有问题,可以进行index类型的索引扫描方式。explain显示结果使用到了索引,是...
  • 口气全买了,每本书都贼厚,但是都称之为经典,那怎么办?都看呗。 而实际上每本书都没看几页,要么是看不懂,要么是几页就犯困。 当时看《Effective Java》、《深入理解java虚拟机》全都脸懵,更别说那些黑皮...
  • 值得注意的是,以太坊和许多社区驱动的开源软件项目一样,从开始就在不断发展。 虽然这篇文章已经出版好几年了,但我们仍然保留它,因为它继续作为个有用的参考和以太坊及其愿景的准确代表。为了了解以太坊的...
  • 什么是重构 重构一书的作者Martin Fowler对重构的定义: 重构(名词):对软件内部结构的种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。 重构(动词):使用系列重构手法,...
  • 4、sql类原则 sql语句尽可能简单(条sql只能在个cpu运算,大语句拆小语句,减少锁时间,条大sql可以堵死整个库); 简单的事务; 避免使用trig/func(触发器、函数不用客户端程序取而代之); 不用select *(消耗cpu,io,...
  • 本书从开发者和使用者的真实逻辑出发,逐层剖析 Kubernetes 项目的核心特性,全面涵盖集群搭建、容器编排、网络、资源管理等核心内容,以生动有趣的语言揭示了 Kubernetes 的设计原则和容器编排理念,是本全面且...
  • 读者反馈译者序前言第篇 使用PHP第1章 PHP快速入门教程1.1 开始之前:了解PHP1.2 创建个示例应用:Bob汽车零部件商店1.3 在HTML中嵌入PHP1.4 添加动态内容1.5 访问表单变量1.6 理解标识符1.7 检查变量类型1.8 ...
  • 程序设计原则(总结)

    2021-04-09 20:11:34
    )结构化程序设计的主要原则 1、自顶向下  程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后考虑局部目标。不要开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化。 2、...
  • 要全部的循环语句的用法。。。。不需要有例子,只需要用法就可以C语言循环语句用法有三种主要形式:1. for()循环2. while()循环3. do {} while();循环 for()循环用法:for( e1 ; e2 ; e3 ) //注意三个区域间用分号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,976
精华内容 25,990
关键字:

原则一书经典语句