X重构,第1部分:关于X压抑的优雅

关于文学编程和编程文学的错觉

当人们谈论写作的优雅时,这到底是什么意思?

被人们描述为优雅的写作有什么意义?

当我们形容优雅的写作是什么意思?

优雅的书写是什么意思?

什么是优雅写作?

可能不是尝试自画像的最佳方法

即使试图说一些相对简单的事情,找到表达自己的最佳方式也不一定容易。 可能需要花一会儿以上的时间,进行几次(有时令人尴尬的)尝试,立即进行一些编辑,然后重新调整,重新考虑,重新配置-甚至在编码领域也被称为重构。

上面的五个问题都是不同的句子,是的。 可以说,他们都在细微地询问不同的事情。 但同样有可能争论,我相信很多人都会同意,他们本质上是在问同一件事,它们几乎是等效的表达。 但是,从不同的角度看,它们不是,因为即使仅在特定上下文中,一个也可能比其他所有方法都更可取。 一个可能被认为更精确,而另一个则被理解为更简洁明了,而另一个可能是两者之间的快乐媒介—一个可能完全满足我们对优雅本身所具有的任何标准,有节奏的,或流畅的,或漂亮的,或其他。 关键是,当您对一个组件不满意时,您可以对其进行编辑(或重构),直到成为另一个组件为止,而这是至关重要的部分,另一个组件基本上可以说出与原件相同的功能。

让我尝试用Java语言中的一个高度人为的例子来说明这个简单但看似深远的想法。 希望当读者从自然语言转换为形式语言时,例如将句子“让这东西成为回头客!”翻译成Javascript时,对读者来说仍然是可理解的。 也许是胡说八道,尤其是在没有上下文的情况下,但是我们正在为此而去,所以请暂时忍受可笑。 在Javascript中,这句话可以这样表达:

let thisThing = "something that comes back!"

我要说的是,这仍然很可读,但是就像它所源自的英语句子一样,没有上下文或其他任何内容,这种所谓的变量声明的作用并不大,甚至作用更小。 让我们更正此:

 函数isAFunctionThatDoesSomethingWith(thisThing){ 
返回thisThing
};

这是一个命名函数,也就是说它实际上被称为“ isAFunctionThatDoesSomethingWith()”,此处的方括号是放置要操纵的内容的位置(在上面的例子中,这就是“ thisThing”)。 当我键入此解释时,我感到有些辩解,因为在我看来,确实,该功能可能比我的解释对人类更易读。 正如他们所说的那样,线索就在名称中,然后使用我们的变量运行函数(“调用”,如果您想准确地讲它),如下所示: isAFunctionThatDoesSomethingWith(thisThing); 产生以下内容: "something that comes back!" 。 即使只是以一种毫无意义的空心方式,也可以令人十分满意。

我想知道我是否应该写所有这些纸球神秘地落在原本空荡荡的房间里的故事

但是,我们现在钟爱的函数的名称虽然可以以某种方式读取,但感觉有点笨拙,无论如何,这里的游戏名称是要重写但在功能上保持不变,对吧? 那么呢?:

 让theSameThingButDifferent = thisThing => isAFunctionThatDoesSomethingWith(thisThing) 

孩子们,信不信由你,这是一个存储在变量中的函数,因此现在用旧变量调用我们的新函数,如下所示: theSameThingButDifferent(thisThing); 现在给我们(您猜对了): "something that comes back!" 。 因此,从本质上讲,一个功能是对此事物执行某项功能的功能与该事物对同一事物执行相同的功能,但对此事物执行不同的功能。 或者,如果您愿意,该函数可以对某件事执行某项操作,该函数与同一件事相同但有所不同。 或者,如果您更喜欢等等……。 一切都照亮了,是吗?

革命性的新型鼻子识别技术被发现明显是垃圾

您可能会想知道自己:这一切是在帮助什么? 因此,再次:我的关注点在于如何区分看起来完全不同但产生相同效果的两个表达式。 在任何给定情况下都可能使一个人胜过另一个。 同样,与上述代码段相关的这种关注本身可以按照我们开头提出的一系列问题重新表述(或当然也可以重构),这样我们现在就可以问自己:什么是优雅的代码?

我的目标不是回答这个问题,也不是尝试这样做,而是悬而未决,希望暂停有关编写和编码之间,编码之间和编码之间可能存在的关系的更广泛的(至今仍被认为是基本的)含义。在文献和编程之间进行编辑和重构。

这样做,我相信前面的所有内容都不是太牵强,因为此博客文章中悬而未决的问题只是作为下一个问题或更多问题(可能更牵强)的先驱或准备工作。发布。

为了暂时完成此设置,我想从托比·利特(Toby Litt)和他本人对此类问题的反思中,以适当的标题为“文学与技术”(来自他的论文《 突变》) (2016)。 利特在这篇经过转折的文章中的论点有多种渊源,可以说有许多目标,但可以总结出一个主线,即同时捍卫和攻击当代作家,即利特所说的“不耐烦年龄”(“文学与技术》,第64页)。 为此,他首先强调以下内容:

文学不是技术的外在,文学是技术的开始。

文学取决于技术—社会在产生文学之前,需要做的不仅仅是生存。 是的,这是一种口头文化,但这是可能的,但是我是专门谈论页面上的单词,屏幕上的单词。 (“文学与技术”,第48页)

到目前为止,如此简单。 文学本质上是技术,或者至少是技术。 但是,这里已经有种感觉,利特对自己的主题表述感到有些矛盾,正如“文学”(或“技术”一词)本身的重复所暗示的那样。 在这里,人们已经向不满及其相应的重新尝试表示了点头(正如我们很快会看到的那样,这个术语本身被Litt改编,重新标定,重新存储为“ thought-spiral”),这一点在后来的他的书中更明显地体现出来。 :

这是我试图避免的另一种思想螺旋:作者必须写一些关于通过技术生活的主题(人们),以及那些通过技术生活并且将阅读该作家通过技术写的东西的人(读者)的文章。积极的选择,而不是参与他们可用的其他技术。 作家是阅读技术作家的作品的人之一。 然后,作者使用技术手段进行写作。 作者撰写有关通过技术生存的主题(人)等的文章。 。 。 (“文学与技术”,第53页)

作家,作家,作家,作家……。 您得到图片了(我现在将回到图片上)。 应当指出的是,利特(Litt)也是一位老师,他在作者袖子上戴上他对(或无法“避免”)一种重构的兴趣,他后来在讨论学生的作品时更加明确地论述了这种重构:

我相信我可以准确地说出如何创建任何文本。 它是否始终存在于计算机上,或者作者是否手动完成草稿,还是主要使用笔和纸进行工作,仅输入最终草稿即可。 在我看来,有些句子经过文字处理后非常清晰。

当作家第一次使用打字机时,人们认为这会改变散文的产生。 而且我认为它确实有些微妙。 油墨流动的节奏与金属飞溅的节奏不同。 但是,手写散文和打字散文之间的一致之处在于,对于所需的每个新草稿,每个草稿的每个句子都必须在物理上重做-重新书写,重新键入。

换句话说,这些句子一次又一次地通过作者的思想,内耳,通过作者的身体,他们的手指,而无需进行文字处理。 整个句子可能无需经过物理重做就可以多次修改。 这就是“光标的诅咒”的出现之处。因为这些经过单词处理的句子的更改方式是由作者在屏幕上阅读它们,然后确定它们想要更改某些内容,然后将光标移至屏幕区域他们想要关注的重点。 在最坏的情况下,这会导致句子通过光标创建的从现在到这里,从那里到现在的开头点来积累素材—如果句子有任何开头,那么它们将失去所有的感觉推进和所有的节奏感用。

[…]

这完全是技术问题,没有计算机就不会出现。 (“文学与技术”,第55-56页)

然而,尽管如此,“文学始于技术”和“取决于技术”。 利特(Litt)的引人入胜的,多方面的(多引人入胜的?)文章值得阅读,只要它通过使自己适应写作和重写中同时出现的技术基础和对高雅的颠覆而增强生产张力。

而在真正的哥伦布风格中,只有一件事,特别是我们的老朋友变量“ thisThing”。 您还记得其中包含的内容吗? 没错:“有什么回头了!” Litt在笔,纸,打字机和文字处理机上的移动也出现在图片中(我告诉过您他们会重新出现),特别是这篇博客文章中的图片-回到过去,看看您是否不相信我或不记得了,沉迷于令人难以置信的重构中,我想他们会描绘出这种效果,而与特定技术无关。 好像我计划了一样。 而且,在技术允许的情况下,我还计划将本文的更广泛主题(即文学和编程)也带回来,就像下一篇文章中的“ thisThing”一样。