コンピューターの仕組み [閉まっている]


59

これはほとんど恥ずかしい質問です...私はコンピューターサイエンスの学位を取得しています(2番目の学位も取得中です)。私はフルタイムの.NET開発者として5年近く働いてきました。私は一般的に私がやっていることで有能だと思う。

しかし、私はコンピュータの仕組みがわかりません!

ちょっとだけ裸にしてください。「How a Computer Works」の簡単なグーグルは多くの結果をもたらしますが、私が探しているものに本当に答えるものを見つけるのに苦労しました。これは非常に大きな質問だと思いますので、キーワードや方向性を教えていただければ幸いです。

コンポーネント、電源、マザーボード、RAM、CPUなどがあることは知っています。そして、それらが何をするのかについての「一般的なアイデア」を得ることができます。しかしConsole.Readline()、.NET(またはJavaやC ++)のようなコード行からどのように進んで、実際にそれを実行させるかは本当に理解していません。

確かに、MSIL(.NETの場合)を漠然と認識していますが、JITコンパイラーで何らかの魔法が発生し、ネイティブコードになります(と思います)。Javaも同様であり、C ++は中間段階を切り捨てたと言われています。

私はいくつかのメインフレームアセンブリを行いました。それは数年前のことです。いくつかの命令といくつかのCPUレジスタがあり、コードを書いたのを覚えています...そして魔法が起こりました...そして私のプログラムは動作します(またはクラッシュします)。私が理解していることから、「エミュレータ」は命令を呼び出すと何が起こるかをシミュレートし、CPUレジスタを更新します。しかし、これらの指示が彼らのやり方で機能するのはなぜですか?

これは「コンピューター」の質問ではなく、エレクトロニクスの質問になりますか?これを理解する実用的な理由はないと思うが、できるはずだと思う。

(はい、これは小さな子供と1日を過ごすと何が起こるかです。約10分、「なぜ?」



20
Charles Petzoldのコード

それはではありませんEmulator。これは、数百(数千)の入力および出力ワイヤと数十億の論理ゲートを備えた実際の半導体回路の束です。Emulator唯一の教育目的のために使用されました。
rwong

1
タイトルをより具体的/有益なものに変更する必要があると思います。これは実際には非常に便利な質問ですが、一見すると、小さな子供が最初に尋ねたように、一見するとまったくばかげています。「高レベルのソフトウェアコマンドが低レベルのハードウェア応答にどのように接続するか」などのように変更します。
冗談

2
こんにちはRob、今言いましたように、これは絶望的に広範であり、すぐに本の推薦の質問と拡張された議論に変わりました。焦点を絞り、現在直面している問題について具体的な質問ができる場合は、お気軽に質問してください。

回答:


139

関連する可能性のある最低レベルから開始します(さらに低いレベルから開始できますが、おそらくあまりにも無関係です)、Atomから電気、トランジスタ、ロジックゲート、集積回路(チップ/ CPU )、およびアセンブリで終了します(より高いレベルに精通していると思います)。

はじめに

原子

原子は、電子、陽子、および中性子(それ自体が素粒子で構成されています)で構成される構造です。電子は可動であるため(つまり、移動がより困難な陽子や中性子とは異なり、比較的簡単に動き回ることができます)、内部に保持されることなく自然に自由に浮遊するため、コンピューターや電子機器にとって原子の最も興味深い部分は電子ですアトム。

通常、各原子には同じ数の陽子と電子があり、これを「中性」状態と呼びます。それが起こると、原子が余分な電子を失ったり獲得したりする可能性があります。この不均衡な状態の原子は、それぞれ「正に帯電した」原子(電子よりも陽子が多い)および「負に帯電した」原子(陽子よりも電子が多い)と言われています。

電子は構成不可能であり、破壊不可能です(量子力学ではそうではありませんが、それは私たちの目的には関係ありません)。そのため、原子が電子を失った場合、近くの別の原子が余分な電子を受け取るか、電子が自由に浮遊する電子に放出されなければなりませんでした。または自由に浮遊する電子から。電子のメカニズムは、正に帯電した原子の近くに負に帯電した原子がある場合、両方の原子が同じ電荷を持つまで電子が移動するというものです。

電気

電気は、非常に多数の負に帯電した原子のある領域から非常に多くの正に帯電した原子のある領域への電子の流れです。特定の化学反応により、1つのノードに多くの負に帯電した原子(「アノード」と呼ばれる)があり、別のノードに多くの正に帯電した原子(「カソード」と呼ばれる)が生じることがあります。反対の電荷を持つ2つのノードをワイヤで接続すると、電子の塊がアノードからカソードに流れ、この流れを「電流」と呼びます。

すべてのワイヤが電子を同じように簡単に伝達できるわけではなく、「抵抗性」材料よりも「伝導性」材料の方がはるかに簡単に電子が流れます。「導電性」材料の電気抵抗は低く(ケーブル内の銅線など)、「抵抗性」材料の電気抵抗は高い(ゴム製ケーブル絶縁など)。ある種の興味深い材料は半導体と呼ばれます(シリコンなど)。それらは抵抗を簡単に変更できるため、特定の条件下では半導体が導体として機能し、他の条件では抵抗に変わる場合があります。

電気は常に抵抗が最小の材料を流れることを好むため、カソードとアノードを2本のワイヤで接続すると、1本は非常に高い抵抗を持ち、もう1本は非常に低い抵抗を持ち、電子の大部分は低抵抗ケーブルを流れ、ほぼ高抵抗材料には何も流れません。

中世

スイッチとトランジスタ

スイッチ/フリップフロップは通常の照明スイッチのようなもので、2本のワイヤの間にスイッチを配置して、電気の流れを遮断または復元できます。トランジスタはライトスイッチとまったく同じように機能しますが、物理的にワイヤを接続および切断する代わりに、トランジスタはベースノードに電気があるかどうかに応じて抵抗を変更することで電気の流れを接続/切断します。 / know、トランジスタは半導体で作られているため、電流を接続または切断するための抵抗器または導体になるように半導体を変更できるためです。

トランジスタの一般的なタイプの1つであるNPNバイポーラジャンクショントランジスタ(BJT)には、「ベース」、「コレクタ」、「エミッタ」の3つのノードがあります。NPN BJTでは、「ベース」ノードが充電されている場合にのみ、「エミッタ」ノードから「コレクタ」ノードに電気が流れます。ベースノードが充電されていない場合、実質的に電子は流れません。ベースノードが充電されている場合、エミッタとコレクタの間を電子が流れます。

トランジスタの挙動

(対話型グラフィックスを使用すると、私よりもうまく説明できるため、続行する前にこれを一読することを強くお勧めします)

ベースとコレクターの電源にトランジスタを接続し、コレクターの近くに出力ケーブルを配線するとしますhttp://www.spsu.edu/cs/faculty/bbrown/web_lecturesの図3を参照してください) / transistors /)。

ベースにもコレクタにも電気を供給しないと、話すべき電気がないため、電気はまったく流れません。

B   C  |  E   O
0   0  |  0   0

ベースではなくコレクターに電気を適用すると、ベースが高抵抗材料になるため、電気がエミッターに流れなくなり、電気が出力ワイヤに逃げます。

B   C  |  E   O
0   1  |  0   1

コレクターではなくベースに電気を適用すると、コレクターとエミッターの間に電荷の差がないため、電気も流れません。

B   C  |  E   O
1   0  |  0   0

ベースとコレクタの両方に電気を印加すると、トランジスタに電気が流れますが、トランジスタは出力ワイヤよりも抵抗が低いため、出力ワイヤにはほとんど電気が流れません。

B   C  |  E   O
1   1  |  1   O

論理ゲート

1つのトランジスタ(E1)のエミッターを別のトランジスター(C2)のコレクターに接続し、最初のトランジスター(O)のベース近くに出力を接続すると(http://www.spsu.eduの図4を参照) / cs / faculty / bbrown / web_lectures / transistors /)、興味深いことが起こります。また、最初のトランジスタ(C1)のコレクターに常に電気を供給しているため、トランジスタ(B1、B2)のベースノードのみで遊んでいるとします。

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

テーブルを要約して、B1、B2、およびOのみが表示されるようにします。

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Loとbehold、ブールロジックやロジックゲートに精通している場合は、これがまさにNANDゲートであることに注意してください。また、ブール論理および/または論理ゲートに精通している場合は、NAND(およびNOR)が機能的に完全であること、つまりNANDのみを使用すると、他のすべての論理ゲートとその他の真実テーブル。つまり、NANDゲートのみを使用してコンピューターチップ全体を設計できます。

実際、ほとんどのCPUは、NAND、NOR、AND、ORなどを組み合わせて使用​​するよりも製造コストが安いため、NANDのみを使用して設計されています(または使用されていますか?)。

NANDから他のブール演算子を導出する

すべてのブール演算子の作成方法については説明しませんが、NOTゲートとANDゲートのみを作成します。残りは他の場所で見つけることができます。

NAND演算子を指定すると、NOTゲートを構築できます。

Given one input B
O = NAND(B, B)
Output O

NAND演算子とNOT演算子を指定すると、ANDゲートを構築できます。

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

同様の方法で他の論理ゲートを構築できます。NANDゲートは機能的に完全であるため、2つ以上の入力と1つ以上の出力を持つ論理ゲートを構築することも可能です。ここでは、そのような論理ゲートの構築方法については説明しません。

啓蒙時代

ブールゲートからチューリングマシンを構築する

CPUは、チューリングマシンのより複雑なバージョンです。CPUレジスタはチューリングマシンの内部状態であり、RAMはチューリングマシンのテープです。

チューリングマシン(CPU)は、次の3つのことを実行できます。

  • テープから0または1を読み取る(RAMからメモリのセルを読み取る)
  • 内部状態を変更する(レジスタを変更する)
  • 左または右に移動します(RAMから複数の位置を読み取ります)
  • 0または1をテープに書き込みます(メモリのセルにRAMに書き込みます)

この目的のために、組み合わせロジックを使用してWolframの2ステート3シンボルチューリングマシンを構築しています(最新のCPUはマイクロコードを使用しますが、目的に必要なものよりも複雑です)。

Wolframの(2,3)チューリング機械の状態表は次のとおりです:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

上記の状態テーブルを真理値表として再エンコードします。

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

私は実際にそのような論理ゲートを構築するつもりはありません(SEでそれをどのように描画するかわかりません、おそらくかなり巨大になるでしょう)が、NANDゲートが機能的に完全であることを知っているので、方法がありますこの真理値表を実装する一連のNANDゲートを見つけます。

チューリングマシンの重要な特性は、固定状態テーブルのみを持つチューリングマシンを使用してストアドプログラムコンピューターをエミュレートできることです。したがって、Universal Turing Machineは、命令を内部状態テーブルにハードコーディングする代わりに、テープ(RAM)からプログラムを読み取ることができます。つまり、(2,3)チューリングマシンは、(ハードウェアとして)論理ゲートの実装にハードコーディングされる代わりに、(ソフトウェアとして)I1、I2ピンから命令を読み取ることができます。

マイクロコード

最近のCPUの複雑さが増しているため、組み合わせロジックのみを使用してCPU全体を設計することは非常に困難になります。最近のCPUは通常、マイクロコード命令のインタープリターとして設計されています。マイクロコードはCPUに埋め込まれた小さなプログラムで、CPUが実際のマシンコードを解釈するために使用します。このマイクロコードインタープリター自体は、通常、組み合わせロジックを使用して設計されています。

レジスタ、キャッシュ、およびRAM

上記のことを忘れてしまいました。どのように何かを覚えていますか?テープとRAMはどのように実装しますか?答えは、コンデンサと呼ばれる電子部品にあります。コンデンサは充電式バッテリーのようなもので、コンデンサを充電すると余分な電子が保持され、電子を回路に戻すこともできます。

コンデンサに書き込むには、コンデンサを電子で満たすか(書き込み1)、コンデンサが空になるまですべての電子を排出します(書き込み0)。コンデンサの値を読み取るために、放電を試みます。放電しようとしたときに電気が流れていない場合、コンデンサは空です(0を読み取る)が、電気を検出する場合、コンデンサを充電する必要があります(1を読み取る)。コンデンサを読み取ると電子ストアが消費されることに気付くかもしれませんが、最新のRAMには定期的にコンデンサを再充電する回路があり、電気がある限りメモリを保持できます。

CPUで使用されるコンデンサには複数の種類があり、CPUレジスタと高レベルのCPUキャッシュは、実際にはトランジスタから構築された非常に高速な「コンデンサ」を使用して作成されます(したがって、それら)、これらは静的RAM(SRAM)と呼ばれます。メインメモリRAMは、より低い電力でより低速で安価なコンデンサを使用して作成されますが、これらはダイナミックRAM(DRAM)と呼ばれます。

時計

CPUの非常に重要なコンポーネントはクロックです。クロックは、処理を同期するために定期的に「チック」するコンポーネントです。クロックは通常、よく知られた比較的一定の発振周期を持つクォーツまたはその他の材料を含み、クロック回路はこの発振を維持および測定して時間感覚を維持します。

CPU動作はクロックティック間で行われティックで読み取り/書き込みが行わ、すべてのコンポーネントが同期して移動し、中間状態にあるときに相互にトランプルしないようにします。(2,3)チューリングマシンではクロックティックの間に、電気が論理ゲートを通過して、入力(I1、I2、R(t))からの出力を計算します。とクロックティック、テープライタはテープにO1、O2を書き込む、Mの値に応じて移動するモータ、及び内部レジスタRの値から書き込まれ(T + 1)、次いでテープリーダ現在のテープを読み取り、I1、I2に充電し、内部レジスタがR(t)に再読み取りされます。

周辺機器と話す

(2,3)チューリングマシンがモーターとどのようにインターフェイスするかに注意してください。これは、CPUが任意のハードウェアとインターフェイスする方法の非常に簡略化されたビューです。任意のハードウェアは、入力/出力のために特定のワイヤをリッスンまたは書き込むことができます。(2,3)チューリングマシンの場合、モーターとのインターフェイスは、モーターが時計回りまたは反時計回りに回転するように指示する1本のワイヤです。

何本機に言わないが残っていると、モーターがマシンの内部「時計」を起動し、実行を停止するために知っておくと同期して実行する別の「時計」を持っていたということですので、これは例である同期データ伝送。他の一般的に使用される代替の非同期伝送では、割り込みラインと呼ばれる別のワイヤを使用して、CPUと非同期デバイス間の同期ポイントを通信します。

デジタル時代

マシンコードとアセンブリ

アセンブリ言語は、人間が読める機械語コードのニーモニックです。最も単純なケースでは、アセンブリとマシンコードの間に1対1のマッピングがあります。最新のアセンブリ言語では、いくつかの命令が複数のオペコードにマッピングされる場合があります。

プログラミング言語

私たちは皆、これに精通していますか?


いや、最後に、たった4時間ですべてを入力したので、どこかに間違いがあると確信しています(私は主にプログラマであり、電気技師でも物理学者でもないので、露骨に間違っていることがいくつかあるかもしれません)。間違いを見つけた場合は、担当者がいる場合や補完的な回答を作成する場合は、@ yellを与えるか、自分で修正してください。


37
awesome」は正義ではありません。この答えは積極的に英雄的です。
-njd

1
原子部分は間違っていませんか?一般に、それら完全な外側のサブシェルを持つために中性を維持するのではなく、イオン化して荷電原子を形成します。
代替案

3
可能であれば、+ 1、+ 1000。私が本当に驚いたのは、なぜこの分野が好きなのかということです。この答えに含まれる膨大な情報が、現代のPCを動作させる技術の驚くべき深さの表面をかろうじて始まらないことです。
クエンティン・スターリン

神聖ながらくた。すごい。一度以上の賛成票を投じることができたらいいのにと思います。
ロブP.

3
+1ですが、最新のハードウェアはNANDゲートを介して正確に行われるわけではないことに注意する必要があります。はい、ゲートはありますが、それらは非常に複雑であり、(通常)NANDロジックに近似しています。制約はほとんど物理的です。物理ゲートは最初に論理モジュールに組み立てられます。論理モジュールは、従来のNANDでもかまいませんが、通常はそれよりも多くなります(たとえば、フリップフロップまたは半加算器)。許可されるゲートの正確なセットは、使用されるロジックスタイルと製造プラントの制約によって異なります。すべてのファブがすべてを構築できるわけではありません。(Aaargh!私は詳細を覚え始めています!ヘルプ!)
ドナルドフェローズ

12

12ステップでナンドからテトリスへ

これはあなたにとって絶対に完璧だと思います:

12ステップでナンズからテトリスへ


リンクをご覧いただきありがとうございます。これらの講演の中心的な索引はありますか、それともたまたまブログでこれを見たことがありますか?
ジョッキング

よくわからないが、ある日サーフィンをしているときにこの問題が発生した。
ダークナイト

彼は13番目のステップを逃した-シリコンウェーハ。
ジョブ

投稿してくれてありがとう!これは基本的に、イスラエルのIDCでビデオ講義の講演者が講義するシラバスの要約であり、彼の本に基づいています-私は答えに本へのリンクを投稿しました。
littleadv

このサイトは同じ素材ですか?ただ1つの大きなビデオnand2tetris.org
jhocking

10

アセンブリを完了した場合、理解する必要があるのは実際には2つまたは3つのレイヤーだけです。

  • 論理ゲート、これは移動する電子を介して論理を実装する方法です-ここでは電子的な質問になります
  • CPUとシステムの設計。これは、論理ゲートを構成してCPUを形成し、RAMおよび周辺機器と接続する方法です。現代のCPUは非常に複雑ですが、物事がどのように機能するかを理解したいのであれば、Z80のような古典的な単純なCPUを見れば十分です。
  • マイクロコード。アセンブリ命令が解釈され、レジスタおよび論理回路のハードウェアレベルのアクションに変換されます。

最後の1つ(マイクロコード)は、電子機器とコードの間のギャップを埋めるために「クリック」したものです。


たぶんそれは私が行方不明になっているマイクロコードです。私は論理ゲートとCPU /システム設計のクラスを受講し、アセンブリでプログラムし、バイナリコマンドについてすべてを学びました(そして、それらのクラスすべてでうまくいきました)。マイクロコードを調査する必要があります。
ケーシーパットン

@Casey:それが実際にあなたが見逃しているものである可能性は十分にあります。私にとって、マイクロコードについての学習(およびいくつかの記述)はまさに私が行った場所でした:OK、今ではコンピューターの仕組みを理解しています。確かに、それらは非常に複雑になっているため、理解するのが不可能に思える状況に簡単に出くわすことができますが、有能で粘り強く、十分な時間を費やせば、そのような状況を理解できると確信しています。
マイケルボルグワード

7

あなたが尋ねたものを正確に説明するCS学部課程シラバスの例は、ここにあります(IDC.AC.ILコースCS101)。このMIT Pressの書籍「コンピューティングシステムの要素:第一原理から現代のコンピューターを構築する」に基づいています。


1
「コンピューティングシステムの要素」に言及するための+1。これは素晴らしい本であり、「コンピューターはどのように機能するのか」という質問に正確に答える必要があります。
セドリック

これらのリソースが何をするのか、また質問に答える際にこれらを推奨するのはなぜですか?「リンクのみの答えは、」スタック所で非常に歓迎されない
ブヨ

7

この質問に完全に答えるには、本全体が必要です。幸運なことに、誰かがその本をすでに書いています。これは、チャールズ・ペツォルドの「コード:コンピュータハードウェアとソフトウェアの隠された言語」と呼ばれています。非常に有益で非常に面白い読み物です。


1
+1、「Petzold」のCtrl-Fだけで答えが返ってきました。確かにそこにいた
はず

4

Charles Petzoldによるコードを強くお勧めします。この本は、歴史の教訓であり、コンピューターを構築する方法の技術的な概要でもあります。この本では、簡単な電信スイッチの説明から始めて、トランジスタがどのように機能するかを示し、次に論理ゲート、プログラマブルコンピューター、さらに複雑なものについて説明します。それも非常によく書かれており、おそらく十分な好奇心を持っている人なら誰でも理解できるでしょう。


3

知っておくべきことを十分に理解するために知っておく必要のあるすべてのものをリストするのは、非常に困難です(そして、長い!)。これらのすべての質問に実際に答える有名な本は、Andrew Tanenbaum:Structured Computer Organizationからのものです。

この本では、実際に机上の物理コンピューターから論理ゲートやブール代数までを示し、そのようなシステムで実際にすべてがどのように発生するかを示すアーキテクチャ例を示します。

(1つのメモ:800ページまでなので非常に高価です。おそらく、中古版または古い版を入手するだけで良いでしょう。概念は変わりませんでした。)


2

まあそれを言うと私は推測するために多くのボールがかかります。

コードはかなり複雑になり、より複雑な低レベルのコードになります。プッシュおよびムーブレジスタを使用したアセンブリレベルのコードまで...など

次に、ハードウェアはこのコードを取得し、それに基づいて動作します。ほとんどの場合、ハードウェアは実際に物事を行う方法についての独自の指示を持っています。そのため、レジスタ(メモリの場所)が1や2などの値を取得するPUSHなどの単純な命令が存在する場合があります。

それは間違いなくコンピューターの質問です。また、プログラミングも1つです。一部のプログラマーは、コードを取得して非常に低いレベルではあるが何かを行うハードウェアをプログラムします。それは電子工学の問題でもあります。


1

デバイスがあります。

次に、これらのデバイスと対話するデバイスドライバーがあります。Cで記述された部分、通常はアセンブリ内の部分。

OSは、実際のハードウェアと通信するために、一方のアプリケーションソフトウェアおよび他方のデバイスドライバーと対話します。

本当に興味があるなら、Linuxカーネルをハッキングして詳細を調べてみませんか?


あなたの答えと提案をありがとう。それは素晴らしいアイデアのようですね!
ロブP.

1

物事の核心はこれは電子工学の質問ですが、これの基礎はあらゆるCS学位の調査コースでカバーされるべきでした。すべてのハードウェアは、コンポーネントレベルでプログラムされたゲートに基づいて機能します。これらは、NOT、AND、OR、XOR、NAND、NORの最も基本的な論理演算です。各ゲートには特定の機能があります。

NOTのゲートは一つの入力値を取り、一つの出力値を生成し、それが0または1を取得し、反対側を出力します。

ANDゲートは、2つの入力値を取ると1つの出力値を生成し、それは1を出力するための2つのものを除く任意の組み合わせのために0と1と0を出力の任意の組み合わせを取得します。

ORのゲートには、多くのANDゲートのように動作しますが、それはそれは0を出力するための2つのゼロを除き、取得0と1の組み合わせ毎に1が生成されます。

排他的論理和ゲートANDとORゲートの両方に再び同様であるが、両方の入力が同じである場合、及び1の両方の入力が異なる場合には0を生成します。

NANDのゲートは、ANDゲートの論理的に反対であるとNORゲートは、ORゲートの論理的に反対です。

つまり、ハードウェアレベルでは、すべてが最も基本的なバイナリ論理式になります。それ以外はすべて、この最後の層に到達するまでの、より高いレベルのプログラミングからより低いレベルへの移行です。


+1次のレベルは、これらの論理ゲートでシーケンシャルな動作を行う方法です。重要なコンポーネントは、フリップフロップです。論理ゲートを組み立てて、ALU、レジスタ用のフリップフロップ、クロックを作成し、CPUを取得します。
ムーヴィシエル

@mouvicielマルチプレクサを忘れました。
スターブルー


1

誰かがハードウェアを理解せずにCSのコースを完了することは驚くべきことですが、エンジニアリングと実装の詳細ではなく、数学の分野としての理論のみに集中できる可能性はまったくあると思います。(1980年代に行われた)由緒あるSICP講義はこのように思われました。

20年前の私のCSコースでは、最初の年にコンピューターの以前のエディション(ロジックからアーキテクチャまで)を読む必要がありました。
このような何かがギャップを埋めるはずです。

あるいは、MITのオープンコースウェアには役立つものが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.