简单易行(2011)

2020-07-21 21:11:22

Rich Hickey是Clojure的作者,是一名独立的软件设计师、顾问和应用程序架构师,在软件开发的各个方面都有20多年的经验。里奇从事过调度系统、广播自动化、音频分析和指纹识别、数据库设计、产量管理、出口投票系统和机器监听方面的工作。

奇异循环是一个多学科的会议,旨在将开发人员和思想家聚集在一起,在新兴语言、替代数据库、并发、分布式系统、移动开发和网络等领域构建未来的技术。

简单经常被错误地误认为容易。轻松意味着近在咫尺。简单意味着平易近人。简单是复杂的反义词,意思是缠绕在一起。简单=容易。

软件中最重要的是:软件做了应该做的事情吗?它质量好吗?我们能靠得住吗?一路上的问题能解决吗?需求会随着时间的推移而改变吗?这些问题的答案是在编写软件时重要的是什么,而不是编写代码的体验的外观和感觉,或者它的文化含义。

简单性的好处是:易于理解、易于更改、易于调试、灵活。

简单的构造:值、函数、命名空间、数据、多态、托管引用、集合函数、队列、声明性数据操作、规则、一致性。

通过以下方式构建简单的系统:抽象-通过回答与什么、谁、何时、何地、为什么和如何相关的问题进行设计。

2:02";Simple&34;的词根是";sim&34;;和";plex&34;的词根是";one twist&34;的意思是";one twist&34;的意思是";one twist&34;。相反的,这将是复杂的,是多重缠绕或编织在一起的。

2:30演讲的中心点是看软件是不是折叠在一起。

2:54";Easy&34;“的拉丁语起源是";相邻&34;的词根,意思是";躺在";附近,而";则在";附近。

3:34简单的事情只有一个作用。他们完成一个任务,他们有一个目标,他们涵盖一个概念。

简单的事情可能是他们试图解决的多维问题的一个维度。

4:12简单并不意味着独一无二。接口不必只有一个方法才能简单。基数在这里并不重要。重要的是不要让问题交织在一起。

5:16 Easy的由来暗示着近在咫尺,靠近的东西可以很容易地触摸或抓到。(这句话的意思是“容易”的意思是“靠近”的意思是:靠近的东西很容易摸到或抓到。)。

5:58在软件开发中,Easy意味着接近我们的理解,掌握我们的技能,熟悉我们。

6:20 Easy在软件业被高估了。我能在5秒内让它运行起来吗?";如果结果是一大团泥球,那也没有关系。重要的是动作要快。

所有的新事物都有些陌生。即使一开始很难掌握或做,也不要回避。

7:14人们说一些超出他们能力范围的事情通常会感到不舒服。

8:17容易是一个相对的术语。有些事情对某人来说可能是容易的,对另一些人来说可能是困难的。

8:44很多时候,开发人员说有些东西很简单,但他们的意思是简单,因为他们的意思是他们熟悉的东西。

9:05在处理软件构造和工件时,简单和容易之间的区别是相关的。

9:36工件的属性是它如何运行,它的性能是什么,它可以如何随着时间的推移而改变。这些属性不是原始构造(代码)。

10:06人们把太多的注意力放在构造上,他们写东西有多容易,或者用一个开发人员替换一个开发人员有多容易,只考虑了所使用的工具的熟悉程度,而不考虑新开发人员需要处理的代码的简单或复杂。

我们应该问自己这些问题:软件做了应该做的事情吗?它质量好吗?我们能靠得住吗?一路上的问题能解决吗?需求会随着时间的推移而改变吗?这些问题的答案是在编写软件时重要的是什么,而不是编写代码的体验的外观和感觉,或者它的文化含义。

12:34";我们只能希望让我们理解的事情变得可靠。这通常是需要权衡的。当发展一个系统,使其更具可扩展性和动态性时,可能会变得更难理解和决定它是否正确。

13:24人一次只能变戏法做几件事,很少。一个人一次能想到的事情的数量也是如此。当事情交织在一起时,这就变得更加困难,因为人们不能孤立地对它们进行推理。

14:35为了能够更改现有的软件,您需要了解它,并决定如何以及在哪里应用更改。如果一个人不能对一个计划进行推理,他可以做出那些决定。

15:45问:外面的每一个虫子都发生了什么?答:它通过了类型检查,并且通过了所有测试。

17:35只有跑得很短的人才能从比赛开始就使用他们的最大速度。一些人试图通过每100码发射发令枪来欺骗生活,并称之为新的冲刺。

18:50如果你选择轻松,事情会进展得很快,但随着时间的推移,累积的复杂性会扼杀项目。如果选择简单性,项目开始的速度会更慢,因为人们必须仔细考虑。

19:35简单的事情可能很复杂。可以有描述简洁、熟悉、可用且易于使用的复杂构造。这是附带的复杂性。

简单的好处是:易于理解、易于更改、易于调试、灵活。

我们可以把它们带到手边,通过学习变得熟悉,从而使事情变得更容易。

我们不能突然改变我们的大脑去理解一些复杂的东西。我们需要简化复杂性,这样我们才能处理它。

因为我们同时处理多少球是有限的,我们需要决定我们想要多少附带复杂性与问题复杂性。

28:08程序员喜欢只强调新工具或新方法的好处,但他们很少提到缺点或权衡。

28:50复杂:状态、对象、方法、变量、继承、切换、匹配、语法、命令性循环、参与者、ORM、条件、不一致。更简单:值、函数、命名空间、托管引用、多态性、数据、集函数、队列、声明性数据操作、规则、一致性。

33:08完成的意思是把辫子编在一起。作曲的意思是把……放在一起。如果模块高度互连,则组成模块化组件并不简单。

35:40状态很容易,但会带来复杂性,因为它交织着价值和时间。状态与它直接或间接接触到的一切交织在一起,模块和封装不会减轻它的影响。

42:58人们可以用更简单的工具更好地编写复杂的系统,这些工具让人们专注于系统,而不是语言或工具的构造。

47:22我们需要学会忍受环境的复杂性:CPU、内存、与实现相关的固有复杂性(例如GC)等等。

通过以下方式构建简单的系统:抽象-通过回答与什么、谁、何时、何地、为什么以及如何相关的问题进行设计。

50:38回答什么应该使用可用的构造-接口、协议、类型类-来创建函数集,并使它们成为抽象。

该怎么做,以后由你自己或别人来解决吧。

52:40回答构建较大组件时由谁负责,将子组件作为参数传递。不要硬把他们和他们的父母连在一起。

56:06信息很简单。保持简单。不要使用对象来处理信息。这不是物体的本意。我们需要创建处理信息的泛型结构。您只需构建它们一次,然后重用它们。对象增加了该领域的复杂性。

57:00如果您有地图,请使用地图构造。不要为其创建对象。将数据保留为数据。不要将数据逻辑与其表示联系起来。避免ORM。

57:20选择简单的工具。写一些简单的东西。把别人的工作理顺,使之简单化。

简约是一种选择。我们有一种复杂的文化。避免使用工具(语言、构造等)。会产生复杂的输出。简单!=简单。寻找复杂性并避免它。可靠性工具--测试、重构、类型系统--是好的,但却是次要的。他们不强制要求简单性。它们只是一张安全网。