書いたことある順とは言ったものの、次あたりから順番テキトーになりそう。
「Lisperの気持ちを分かるようになりたい」とプログラミング言語およびプログラマに興味をもった後、どこで偏見を仕入れてきたのか「いきなり関数型言語はアレなんでしょ?」ということでJavaの勉強をすることにした。まず、やさしさを掲げてる風の本が「引数」の読み方を教えてくれず(自分はどこかで知っていた)、そういう本を警戒するようになった。次に、分厚くて大きい翻訳本に手を出してみると、何も教えてくれない(分かってると分かる)系の本で悲しくなった。少なくとも読み物にはなっておらず、何一つ説明された気持ちになれなくて放り出した。
最終的に行きついたのが『Introduction to Programming Using Java』で、正確にはその6th Edition。アメリカのどこかの大学の先生が作ってるオンラインテキストで、ペーパーバック版だと700ページぐらいらしい。紙のページ数を先に知ってたら読まなかったかもね。目次はこんな感じ。
- Chapter 1: Overview: The Mental Landscape
- Chapter 2: Programming in the Small I: Names and Things
- Chapter 3: Programming in the Small II: Control
- Chapter 4: Programming in the Large I: Subroutines
- Chapter 5: Programming in the Large II: Objects and Classes
- Chapter 6: Introduction to GUI Programming
- Chapter 7: Arrays
- Chapter 8: Correctness, Robustness, Efficiency
- Chapter 9: Linked Data Structures and Recursion
- Chapter 10: Generic Programming and Collection Classes
- Chapter 11: Advanced Input/Output: Streams, Files, and Networking
- Chapter 12: Threads and Multiprocessing
- Chapter 13: Advanced GUI Programming
「コンピュータというのはね」みたいなところから始まって、ずっと文章が楽しくて嬉しくて感動してた。タイトルにそのままあるように、これで(Javaというより)プログラミングに入門したんだと思う。これは本当に良い出会いだった。Free Programming Booksというページで見つけたことは記録から分かっているのだけど、このページをどうやって見つけたかは覚えていなくて、たぶん雑にググったんだと思う。
楽しくて嬉しくて感動したものの、Javaは何も書かないままiOSアプリの仕事をするようになって、その半年後ぐらいにAndroidアプリの仕事で初めてJavaを書くようになった。Javaはenumがね、enumが好きでした。なんで過去形なのか。JavaでIntersection Typesを書いたのはその最初のAndroid仕事だけで、今も時々あれは正解だったのか考えてしまう。豪快にアニメーションするボタンについて通常時とクラスを分けて描画関連の機能制限したらアニメーションからちらつきが消えて勝利した、その勝利への道すがらにIntersection Typesが自然と出てきた思い出として美化されているから強い。このまま額縁に飾っておきます。
enumもジェネリクスも、Objective-Cの反動で嬉しがってたんだろうね。さすがにこういうのは実際にプログラミング経験が無いと生じない感触っぽい。きっとプログラミング言語も制約と誓約で強くなるもので、念能力者以外には分からないことがあって、こういう体験のためにプログラミングに興味をもったはず。初心を忘れず、一喜一憂してこうな。
Swingの話もJavaの一部のような気がするけど、今日は疲れたからまた今度。