私は全くの独学でプログラマーになったので、典型的なCS卒業生に教えられるコンピュータサイエンスのコースを独学で学んで自分を向上させることができたらいいなと思っています。
インターネットでさまざまなリソースを見つけるのは簡単でした。もちろん、MITオープンコースウェアもありますし、スタンフォード大学やその他の大学のCourseraコースもあります。他にもインターネット上には数多くのオープンリソースが散在していますし、繰り返し推奨される良い本もあります。
私は多くのことを学んでいますが、私の学習は非常に断片的で、それがとても気になっています。もしどこかで、自分が辿るべき道や自分が制限すべきスタックを見つけることができれば、コンピュータサイエンスの***重要な部分を勉強したことがあるかどうかを確かめることができ、その後、勉強していない部分に体系的にアプローチすることができるので、とても嬉しいです。
ウィキペディアの問題点は、何が重要なのかを教えてくれないのに、完全な参考文献であることを主張していることです。
MIT open course ware for Computer science and Electrical Engg.には膨大なコースのリストがありますが、どのコースが必須で、どのコースが個人の興味や必要性に応じて選択できるのかを教えてくれません。また、どの科目をどのように勉強すべきかという順序についても言及されていませんでした。
私が望むのは、次のようなダミーのリストを作成して、それに従うことです。
SUBJECTS DONE
Introduction to Computer Science *
Introduction to Algorithms *
Discrete Mathematics
Adv. Discrete Mathematics
Data structures *
Adv. Algorithms
...
ご覧のように、私はコンピュータサイエンスがどのような具体的な科目で構成されているのか、ほとんどわかりません。
誰かが、MIT Course wareの必須科目(+MIT OCWにない必須科目)を、推奨される学習順序で指摘してくれるだけでも、とても助かります。
私がすでに調べた(そしてそこでは求めていたものが得られなかった)Postを列挙します。
https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - top answer says it isn't worth studying cse
https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - MIT OCWを紹介しています。
私はMITの教材を見たことがありますが、それは衝撃的なほどひどいものでした。VC5を必要とする教材があったり、暗黙のグローバル変数を大量に使ったり、色を32bit ARGBではなく"Blue"で渡したり、ましてや4x[0,1]浮動小数点数で渡したり、そんな感じでした。有名大学のカリキュラムやコードだからといって、私は信用しません。
私が取得したCSの学位(CSの分野で英国のトップ10に入る大学)は、以下のような内容でした。
1年目。
1.OOP-超基本
2.コンピュータシステム-2進数の整数表現など。
3.リレーショナルデータベースの基礎理論
4.CSのための数学-簡単な2Dと3Dの幾何学。
5.HTML/JSを少しだけ-完全な初心者向けの内容
6.PHPのほんの少しの知識。
7.関数型プログラミングを少々
2年目
1.コンピューティングの法的問題-ユーザーデータの保護に関連する法律など ユーザーデータの保護に関する法律など 2.プログラミング言語-Chomsky階層とレキシングを取り上げました。 3.オペレーティングシステム、ネットワーク、インターネット-主に以下のような内容です。 仮想メモリとページング、IPスタック 4.2Dコンピュータグラフィックス-主に、基礎となる数学の定理を証明するだけです。 数学 5.AI- ニューラルネットワーク、ベイジアン信念システム、などの基本的な説明。 など。 6.要求分析-UMLの簡単な概要。 機能的/非機能的な要求。 7.チームプロジェクト
3年目
1.アルゴリズム解析-複雑性理論を中心に 2.プログラミング言語の実装- LL/LR構文解析技術。 CFGなどの実装。 3.ソフトウェアプロジェクト管理-ウォーターフォール/アジャイルモデルの紹介 4.国際的なコンピューティング-ユニコードやその他のローカリゼーションの楽しみ 5.高度なAI-正直言ってわからない、もうすぐ試験があるし 6.3Dコンピュータグラフィックス- ほとんどが、やはり、回転行列などの定理を証明するだけです。 回転行列など 7.エージェント・ベース・システム - 主に、非同期のエージェントがコミュニケーションをとったり、グループで意思決定を行ったりするものです。 グループでの意思決定など。 8.マイクロプロセッサの応用-デジタル信号処理 9.ロボティクス-コンピュータビジョンやロボットの意思決定など、高レベルのものを扱う 高いレベルでの意思決定
気づいたと思いますが、ほとんどの項目が基本的な内容であり、有用な深さまでカバーしているものはほとんどありません。
実際にやってみる価値のあるものは、必須です。
1.OOP-そして、さらに、さらに、さらに 2.関数型プログラミング-さらにもっと。C++やC#のように、構文やツールなどを学び直す必要のない言語を選んで、両方のスタイルをカバーするようにしましょう。 3.3. OSの部分-仮想メモリ、カーネルモードとユーザーモードについては知っておくとよいでしょう。セグメンテーションとIPスタックは飛ばしてください。 4.要求分析-どんなプロジェクトにも役立ちます。 5.アルゴリズム解析- アルゴリズムの複雑さとは何か、それをどのように減らすか、そして一般的な操作の複雑さは何かを知ることは重要です。 6.ソフトウェアプロジェクト管理モデル-多くの企業がアジャイルを採用していますが、古い企業では未だにウォーターフォール型のモデルを採用しています。 7.7. 国際的なコンピューティング-ユニコードは必須
オプションで、やる価値のあったもの。
1.プログラミング言語-チョムスキー階層、レキシングとパーシングのツール。LRパーサーは現実的な曖昧でないCFGをほぼすべて受け入れることができ、受け入れられない場合はパーサージェネレータのドキュメントにそのことが書かれています。 2.2. 3Dグラフィックス。これは回転行列式であることを証明する」という時間の無駄なものではなく、「これは頂点シェーダである」という実際のもの、つまりGPGPUのことです。それが楽しくて、面白くて、変わっているんです。 3.ポテンシャルフィールドやパスファインディングなどのAIも楽しいですね。
必要不可欠なものだけど、とりあえずカバーしなかったもの。
1.コンカレンシー:2012年現在、誰もが最低限の基礎知識を身につけています。
残りは完全に時間の無駄でした。残念ながら、この9つのポイントのほとんどは、すでに知っているか、有用な部分を他で拾ってきたものです。FizzBuzz問題](http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html)などを読めば、実際にはそれほど多くのことを知らなくてもトップに立てるということがすぐにわかります。
Open Course Wareは、MITが公開しているコースのリストに過ぎません。 学生が何を履修したかを知りたければ、MITのウェブサイト(OCWではない)で実際のプログラムを見てみてください。 そこには、何が必要で、何が何のための前提条件とされているかのリストがあります。 ここにそのページがあります.