# 第二部分:簡單的黑魔法
> 原文:[Part II: Quick Hacks](https://learncodethehardway.org/more-python-book/part1.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
你有最好的想法,你會打動世界!你會成為一個億萬富豪!你的大腦與這個概念融為一體,你會在你的夢想中看到它,它像幽靈一樣困擾著你。下一步就是實現它,將其從大腦中移出并放進計算機。你必須殺死鬼魂,將幽靈從靈魂世界中帶出來,將其綁定到一個 Python 圖騰上,并將其扔到互聯網的海洋中。
對你而言足夠有創意嘛?
創造力的敵人就是起步。如果在安裝程序的過程中存在障礙,你怎么能實現你的夢想?如果你的想法非常強烈和龐大,讓你開始擔心呢?你足夠好嗎?你足夠聰明嗎?那個著名的程序員,會首先讓你寫出測試,否則會由于你不知道該怎么做而生氣嘛?入門通常是創造力中最困難的事情之一,這本書的這部分旨在讓你渡過它。
我是畫家,音樂家,作家和程序員,所以我知道一兩件關于創意的事情。我更了解入門和流程。當我對處理某個項目不感興趣的時候,流程是將我拖出項目的泥濘的東西。但是,如果沒有首先的起步,我就不能走到這一步。
起步需要勇氣,并且對任何人的想法有些不關心。在繪畫中,當我不能開始時,我只是隨意抓取顏料,并在畫布上砸在正確的位置。很多非常成功的畫家都是這樣工作的。其他畫家從頭開始研究 - 學習,測試,素描,然后最終將它們全部放到一起來開始。作為一個作家,我所做的第一件事就是在我的房子周圍散步,瘋狂地和自己說話,想像我正在和某人交談,然后當我說出足夠的說話時,我坐下來寫作。我只是寫下了出現在我腦子里的第一件事。
我不會坐下來寫作,或者擔心語法。我不會問,“我很聰明嗎?”我只是寫出我如何說話,并將其輸入鍵盤,然后當我完成了幾個段落,我會看一看。它是否有意義?我需要清理嗎?這樣的確有效,并讓我繼續下去。也許我寫的是垃圾。但是,我開始了,并且這個很重要。之后,我依靠我的流程把起始點變成一個完整的詞。
你如何看待這個創造性的起步?我的朋友,你需要弄清楚,并且這本書會有所幫助。首先我們需要打破你對這個起步的恐懼。也許甚至不再害怕了。也許在你開始編程之前,你需要做大量無意義的事情,這樣你才能夠溢出所有障礙。
我在第一部分說過,如果你每次去做一件事的時候,你必須清理一小時,并修復一堆工具,你就不會有創造力。
## 如何實踐創造力
在這本書的這一部分,你將通過讓自己立即開始,快速實踐創造力。我會給你簡單的超級無聊的小項目。我的意思是,Unix 的`cat`命令只是輸出一個文件。老實說就像兩行 Python 一樣簡單。這些項目的起步是重要的,為了起步,你會變得冷酷無情。你要坐在你的電腦旁邊,縱身一躍,讓事情發生。就是現在,不是30分鐘后。
你怎么做到他呢?你需要一個清單,你需要自動化。清單是你必須準備好去做的所有事情。打開你的電腦,關掉社交媒體,啟動你的編輯器,摸一摸你的幸運的橡皮小鴨,做一個神圣的禱告,冥想 10 分鐘,然后復制你的項目框架并開始。這是一個例子,但你需要一個檢查列表,并且越短越好。
但你不知道這個清單是什么。也許你有一個想法,但你在開始工作之前真的知道你所做的一切嗎?這就是每個項目中,你將重點關注的東西。在第一個項目中,你會坐下來嘗試一下,但你會記下你所做的一切。你不能管理無法測量的東西,這是衡量自己的第一步,來看看你如何做某件事情。如果你有屏幕錄制軟件會更好。打開它,并記錄你自己寫出了一個糟糕的軟件,然后觀看視頻。記下你做了什么
為了確保你不要在項目中埋頭骨干,而是練習起步,你還將為每個項目設置一個嚴格的計時器。你必須在45分鐘內完成最棒的垃圾。不多不少。開始時設置一個45分鐘的定時器,準備好你的本子和鉛筆,然后去做吧。當定時器關閉時,你完成了。看看你做了什么,然后好的那部分才會出現。
每個項目后,拿起你的列表,并找出可以做什么來消除障礙。你坐在那里,做許多小文件,并且必須在互聯網上查找嘛?制作項目框架吧。你在文本編輯器中輸入命令時似乎有問題嗎?花時間學習來更好地使用它,或學習盲打。你不知道基本的命令和 API 嗎?去獲取一些書來學習吧,我的朋友。
然后刪掉代碼并重新開始。從頭開始。使用新的紙張開始寫,或開始錄制。無論你需要做什么來跟蹤你所做的事情。這次你更進一步了嘛?有更少的障礙嗎?你的目標是減少想法和實現之間的時間,直到起步只是你做的一件事情,就像吃飯和呼吸那樣,最終你會感覺到起步是自然的,之后你可以繼續下一個項目。
請記住,你要立即坐下來并編程。盡管去做吧。如果一個內心的聲音告訴你,你這樣做錯了,就告訴那個愚蠢的聲音來讓它閉嘴。這才是 Hack。保持放松并全力以赴,就像你只是把代碼扔給一個朋友,它知道你是傻瓜但仍然很有趣。像測試和質量這樣的愚蠢的事情可能會在本書的后面出現,但現在只需要編程,把東西搞亂,實現一些黑魔法。獲得想法比贏得虛構的質量比賽更重要。
在每個倉促的 45 分鐘 Hack 之后,你坐下來查看你是怎么做的。這個“創造然后批改”的流程,將來可以幫助你改善。
## 菜鳥程序員的流程
如果你剛剛開始,并且在啟動項目時還是完全失敗了,那么我將為你提供一個簡化的流程,以便你使用它來開始。這部分的練習是進行 45 分鐘的 Hack(編程 ),但作為一個菜鳥程序員,你可能需要更多的時間,或者你可能不知道從哪里開始。在這種情況下,請隨意使用 60 分鐘或使用兩個 4 5分鐘的時間進行每項練習。
對于一個流程,菜鳥程序員應該在每個會話之前執行以下操作(在啟動計時器之前):
+ 準備好你的電腦,并確保你準備好了。
+ 閱讀任務描述并記下筆記。這是你的研究階段,你需要以書面形式收集盡可能多的信息。
+ 進行研究,并將其轉化為 TODO 列表,了解你需要做什么來實現這個黑魔法。寫下你可以想到的任務。你需要創建什么文件?什么目錄?什么功能?你會使用哪些庫?
一旦你有了 TODO 列表,你就可以啟動定時器了。在你的 Hack 會話中,你將執行以下操作:
+ 選擇你的 TODO 上第一個最簡單的任務,并完成它。你需要一個文件嗎?創建它!你需要一個目錄嗎?創建他!
+ 檢查你剛剛做的工作。
+ 刪除當前任務,執行下一個任務。
我認真對待這個流程。它是我使用的一個較小的版本,但它可以用。幾乎每個流程都只是“制作一個清單,完成它,檢查它”。如果它適用于我,它將適用于你,所以如果你不知道該怎么做,你應該使用它。
## 菜鳥程序員的編程流程
此過程也將適用于你編寫的代碼。我在第一本書“笨辦法學 Python”中介紹了它。當你不確定如何寫一段代碼時,遵循這個流程:
+ 用簡單的中文寫出,你的代碼應該做什么。如果你需要把它寫成一個段落,那么就這樣做。如果你可以把它寫成一個任務列表,那就更好了。如果你寫出了一個段落,那么你將把它轉換成代碼必須做的事情的列表。
+ 把這個列表變成注釋,把`#`放在每行的前面。
+ 從頂部開始,在每個注釋下,編寫 Python 代碼使其有效。如果注釋太抽象,那么將其分解成較小的注釋并重復此步驟。
+ 運行代碼,來確保你剛才寫的內容沒有語法錯誤,并且基本能工作。
這就是你需要做的所有事情。如果你可以用你的中文(或任何自然語言)來表達你想要的代碼,那么你可以輕松地實現代碼,而不必考慮代碼。最終你不需要先寫注釋再寫代碼,但是當我卡住的時候我還是這樣做的。
- 笨辦法學 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