https://www.jsbc.or.jp/research-study/prog/build_prg_outline.html