コンピュータサイエンスを体系的に学ぶためのロードマップ: おすすめの本と学校
コンピュータサイエンスを体系的に学びたいと思ったことはありませんか?
プログラミングをする人であれば、なぜプログラムが動くのか、効率の良いアルゴリズムの設計、さらにはオペレーディングシステム、データベース、ネットワークの実装について興味を持ったことがあるのではないでしょうか。
実際、「エンジニア3年目におすすめする書籍」、「新卒エンジニアが読んでよかった本10選」といった記事がQiita、zenn、X、はてなブックマークなどでバズっているのをよく見ます(私もそのような記事を書きました)。
このような記事がバズることは、コンピュータサイエンスを体系的に理解したいというニーズがあるということだと思います。
そのため、コンピュータサイエンスを体系的に理解したい!という人のためのロードマップをこの記事で解説したいと思います。
TeachYourselfCS: コンピュータサイエンスのブックリスト
まずはコンピュータサイエンスを体系的に学ぶためのブックリストから紹介します。
一番体系的にまとまっているなと感じるのはTeachYourselfCSです。
実はここで紹介されている書籍のほとんどが邦訳されています。
そして、この中でも特に重要なのが、『コンピュータ・システム プログラマーの観点』と『データ指向アプリケーションデザイン』であると言われています。
『コンピュータ・システム プログラマーの観点』はコンピュータアーキテクチャ、オペレーティングシステムの両方をカバーしており、コンパイラーやネットワークについても触れています。
『データ指向アプリケーションデザイン』は分散システムの教科書として紹介されていますが第一部ではデータベースの実装についても説明しています。
そのためこの2冊を読んでおけば、コンピューターアーキテクチャ、オペレーティングシステム、コンパイラー、ネットワーク、データベース、分散システムについて大体はカバーできるということになります。
さて、日本語でコンピュータサイエンスを体系的に学ぶための環境は整っていますが、ただ本を読むだけでいいのでしょうか?
もちろんプログラミングを勉強する上でコードを書くことが大事なように、コンピュータサイエンスを学ぶ上でも演習は欠かせません。
そこでおすすめしたいのが42Tokyoです。
42Tokyo: 無料のプログラミングスクール
42Tokyoは3つの点で特異なプログラミングスクールです。
一つ目は無料のプログラミングスクールであるということ、二つ目は一ヶ月に渡る入学試験があるということ、そして三つ目はコンピュータサイエンスを意識したカリキュラムであるということです。
一ヶ月に渡る入学試験Pischinについてはすでにインターネット上で様々な記事があるのでそちらを見てみてください。
この試験は、非常に良くできておりプログラミングをしたことがない人でも一ヶ月コミットすれば入門を終えることできること、また試験を受ける過程で様々な人と交流できるため、おすすめです。
さてTeachYourselfCSでおすすめされていた、『コンピュータ・システム プログラマーの観点』が使われる授業では以下のような課題が出ているようです。
実は42Tokyoでは、これに類する課題が用意されているのです。
42のファーストサークルでは、shellの再実装をするminishell、セカンドサークルにはmallocの再実装課題もあります。
サークルについてですが、課題が授業であるとしたら、サークルとは進級度合いであると考えてもらえればわかりやすいと思います。
また、独学でコンピュータサイエンスを学ぼうとしているという人にとっても42Tokyoはおすすめできます。
独学ですとどうしても行き詰ってしまいますが、42Tokyoにはコンピュータサイエンスに関心を持っている人たちがたくさんいるからです。
42Tokyoの課題を進める上で『アルゴリズム設計マニュアル』のデータ構造やソートの章、C言語による開発スキルを磨く上で『インタプリターの作り方』も非常に役に立ちました。
そのため、TeachYourselfCSで書かれている本を読むことと42Tokyoの課題を進めることで相乗効果を狙うことができます。
コンピュータサイエンスを学習する上で軽視されがちなグラフィックスに関する課題があることもいいですね。
さらにコンピュータサイエンスを学びたい人に向けて
さて、コンピュータサイエンスの理論はTeachYourselfCSで紹介されている教科書を、コンピュータサイエンスにおける実践は42Tokyoの課題を進めていくということが、おすすめであるということが今までの結論となります。
では、両方とも終わった人には何がおすすめなのでしょうか?
実は先日、42Tokyoの学生とも同じ話をしていました。個人的には大学院大学がおすすめです。
大学院大学は学部の時に情報科学を専攻としていなかった人を対象にしているため、門徒が広く、また実は大学を卒業していなくても入学することができます。
実は大学を卒業していなくても入ることもできます。
そういうわけで、コンピュータサイエンスを体系的に学びたいなと思っている人にはTeachYourselfCS、42Tokyo、大学院大学がおすすめという記事でした。