# 練習 10:`sort`
> 原文:[Exercise 10: sort](https://learncodethehardway.org/more-python-book/ex10.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
你正在慢慢地構建我所說的個人流程實踐(3P),這根本不是一個新的想法。3P 的目的是客觀的洞察如何做事情,而避免殺死你的創造力和生產力。通過簡單地跟蹤小型指標和制作運行圖來指導改進,你可以徹底改變你的工作狀況。但是,這樣做的風險在于,這會阻礙你快速入侵黑客或完成任務,或者你的 3P 的工作量將比你的實際工作更多。
在我的編程生涯中,我這樣做了大約四年,并且它很好地讓我認識到我自己和我的工作方式。它還切斷了流程倡導者推動的許多謊言。我有一個簡單的方法,來實際測試一些專家對程序設計的看法是否提高了我的個人生產力。我會說,我所做的唯一錯誤就是把它看得太重了,在四年時間里我的創造力被扼殺了。
這就是為什么你要在小型的快速 Hack 中,構建你的啟動流程和工作環境的概念。只有 45 分鐘的情況下,你沒有時間收集復雜的指標,以及擔心你怎么處理事情。稍后我們將專注于需要集中的實踐,你將花費更多的時間并收集稍微更好的指標。當你工作的時候,嘗試不讓這些指標扼殺你的創造力,流程或快樂。如果你討厭收集東西,那就不要這樣做。找到一種自動化方式,或者提出另一個指標來代替。
對于這個練習,你正在制作完成功能的百分比的運行圖表。這意味著在你工作之前,你必須列舉在`sort`命令的所有功能,可以在它的標準手冊頁中可以找到,然后標記已完成的功能。記住要對它們進行排序,以便你可以完成足夠的功能,以及該工具能夠實際工作。對于不能實際工作的排序文本的工具,獲得90%的分數意味著你實際完成了0%。
完成后,你應該制作每個項目的完成功能的百分比運行圖,以便我們在下一個練習中進行分析。
## 挑戰練習
在本練習中,你正在實現`sort`命令,這是一個非常簡單的命令。它需要文本行,并按順序對它們進行排序。它有相當多的有趣選項,所以你應該閱讀`man`的`sort`頁面,來弄清它可以做什么。大多數時候,人們只是使用`sort`來排序名稱列表:
```
ls | sort
```
你也可以反向排序:
```
ls | sort -r
```
你也可以控制如何排序,例如忽略大小寫:
```
ls | sort -f
```
或者,你甚至可以執行數值排序:
```
ls | sort -g
```
這對于`ls`的輸出可能沒有用,除非它們都是數字。
你的工作是盡可能實現這些功能,并跟蹤你完成的每個功能。這些都應該在你的實驗筆記中,以便以后分析。
### 研究性學習
+ 你現在已經完成了一些改進的事情嗎?嘗試搜索并尋找其他人的流程建議。
+ 我們是程序員和代碼人。你試圖找到能使你更有效率的代碼嗎?我的朋友 Audrey 和 Danny 有一個名為 cookie-cutter 的項目,你應該查看一下。
+ 你現在應該研究如何計算一組數字的平均值。你將使用它在 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