# 練習 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