4

私は約2年間開発者として働いており、少しくだらないITの学位を取得しました。自分の知識に大きなギャップがあることに気付いたので、「適切な」コンピュータサイエンスの学位を取得したかったのです。

私は完全にC#で作業し、フロントエンドのWeb開発を行っています。本当に学びたいことがあるので、良い資料を教えてもらえないかと思っていました。私は基本的に、わからないことのリストを作成し、優先順位で並べ替えようとしています。リストされている各アイテムと使用するリソースに対して私が試みることができるサンプルプロジェクトを誰かが提案できますか(Webと本の両方の提案を歓迎します)。

  • ネットワーキング、完全なIPスタックの理解など。
  • httpプロトコル、OReillyの本は一見の価値がありますか?
  • マルチスレッドアプリケーション
  • 低水準プログラミング、現在このプログラミングをゼロから使用しているアセンブリ
  • データ構造とアルゴリズム。
  • オペレーティングシステム
  • あなたがこのリストにあるべきだと思う他のものは何でも!

「すべての開発者は何を知っておくべきですか?そして、彼らが主題をよく理解することを確実にするために、彼らは自分の時間にどのようなプロジェクトを試みるべきか」と私は尋ねていると思います。私のリストはかなりスキャッターガンに近づいていることは知っていますが、それが私の方向性について助けを求めている理由だと思います。

これに対応するために時間を割いてくださった方には、よろしくお願いします。

.. ブライ

4

7 に答える 7

3

あなたが検索をしていないように見えるので、私はあなたの質問に反対票を投じました。

すべてのプログラマーが知っておくべきことは何ですか?

すべての開発者が知っておくべきアルゴリズムは?

すべての開発者が知って使用すべき asp.net フレームワークとライブラリ

すべての初心者開発者が知っておくべき CSS のヒントは?

優れた .NET 開発者なら誰でも答えられるはずの質問とは?

現在、プログラマーに必要なスキルは何ですか?

失礼なことをしようとしているわけではありません。少なくとも、私が反対票を投じた理由を指摘しています。

于 2009-02-07T18:29:02.990 に答える
2

コードコンプリートを読みましたか? これは、さまざまな科目の追加の読み物を強調しているため、優れた出発点です。

于 2009-02-07T18:28:15.737 に答える
2

わかりました、あなたが与えたリストを攻撃するために (ちなみに、それらはまったくばらばらに聞こえるわけではありません。あなたは、成熟した活発な研究分野であるコンピューター システムに興味があるように聞こえます)。

各分野のリソースとサンプル プロジェクトを紹介します。

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

  • リソース:標準的な本であり、私がまだ最高だと思っているのは、Cormen et al. によるアルゴリズム入門です。とても簡単ではありませんが、とても豊富でよく説明されています。ウィキペディア (ウィキペディアの DS+A ページは一般的に悪くない) とおそらく NIST 辞書を使用して、そこから完全に把握できないものをバックアップします。
  • プロジェクト:好きなアルゴリズムを好きなだけ好きな言語で実装します。上記のように ITA を使用している場合は、使用する疑似コードに最も近い言語であるという理由だけで Python をお勧めしますが、言語の選択についてあまり心配する必要はありません。繰り返しますが、言語の選択に行き詰まらないようにしてください。それらすべてを学ぶのに十分な時間があります:)

ネットワーキング。

  • リソース:すべてがどのように組み合わされるかを学ぶには、いくつかの優れた本があります。Tanenbaum の 'Computer Networks' が好きですが、もう 1 つの良い選択肢 (注意してください、私自身は十分に読んでいません) は、Kurose と Ross のComputer Networks: A Top Down Approach Using The Internetです。この本は、早い段階で慣れ親しんだ概念にたどり着く可能性が高いため、うまく機能する可能性があります。

    すべてを実践するには、Linux または FreeBSD カーネル ソースを読んで、ネットワーク スタックがどのように組み立てられているかを確認してください。このプロセスを支援するために、印刷物またはネット上に優れたリソースがあります。ところで、私は HTTP についてあまり心配する必要はありません。これは重要なプロトコルですが、それほど興味深いプロトコルではありません。私の見解では、TCP、IP、UDP、BGP などのほうがはるかに興味深いものです。

  • プロジェクト:何が実行可能なプロジェクトかを知るのが難しい。本の章の最後にある質問に答えます。簡単なクライアント/サーバー プログラムを作成して、ユーザー空間のソケット プログラミングを独学で学びましょう (ネット上で "Hello world!" を実行するのはそれほど難しくありません!)。これがあれば、おそらく自分で拡張機能を考え出すことができます。おそらく、本当に単純な Web サーバーを書きたいと思うでしょう。

マルチスレッドプログラミング:

  • リソース:これは大きなトピックです。選択した言語でマルチスレッド プリミティブがどのように動作するかを理解したい場合は、ネットでチュートリアルを見つけてください。少なくとも Python、Java、および C の負荷があります。この理論に興味がある場合は、並行プログラミングに関する DDJ で Herb Sutter のシリーズを検索してください (ただし、これは今のあなたにとっては少し上級者向けかもしれません)。Herlihy と Shavit のArt of Multiprocessor Programmingは、実用面で非常に (非常に!) アカデミックな観点から見た並行プログラミングに関する素晴らしい本ですが、初版には多くの間違いを修正する必要があります。
  • プロジェクト:ネットワーク プロジェクトからサーバーを取得し、新しいスレッドで各クライアントにサービスを提供して、一度に多くの接続を受け入れることができるようにします。食事の哲学者の問題に対する解決策をコード化してください :)

オペレーティングシステム:

  • リソース:優れた入門書がいくつかあります。繰り返しますが、私は Tanenbaum のModern Operating Systemsのファンですが、Silberschatz et. アル。本もいいです。特定のオペレーティング システムがどのように機能するかを研究する前に、どのような設計の選択肢が利用可能かについて一般的な概要を知りたいので、ここに本が本当に必要です。

    ただし、その点に到達したら、Linux のソース コードをもう一度読むことをお勧めします。ネット上には良い記事があり、印刷された良い本もあります (私はLinux Kernel Developmentが好きですが、必然的に少し時代遅れになっています)。

  • プロジェクト: Linux ディストリビューションを仮想マシンにインストールします。カーネルにシステム コールを追加し、ユーザー空間からテストします。次に、カーネルはあなたのカキです!スケジューラーをハッキングしてみてください。最初は本当に馬鹿げたものにしてから、ゆっくりと機能を追加してください。

    必要に応じて、OS をゼロから作成することもできますが、それは大規模で、非常にイライラする可能性のある経験です。現存するカーネルで作業を開始することをお勧めします-少なくともそれが壊れたとき、それはあなたがしたことのせいだとわかります:)

于 2009-02-08T13:33:27.127 に答える
0

試してみることの 1 つは、コンピューター サイエンス クラスの公開シラバスを見つけることです。彼らがどのようなプロジェクトを行っているかを見て、自分で試してみてください。ヘルプが必要な場合は、必要に応じて書籍、フォーラム、および SO を参照してください。

学部で取った最も基本的な CS コースは、プログラミング言語の理論、コンピューター構成、オペレーティング システム、および理論/離散数学のクラスだと思いました。

古典的なアルゴリズムを 4 種類の言語で実装してみてください。(たとえば、C#、LISP、Prolog、および C を試してください) Linux カーネルのローカル コピーにおもちゃの機能を追加して、動作を確認します。分散ファイル システムを記述します。これらは、私に最も多くのことを教えてくれた学校でのプロジェクトの一部です。

于 2009-02-07T18:30:33.673 に答える
0

間違いなく計算理論を見てください。http://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/053494728X http://www.amazon.com/Computability-Complexity-Languages-Second-Fundamentals/dp _ /0122063821

また、projecteuler.net を見て、これらの問題のいくつかを解決します。力ずくで問題を解決するのは避けてください... 代わりに、数学を見て、CS 理論クラスで議論される一般的なアルゴリズムと概念を学ぶようにしてください。

于 2009-02-07T18:32:59.503 に答える
0

Silberschatz、Galvin、Gagne による "Operating System Concepts" は、一読する価値のある書籍の 1 つです。

スレッド化、メモリ管理から OS の設計構造まで、あらゆる側面について考えていきます。本の例は C で書かれているので、コツをつかむのは簡単です。OS全体についてのギャップを埋めてくれます。

于 2009-02-07T18:26:15.693 に答える
-2

私の必須知識は次のとおりです。

  • 依存性注入コンテナー
  • 単体テスト
  • パターン(やや)
  • ドメイン パターン (アーキタイプ)
于 2009-02-07T18:29:09.307 に答える