僕に足りないもの

足りない物はいろいろあるけれど勉強ログなので、そういう方面に限ってのメモ。
今年というか来年度の勉強のための指針。


特に足りないと感じているのは基礎的な部分。計算機科学・計算機工学の基礎。
この分野の基礎とは何か。まずここから始めなきゃならないけど、細かいことは無視してよく重要と言われる分野を列挙してみる。
誤解の無いように書いておくと、以下に列挙した物はカテゴリとして分けたけれど、互いに深く関連しているし、僕がいい加減に分けただけなのでアカデミックな意味では全く正確ではない。

こんなところかな。

数理論理学(記号論理学)

ブール代数とかも含める。
数理論理学と記号論理学が同一のものを指すのかどうかよく分からないけど、 Wikipedia には同じものを指すような記述があったので、それを信用して見る。
一応記号論理学はセマンティック・タブローでやった。普段必要なレベルの知識は持っているつもり。
でも、ラムダ計算だとか計算可能性のことは全然勉強してない。
というわけで、もっとやりたい分野。

離散数学

データ構造とアルゴリズムもここに含めておく。
離散数学という言葉一つにまとめてしまって良いのか知らん、と思うほど多彩な内容が含まれていて、しかも、どれもすっげー面白い。
一応この分野も一通り目を通したつもりだった。でも改めて見てみると、やってないことや分かってないことも多い。
基礎的な話では、例えば、群・環・体論はよく分かってないし、グラフ理論も中途半端にしかやってない。最近では符号理論の講義を受けていたけど、これもよく分かってない。
応用であるデータ構造やアルゴリズムについても同じ。
もっとやりたい。

計算理論

まず O 記法がよく分かってないw
これは致命的だよなぁ。アルゴリズムを勉強したとしても評価の仕方が分からないのでは意味がない。
それから数理論理学のところにも書いたけど、計算可能性の話も勉強してないし、形式言語オートマトンなんかについても同様。
ここはほとんど勉強していないので、勉強したい。

コンピュータアーキテクチャ

上の 3 つの分野と比べるとちょっと毛色が違う。上記のものは理学というか理論だけど、コンピュータアーキテクチャはどちらかというと工学。
プログラマという観点からは一番重要な分野だろう。実際の計算機の動きというかちゃんと仕組みを知らないと、どこかでハマるのは確実。
この分野も楽しいんだけど、細々していて覚えるのが大変。

まとめ

非常に大雑把で不正確なカテゴライズをしてみたけど、改めて眺めてみると、やっぱりまだまだ知らないことが沢山あって楽しそうだなーという印象。
僕はアプリケーションや Web サービスなどのエンドユーザ向けの話にはあまり興味が無いので、こんな感じのメニューになったけど、そういう方面に興味がある人は他にも UI 設計とかデータベース、ソフトウェアテストなどなど他にも沢山楽しそうなことがある。あ、テストは僕もやったほうが良いけどね。
もちろんエンドユーザ向けサービスの開発においても理論は役に立つ(と思うよ)。
個人的には役に立つか立たないかという基準はあまり重要じゃないくて、面白いかどうか、楽しいかどうかが重要なんだよね。
ある友人には、手段と目的を混同している、と注意されたりもするけれど、もともと目的がないんだから仕方ないね。
絵を描いたり、楽器を演奏する楽しさと同じなんじゃないかな。


参考リンク
2009-03-18
2009-03-19
Leo's Chronicle: ぜひ押さえておきたいコンピューターサイエンスの教科書
サーベイ、あるいは「普通の現場のプログラマ」とコンピュータサイエンスの基礎知識について - sumiiのブログ
大学の理工系学部情報系学科のためのコンピュータサイエンス教育カリキュラム J97