コンピュータとは、算術演算や論理演算(計算)のシーケンスを自動的に実行するようにプログラムできる機械です。現代のデジタル電子コンピュータは、プログラムと呼ばれる一連の汎用的な演算を実行でき、これによりコンピュータは幅広いタスクを実行できます。コンピュータシステムという用語は、完全な動作に必要なハードウェア、オペレーティングシステム、ソフトウェア、周辺機器を含む、名目上完全なコンピュータを指す場合もあれば、コンピュータネットワークやコンピュータクラスタのように、相互に接続されて連携して動作するコンピュータのグループを指す場合もあります。
1930年代にはごく少数しか存在しなかったコンピュータは、今日では制御システムとしてコンピュータを使用する幅広い産業製品や消費者向け製品に遍在している。コンピュータの価格、サイズ、複雑さは、キーフォブ、電子レンジ、リモコンといった単純な単機能デバイスから、スーパーコンピュータや産業用ロボットを使用する工場まで多岐にわたる。コンピュータは、パーソナルコンピュータやスマートフォンなどのモバイルデバイスといった汎用デバイスの中核を成している。コンピュータは、数十億台のコンピュータとユーザーをつなぐインターネットを支えている。
初期のコンピュータは計算のみを目的としていました。そろばんのような単純な手動の道具は、古代から人々の計算を助けてきました。産業革命初期には、織機のパターンガイドなど、長くて退屈な作業を自動化するためにいくつかの機械装置が作られました。20世紀初頭には、より高度な電気機械が特殊なアナログ計算を行いました。初期のデジタル電子計算機は第二次世界大戦中に開発され、電気機械式(1930年代)、熱電子管(1930年代)、半導体トランジスタ(1940年代)、MOSFET(MOSトランジスタ、1950年代)、そして最終的にはモノリシック集積回路(1950年代以降)へと発展しました。それぞれの技術進歩により、より小型で効率的な回路設計が実現し、1970年代のマイクロプロセッサとマイクロコンピュータ革命へとつながりました。それ以来、コンピュータの速度、計算能力、汎用性は劇的に向上し、トランジスタ数も急速に増加しました(ムーアの法則によれば、トランジスタ数は2年ごとに倍増しました)。これにより、20世紀後半から21世紀初頭にかけてデジタル革命が起こりました。
従来、現代のコンピュータは、少なくとも1つの処理要素(通常はマイクロプロセッサの形をした中央処理装置(CPU))と、何らかの種類のコンピュータメモリ(通常は半導体メモリチップ)で構成されています。処理要素は算術演算と論理演算を実行し、シーケンス制御ユニットは保存された情報に応じて演算の順序を変更できます。周辺機器には、入力装置(キーボード、マウス、ジョイスティックなど)、出力装置(モニター、プリンタなど)、および入出力両方の機能を備えた装置(タッチスクリーンなど)が含まれます。周辺機器は、外部ソースから情報を取得したり、演算結果を保存および取得したりすることを可能にします。

この言葉が現代的な意味を持つようになったのは20世紀半ばになってからのことです。オックスフォード英語辞典によると、コンピューターという言葉が最初に使われたのは、1613年にイギリスの作家リチャード・ブラスウェイトが著した『ヤング・マンズ・グリーニングス』という本の中で、別の意味で使われていました。 「私は、これまでで最も正確な計算機であり、最も優れた算術家である人物の著作を読んだが、彼はあなたの寿命を短い数に縮めてくれる。」この用法では、計算や演算を行う人、つまり人間計算機を指していました。この言葉は20世紀半ばまで同じ意味で使われ続けました。この時期の後半には、男性よりも低い賃金で雇えるため、コンピューターとして女性が雇われることがよくありました。[ 1 ] 1943年までには、人間計算機のほとんどは女性でした。[ 2 ]
オンライン語源辞典によると、コンピューターという言葉が最初に確認されたのは1640年代で、「計算する人」という意味でした。これは「compute(動詞)から派生した行為者名詞」です。オンライン語源辞典は、 「あらゆる種類の計算機」という意味でこの用語が使われるようになったのは1897年からであると述べています。オンライン語源辞典は、「プログラム可能なデジタル電子計算機」という意味でのこの用語の「現代的な用法」は、「この名前では1945年から、理論的にはチューリングマシンとして1937年から」であると示しています。[ 3 ]現代のコンピューターは多くの高度な機能を備えていますが、この名前は残っています。
何千年もの間、計算を補助する装置が使われてきましたが、そのほとんどは指との1対1対応でした。最も初期の計数装置は、おそらくタリースティックの一種でした。肥沃な三日月地帯全体で後に記録を補助するものとして、中空の未焼成粘土容器に密封された家畜や穀物などの品目の数を表す計算器(粘土の球、円錐など)がありました。[ a ] [ 4 ]計数棒の使用はその一例です。

そろばんは当初、算術作業に使用されていました。ローマのそろばんは、紀元前2400年頃にバビロニアで使用されていた道具から発展しました。それ以来、他の多くの計算盤や表が発明されました。中世ヨーロッパの会計事務所では、テーブルの上に市松模様の布が敷かれ、金額を計算するのを助けるために、特定の規則に従ってマーカーがその上で動かされました。[ 5 ]

デレク・J・デ・ソラ・プライスによれば、アンティキティラ機構は既知の機械式アナログコンピュータの最古のものと考えられている。[ 6 ]これは天体の位置を計算するために設計された。1901年にギリシャのアンティキティラ島沖、キティラ島とクレタ島の間にあるアンティキティラ難破船で発見され、紀元前100年頃のものとされている。アンティキティラ機構と同程度の複雑さを持つ装置は14世紀まで再び現れなかった。[ 7 ]
天文学や航海用に、計算や測定のための多くの機械的な補助具が作られました。プラニスフィアは、11 世紀初頭にアブー・ライハーン・アル=ビールーニーによって発明された星図です。 [ 8 ]アストロラーベは、紀元前 1 世紀または 2 世紀にヘレニズム世界で発明され、しばしばヒッパルコスに帰せられます。プラニスフィアとディオプトラを組み合わせたアストロラーベは、球面天文学のさまざまな問題を解くことができる、事実上のアナログ コンピューターでした。機械式カレンダー計算機[ 9 ] [ 10 ]と歯車を組み込んだアストロラーベは、1235年にペルシャのイスファハンのアビ・バクルによって発明された[ 11 ]。アブー・ライハーン・アル=ビールーニーは、最初の機械式歯車式太陰太陽暦アストロラーベ[ 12 ] 、歯車列と歯車を備えた初期の固定配線知識処理機械[ 13 ]を紀元1000年頃に発明した[ 14 ]。
セクターとは、比例、三角法、乗算、除算の問題を解くための計算器具であり、平方根や立方根などの様々な関数にも用いられ、16世紀後半に開発され、砲術、測量、航海などの分野で応用された。
プラニメーターは、機械的な連結機構を用いて閉じた図形をなぞることで、その面積を計算する手動式の測定器であった。

計算尺は、対数の概念が発表された直後の1620~1630年頃、イギリスの聖職者ウィリアム・オウトレッドによって発明されました。これは、乗算と除算を行うための手動式アナログ計算機です。計算尺の開発が進むにつれて、逆数、平方と平方根、立方と立方根、対数や指数などの超越関数、円三角関数や双曲線三角関数、その他の関数を計算できる目盛りが追加されました。特殊な目盛りが付いた計算尺は、軽飛行機の時間と距離の計算に使用されるE6B円形計算尺のように、日常的な計算を迅速に行うために今でも使用されています。
1770年代、スイスの時計職人ピエール・ジャケ・ドロは、羽根ペンを持って文字を書くことができる機械仕掛けの人形(オートマタ)を製作した。内部の歯車の数と順序を切り替えることで、異なる文字、ひいては異なるメッセージを生成することができた。事実上、機械的に「プログラム」して指示を読ませることができた。この人形は、他の2つの複雑な機械とともに、スイスのヌーシャテルにある美術歴史博物館に所蔵されており、現在も稼働している。[ 15 ]
1831年から1835年にかけて、数学者でエンジニアのジョヴァンニ・プラナは、滑車と円筒のシステムを用いて、閏年や日の長さの変化を考慮しながら、西暦0年(つまり紀元前1年)から西暦4000年までのすべての年の暦を予測できる永久カレンダー装置を考案した。1872年にスコットランドの科学者ウィリアム・トムソン卿が発明した潮汐予測機は、浅瀬での航海に非常に役立った。これは滑車とワイヤーのシステムを用いて、特定の場所における一定期間の予測潮位を自動的に計算した。
微分解析器は、積分によって微分方程式を解くように設計された機械式アナログコンピュータで、積分を実行するためにホイールアンドディスク機構を使用していた。1876 年、ウィリアム・トムソン卿はすでにそのような計算機の可能な構造について議論していたが、ボールアンドディスク積分器の出力トルクが限られているために行き詰まっていた。[ 16 ]微分解析器では、1 つの積分器の出力が次の積分器の入力、またはグラフ出力を駆動する。トルク増幅器は、これらの機械が動作することを可能にした進歩であった。1920 年代から、ヴァネヴァー・ブッシュらが機械式微分解析器を開発した。
1890年代、スペインのエンジニア、レオナルド・トーレス・ケベドは、多項式の実数および複素数の根を解くことができる一連の高度なアナログマシンを開発し始めました。[ 17 ] [ 18 ] [ 19 ]これらは1901年にパリ科学アカデミーによって発表されました。[ 20 ] [ 21 ] [ 22 ]

イギリスの機械技師であり博学者でもあるチャールズ・バベッジは、プログラム可能なコンピュータの概念を考案した。「コンピュータの父」[ 23 ]とみなされている彼は、19世紀初頭に最初の機械式コンピュータを構想し、発明した。
差分エンジンの開発に取り組んだ後、彼は1822年に王立天文学会に「天文学および数学表の計算への機械の応用に関する覚書」と題する論文で自身の発明を発表した。 [ 24 ]また、航海計算を支援するためにも設計を行い、1833年には、より汎用的な設計である解析エンジンが可能であることに気づいた。プログラムとデータの入力は、当時ジャカード織機などの機械式織機を制御するために使用されていたパンチカードを介して機械に提供されることになっていた。出力には、プリンター、曲線プロッター、ベルが備えられていた。また、機械は後で読み取るためにカードに数字をパンチすることもできた。エンジンには算術論理ユニット、条件分岐とループの形式の制御フロー、および統合メモリが組み込まれており、現代の用語でチューリング完全と表現できる汎用コンピュータの最初の設計となった。[ 25 ] [ 26 ]
この機械は、当時としてはおよそ100年も先を行っていた。機械の部品はすべて手作業で作らなければならなかったが、これは何千もの部品からなる装置にとって大きな問題だった。結局、英国政府が資金提供を打ち切ることを決定したため、このプロジェクトは中止された。バベッジが解析機関を完成させられなかった主な理由は、政治的・財政的な困難に加え、ますます高度なコンピュータを開発し、誰よりも早く先を行きたいという彼の願望にあった。しかしながら、彼の息子ヘンリー・バベッジは、1888年に解析機関の計算ユニット(ミル)の簡略版を完成させた。彼は1906年に、計算表におけるその使用法を実証することに成功した。

1914年に出版されたレオナルド・トーレス・ケベードの著書『自動機械に関するエッセイ』の中で、彼はチャールズ・バベッジによる機械式差分機関と解析機関の構築への取り組みについて簡潔な歴史を記している。この論文には、次のような数式を計算できる機械の設計が含まれている。一連の値のセットに対して。マシン全体は、条件分岐のための規定を備えた読み取り専用プログラムによって制御されることになっていた。彼はまた、浮動小数点演算の概念を導入した。[ 27 ] [ 28 ] [ 29 ] 1920年、算術計の発明100周年を記念して、トーレスはパリで電気機械式算術計を発表した。これは、ユーザーがキーボードを介して算術問題を入力でき、結果を計算して印刷できるもので、[ 30 ] [ 31 ] [ 32 ] [ 33 ]電気機械式解析エンジンの実現可能性を示した。[ 34 ]

20世紀前半には、多くの科学計算のニーズが、計算の基礎として問題の直接的な機械的または電気的モデルを使用する、ますます高度化するアナログコンピュータによって満たされました。しかし、これらはプログラム可能ではなく、一般的に現代のデジタルコンピュータの汎用性と精度に欠けていました。[ 35 ]最初の近代的なアナログコンピュータは、1872年にサー・ウィリアム・トムソン(後にケルビン卿となる)によって発明された潮汐予測機でした。微分解析機は、ホイールとディスク機構を使用して積分によって微分方程式を解くように設計された機械式アナログコンピュータで、1876年に、より有名なサー・ウィリアム・トムソンの兄であるジェームズ・トムソンによって概念化されました。 [ 16 ]
機械式アナログ計算の技術は、1931年にMITのヴァネヴァー・ブッシュによって完成した微分解析器で頂点に達した。[ 36 ] 1950年代までに、デジタル電子計算機の成功はほとんどのアナログ計算機の終焉を意味したが、アナログコンピュータは1950年代中、教育(計算尺)や航空機(制御システム)などの一部の特殊な用途で使用され続けた。
クロード・シャノンの1937年の修士論文はデジタルコンピューティングの基礎を築き、スイッチング回路の解析と合成にブール代数を適用するという彼の洞察は、すべての電子デジタルコンピュータの根底にある基本概念である。[ 37 ] [ 38 ]
1938年までに、アメリカ海軍は魚雷データコンピュータを開発しました。これは潜水艦用の電気機械式アナログコンピュータで、三角法を用いて移動する目標に魚雷を発射する問題を解決しました。第二次世界大戦中、他の国々でも同様の装置が開発されました。[ 39 ]
初期のデジタルコンピュータは電気機械式で、電気スイッチが機械式リレーを駆動して計算を行っていました。これらの装置は動作速度が遅く、最終的には真空管を使用したはるかに高速な全電気式コンピュータに取って代わられました。 1939年にドイツのエンジニア、コンラート・ツーゼがベルリンで開発したZ2は、電気機械式リレーコンピュータの初期の例の1つです。[ 40 ]

1941年、ツゼは以前のマシンに続いて、世界初の動作する電気機械式プログラマブル完全自動デジタルコンピュータであるZ3を発表しました。 [ 43 ] [ 44 ] Z3は2000個のリレーで構築され、約5~10Hzのクロック周波数で動作する22ビットのワード長を実現しました。[ 45 ]プログラムコードはパンチフィルムで提供され、データは64ワードのメモリに格納するか、キーボードから供給することができました。浮動小数点数などの多くの進歩を先駆けて行った点で、現代のマシンといくつかの点で非常によく似ています。実装が難しい10進システム(チャールズ・バベッジの以前の設計で使用されていた)ではなく、2進システムを使用することで、当時の利用可能な技術を考慮すると、ツゼのマシンは構築が容易で、潜在的に信頼性が高くなりました。[ 46 ] Z3自体はユニバーサルコンピュータではありませんでしたが、チューリング完全になるように拡張することができました。[ 47 ] [ 48 ]
ツーゼの次のコンピュータであるZ4は、世界初の商用コンピュータとなった。第二次世界大戦による当初の遅延の後、1950年に完成し、チューリッヒ工科大学に納入された。[ 49 ]このコンピュータは、ベルリンでコンピュータ開発のみを目的として1941年に設立されたツーゼ自身の会社、Zuse KGによって製造された。 [ 49 ] Z4は、スイス初のコンピュータであり、ヨーロッパでも初期のコンピュータの1つであるERMETHの構築のインスピレーションとなった。[ 50 ]
純粋な電子回路素子は、機械的および電気機械的な同等品にすぐに取って代わり、同時にデジタル計算がアナログ計算に取って代わりました。 1930年代にロンドンの郵便局研究所で働いていたエンジニアのトミー・フラワーズは、電話交換機への電子機器の利用可能性を探り始めました。彼が1934年に構築した実験装置は5年後に稼働し、数千個の真空管を使用して電話交換ネットワークの一部を電子データ処理システムに変換しました。[ 35 ]米国では、アイオワ州立大学のジョン・ヴィンセント・アタナソフとクリフォード・E・ベリーが1942年にアタナソフ・ベリー・コンピュータ(ABC)を開発し、テストしました。[ 51 ]これは最初の「自動電子デジタルコンピュータ」でした。[ 52 ]この設計も完全に電子式で、約300個の真空管を使用し、コンデンサは機械的に回転するドラムに固定されてメモリとして使用されました。[ 53 ]

第二次世界大戦中、ブレッチリー・パークのイギリスの暗号解読者たちは、ドイツ軍の暗号化された通信を解読することに数々の成功を収めた。ドイツの暗号機エニグマは、女性が操作することが多かった電気機械式ボンベの助けを借りて最初に攻撃された。[ 54 ] [ 55 ]より高度なドイツのローレンツSZ 40/42暗号機(陸軍の高レベル通信に使用されていた)を解読するために、マックス・ニューマンとその同僚はフラワーズにコロッサスの製造を依頼した。[ 53 ]彼は1943年2月初旬から11か月かけて最初のコロッサスを設計・製造した。[ 56 ] 1943年12月の機能テストの後、コロッサスはブレッチリー・パークに送られ、1944年1月18日に納品され[ 57 ]、2月5日に最初のメッセージを攻撃した。[ 53 ]
コロッサスは世界初の電子式デジタルプログラム可能コンピュータでした。[ 35 ]多数の真空管を使用していました。紙テープ入力で、データに対してさまざまなブール論理代数演算を実行するように構成できましたが、チューリング完全ではありませんでした。9台のMk IIコロッサスが製造されました(Mk IがMk IIに改造され、合計10台のマシンになりました)。コロッサスMark Iには1,500個の熱電子管が含まれていましたが、2,400個の管を備えたMark IIは、Mark Iよりも5倍高速で操作も簡単で、デコード処理を大幅に高速化しました。[ 58 ] [ 59 ]

ENIAC [ 60 ] (Electronic Numerical Integrator and Computer) は、米国で製造された最初の電子式プログラム可能コンピュータでした。ENIAC は Colossus と似ていましたが、はるかに高速で、柔軟性があり、チューリング完全でした。Colossus と同様に、ENIAC の「プログラム」はパッチケーブルとスイッチの状態によって定義され、後に登場するプログラム内蔵型の電子マシンとは大きく異なっていました。プログラムが書き込まれると、プラグとスイッチを手動でリセットして機械的にマシンにセットする必要がありました。ENIAC のプログラマーは 6 人の女性で、まとめて「ENIAC ガールズ」としてよく知られています。[ 61 ] [ 62 ]
電子回路の高速性と、多くの複雑な問題に対応できるようプログラムできる能力を兼ね備えていました。1秒間に5000回の加算または減算が可能で、他のどの機械よりも1000倍高速でした。また、乗算、除算、平方根を求めるモジュールも備えていました。高速メモリは20ワード(約80バイト)に制限されていました。ペンシルベニア大学のジョン・モークリーとJ・プレスパー・エッカートの指揮の下、ENIACの開発と構築は1943年から始まり、1945年末に完全稼働しました。この機械は巨大で、重量は30トン、電力消費量は200キロワット、真空管は18,000本以上、リレーは1,500個、抵抗器、コンデンサ、インダクタは数十万個も含まれていました。[ 63 ]
現代のコンピュータの原理は、アラン・チューリングが1936年の画期的な論文[ 64 ]「計算可能な数について」で提唱した。チューリングは「ユニバーサル計算機」と呼ばれる単純な装置を提案し、これは現在ではユニバーサルチューリングマシンとして知られている。彼は、テープに保存された命令(プログラム)を実行することで、このようなマシンは計算可能なものなら何でも計算できることを証明し、マシンをプログラム可能にした。チューリングの設計の基本概念は、メモリに格納されたプログラムであり、計算のためのすべての命令がメモリに格納されている。フォン・ノイマンは、現代のコンピュータの中心概念はこの論文によるものであることを認めた[ 65 ] 。チューリングマシンは今日でも計算理論における中心的な研究対象である。有限のメモリストアによって課される制限を除けば、現代のコンピュータはチューリング完全であると言われており、つまり、ユニバーサルチューリングマシンと同等のアルゴリズム実行能力を持っている。

初期の計算機は固定プログラムを使用していた。その機能を変更するには、機械の配線と構造を変更する必要があった。[ 53 ]プログラム内蔵型コンピュータの提案により、この状況は変わった。プログラム内蔵型コンピュータは、設計上命令セットを備えており、計算の詳細を示す一連の命令(プログラム)をメモリに格納できる。プログラム内蔵型コンピュータの理論的基礎は、アラン・チューリングが1936年の論文で述べた。1945年、チューリングは国立物理研究所に加わり、電子式プログラム内蔵型デジタルコンピュータの開発に着手した。彼の1945年の報告書「提案された電子計算機」は、そのような装置の最初の仕様であった。ペンシルベニア大学のジョン・フォン・ノイマンも、 1945年にEDVACに関する報告書の初稿を配布した。[ 35 ]
マンチェスター・ベビーは、世界初のプログラム内蔵型コンピュータでした。イギリスのマンチェスター大学でフレデリック・C・ウィリアムズ、トム・キルバーン、ジェフ・トゥーティルによって構築され、1948年6月21日に最初のプログラムを実行しました。[ 66 ]これは、最初のランダムアクセス型デジタル記憶装置であるウィリアムズ管のテストベッドとして設計されました。 [ 67 ] 1998年の回顧録では「小さくて原始的」と評されましたが、現代の電子コンピュータに不可欠な要素をすべて備えた最初の実動マシンでした。[ 68 ]ベビーがその設計の実現可能性を実証するとすぐに、大学ではそれを実用的なコンピュータ、マンチェスター・マーク1に発展させるプロジェクトが始まりました。
Mark 1 はすぐに、世界初の商用汎用コンピュータであるFerranti Mark 1のプロトタイプとなった。 [ 69 ] Ferrantiによって製造されたこのコンピュータは、1951 年 2 月にマンチェスター大学に納入された。この後のマシンは少なくとも 7 台が 1953 年から 1957 年の間に納入され、そのうちの 1 台はアムステルダムのシェル研究所に納入された。[ 70 ] 1947 年 10 月、英国のケータリング会社J. Lyons & Companyの取締役は、コンピュータの商業開発を促進するために積極的な役割を果たすことを決定した。1949年のCambridge EDSACをモデルにしたLyons のLEO Iコンピュータは、1951 年 4 月に稼働を開始し[ 71 ]、世界初の定型的なオフィス コンピュータジョブを実行した。

電界効果トランジスタの概念は、 1925 年にJulius Edgar Lilienfeldによって提案されました。John BardeenとWalter Brattain は、ベル研究所でWilliam Shockley の下で働いていたときに、1947 年に最初の動作可能なトランジスタである点接触トランジスタを製作し、1948 年にShockley のバイポーラ接合トランジスタがそれに続きました。 [ 72 ] [ 73 ] 1955 年以降、コンピュータの設計においてトランジスタが真空管に取って代わり、「第 2 世代」のコンピュータが誕生しました。真空管と比較して、トランジスタには多くの利点があります。小型で、真空管よりも消費電力が少ないため、発熱量も少なくなります。接合トランジスタは真空管よりもはるかに信頼性が高く、寿命が長く、無期限です。トランジスタを使用したコンピュータは、比較的コンパクトなスペースに数万個のバイナリ論理回路を搭載できます。しかし、初期の接合トランジスタは比較的かさばるデバイスであり、大量生産が困難であったため、いくつかの特殊な用途に限定されていました。[ 74 ]
マンチェスター大学では、トム・キルバーン率いるチームが、真空管の代わりに新開発のトランジスタを使用したマシンを設計・製作した。[ 75 ]彼らの最初のトランジスタ式コンピュータは世界初であり、1953年までに稼働し、第2バージョンは1955年4月に完成した。しかし、このマシンは125kHzのクロック波形を生成するため、また磁気ドラムメモリ の読み書き回路に真空管を使用していたため、完全にトランジスタ化された最初のコンピュータではなかった。その栄誉は、ハーウェル原子力研究所の電子部門によって製作された1955年のハーウェルCADETに与えられる。[ 76 ] [ 77 ]

金属酸化物シリコン電界効果トランジスタ(MOSFET)、別名MOSトランジスタは、1955年から1960年の間にベル研究所で発明され[ 78 ] [ 79 ] [ 80 ] [ 81 ] [ 82 ] [ 83 ]、幅広い用途向けに小型化および大量生産できる最初の真にコンパクトなトランジスタでした[ 74 ] 。高いスケーラビリティ[ 84 ]、バイポーラ接合トランジスタよりもはるかに低い消費電力と高い密度[ 85 ]により、MOSFETは高密度集積回路の構築を可能にしました[ 86 ] [ 87 ]。データ処理に加えて、MOSFETはメモリセル記憶素子としてのMOSトランジスタの実用化も可能にし、コンピュータの以前の磁気コアメモリに取って代わるMOS半導体メモリの開発につながりました。MOSFETはマイクロコンピュータ革命[ 88 ]につながり、コンピュータ革命の原動力となりました。[ 89 ] [ 90 ] MOSFETはコンピュータで最も広く使用されているトランジスタであり、[ 91 ] [ 92 ]デジタルエレクトロニクスの基本的な構成要素である。[ 93 ]

コンピューティング能力における次の大きな進歩は、集積回路(IC)の登場によってもたらされました。集積回路のアイデアは、国防省王立レーダー研究所に勤務していたレーダー科学者、ジェフリー・W・A・ダマーによって最初に考案されました。ダマーは、1952年5月7日にワシントンDCで開催された高品質電子部品の進歩に関するシンポジウムで、集積回路の最初の公開説明を発表しました。[ 94 ]
最初の実用的なICは、テキサス・インスツルメンツのジャック・キルビーとフェアチャイルド・セミコンダクターのロバート・ノイスによって発明されました。[ 95 ]キルビーは1958年7月に集積回路に関する最初のアイデアを記録し、同年9月12日に最初の実用的な集積回路の実演に成功しました。[ 96 ] 1959年2月6日の特許出願で、キルビーは新しいデバイスを「電子回路のすべてのコンポーネントが完全に統合された半導体材料の本体」と説明しました。[ 97 ] [ 98 ]しかし、キルビーの発明は、モノリシック集積回路(IC)チップではなく、ハイブリッド集積回路(ハイブリッドIC)でした。[ 99 ]キルビーのICは外部配線接続があったため、量産が困難でした。[ 100 ]
ノイスもキルビーより半年遅れて集積回路のアイデアを思いついた。[ 101 ]ノイスの発明は最初の真のモノリシックICチップであり、キルビーのチップでは解決できなかった多くの実用的な問題を解決した。[ 102 ] [ 100 ]フェアチャイルド・セミコンダクターで製造されたこのチップはシリコン製であったが、キルビーのチップはゲルマニウム製であった。ノイスのモノリシックICは、1959年初頭に同僚のジャン・ホーニによって開発されたプレーナープロセスを使用して製造された。プレーナープロセスは、カール・フロッシュとリンカーン・デリックによる二酸化ケイ素による半導体表面パッシベーションの研究に基づいていた。[ 103 ] [ 104 ] [ 105 ] [ 106 ] [ 107 ] [ 108 ]
現代のモノリシックICは、主にMOSFET(MOSトランジスタ)から構成されるMOS(金属酸化物半導体)集積回路です。 [ 109 ]最初に製造された実験的なMOS ICは、1962年にRCAのフレッド・ハイマンとスティーブン・ホフスタインによって作られた16トランジスタのチップでした。 [ 110 ]その後、ゼネラル・マイクロエレクトロニクスは、ロバート・ノーマンによって開発された最初の商用MOS ICを1964年に発表しました。 [ 111 ] [ 110 ] 1967年にベル研究所のロバート・カーウィン、ドナルド・クライン、ジョン・サラスによって自己整合ゲート(シリコンゲート)MOSトランジスタが開発された後、 1968年にフェアチャイルド・セミコンダクターのフェデリコ・ファギンによって自己整合ゲートを備えた最初のシリコンゲートMOS ICが開発されました。[ 112 ]それ以来、MOSFETは現代のICで最も重要なデバイスコンポーネントとなっています。[ 109 ]

MOS集積回路の開発はマイクロプロセッサの発明につながり、[ 113 ] [ 114 ]コンピュータの商用および個人利用の爆発的な増加を告げました。どのデバイスが最初のマイクロプロセッサであったかという問題は、「マイクロプロセッサ」という用語の正確な定義について合意が得られていないこともあり議論の的となっていますが、最初のシングルチップマイクロプロセッサは、インテルのテッド・ホフ、島正敏、スタンレー・マゾールとともに、フェデリコ・ファギンがシリコンゲートMOS IC技術で設計および実現したIntel 4004であることはほぼ異論がありません。[ 115 ] [ 113 ] [ b ] [ 117 ] 1970年代初頭には、MOS IC技術により、1つのチップ上に10,000個以上のトランジスタを集積することが可能になりました。 [ 87 ]
システムオンチップ(SoC)は、コインサイズのマイクロチップ(またはチップ)上に完全なコンピュータが搭載されています。 [ 118 ] RAMとフラッシュメモリが統合されている場合とされていない場合があります。統合されていない場合、RAMは通常、SoCの真上(パッケージオンパッケージとして知られています)または真下(回路基板の反対側)に配置され、フラッシュメモリは通常、SoCのすぐ隣に配置されます。これは、データ信号が長距離を移動する必要がないため、データ転送速度を向上させるために行われます。1945年のENIAC以来、コンピュータは飛躍的に進歩し、最新のSoC(Snapdragon 865など)はコインサイズでありながら、ENIACよりも数十万倍強力で、数十億個のトランジスタを統合し、わずか数ワットの電力しか消費しません。
最初のモバイルコンピュータは重く、主電源で動作していました。50ポンド(23kg )のIBM 5100は初期の例です。Osborne 1やCompaq Portableなどの後のポータブルコンピュータはかなり軽量化されましたが、それでも電源に接続する必要がありました。Grid Compassなどの最初のラップトップは、バッテリーを内蔵することでこの要件をなくしました。コンピューティングリソースの継続的な小型化とポータブルバッテリー寿命の進歩により、ポータブルコンピュータは2000年代に人気が高まりました。[ 119 ]同様の開発により、メーカーは2000年代初頭までにコンピューティングリソースを携帯電話に統合することができました。
これらのスマートフォンやタブレットはさまざまなオペレーティングシステムで動作し、最近では市場で最も普及しているコンピューティングデバイスとなっています。[ 120 ]これらは、コインサイズのマイクロチップ上に完全なコンピュータを搭載したシステムオンチップ(SoC)によって駆動されています。 [ 118 ]
コンピュータは、以下のようなさまざまな方法で分類できます。
コンピュータは電子式である必要はなく、プロセッサやRAM 、ハードディスクさえも必要ありません。一般的に「コンピュータ」という言葉はパーソナル電子コンピュータと同義語として使われますが、[ c ]コンピュータの典型的な現代の定義は、「計算を行う装置、特に高速な数学的または論理的演算を実行するプログラム可能な [通常] 電子機械、または情報を組み立て、保存、相関付け、またはその他の方法で処理する装置」です。[ 125 ]この定義によれば、情報を処理する装置はすべてコンピュータに該当します。
ハードウェアという用語は、コンピュータの物理的な構成要素すべてを指します。回路、コンピュータチップ、グラフィックカード、サウンドカード、メモリ(RAM)、マザーボード、ディスプレイ、電源装置、ケーブル、キーボード、プリンタ、コンピュータマウスなどはすべてハードウェアです。
汎用コンピュータは、算術論理演算装置(ALU)、制御装置、メモリ、入出力装置(総称してI/O)の4つの主要コンポーネントで構成されています。これらの部品は、多くの場合、複数のワイヤからなるバスによって相互接続されています。各部品の内部には、電子スイッチによってオン/オフできる数千から数兆個の小さな電気回路が存在します。各回路は1ビット(2進数)の情報を表しており、回路がオンのときは「1」、オフのときは「0」(正論理表現)を表します。回路は論理ゲートとして配置されており、1つまたは複数の回路が他の1つまたは複数の回路の状態を制御できるようになっています。
入力装置は、コンピュータの動作を制御し、データを提供する手段です。例としては、以下のようなものがあります。
出力装置とは、コンピュータが計算結果を人間が理解できる形式で出力する手段のことです。例としては、以下のようなものがあります。

制御装置(制御システムまたは中央制御装置と呼ばれることが多い)は、コンピュータのさまざまなコンポーネントを管理します。プログラム命令を読み取って解釈(デコード)し、コンピュータの他の部分をアクティブにする制御信号に変換します。[ e ]高度なコンピュータの制御システムは、パフォーマンスを向上させるために、一部の命令の実行順序を変更する場合があります。
すべてのCPUに共通する重要な構成要素はプログラムカウンタであり、これはメモリ内の次の命令が読み取られる場所を追跡する特別なメモリセル(レジスタ)です。 [ f ]
制御システムの機能は以下のとおりです。これは簡略化した説明であり、CPUの種類によっては、これらの手順の一部が同時に実行されたり、異なる順序で実行されたりする場合があります。
概念的には、プログラムカウンタは単なるメモリセルの集合であるため、ALUで行われる計算によって変更できます。プログラムカウンタに100を加えると、次の命令はプログラムの100番目の位置から読み込まれます。プログラムカウンタを変更する命令は「ジャンプ」と呼ばれることが多く、ループ(コンピュータによって繰り返される命令)や条件付き命令の実行(どちらも制御フローの例)を可能にします。
制御装置が命令を処理するために実行する一連の操作は、それ自体が短いコンピュータプログラムに似ており、実際、より複雑なCPU設計では、マイクロシーケンサと呼ばれるさらに小型のコンピュータが存在し、マイクロコードプログラムを実行してこれらのすべてのイベントを発生させます。
制御装置、演算論理装置(ALU)、レジスタはまとめて中央処理装置(CPU)と呼ばれます。初期のCPUは多くの独立した部品で構成されていましたが、1970年代以降はマイクロプロセッサと呼ばれる単一のMOS集積回路チップ上に構築されるのが一般的になりました。
ALUは、算術演算と論理演算の2種類の演算を実行できます。[ 126 ]特定のALUがサポートする算術演算のセットは、加算と減算に限定される場合もあれば、乗算、除算、正弦、余弦などの三角関数、平方根を含む場合もあります。整数のみを扱うものもあれば、実数を表すために浮動小数点を使用するものもありますが、精度は限られています。しかし、最も単純な演算のみを実行できるコンピュータであれば、より複雑な演算を、実行可能な単純なステップに分解するようにプログラムできます。したがって、どのコンピュータでも、任意の算術演算を実行するようにプログラムできますが、ALUがその演算を直接サポートしていない場合は、実行に時間がかかります。ALUは、数値を比較し、一方が他方と等しいか、より大きいか、小さいかに応じて、ブール値の真偽値(真または偽)を返すこともできます(「64は65より大きいか?」)。論理演算には、AND、OR、XOR、NOTといったブール論理が含まれます。これらは、複雑な条件文を作成したり、ブール論理を処理したりする際に役立ちます。
スーパースカラコンピュータは複数のALUを搭載しており、複数の命令を同時に処理することができます。[ 127 ]グラフィックスプロセッサやSIMDおよびMIMD機能を備えたコンピュータには、ベクトルや行列の算術演算を実行できるALUが搭載されていることがよくあります。

コンピュータのメモリは、数値を格納または読み出すことができるセルのリストとして考えることができます。各セルには番号付きの「アドレス」があり、1つの数値を格納できます。コンピュータには、「123を1357番のセルに格納する」または「1357番のセルにある数値と2468番のセルにある数値を足し、その結果を1595番のセルに格納する」といった指示を与えることができます。メモリに格納される情報は、事実上あらゆるものを表すことができます。文字、数字、さらにはコンピュータの命令も、同じように簡単にメモリに格納できます。CPUは異なる種類の情報を区別しないため、メモリが単なる一連の数値として認識するものに意味を与えるのはソフトウェアの役割です。
現代のほとんどすべてのコンピュータでは、各メモリセルは、8ビットのグループ(バイトと呼ばれる)でバイナリ数を格納するように設定されています。各バイトは、0から255、または-128から+127までの256種類の異なる数( 2⁸ = 256)を表すことができます。より大きな数を格納するには、複数の連続したバイト(通常は2、4、または8)を使用できます。負の数が必要な場合は、通常、2の補数表記で格納されます。他の構成も可能ですが、特殊なアプリケーションや歴史的な文脈以外では通常見られません。コンピュータは、数値的に表現できる情報であれば、あらゆる種類の情報をメモリに格納できます。現代のコンピュータは、数十億バイト、あるいは数兆バイトのメモリを備えています。
CPUには、メインメモリ領域よりもはるかに高速に読み書きできるレジスタと呼ばれる特殊なメモリセル群が搭載されています。レジスタの数はCPUの種類によって異なりますが、通常は2個から100個程度です。レジスタは、最も頻繁に使用されるデータ項目を格納するために使用され、データが必要になるたびにメインメモリにアクセスする必要性をなくします。データは常に処理されるため、メインメモリへのアクセス頻度を減らすこと(メインメモリはALUや制御ユニットに比べて低速な場合が多い)は、コンピュータの処理速度を大幅に向上させます。
コンピュータのメインメモリには、主に2つの種類があります。
RAMはCPUの命令があればいつでも読み書きできますが、ROMには変更されないデータとソフトウェアがあらかじめロードされているため、CPUはROMから読み取ることしかできません。ROMは通常、コンピュータの初期起動命令を保存するために使用されます。一般的に、RAMの内容はコンピュータの電源が切れると消去されますが、ROMはデータを無期限に保持します。PCでは、ROMにはBIOSと呼ばれる特殊なプログラムが含まれており、コンピュータの電源を入れるかリセットするたびに、ハードディスクドライブからコンピュータのオペレーティングシステムをRAMにロードする処理を行います。ディスクドライブを持たないことが多い組み込みコンピュータでは、必要なソフトウェアはすべてROMに格納されている場合があります。ROMに格納されているソフトウェアは、概念的にはソフトウェアよりもハードウェアに近いことから、ファームウェアと呼ばれることがよくあります。フラッシュメモリは、電源が切れてもデータを保持し、書き換えも可能なため、ROMとRAMの区別を曖昧にします。ただし、通常は従来のROMやRAMよりもはるかに低速であるため、高速性が不要なアプリケーションでのみ使用されます。[ g ]
より高度なコンピュータには、1つまたは複数のRAMキャッシュメモリが搭載されている場合があります。RAMキャッシュメモリはレジスタよりは遅いものの、メインメモリよりは高速です。一般的に、このようなキャッシュを備えたコンピュータは、頻繁に使用されるデータを自動的にキャッシュに移動するように設計されており、多くの場合、プログラマによる介入は必要ありません。
I/O は、コンピュータが外部と情報を交換する手段です。[ 129 ]コンピュータに入力または出力を提供するデバイスは周辺機器と呼ばれます。[ 130 ]一般的なパーソナル コンピュータでは、周辺機器にはキーボードやマウスなどの入力デバイス、ディスプレイやプリンタなどの出力デバイスが含まれます。ハードディスク ドライブ、フロッピー ディスクドライブ、光ディスク ドライブは、入力デバイスと出力デバイスの両方として機能します。コンピュータ ネットワークも I/O の一種です。I/O デバイスは、独自の CPU とメモリを備えた、それ自体が複雑なコンピュータであることがよくあります。グラフィックス処理ユニットには、 3D グラフィックスを表示するために必要な計算を実行する 50 個以上の小さなコンピュータが含まれている場合があります。最新のデスクトップ コンピュータには、メイン CPU の I/O 実行を支援する多数の小型コンピュータが含まれています。2016 年頃のフラット スクリーン ディスプレイには、独自のコンピュータ回路が含まれています。
コンピュータはメインメモリに格納された巨大なプログラムを1つ実行していると考えることができますが、システムによっては、複数のプログラムを同時に実行しているように見せる必要がある場合があります。これはマルチタスクによって実現され、つまりコンピュータが各プログラムを順番に高速で切り替えて実行します。[ 131 ]
これを実現する方法の一つは、割り込みと呼ばれる特別な信号を使用することです。割り込みは、コンピュータが実行中の命令を定期的に停止させ、代わりに別の処理を実行させることができます。割り込みが発生する前に実行していた場所を記憶しておくことで、コンピュータは後でそのタスクに戻ることができます。複数のプログラムが「同時に」実行されている場合、割り込みジェネレータは毎秒数百回の割り込みを発生させ、その都度プログラムの切り替えを引き起こします。現代のコンピュータは通常、人間の知覚よりも数桁速く命令を実行するため、実際には一度に1つのプログラムしか実行されていないにもかかわらず、多くのプログラムが同時に実行されているように見えることがあります。このマルチタスク方式は、各プログラムに順番に時間の「スライス」が割り当てられるため、「タイムシェアリング」と呼ばれることもあります。[ 132 ]
安価なコンピュータが登場する以前は、マルチタスクの主な用途は、多くの人が同じコンピュータを共有できるようにすることでした。一見すると、マルチタスクによって、複数のプログラムを切り替えるコンピュータは、実行中のプログラム数に比例して動作が遅くなるように思えますが、ほとんどのプログラムは、低速な入出力デバイスがタスクを完了するのを待つことに多くの時間を費やしています。プログラムがユーザーのマウスクリックやキーボードのキー押下を待っている場合、待機しているイベントが発生するまで「タイムスライス」は消費されません。これにより、他のプログラムが実行するための時間が確保され、許容できない速度低下なしに多くのプログラムを同時に実行できるようになります。

コンピュータの中には、マルチプロセッシング構成で複数のCPUに処理を分散させるように設計されたものがあり、この技術はかつてスーパーコンピュータ、メインフレームコンピュータ、サーバーといった大型で高性能なマシンでのみ用いられていました。現在では、マルチプロセッサおよびマルチコア(単一の集積回路上に複数のCPUを搭載した)のパーソナルコンピュータやノートパソコンが広く普及しており、その結果、低価格帯市場での利用も増加しています。
特にスーパーコンピュータは、基本的なプログラム内蔵アーキテクチャや汎用コンピュータとは大きく異なる、非常にユニークなアーキテクチャを持つことが多い。[ h ]それらはしばしば、数千個のCPU、カスタマイズされた高速相互接続、および専用のコンピューティングハードウェアを備えている。このような設計は、利用可能なリソースのほとんどを一度に使用するために必要な大規模なプログラム編成のため、特殊なタスクにのみ役立つ傾向がある。スーパーコンピュータは通常、大規模シミュレーション、グラフィックスレンダリング、暗号化アプリケーション、およびその他のいわゆる「並列処理が容易な」タスクで使用される。
ソフトウェアとは、コンピュータの動作を決定する符号化された情報、例えばデータやその処理方法に関する命令などを指します。システムを構成する物理的なハードウェアとは異なり、ソフトウェアは非物質的なものです。ソフトウェアには、コンピュータプログラム、ライブラリ、およびオンラインドキュメントやデジタルメディアなどの関連する非実行可能データが含まれます。ソフトウェアは、システムソフトウェアとアプリケーションソフトウェアに分けられることがよくあります。ソフトウェアとハードウェアはどちらも、現代のコンピュータの重要な構成要素です。
ファームウェアとは、 IBM PC互換機のBIOS ROMのように、物理的なハードウェアを制御するために使用されるソフトウェアの一種です。
現代のコンピュータを他のあらゆる機械と区別する決定的な特徴は、プログラム可能であることです。何らかの命令(プログラム)をコンピュータに与えると、コンピュータはそれを処理します。フォン・ノイマン・アーキテクチャに基づく現代のコンピュータは、多くの場合、命令型プログラミング言語の形式で機械語を使用します。実際には、コンピュータプログラムはわずか数個の命令から成り立つ場合もあれば、ワードプロセッサやウェブブラウザのプログラムのように、数百万個の命令に及ぶ場合もあります。典型的な現代のコンピュータは、1秒間に数十億個の命令(ギガフロップス)を実行でき、長年の運用においてエラーを起こすことはめったにありません。数百万個の命令からなる大規模なコンピュータプログラムの作成には、プログラマのチームが数年を要する場合があり、タスクの複雑さゆえに、ほぼ確実にエラーが含まれています。

このセクションは、一般的なRAM搭載型コンピュータのほとんどに適用されます。
ほとんどの場合、コンピュータの命令は単純です。ある数値を別の数値に加算したり、ある場所から別の場所にデータを移動したり、外部デバイスにメッセージを送信したりといったものです。これらの命令はコンピュータのメモリから読み込まれ、通常は与えられた順序で実行されます。しかし、プログラム内の別の場所にジャンプして実行を続けるようにコンピュータに指示する特殊な命令も通常存在します。これらは「ジャンプ」命令(または分岐)と呼ばれます。さらに、ジャンプ命令は条件付きで実行するように設定できるため、以前の計算結果や外部イベントに応じて異なる命令シーケンスを使用できます。多くのコンピュータは、ジャンプ元の位置を「記憶」するタイプのジャンプと、そのジャンプ命令の次の命令に戻るための別の命令を提供することで、サブルーチンを直接サポートしています。
プログラムの実行は、本を読むことに例えることができます。人は通常、一語一句、一行ずつ順番に読み進めますが、時折、テキストの前の箇所に戻ったり、興味のない部分を飛ばしたりすることもあります。同様に、コンピュータも、プログラムのある部分の命令を、内部条件が満たされるまで何度も繰り返し実行することがあります。これはプログラム内の制御フローと呼ばれ、コンピュータが人間の介入なしにタスクを繰り返し実行することを可能にするものです。
それに比べて、ポケット電卓を使えば、2つの数字を足すといった基本的な算術演算は、ボタンを数回押すだけで実行できます。しかし、1から1,000までのすべての数字を足し合わせるには、何千回ものボタン操作と膨大な時間が必要となり、間違いを犯す可能性もほぼ確実です。一方、コンピュータであれば、ほんの数個の簡単な命令でこれを実行するようにプログラムできます。次の例は、MIPSアセンブリ言語で記述されています。
begin: addi $8 , $0 , 0 # 合計を 0 に初期化addi $9 , $0 , 1 # 最初の加算数を 1 に設定loop: slti $10 , $9 , 1000 # 数値が 1000 未満かどうかをチェックbeq $10 , $0 , finish # 奇数が n より大きい場合は終了add $8 , $8 , $9 # 合計を更新addi $9 , $9 , 1 # 次の数値jを取得loop # 加算処理を繰り返すfinish: add $2 , $8 , $0 # 合計を出力レジスタに格納このプログラムを実行するように指示されると、コンピュータは人間の介入なしに反復的な足し算作業を実行します。間違いを犯すことはほとんどなく、最新のPCであればほんの一瞬で作業を完了できます。
ほとんどのコンピュータでは、個々の命令は機械語として格納され、各命令には一意の番号(操作コードまたは略してオペコード)が割り当てられます。2 つの数値を加算するコマンドには 1 つのオペコードが割り当てられ、それらを乗算するコマンドには別のオペコードが割り当てられるなどです。最も単純なコンピュータは、少数の異なる命令のいずれかを実行できます。より複雑なコンピュータは、それぞれに一意の数値コードを持つ数百の命令から選択できます。コンピュータのメモリは数値を格納できるため、命令コードも格納できます。これにより、プログラム全体(これらの命令のリストにすぎません)を数値のリストとして表現でき、数値データと同じようにコンピュータ内で操作できるという重要な事実が導き出されます。プログラムが操作するデータとともにプログラムをコンピュータのメモリに格納するという基本的な概念は、フォン・ノイマン型、またはプログラム格納型アーキテクチャの核心です。[ 134 ] [ 135 ]場合によっては、コンピュータは、操作するデータとは別に保持されるメモリにプログラムの一部または全部を格納することがあります。これは、ハーバード・マークIコンピュータにちなんでハーバード・アーキテクチャと呼ばれています。現代のフォン・ノイマン型コンピュータは、 CPUキャッシュなど、設計においてハーバード・アーキテクチャの特徴をいくつか備えています。
コンピュータ プログラムを長い数値のリスト (機械語)として記述することは可能であり、この手法は初期の多くのコンピュータで使用されていましたが、特に複雑なプログラムの場合、実際には非常に面倒で、エラーが発生しやすい可能性があります。代わりに、各基本命令には、その機能を示し、覚えやすい短い名前 (ADD、SUB、MULT、JUMP などのニーモニック) を付けることができます。これら のニーモニックはまとめてコンピュータのアセンブリ言語として知られています。アセンブリ言語で書かれたプログラムをコンピュータが実際に理解できるもの (機械語) に変換するのは、通常、アセンブラと呼ばれるコンピュータ プログラムによって行われます。

プログラミング言語とは、コンピュータプログラムを生成するソースコードを記述するための表記体系です。プログラミング言語は、コンピュータが実行するプログラムを指定するための様々な方法を提供します。自然言語とは異なり、プログラミング言語は曖昧さを許容せず、簡潔であるように設計されています。プログラミング言語は純粋に記述言語であり、声に出して読むのは難しい場合が多いです。一般的に、実行前にコンパイラまたはアセンブラによって機械語に変換されるか、実行時にインタプリタによって直接変換されます。場合によっては、これら2つの手法を組み合わせたハイブリッド方式でプログラムが実行されることもあります。
プログラミング言語は数千種類もあり、汎用プログラミングを目的としたものもあれば、高度に専門的なアプリケーションにのみ役立つものもある。
小規模プログラムのプログラム設計は比較的単純で、問題の分析、入力の収集、言語内のプログラミング構造の使用、確立された手順とアルゴリズムの考案または使用、出力デバイスへのデータの提供、および該当する場合の問題の解決策の提供が含まれます。[ 136 ]問題が大きくなり複雑になるにつれて、サブルーチン、モジュール、正式なドキュメント、オブジェクト指向プログラミングなどの新しいパラダイムなどの機能に遭遇します。[ 137 ]数千行以上のコードを含む大規模なプログラムには、正式なソフトウェア方法論が必要です。[ 138 ]大規模なソフトウェアシステムを開発する作業は、重大な知的課題を提示します。[ 139 ]予測可能なスケジュールと予算内で許容できる高い信頼性を持つソフトウェアを作成することは、歴史的に困難でした。[ 140 ]ソフトウェアエンジニアリングの学術的および専門的な分野は、この課題に特化して取り組んでいます。[ 141 ]

コンピュータ プログラムのエラーは「バグ」と呼ばれます。バグは無害でプログラムの有用性に影響を与えない場合や、わずかな影響しかない場合もあります。しかし、場合によっては、プログラムやシステム全体が「ハング」してマウスのクリックやキーストロークなどの入力に反応しなくなったり、完全に失敗したり、クラッシュしたりすることがあります。[ 142 ]それ以外の無害なバグは、悪意のあるユーザーがエクスプロイト、つまりバグを利用してコンピュータの正常な実行を妨害するように設計されたコードを作成することで、悪用されることがあります。バグは通常、コンピュータのせいではありません。コンピュータは与えられた命令を実行するだけなので、バグはほぼ常にプログラマのエラーまたはプログラム設計の見落としの結果です。[ j ]アメリカのコンピュータ科学者であり、最初のコンパイラを開発したグレース・ホッパー提督は、 1947年9月にハーバード・マークIIコンピュータで死んだ蛾がリレーをショートさせているのが発見された後、コンピューティングで初めて「バグ」という用語を使用したとされている。[ 143 ]

1950年代以降、コンピュータは複数の物理的な場所間で情報を調整するために使用されてきた。米軍のSAGEシステムは、そのようなシステムの最初の大規模な例であり、 Sabreなどの多くの特殊用途の商用システムにつながった。[ 144 ]
1970年代、米国各地の研究機関のコンピュータエンジニアは、通信技術を用いてコンピュータ同士を接続し始めました。この取り組みはARPA(現在のDARPA)の資金援助を受け、結果として構築されたコンピュータネットワークはARPANETと呼ばれました。[ 145 ]論理ゲートは、上記のデジタルまたはアナログパラダイムのほとんどに適用できる共通の抽象化です。プログラムと呼ばれる命令のリストを保存して実行できる能力により、コンピュータは非常に汎用性が高く、電卓とは区別されます。チャーチ=チューリングのテーゼは、この汎用性を数学的に表現したものです。最小限の能力(チューリング完全であること)を持つコンピュータは、原理的には、他のコンピュータが実行できるのと同じタスクを実行できます。したがって、十分な時間と記憶容量があれば、あらゆる種類のコンピュータ(ネットブック、スーパーコンピュータ、セルオートマトンなど)が同じ計算タスクを実行できます。
20 世紀の人工知能システムは主に記号的であり、ソフトウェア開発者によって明示的にプログラムされたコードを実行していました。[ 146 ]しかし、機械学習モデルには、トレーニング中に調整される一連のパラメータがあり、モデルは提供されたデータに基づいてタスクを実行することを学習します。機械学習(特にニューラルネットワーク)の効率は、主にグラフィックス処理ユニット(GPU)などの並列コンピューティング用ハードウェアの進歩により急速に向上しました。[ 147 ]大規模な言語モデルの中には、コンピュータやロボットを制御できるものもあります。[ 148 ] [ 149 ] AI の進歩は、人間と同等以上の能力で事実上あらゆる知的タスクを実行できるタイプの AI である汎用人工知能(AGI)の創造につながる可能性があります。 [ 150 ]
コンピュータの利用が社会全体に広がるにつれて、コンピュータに関わる職業の数も増加している。
コンピュータ同士が円滑に連携し、情報を交換できる必要性から、公式・非公式を問わず、多くの標準化団体、クラブ、協会が設立されるに至った。
コンラート・ツーゼは「現代コンピュータの発明者」という準公式の称号を得た
。
フォン・ノイマン
は、バベッジ、ラブレース、その他によって予見されていなかった限り、根本的な概念はチューリングによるものであると、私や他の人々に強く強調した。
スタンリー・フランケルからブライアン・ランデルへの手紙、1972年。
{{cite journal}}: CS1メンテナンス: DOIは2026年1月現在非アクティブです(リンク)の比較的シンプルな構造と低消費電力が、今日のマイクロコンピュータ革命を促進した。
これは、ストアードプログラムアーキテクチャまたはストアードプログラムモデルと呼ばれ、フォンノイマンアーキテクチャとしても知られています。これらの用語は互換的に使用します。
真に大規模な商用リアルタイムネットワークであるSABREコンピュータ航空券予約システムの実現に貢献した。