私は常にウィキペディアやさまざまな本から何ができるかを収集する大部分が独立した学習者でした。ただし、トピックやコンセプトを不注意に省略したために、自己教育に偏りがあったのではないかと心配しています。私の目標は、一流大学のコンピュータサイエンスの学部の学位と同等のことを自分に教えることです(どちらでもかまいません)。
そのために、私はいくつかの教科書を購入して読み始めました。
私が平凡で最高の州立大学で取ったクラスから残したいくつかの教科書と同様に:
私の質問は:
ソフトウェアエンジニアリングの本は大歓迎ですが、学術研究のコンテキストではご遠慮ください。 Code CompleteとPragmatic Programmerは知っていますが、もっと理論的なアプローチを探しています。ありがとう!
私が見る最大の2つの省略:
オペレーティングシステムの場合、私はSilberschatzではなくTanenbaumを好みますが、どちらも優れています。
そして、順序については、それはあなたの興味に依存します。前提条件は多くありませんが、コンパイラーのオートマトンが最も明白です。最初にオートマトンの本を読んでから、ドラゴンの本を読んでください。
あなたが持っているすべての本を知っているわけではありませんが、私が知っている本は十分に良いので、他の本もまともです。
logic および discrete math の本もいくつか不足しています。
そして、忘れないでください データベース理論 本!
私が見つけた最良のアプローチは、お気に入りの大学を選び、彼らのウェブサイトに行き、学位のコースをチェックすることです。大きなコースの多くは、各コースで必要な読みが公開されています。 MITのオープンコースウェアが良い例です。
ちなみに、これは、CS以外の学位プログラムでも機能します。
MITは数年前に「OpenCourseWare」プログラムを導入しました。彼らはオンラインで本/宿題の割り当て/講義を置くので、あなたはMITカリキュラムと一緒に続くことができます:
一流の大学の多くのコースは、利用可能な本のどれも十分に良いものではないため、教科書を使用しません。 (私はプリンストンで教育を受け、ハーバード大学で8年間教えていました。)誰かが本をすすめたとき、本が本当に良いかか、それが良いかどうか尋ねますちょうどフィールドで利用可能な最良のもの。
たとえば、compilersでは、私は「ドラゴンブック」の大ファンではありません。私はそのアプローチが好きではなかったし、現在の版は非常に古い。 Michael Scottの Programming Language Pragmatics のような本を読んだ方がいいと思います。 (私はそれから教えたことがないので、学生がそれについてどう思うかは言えません。)クーパーとトルクゾンの コンパイラのエンジニアリング これは最新であり、ビジネスで最高のコンパイラエンジニアのうちの2人によって書かれたためです。
私はおそらく最高の本を提案することはできませんが、あなたが見逃しているいくつかの重要な主題があります:
より「オプション」と見なされる可能性があるいくつかのトピックは次のとおりです。
申し訳ありませんが、どんなに優れた本であっても、4年間の大学で本や数冊の本を読むことはできません。もし可能なら、なぜ誰もが大学に行くのですか?
まず、心配する必要はありません。しかし、CSの抽象的なアイデアのいくつかを本で学びたい場合は、 The Turing Omnibus または プログラミングの理論的紹介 をお勧めします。
2人のプログラマを採用することを決定していて、どちらも経験が豊富ではないが、1人はCS学位を取得し、もう1人は経験を積んでいない場合は、CS学位を取得します。しかし、12年の経験を持つ2人のプログラマを比較する場合、その程度はほとんど問題になりません。
この本は、ハードウェア設計の基本から、オブジェクト指向言語でプログラムを作成する方法までを説明します。シミュレーターを使用して、完全なコンピューターを構築します。次に、アセンブラ、オペレーティングシステム、コンパイラ(VMで実行するためにコンパイルされたオブジェクト指向言語用)、次にその言語を使用して書かれたゲームを記述します。
これは大変な作業ですが、著者はこの作業をできる限り単純にするよう注意深く行っています。あなたはこの問題を解決するために一生懸命働かなければならないでしょうが、それはあなたにコンピュータプログラミングの完全な展望を与えます。
いくつかのサンプルチャプターを表示したり、シミュレーターを操作したりできます here 。
強くお勧めします!(CSの卒業生でも)
他のほとんどの本を参考にして、 Programming Pearls 全体を吸収できると思います。そうすることで、今まで会ったことのあるプログラマーの90%以上があなたをより良くするでしょう。
コンクリート数学
コンピュータプログラミングの概念、手法、およびモデル は、さまざまな高水準言語のプログラミングスタイルと手法について私が見た中で最も広い概要を持っているようです。
また、Oracle、MySQL、SQL Serverなどの詳細に踏み込むことなく、一般的なデータベースに関する本も用意する必要があります。
お勧めします: データベースシステム:完全な本
アメリカではどうなのかはわかりませんが、私の国では離散数学を研究し、正式な言語とオートマトンの前にグラフ理論の紹介を研究しています。
また、コンピュータネットワークに関する書籍はありません。AndrewTanenbaumの Computer Networks を試してみませんか?
何よりもまず、 コンピュータサイエンス:現代の紹介 をお読みください。これにより、追求すべき課題の適切な基礎と概要が得られます。
アルゴリズムの概要 は非常に優れています。関数型プログラミングの概要については、 動作しているプログラマーのML を使用することをお勧めします。
コンピュータサイエンティストとプログラマを区別する領域:離散数学の基礎、VLSIとシステムアーキテクチャの基本的な理解、暗号化とセキュリティの基本の理解、計算可能性理論の理解、情報理論の理解。
これはかなり良いリストです。私が間違いなくミックスに追加する2つのトピックは、離散数学とネットワークです。興味深い他のトピックは、コンパイラ、コンピュータグラフィックス、分散オペレーティングシステムです。コンピュータービジョンや機械学習など、AIのクールなサブフィールドもあります。そして、これらすべてを処理するには、線形代数と確率が間違いなく必要です。
そしてもちろん、本を読んだだけではコンピュータサイエンスを行うことはできません。各トピックを本当に理解するには、その中でプロジェクトを行う必要があります。また、教授がシラバス、講義ノート、課題を投稿するMITのオープンコースウェアも検討することをお勧めします。
ソフトウェアプロジェクトがどのように機能するか、さまざまな方法論、および設計パターンをカバーするプロフェッショナルソフトウェア開発に関する書籍はすばらしいです。雇用に関しては、Webデザインの知識も非常に役立ちます。
なぜ自分でこれをやろうとしているのか理解できません。 「平凡で最高の」大学でさえ、自分で教えるよりもはるかに優れたスキルを教えることができます。コンピューティング業界で実際に働いた経験のある人に会うことがすべてです。
大学の問題ではなく、あなたがどれだけうまくやっているかを決めるのは、あなたがかけた努力の問題です。
あなたの出身地がわからないので、私の答えはおそらく役に立たないでしょう。私が住んでいるスコットランドでは、大学に無料で行かなければなりませんでした。
リストに 計算理論入門 を追加します
「ギャングオブフォー」 デザインパターンブック 。私が大学で受講したデザインパターンコースは、おそらくこれまでに受講した中で最も有益なクラスでした。
あなたがリストした本のどれにも見当たらない、ブロックデバイスとファイル構造化に関する多くの良い情報。人々が彼のコード例を好まなかったので、それはAmazonでいくつかの批評的なレビューを得ましたが、本のポイントはコンセプトを教えることであり、カットアンドペーストのコード例を与えることではありません。
コンパイラに関する本も必ず入手してください
私も同じ面にいます。仕事の後の自由な時間にコンピューターサイエンスを勉強しています。これらは私が今棚に置いている本のいくつかです
私がそれらを終えたらすぐにこのリストをさらに更新します... :-)