読書の進捗をはかってみた

2014-02-23  /  読書Programming

去年の終わり頃からオライリーのHead First Cを読んでいて、途中に出てくるコードを写経して練習を進めている。

kawaken/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 月下旬までかかりそうな雰囲気がする。

偶然

今回のように集計できたけど、もともと集計するつもりはなくて、たまたまコミットログのフォーマットが統一されてただけ。でも、何かの本を学習するときには、この手法は使えるなぁと思った。