# 练习 12:复习
> 原文:[Exercise 12: Review](https://learncodethehardway.org/more-python-book/ex12.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
我的疯狂方法的第一阶段对我来说是足够的,但不是为你准备的。我们现在要检查这本书这部分的策略,以便将来可以继续使用它。这个策略是:
+ 你需要处理每个项目的起步。
+ 为了隔离这个问题,你可以坐下来,在 45 分钟内完成一些小项目。这会把重点放在项目启动的问题位置,并让你重复该流程的一部分。
+ 当你处理这些项目时,可以确定项目启动时的问题的可能原因。这可以表现为你的计算机设置,工作环境,心理思维过程或身体健康的形式。还有更多的,但是这是最可能的原因。
+ 一旦确定了可能的原因,你就可以在 45 分钟 Hack 的小间隔内消除或改变它们。
+ 最后,记录和绘制指标,看看这些可能的变化是否有帮助,但也要确保它们不会干扰你的表现。
这不需要是正式的科学流程,它就是实用的。所有你需要的是,将它当作一本日志来帮助你客观地看待你的工作方式。如果你做的正确,你会遇到你以前没想过的惊人的事情。收集数据迫使你探索新的可能性,并扩展一些东西,你认为它们可能是原因。
请记住,这个个人指标的日志不应与其他人分享,特别是管理人员。管理者会试图将这些指标强加于你,这是不可行的,如果这样做,那么你应该拒绝。这些是你的私人笔记,没有人有权阅读 -- 非常像日记或私人电子邮件。
## 挑战练习
最后的练习是让你选择最喜欢的工具,并花费一系列 45 分钟的时间,在一周或更多课程中优化它。使用你所学到的关于自己的一切,接受这个项目,从头开始,创造出更加健壮的东西。限制你自己 45 分钟一次,但不要把这个最终的项目当作一个黑魔法。相反,这是你正在开发的黑魔法的下一步。
在我完成一些快速的 Hack ,来测试一个想法之后,我将删除它或清理它。 如果这个黑魔法十分恶心,它就不能看到明天的太阳了,那么我就删除它,并以一个干净的开始重新实现它。 你不会忘记你所做的一切,并且必须解决这些问题,但是关注质量将会帮助你把它做得更干净。 如果黑魔法没有那么糟糕,那么我要做的就是在扩展之前进行清理。
将黑魔法转化为健壮的程序的一种有效技术是,使用自动化测试套件,将它的关键元素提取到库中。这迫使你将代码视为将在其他代码中使用的代码。我会这样做:
+ 浏览文件,并将我的“黑魔法意识流”转换成一组函数。
+ 然后我会使用 + DRY(不要重复你自己)重构代码,确保删除重复的代码,但不要太多。 零重复代码基本上是加密的随机的东西。
+ 一旦清理和运行完毕,和之前一样,但是带有函数,我将这些函数放进模块,并确保原始代码保持有效。 记住,不要在清理过程中改变事情,只需要重新组织并修复它。
+ 代码移动并再次正常工作之后,坐下来编写测试用例,确保我开始修改东西时,它能够在未来继续工作。
对于这个练习,你要选取你最喜欢的项目,并对它做这个“正式化”的过程。保持 45 分钟一次,并通过上述流程进行清理。当天工作时间最好超过 45 分钟,只需确保在每次会话之间休息 15-30 分钟。这是相同的时间框架,除非你不在 Hack,你应该认真对待。
## 研究性学习
+ 将你的黑魔法代码与你的正式代码进行比较。你是否通过清理找到错误?是否还有其他改进?
+ 如果黑魔法和清理后的代码在行为上几乎相同,那么你真的需要清理黑魔法吗?为什么你需要清理黑魔法,即使它的工作正常,并且可能更简单?
+ 在你经常运行的命令列表中,尝试一个新的命令(参见练习 11),并尝试这个完整的流程。完成一个快速的 Hack,然后清理它,使它变得正式。
## 深入学习
这里是其它命令的列表,你应该尝试在 45 分钟内做出替代品:
+ `ls`
+ `rm`
+ `rmdir`
+ `mkdir`
+ `cal`
+ `tail`
+ `yes`
+ `false`
尝试实现它们中的一些吧。
- 笨办法学 Python · 续 中文版
- 引言
- 第一部分:预备知识
- 练习 0:起步
- 练习 1:流程
- 练习 2:创造力
- 练习 3:质量
- 第二部分:简单的黑魔法
- 练习 4:处理命令行参数
- 练习 5:cat
- 练习 6:find
- 练习 7:grep
- 练习 8:cut
- 练习 9:sed
- 练习 10:sort
- 练习 11:uniq
- 练习 12:复习
- 第三部分:数据结构
- 练习 13:单链表
- 练习 14:双链表
- 练习 15:栈和队列
- 练习 16:冒泡、快速和归并排序
- 练习 17:字典
- 练习 18:性能测量
- 练习 19:改善性能
- 练习 20:二叉搜索树
- 练习 21:二分搜索
- 练习 22:后缀数组
- 练习 23:三叉搜索树
- 练习 24:URL 快速路由
- 第四部分:进阶项目
- 练习 25:xargs
- 练习 26:hexdump
- 练习 27:tr
- 练习 28:sh
- 练习 29:diff和patch
- 第五部分:文本解析
- 练习 30:有限状态机
- 练习 31:正则表达式
- 练习 32:扫描器
- 练习 33:解析器
- 练习 34:分析器
- 练习 35:解释器
- 练习 36:简单的计算器
- 练习 37:小型 BASIC
- 第六部分:SQL 和对象关系映射
- 练习 38:SQL 简介
- 练习 39:SQL 创建
- 练习 40:SQL 读取
- 练习 41:SQL 更新
- 练习 42:SQL 删除
- 练习 43:SQL 管理
- 练习 44:使用 Python 的数据库 API
- 练习 45:创建 ORM
- 第七部分:大作业
- 练习 46:blog
- 练习 47:bc
- 练习 48:ed
- 练习 49:sed
- 练习 50:vi
- 练习 51:lessweb
- 练习 52:moreweb