読書の進捗をはかってみた
2014-02-23 / 読書, Programming
去年の終わり頃からオライリーのHead First Cを読んでいて、途中に出てくるコードを写経して練習を進めている。
全体で 600 ページほどあるんだけど、最近ようやく 300 ページを超えて、コミットログもたまってきたので、進捗を出してみた。
git で日付とコメントだけを取得する
git log のオプションで対応できる。
% git log --date=short --pretty=format:"%cd %s"
2014-02-21 練習(p.363)
2014-02-21 練習(p.360)
2014-02-19 練習(p.355)
2014-02-19 練習(p.349)
2014-02-18 練習(p.346)
...
awk で頑張ってみた
git のログから日付と内容が取得できたので、これをもとに進捗を計算する部分を awk で書いてみようと思ったら、awk には四捨五入が関数で用意されていないらしく、自分で計算する羽目に。
% cat progress.awk
function round(num, digit) {
if (digit < 1) {
return int(num + 0.5);
}
return int((num * (10 ^ digit)) + 0.5) / (10 ^ digit);
}
$2 ~ "練習" {
page = gensub(/練習\(p\.(.+)\)/, "\\1", "g", $2);
percent = page / 604 * 100;
print $1, page, round(percent, 1) "%";
}
小数点第 1 位まで残したかったので、round が何かめんどくさいことになってしまった。
これを実行すると進捗がわかる。
% git log --date=short --pretty=format:"%cd %s" | awk -f progress.awk | sort
2013-12-20 25 4.1%
2013-12-20 28 4.6%
2014-01-06 35 5.8%
2014-01-06 43 7.1%
2014-01-07 50 8.3%
2014-01-08 58 9.6%
2014-01-08 62 10.3%
(中略)
2014-02-17 333 55.1%
2014-02-18 342 56.6%
2014-02-18 346 57.3%
2014-02-19 349 57.8%
2014-02-19 355 58.8%
2014-02-21 360 59.6%
2014-02-21 363 60.1%
実際に出してみたら、けっこう長かったので省略したけど、だいたい 1 日 1〜2%程度の進捗っぽい。
まとまってやればすぐに終わりそうなボリュームなんだけど、お昼休みにコツコツやってるので、仕方ないか。
で、このペースで行くと、全部読み終えるのに、4 月下旬までかかりそうな雰囲気がする。
偶然
今回のように集計できたけど、もともと集計するつもりはなくて、たまたまコミットログのフォーマットが統一されてただけ。でも、何かの本を学習するときには、この手法は使えるなぁと思った。