来春プログラミングする人のためのTODO list

来春プログラミングするのは私です。人にお勧めしたいことも含みつつ、書いてみることにします。

(自分のために書いているので、やってないことも含みますがご了承ください。)


Coq
http://coq.inria.fr/
定理証明支援器として知られるCoqです。
特定の値に対して行われるテストとは異なり、数学的証明に基づいてプログラムの正しさを検証することができ、入力できる(型により制限された範囲の)すべての値に対して正しいということができます。論理関係等の勉強にもなるので結構面白いです。
ただ全自動ではなく、Coqが補助しつつ証明を進めることになります。
Coqで書いた関数をHaskellOCamlSchemeRubyScalaのコードに変換できるので、証明した関数を用いて普段のプログラミングに活用することもできます。これに関連して「Types and Programming Languages」という本にも興味があります。さすがに後回しになると思いますが…

参考ページ&書籍
プログラミングCoq - http://www.iij-ii.co.jp/lab/techdoc/coqt/
Coq Tutorial - http://www.slideshare.net/tmiya/coq-tutorial

Interactive Theorem Proving and Program Development: Coq’Art: The Calculus of Inductive Constructions (Texts in Theoretical Computer Science. An EATCS Series)

Interactive Theorem Proving and Program Development: Coq’Art: The Calculus of Inductive Constructions (Texts in Theoretical Computer Science. An EATCS Series)

Types and Programming Languages

Types and Programming Languages


Alloy
http://alloy.mit.edu/alloy/
Coq等の証明は厳密性が高い分、コストも高いのが難点になるのでもう少し厳密性を排しつつ、効果的にソフトウェアの欠陥がないことを数学的に検証する"軽量な形式手法"を用いて検証するのがAlloyです(であってるはず)。
まだ始めてないので夏になる前にはやってみたいところです。

参考ページ&書籍

抽象によるソフトウェア設計−Alloyではじめる形式手法−

抽象によるソフトウェア設計−Alloyではじめる形式手法−



OCaml

http://caml.inria.fr/
オブジェクト指向+関数型のプログラミング言語です。
ネイティブコードも吐き出せ、C言語などとの連携も取れます。使いこなせるようになりたいですが、なかなか難しいです。
問題としてはWindows環境との相性の悪さが結構あります。なのでWindows環境ではなかなかお勧めできない言語です(WindowsではOCamlと同じMLの方言であるF#と言う言語がいいですね)。
あと日本だけでなく海外でもそこまで多くの実践系の書籍がないことが初心者以上になることを難しくしている気がしますが、今年中に「Real World OCaml」という本が出るらしいです。楽しみですね。

参考ページ&書籍
OCaml.jp - http://ocaml.jp/
ocaml-nagoya - http://www.itpl.co.jp/ocaml-nagoya/

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~


継続的デリバリー
本もらったので、読んでみようと思ってます。
実際にビジネス、ユーザを巻き込んだ形での素早く安全なデリバリー(≠リリース)ができるならそれが一番いいので、それをいかに回すかちゃんと勉強しようと思ってます。

参考ページ&書籍

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化

継続的デリバリー 信頼できるソフトウェアリリースのためのビルド・テスト・デプロイメントの自動化


アジャイルな見積りと計画づくり
これは完全に本のタイトルなんですが、見積りや計画づくりと言ったことは難しいのでちゃんと勉強してみようと思ってます。本を読んでいると意外と基本的な用語もちゃんと知らないときがあったりして、そのあたりの勉強もしつつ読み進めてます。

参考ページ&書籍

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~


TDD
TDDです。
テストしやすいことが参照透過性にもつながると思うので、TDDをしつつ少しでもプログラミング中にテストを常に意識しつつ書いていくようにしようと思ってます。
去年まではソフトウェアテストそのものの知識の不足があって、なかなかTDDが上手く出来ていなかったと思います。これからはソフトウェアテスト技法や知識を生かしつつTDDをやっていきたいと思ってます。


ソフトウェア設計
ソフトウェア設計と一口に言っても色々あると思うのですが、全般的にやってみたいことが多いです。ユースケース駆動開発の本は読みなおしたいですね。
あと今は「インターフェース指向設計」と言う本があるらしいのでちょっと読んでみたいかなと思ってます。

参考書籍

ユースケース駆動開発実践ガイド (OOP Foundations)

ユースケース駆動開発実践ガイド (OOP Foundations)

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践

インターフェイス指向設計 ―アジャイル手法によるオブジェクト指向設計の実践


全部やるのは難しいので一歩ずつ前進していこうと思います。