練習(xí) 27:tr
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
這個練習(xí)是繼續(xù)學(xué)習(xí) TDD(又稱“測試優(yōu)先”)風(fēng)格的開發(fā)悬垃。知道如何這樣編程很重要茶宵,因為它在許多地方使用蹬跃,但如前所述笛厦,它有其局限性。在實現(xiàn)tr
命令時建车,您將再次使用 TDD 進(jìn)行練習(xí)扩借。要十分確定,你是先嚴(yán)格編寫測試缤至,然后是代碼潮罪,然后再審計兩個東西。
在上一個練習(xí)中领斥,我讓你逐步構(gòu)建測試用例和代碼嫉到。這通常是最不容易出錯的開發(fā)方法,但它不能幫助您更好地分析自己的代碼月洛。在這個練習(xí)中何恶,你會做一些略微不同的事情,因為我將會寫一個完整的測試用例嚼黔,進(jìn)行審計细层,然后編寫整個代碼惜辑,進(jìn)行審計,并通過運(yùn)行測試來確認(rèn)審計疫赎。
這意味著韵丑,在這個練習(xí)中你的流程是這樣的:
- 嘗試編寫大部分 TDD 測試用例。
- 審計測試用例并確認(rèn)它是否編寫正確虚缎。
- 運(yùn)行測試以確保它們失敗,但是查找任何語法錯誤钓株。此時您不應(yīng)該有語法錯誤实牡。
- 為測試用例編寫代碼,但不要運(yùn)行測試轴合。
- 審計您的代碼创坞,并嘗試在運(yùn)行測試之前查看有多少缺陷。
您將在下一個練習(xí)中受葛,使用此過程來跟蹤您的審計技能题涨、測試技能的指標(biāo),并更好地控制您編寫代碼的方式总滩。
挑戰(zhàn)練習(xí)
tr
工具是翻譯字符流的有效方式纲堵。盡管非常簡單,它可以對字符做一些非常復(fù)雜的事情闰渔。例如席函,您可以使用tr
,以一行代碼冈涧,獲取history
中使用的單詞的頻率:
history | tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn
似乎很炫酷茂附,但是 Doug McIlroy 曾經(jīng)使用這一行來辯稱,高德納(Donald Knuth)編寫的一個類似的程序太長督弓。Knuth 的實現(xiàn)是“10頁”营曼,從頭開始構(gòu)建一切。Doug 的一行只是使用標(biāo)準(zhǔn)的 Unix 工具來做同樣的事情愚隧。這展示了 Unix 的管道工具的力量和tr
的翻譯文本的能力蒂阱。
使用手冊頁和任何其他東西,弄清tr
命令的作用狂塘。還有一個同名的 Python 項目蒜危,但是我會告訴你要避開它,直到你完成實現(xiàn)睹耐,所以你可以稍后再比較這個項目辐赞。同時不要忘記,為此你需要一個整體的項目硝训,它應(yīng)該是測試完成的 TDD 風(fēng)格响委,就像我開始的描述的那樣新思。
45 分鐘的批判
我希望你繼續(xù)使用45分鐘的時間,但是有一個對這種工作方式的很大批評:你不能進(jìn)入擴(kuò)展的專注流程赘风。在短時間內(nèi)工作夹囚,像這樣,在你需要處理大量工作的邀窃,以及必須加快步伐時有所幫助荸哟。這種情況發(fā)生在工作真的很無聊,沒有樂趣的時候瞬捕。我正在讓你使用45分鐘的時間塊來加快自己的速度鞍历,但是我們也會在稍后使用它們,來收集一些指標(biāo)肪虎,有關(guān)如何在時間中工作劣砍,來進(jìn)行后續(xù)分析。
但我會提醒你扇救,最好的編程是在專注的狀態(tài)中完成的刑枝。這就是,你的注意力在幾個小時之內(nèi)高度集中迅腔,失去所有的時間感装畅,直到凌晨 5 點(diǎn),意識到你度過了一整夜沧烈。這種強(qiáng)烈的專注使編程對我來說非常愉快洁灵,但是當(dāng)您對您正在做的事情很感興趣時,它真的是可持續(xù)的掺出。當(dāng)您需要處理別人的糟糕的代碼庫時徽千,這個現(xiàn)象往往不會發(fā)生。在這些情況下汤锨,您需要一個不同的策略双抽,加快你的工作并讓你擺脫困境,而不會損耗你的興致闲礼。這就是 45 分鐘的時間塊的作用牍汹。
最后,建立你進(jìn)入狀態(tài)并集中精力幾個小時的能力柬泽,一個方法是從短暫的時間開始慎菲,然后慢慢增加它們,直到你可以忍受更長的時間锨并。繼續(xù)使用 45 分鐘的時間快露该,但是如果你只是忘乎所以,最后在最后幾個小時內(nèi)完成黑魔法第煮,那么就玩的開心解幼。沒有人會說你做錯了抑党,這實際上是正常的。
研究性學(xué)習(xí)
這種工作方式怎么樣撵摆?你喜歡嗎底靠?嘗試闡明為什么,然后閱讀一些當(dāng)前的 TDD 的文章特铝,或它的近親行為驅(qū)動開發(fā)(BDD)暑中。
你認(rèn)為通過首先審計你的代碼而不是逐步構(gòu)建它,你發(fā)現(xiàn)了更多還是更少的缺陷鲫剿?猜測它鳄逾,然后寫下來。