さて、アルゴリズムの勉強のしかたと、ラムダ計算の勉強のしかたの目星をつけました。
アルゴリズムの勉強のしかた - きしだのはてな
ラムダ計算の勉強のしかた、プログラム意味論 - きしだのはてな
これでここで書いたプログラムの理論の基礎は勉強できたことになるんじゃないかと思います。
プログラムの理論とはなにか - きしだのはてな
ところで、プログラムの勉強地図としてこういう図を書きました。
で、ハードウェアまわりについても、プロセッサを支える技術やネットワークはなぜつながるのかでひととおり勉強したとしましょう。
じゃあ次は、アジャイルか?テストか?UIデザインか?となるわけですが、やはりプログラマなら、プログラムの作り方や使いやすさの前に、作るプログラムの機能や性能で勝負したいじゃないですか。
いい感じに関数が分割できるよとか、読みやすい名前がつけれるよとか、効率よく仕事して定時に帰れるよとか、そういうのではなく、ぼくの作ったプログラムは3倍速いよとか、3倍のデータさばけるよとか、3倍のサーバで分散できるよとかいいたい。
そういう地味なんじゃなくて具体的に画像認識とか自動翻訳とかできたほうがかっこよくね?と言いたくなるかもしれませんが、そういうのは、3倍速くて3倍のデータ扱えれば9倍の認識率とか*1、そういう世界なんです。どんな分野のプログラムも、速くてたくさんデータがさばけてたくさん分散できれば、それだけで出来ることは増えるのです。使いやすくなるのです。
まあ、UIデザインは、ノーマンさんの誰のためのデザイン?は読んでおくとして。ついでにあげとくと、テストは継続的インテグレーション入門がノウハウ満載でいいです。
さて、機能や性能で勝負できるプログラムを組みたいとして、ひととおりの勉強ができたとすれば、つぎは実用的なプログラムを組むか、まあ実際に組むとこまでいかないにしても、組むための知識を得ておきたいです。
では何を組もうかと考えてみると、プログラマが作りたいソフトウェアトップ3の、プログラミング言語、OS、データベースが挙げられるわけです*2。
この中で、OSはちょっとハードウェアに寄りすぎに思います。そして、ちょっと大きすぎる気がします。プログラミング言語は逆にハードウェアから遠すぎです。そして、練習に作る規模だとちょっと小さい。最新コンパイラ構成技法とか1冊読んで適当に作ればいい。
ということで、データベースの勉強をしてみるのがいいんじゃないかなと思うわけです。世の中NoSQL、NoSQLといいますが、基本はリレーショナルデータベースです。なので、RDBMSの仕組みを勉強してみましょう。
と、3年前にこういうエントリ書いた本人がいう。
RDBMSの時代の終わりが見えてきた 2008-12-12 - きしだのはてな
このエントリそれほど間違ってなくて、「最初に消えるのは組み込みRDBMS」というのも、消えてこそいませんが、AndroidなどでJSONで保存するからSQLite使わなくていいという話はよく聞きます。というか、コメントとかブクマコメント見ると、絶対あのAAが思い浮かんでしまう。
それはともかく、RDBMSはSQLという言語を持つので、言語処理系の勉強にもなります。他にも、ファイルを扱ったり、データベース接続のプロトコルを扱ったり、データ構造を扱ったり、もちろんアルゴリズムを扱ったり、それから、データの信頼性を扱ったり、プログラムを組むときに必要になる技術が、かなり網羅されるわけです。
そのうえ、思いのほか小さい。
ということで、これからデータベースを勉強するための読書計画をたててみます。
準備
まずはリレーショナルデータベースがなにかを知っておきましょう。
ぼくはこの本の薄いころの版を持っていますが、リレーショナルデータベースがなにかを勉強するにはいいんじゃないでしょうか。
リレーショナルデータベース入門―データモデル・SQL・管理システム (Information&Computing)
- 作者: 増永良文
- 出版社/メーカー: サイエンス社
- 発売日: 2003/03/01
- メディア: 単行本
- 購入: 12人 クリック: 191回
- この商品を含むブログ (31件) を見る
RDBMSでデータ操作を一通りできるのは前提で。
SQL再確認
ちょっとSQLをちゃんと見ておきましょう。
SQLでの木構造やらグラフの扱い方は、ひととおり知っておいたほうがよさそうです。
- 作者: ジョーセルコ,Joe Celko,秋田昌幸
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2001/04
- メディア: 単行本
- 購入: 17人 クリック: 266回
- この商品を含むブログ (52件) を見る
とっかかり
で、いきなりこの本を。すでに上巻絶版ですが日本語では、データベースの構造を扱うような本は他にないのです。
アルゴリズムデザインやエージェントアプローチ人工知能と並んでプログラミング関連書3大鈍器に数えられる本ですが、データベースでもっとも重要な、トランザクションについて、概念から実際の処理、ファイル構造などまで扱った本です。前述のとおり上巻絶版っぽいけど、下巻のほうが実装に近いことを扱うので、下巻だけでもいいかも。
- 作者: ジムグレイ,アンドレアスロイター,Jim Gray,Andreas Reuter,喜連川優
- 出版社/メーカー: 日経BP社
- 発売日: 2001/10/20
- メディア: 単行本
- 購入: 7人 クリック: 145回
- この商品を含むブログ (21件) を見る
- 作者: ジムグレイ,アンドレアスロイター,Jim Gray,Andreas Reuter,喜連川優
- 出版社/メーカー: 日経BP社
- 発売日: 2001/10/20
- メディア: 単行本
- 購入: 7人 クリック: 47回
- この商品を含むブログ (13件) を見る
以前300ページほど読んでましたが、あと合計900ページくらいあります。大判で字が小さくページ端ぎりぎりまで字があるので、ふつうの900ページよりはかなりの文字数があります。
ほんとは、次のDatabase Management Systemsだけでいい気もするのだけど、いきなり英語の本を読むより日本語で概念しっておくほうが早かろうと。
気晴らし
データベースで検索してたら出てきました。
- 作者: モノクロワークス,おんなのこデータベース制作委員会,加茂,片瀬優,ゴロボッツ,MATSUDA98
- 出版社/メーカー: ジャイブ
- 発売日: 2011/02/19
- メディア: 大型本
- 購入: 8人 クリック: 30回
- この商品を含むブログ (7件) を見る
データベースの勉強
さて、データベースの勉強です。
そこでデータベースの本としてよく紹介されているこの本。
SQLの最適化などの章もあるので、よさそうです。でもほんと、こういう本は日本語ではないので困る。
あったら教えてください。
- 作者: Raghu Ramakrishnan,Johannes Gehrke
- 出版社/メーカー: McGraw Hill Higher Education
- 発売日: 2002/09/01
- メディア: ペーパーバック
- 購入: 1人 クリック: 9回
- この商品を含むブログ (2件) を見る
読書メモがありました。
Database Management Systems 読書メモ - 壊れた計算機
追記(9/29)
データベースの実装には こちらのほうが詳しそう
Database Systems: The Complete Book
ソースも読みましょう
実際のデータベースのソースも読みましょう。おすすめはH2というJava製データベースです。
一般的な勉強のためにソースを読むときは、CでかかれたMySQLやPostgreSQLだと、Javaでは標準ライブラリにあるような低レイヤのライブラリも含まれていたり、ポインタが見づらかったりで、あまりおすすめしません。なにより、H2は小さくていいです。
H2 Database Engine
分散データベースへ
で、データベース一通り勉強できたら、分散データベースも勉強したい。
ということで、まずは分散システムの基本になるP2P通信のおさらいを。4章5章で分散システムのネットワーク構造について説明されています。
- 作者: 江崎浩
- 出版社/メーカー: インプレス
- 発売日: 2007/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 56回
- この商品を含むブログ (13件) を見る
あとは分散ストレージの基本になる分散ハッシュテーブルを実装するためのChordとかSkipGraphとかも勉強しといたほうがいいかなーと思うのだけど、書籍みあたらないので、とりあえずはネットでこういうのを読もうかと。
http://did2.blog64.fc2.com/blog-entry-347.html
homepage3.nifty.com/toremoro/study/DHTkansai/DHTkonishi.ppt
書籍あったら教えてください。
分散データベースの解説みたいなのは、この本とかでしょうか。いい本あったら教えてください。
Grid and Cloud Database Management
- 作者: Sandro Fiore,Giovanni Aloisio
- 出版社/メーカー: Springer
- 発売日: 2011/07/28
- メディア: ハードカバー
- クリック: 3回
- この商品を含むブログ (1件) を見る
追記(9/29)
この本がよさそう。
Distributed Database Management Systems: A Practical Approach
まとめ
まあ、情報系学部でもなく独学でやるのは、このあたりが限界かなーとか思うので、とりあえずここが目標ということで。
このくらいやれば、ほどほどに優秀な情報系学部の3年生くらいとは張り合えるかなーと思います。
しかし、最近の若いもんは優秀すぎて困る。