ラベル コンピュータサイエンス の投稿を表示しています。 すべての投稿を表示
ラベル コンピュータサイエンス の投稿を表示しています。 すべての投稿を表示

2014年5月29日木曜日

コンピュータサイエンス

コンピュータサイエンスというのは色々なパラダイムが共存しているように思えます。

論理学や離散数学の延長といえるものもありますし、UIなど認知に伸びていく分野も多いですし、そもそもサイエンスといいつつ工学的な応用が非常に大きな部分を占めているように思えます。そうするとコンピュータサイエンスというくくりは大きすぎるのかもしれませんね。

それでも、ゴールは多岐に渡っても学ぶべきスキルというのはある程度収束するものだと思います。つまり共有できるツールや枠組みというのはあるのでしょう。やはり基礎から学ぶというのは定石の一つだと思います。イメージとしてはピラミッド型に伸びている科学技術の要の部分から学ぶということです。

さて、では基礎を学ぼうとしたときに、じゃあ基礎って何なんでしょうか。思うに本屋に並ぶ本はアプリケーションレベルのものばかりで、むしろ末端を深く解説するものが置かれている印象です。だからといってアプリケーションを作りたい人が記号論理学とかを学ぶにはモチベーションがないとやってけないように思えます。


ということでまずはコンピュータサイエンスを俯瞰するという作業がまず必要になるでしょう。どういう分野があって、どういう内容をやっていて、それらはどう関連しているのか。

お勧めの教科書はこちら。



一冊でだいたいの俯瞰が出来るようになります
Cやjavaなどの高レベル言語が物理レベルまでどう翻訳されていくか、コンピュータが下部構造をいかに隠蔽してあるか、丹念に説明されています。


あとはADUniがおすすめです。
これは元々、他分野のバックグラウンドを持つ学生に一年間で情報科学を一通り教えるというコンセプトで生まれたプログラムです。各分野を体系立って学ぶことが出来ます。前述の教科書を見て面白いと思う分野があればこっちでもっと深く学ぶというのが良い方法だと思います。



2014年5月21日水曜日

データ構造とアルゴリズム

データ構造とアルゴリズムの本は五万とありますね。アプリケーションレベルに近いほど多様性を増していくというのは書籍の数にも表れますね。

しかし考えてみると、データ構造やアルゴリズムというのは離散数学なので、例えばマージソートの説明の仕方にそんな五万通りもあるようには思えません。

逆に、アルゴリズムを学ぶメリットというのはアルゴリズムが汎用的であり、一度根幹を学べば同じフレームワークを似た問題で何度も使えるというところにあると思います。

つまるところ、汎用的で再利用可能であることが特にアルゴリズムを学ぶべき理由であると思います。そうすると、javaアルゴリズムだとかC++アルゴリズム事典だとかいう本はややアドホックにすぎるように思えます。

でもこういうアドホックな本が出回るのは自然なことで、アルゴリズムが抽象的すぎて学習しずらいということは大いにあるでしょう。目的からの距離が遠いですから。

データ構造とアルゴリズムで一番評判の高い本はIntroduction to Algorithmsでしょう。


しかしこの鈍器に等しい厚さの数学書を一人で全て理解しきることが出来る人はそんなにいないでしょう。

そこで、なんとも素晴らしいことに、MITOPENCOURSEWAREでこの本の講義が開かれております。

Introduction to Algorithms MIT OPEN COURSEWARE



You TubeのVideo Lectureに比べて充実しているのは、Video Lectureだけでなく講義ノート、宿題や試験とその解答まで公開されていることです。MITの学生と殆ど変わらない学習環境になるんじゃないでしょうか。


もっと薄い和書だとデータ構造とアルゴリズム(杉原厚吉)とかがコンパクトにまとまっています。しかし薄いということは内容が凝縮されていることであって必ずしも簡単だとは限らないと思います。いずれにせよ上の洋書があまりにもきついという人はこちらから初めてもよいように思います。



2014年5月18日日曜日

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

今や大学の授業はタダで受けられる世界です。

テキストファイルのチュートリアルはいくらでもあるし、動画ならCoursera, iTunes, Youtubeで見られる。具体的に知りたいことがあるならgoogle検索で調べればいいし、見つからなければStack Overflowに聞けばいい。

ただ、こうなってくるとどう手をつけていいか分からなくなってきますよね。情報がありすぎると今度は適切なMiningをする必要が出てきます。

ということでData Miningの話も面白いと思うのですが、今日はComputer Architectureを学ぶための1セットをまとめてみました。

・Computer Architecture - Carnegie Mellon

カーネギーメロンのコンピュータの授業です。
これを見れば少なくともアプリケーションレベルのプログラマは困ることはないんじゃないかと思います。35回×1.5時間なのでかなりしっかり学ぶことが出来ます。そんなに時間をかけられないという人でも最初の2、3回だけでも見るべきだと思います。コンピュータアーキテクチャの概念とか目的といったものが非常に明瞭に分かります。Trade-offや隠蔽のヒエラルキーなどの本質的な考え方というのは本では学びにくいことなので。

Computer Architecture Video Lecture


・Computer Organization and Design (Patterson & Hennessy)

世界的に有名でコンピュータアーキテクチャの金字塔といえる教科書です。

しかし、この本、声を大にして言わなければならないのは、日本語訳があまりにもひどすぎる!和訳版は残念ながら学術書ではない。(こんな価値の高い教科書がこんな訳で出てしまう限り日本のIT技術がアメリカに追いつくことはないだろう・・・)

ので原著を強くお勧めします。アセンブラ、ISA、 プロセッサまわりの説明が充実し手織り、今後必ず必要になるであろう並列プログラミングを真に実現するのに非常に役に立つ教科書だと思います。

また、上のCarnegie Mellonの講義でも教科書的に使われていますので、この本を読みつつ講義を見れば、理解がいっそう深まるかと思います。


しかしこの本の翻訳の問題はもっと根が深いでしょうね。
IT関連で何か検索すると英語でした方が100倍位情報があるというのは非常に大きな問題でしょう。もう日本語で科学やビジネスは出来ないということなのでしょうか。

・CPUの創りかた

なんとも人を選ぶ表紙で、キャッチーなだけの中身のない本かと思ってしまいますが、とても面白い本です。かなり本格的な理論を学びつつ、手を動かして4BitCPUを作ることが出来ます。

4bitCPUなのでもちろん実用性はないのですが、ゲートや回路レベルからCPUレベルまでの階層がどうなっているのかを理解するのに非常に役立ちます。

この本を学べば結構本格的な電子工作も出来るようになると思います。というかこの類の本でこんなにAmazonのレビューが高いというのも驚きです。


ということでコンピュータアーキテクチャのまとめでした。

この流れでコンピュータサイエンスを俯瞰していこうかなって考えています。