1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/part3.md
wizardforcel c93bf94dbd part3
2017-08-17 14:18:21 +08:00

74 lines
9.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 第三部分:数据结构
> 原文:[Part III: Data Structures](https://learncodethehardway.org/more-python-book/part2.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
你正在以你的方式构建个人流程,它让你以有限的阻碍快速起步。拥有良好的起步流程,以及培养一种尽管去做的能力,就是创造力的基础。创造力是一种流动性和放松的心态。如果你的起步充满阻碍和沮丧,那么很难进入这个流程。学习“点击”你的大脑,使其进入具有创造力的、松散的 Hack 模式,可以帮助你使用创造力解决问题,并提高生产力。
如果你做的是垃圾,那就没有意义了。首先,是的,显然,你所做的绝大多数都是垃圾,但你不想在你的余生中制造糟糕的软件。你需要平衡创造性的黑客心态和严谨的质量心态。我提倡人们在创​​造性表达和批判性思维模式之间切换。通过放松和创造力,你想出你的想法并实现它,然后通过批评自己的工作来使他们可靠和品质高。
在第二部分中,当你跟踪 45 分钟内实现的功能数,并寻找可以改进你的启动流程的地方时,实际上就做到了它。但是,由于批判性思维模式是创造力的杀手,因此你无法同时 Hack 和分析你的流程。这个建议几乎涵盖了我所知道的每一个创造性规律,并帮助你在工作时不使用自己的方式。
>
> 创造过程中的批评会扼杀你的想象力。没有批评的创造只会产生垃圾。你需要这两个,但不是同时。
在第三部分中,你将切换到专注于质量和开发个人流程,从而提高你的质量。为了使其变得简单,我只会将质量定义为:
> 低缺陷率和可理解的代码。
大多数程序员在这两个方面绝对是糟糕的。绝大多数开发人员认为,当编译完成时,他们的工作就完成了,就是这样。他们运行了测试套件,所以就完成了!我称这个“程序员风格的完成”,其中它们对自己的作品没有自我批评的评价,因为他们完全相信他们的电脑来找出所有的缺陷。他们似乎从来不在乎,别人是否可以理解他们的代码,只关注它是否运行良好来满足最低限度。如果你曾问过他们每天的缺陷率,他们会瞪着你,说这并不重要。代码覆盖?呸。他们的测试套件有 10 万行代码!它肯定测试了一切东西!
为了成为一名更好的程序员,你必须开始开始做一些残酷的事情,观察自己的质量指标和实践。我说这项工作是残酷的,因为它清晰并明确地展示出你是多么糟糕,对于那些开心地认为他们很棒的人来说,这可能是个悲剧。那些具有骗子综合症的人,会发现这种质量分析令人耳目一新,因为它会给你一个合理的想法,你的工作有多好,以及一个改进计划。
## 通过数据结构测试质量
数据结构是一个简单的概念。你的计算机拥有内存和放入内存的数据。你可以随意填充它,也可以提供一种使数据更容易处理的结构。自从“计算机科学”开始以来,人们一直在分析如何为不同目的构建数据,然后这些结构有多好。由于数据结构定义好了,我们可以使用它们来研究你的质量实践。你将实现每个数据结构并进行测试,然后通过两个步骤来确定实现的质量。
你进行数据结构练习的流程如下:
+ 每个练习都将描述数据结构,以及你可以做什么。这个描述是中文,图表和示例代码。我将给出一个没有代码的结构的完整描述,因为你需要实现它,并使其正确。
+ 你可能还需要一套必须通过的测试,但是这些测试也可能用文本写成,因此你还将编写自动测试。
+ 你将在 45 分钟内持续进行训练来做一些东西,然后休息一阵子,但你可以在每次实现中花费更多时间。我建议你做一些简单的黑魔法,然后“认真起来”,并在更多的时间段中优化你的实现。
+ 当你相信你“完成”时,你会切换到批评模式,并开始了解你的实际情况。你将遵循一个审计流程,让你仔细阅读你的代码,并查找错误,跟踪你的代码。
+ 最后,你将修复在审计阶段发现的缺陷,并继续处理这个练习,直到完成。
这就是相关的流程,所以这部分的前两个练习(练习 13 和 14将由我完成现场制作所有的缺陷都是我做的所有的代码都是我写的。你可以在视频中看到这个流程的工作原理并在练习中阅读我的代码以便你了解预期的东西。我会遵循我上面所述的严格流程尽可能接近所以你需要仔细观看视频。
## 如何学习数据结构
有一种正式的数学方法,用于研究算法和数据结构,但我不会设计过多背后的理论。如果你对这个微小的简介感兴趣,那么你可以阅读几本这个主题的书,并花几年研究这个计算机科学分支。在这本书中,我将向你提供练习,以便你学习如何从记忆中实现它们,并了解它们的工作原理。你不需要正式的证明,只需要简单的 Python 代码和反复尝试。
通过这些练习,我希望你遵循一种具体的方式来研究它们,以便你可以从记忆中实现它们。当我学习音乐,和尝试画出我看到的东西时,我使用这个相同的流程。它适用于任何东西,其中你需要记住一个概念,但也可以通过创造力应用于不同的情况,所以你不能只是记住它。相反,你执行我所说的“记忆,尝试,检查”:
+ 构建一切信息和材料,它描述你必须记住的所有事情。尽你所能来记忆并记住它,即使它只是信息的一小部分。
+ 把所有的信息拿走,所以你看不到它。我喜欢把它放在不同的房间,所以如果我需要再次查找,我必须离开我的作品。
+ 尝试从记忆中创建所需的东西。尝试放下任何东西,无论是对的或错的。
+ 当你用尽了你记住的东西后,把你所做的一切拿过来,然后返回你的信息并进行比较。标记所有你做错了的东西,然后再试一次。
+ 使用你的错误列表,专注于记忆,以便你在下次尝试时更正错误,并重新做一遍。
我喜欢进行 2~15 分钟的记忆,然后进行 10~45 分钟的尝试,但你会知道你什么时候用完所有知识,需要去获得更多。我将给出一个具体的例子,解释我如何根据我的记忆来画画:
+ 我要画一朵花,所以我把花放在我房子的一个房间里,我的画在另一个房间里。
+ 我坐在花的房间里,盯着花。我画出那朵花。我用手指跟踪它,试着在我的脑海里想象它。我想象自己画每个花瓣,茎,和一切东西。我记得比例。我甚至可以使用笔记记录颜色,并尝试在花的房间中混合颜色。
+ 我把所有东西都放在花的房间里。我很快回到画室,试着唤醒花的记忆,找出下一步要画的东西。也许叶子是我最终熟悉的东西。我画出它。也许现在花盆很清楚,我画了一些。我继续闭上眼​​睛,试图想起图像,然后尝试画出来。
+ 当我被卡住或者我用完时间的时候,我站起来,把我的小画板带入花的房子,并将其与我看到的比较。然后我会记录我的错误。一只花瓣太长吗?花盆的角度错了吗?土壤太暗了吗?我记下笔记,弄清楚我错了什么。
+ 然后我把画带回画室,并回到花的房间,在下一个回合中,用这个错误列表继续从记忆中学习。
我从这个流程中画出的画,通常相当奇怪,但接近于原件,这取决于我用了多少回合,而且我多长时间练习一次。最终这帮助我变得更好,并快速捕捉到我看到的东西,因为我可以在我的记忆中将更多的视觉信息保存更长时间。
当你进行这些算法练习时,你可以使用相同的流程,来发展你在面试中根据需要回忆它们的能力。你应该首先坐下来,使用你可以使用的所有信息来实现它们,并了解它们的工作原理。记住你不明白的东西很难记住。你有一个好的实现后,你可以开始训练你的记忆。
+ 将所有书籍,笔记,图表和关于该算法的信息放在一个房间中,将计算机放在另一个房间中。如果需要,打印出你的代码。
+ 花费 15 分钟的时间来学习算法房间中的信息,记下笔记,绘制更多的图表,可视化数据的流动方式,并且做任何其他可以想到的事情来学习。
+ 将所有信息留在算法房间,走进笔记本电脑的房间,坐下来尝试从记忆中实现它们。在检查你的作品之前,不要花费超过 45 分钟。
+ 带着你的笔记本电脑进入算法房间,并记录你的错误。
+ 把你的笔记本电脑放回去,然后再回到算法房间,再进行一遍记忆和学习。专注于所有你做错了的事情,这将使它更容易。
最初的几次中,这样做会令人沮丧,但很快,你会发现它变得更加容易,而且在许多情况下,你可以冥想来使其生效。