プログラマ向けの理論的なコンピュータサイエンスの自習リソース


14

私はかなり熟練したソフトウェアエンジニアですが、あまり理論を知りません。もっと理論を学びたいです。私が興味を持っている特定のトピックは、計算の複雑さ、形式言語、および型理論です。しかし、これらの分野について学び始める方法については、私は途方に暮れています。

自習を通してより多くの理論を学びたい人に、どのリソースを勧めますか?ソフトウェアエンジニア向けの理論的なコンピューターサイエンスの自習ガイドはありますか?


3
それはあなたが何を学びたいかによります。Arora-Barakは、計算の複雑さの理論を徹底的に紹介しています(オンラインで無料で入手できます)。開始するのに適した場所です。
トーマスは

4
データ構造、アルゴリズムなどの大学/大学で理論コースを受講しましたか?一般的に必要な学部理論コースを受講していない場合、それらのコースの教科書が出発点として適しています。あなたはWikipediaの記事を見て持つことができることをした後、私たちの本のリストビデオのリストは、コーセラ/ Udacity / EDXのオンラインコースは、/ ...コーセラはかなりいい理論のコースがあります。
カヴェ

大学で何を勉強しましたか?
オマーシェハブ

どのような言語でプログラムしていますか?理論的なCSの多くは、具体的な何かと並行して学習できます。たとえば、正式な言語について詳しく知りたい場合は、コンパイラについて学習するのと同様に、通常の言語/式(つまり正規表現)を開始するのに適した場所です。型理論では、haskell、F#、MLなどの静的に型付けされた言語を使用することをお勧めします。
ベビードラゴン

幅広い/アクセス可能なイントロ参照/調査/断面として、デュードニーのNew Turing Omnibusを試してください。TCSを刺激するポップサイエンスの本
vzn

回答:


7

それはいくつかの全く異なる領域を持つ広い分野です。

まず、コンピューターとは何かについての最も基本的なアイデアから始めます。HopcroftとUllman、「Automata理論の紹介、言語と計算」。

特にお勧めする理由は、証拠に重点を置いていることです。彼らはあなたを厳密な考え方で導きます。それはプログラムを書くことと科学的であることの違いです。


1
ありがとう!これが何かを変更するかどうかはわかりませんが、実際には証明ベースの数学の背景があります(おそらく質問でそれを言及すべきでした)。証明に基づいた実際の分析、ポイントセットトポロジ、および抽象代数を実行しました。
ヘンリーH.

その後、非常に迅速に作業できるようになります:)
ケイトF

そのAの違いではなく、違い。CSは他の多くの原則などを伴う
vzn

厳密さの必要性は、実際にはプログラミングと数学の違いだとは思いません。プログラミング定理と証明定理は非常に関連性の高いタスクであり(Curry-Howard同型を参照)、非数学的なタスクはプログラミングよりも厳密なものを必要としません。コンパイラは、校正を読む人間よりもエラーを許しません。
ヤンヨハンセン

2
@JanJohannsen私はかなり同意のだ-たとえば、Cの未定義の動作を参照してください
ケイト・F

9

型理論について学ぶにはいくつかの方法があります。働くプログラマーにとって、 B。Pierceによる型とプログラミング言語は良い出発点です。 R. Harperによるプログラミング言語の実用的な基礎も良いかもしれません。操作上のセマンティクスの背景を少し読みやすくしたい場合は、G。Winskelの「プログラミング言語の形式的セマンティクス:はじめに」をお勧めします。T. Nipkow、G。Klein、コンクリートセマンティクスます。この(または任意の)本だけで証明者を把握するのは本当に難しいと思うので、近くの専門家に質問してもらいたいと思います。型理論により数学的なアプローチが必要な場合は、JR Hindley、JP Seldin、Lambda-Calculus and Combinators:An Introduction、またはH. Barendregt'sをご覧ください。型付きラムダ計算。Barendregtから始めることはお勧めしませんが。

単一の推奨事項が必要な場合は、パートVI(高次システム)を除くすべてのPierceを読み、本で説明しているおもちゃの言語を実装してください。型理論の強力な基礎になり、おそらくより優れたプログラマーになるでしょう。


2

Martin Davis、Ron Sigal、Elaine Weyukerによる計算可能性、複雑さ、言語をお勧めします。


これは昔ながらのTCSの美しい本です。スキップできるドメイン理論セマンティクスの一部を除きます。
マーティンバーガー

1

私は理論とアルゴリズムの大ファンです。インドのマドラスにあるインド工科大学(IIT-M)で理論計算機科学を訪問する機会がありました。IIT-Mには多くの理論家がいます。私がそこに行ったとき、私は理論が何であるかについて何も知りませんでしたが、今日私はそれが大好きです。

ポインターの@Kate Fのおかげで、はい、HopcroftとUllmanは開始するのに最適な場所です。

しかし、ここに私が始めた方法があります、

  1. Cormenによるアルゴリズムの紹介をお読みください。<\ br>開始するのに最適な場所です。勉強するときは、各証明をできるだけ長く理解するようにしてください。証明をよく理解している場合は、選択した言語で同じロジックをコーディングしてください。(少し時間がかかりますが、試してみる価値があります)

  2. 以下のような理論のトップ会議フォロー
    FOCS
    SODA
    STOC
    EC(電子商取引)を-アルゴリズムゲーム理論
    COLT(学習理論上の会議) -学習理論
    CRYPTO -暗号
    SOCG(計算幾何学シンポジウム) -計算幾何学
    CCC(会議に計算の複雑さ)-複雑さの理論

あなたが読んでために多くの試みを理解していない場合でも、THINKできるだけ。できるだけ多くの証拠を作成する必要があります。

  1. これは、特に計算の複雑さを考えている場合に見るべき不思議な場所です(これはスタンフォードからです)。
  2. サンジーエフ・アローラ教授、ボアズ・バラク、ジェラニ・ネルソン、マドゥ・スーダン
  3. 以下は、計算の複雑さの分野で合成された情報のセットです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.