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

この言葉が現代的な意味を獲得したのは20世紀半ばになってからである。オックスフォード英語辞典によると、 「コンピュータ」という言葉が初めて使われたのは、1613年にイギリスの作家リチャード・ブラスウェイトが著した『若者の落穂拾い』という本の中で、別の意味で使われていた。 「私は、この時代の最も真実なコンピュータと、この世に息づく最高の算術師を読んだ。そして彼は汝の日々を短い数字へと縮めたのだ。」この用法は、計算や演算を行う人間、つまり「人間コンピュータ」を指していた。この言葉は20世紀半ばまで同じ意味を持ち続けた。この時代後半には、男性よりも賃金が低かったため、女性がコンピュータとして雇われることが多かった。[1] 1943年までに、人間コンピュータのほとんどが女性であった。[2]
オンライン語源辞典によると、コンピュータの最初の使用例は1640年代で、「計算する人」という意味で、これは「compute(動詞)由来の動詞名詞」です。オンライン語源辞典によると、この用語が「(あらゆる種類の)計算機」という意味で使われ始めたのは1897年です。オンライン語源辞典によると、「プログラム可能なデジタル電子計算機」という意味での「現代的な用法」は、この名称で1945年から、理論的な意味では1937年からチューリングマシンとして使われ始めたとされています。[3]現代のコンピュータは多くの高レベル機能を実行できますが、この名称は今も残っています。
数千年にわたり、計算を助けるための道具が使われてきました。その多くは指と一対一の対応関係を用いていました。最も初期の計数器は、おそらく数え棒の一種でした。肥沃な三日月地帯全域で後世に使われた記録保持具には、中空の未焼成の粘土容器に封入された、家畜や穀物などの物品の数を表す計数器(粘土の球、円錐など)が含まれていました。[a] [4]計数棒の使用はその一例です。

そろばんは当初、算数に使用されていました。ローマのそろばんは、紀元前2400年頃のバビロニアで使用されていた器具から発展しました。それ以来、様々な種類の計算盤や計算表が発明されてきました。中世ヨーロッパの計算室では、計算表の上にチェック柄の布を敷き、一定の規則に従ってマーカーを動かして金額を計算していました。[5]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

一部のコンピュータは、マルチプロセッサ構成において複数のCPUに処理を分散させるように設計されています。この技術はかつて、スーパーコンピュータ、メインフレームコンピュータ、サーバーといった大規模で強力なマシンでのみ採用されていました。現在では、マルチプロセッサおよびマルチコア(単一の集積回路上に複数のCPUを搭載)を搭載したパーソナルコンピュータやラップトップコンピュータが広く普及しており、その結果、ローエンド市場でもますます利用されるようになっています。
特にスーパーコンピュータは、基本的なプログラムストアードアーキテクチャや汎用コンピュータとは大きく異なる、非常に独特なアーキテクチャを持つことが多い。[h]多くの場合、数千個のCPU、カスタマイズされた高速インターコネクト、そして特殊なコンピューティングハードウェアを備えている。このような設計は、利用可能なリソースの大部分を一度に使用するために大規模なプログラム構成が必要となるため、特殊なタスクにのみ有効である傾向がある。スーパーコンピュータは通常、大規模シミュレーション、グラフィックスレンダリング、暗号化アプリケーション、そしていわゆる「驚異的並列」タスクで利用される。
ソフトウェアは、コンピュータシステムの一部であり、データやデータ処理方法に関する命令など、コンピュータの動作を決定する符号化された 情報で構成されています。システムを構築する物理的なハードウェアとは異なり、ソフトウェアは実体がありません。ソフトウェアには、コンピュータプログラム、ライブラリ、およびオンラインドキュメントやデジタルメディアなどの関連する非実行データが含まれます。ソフトウェアは、システムソフトウェアとアプリケーションソフトウェアに分けられます。コンピュータのハードウェアとソフトウェアは互いに必要であり、どちらも単独では役に立ちません。IBM PC互換機のBIOS ROMのように、簡単に変更できないハードウェアに保存されているソフトウェアは、「ファームウェア」と呼ばれることがあります。
現代のコンピュータを他のすべての機械と区別する決定的な特徴は、プログラムできることです。つまり、何らかの命令(プログラム) をコンピュータに与えると、コンピュータがそれを処理します。フォン ノイマン アーキテクチャに基づく現代のコンピュータでは、多くの場合、命令型プログラミング言語の形式でマシン コードが使用されています。実際には、コンピュータ プログラムは、ワード プロセッサやWeb ブラウザなどのプログラムのように、わずか数個の命令で構成されることもあれば、数百万個の命令に及ぶこともあります。一般的な現代のコンピュータは、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つのオペコードが割り当てられ、2つの数値を乗算する命令には異なるオペコードが割り当てられ、といった具合です。最も単純なコンピュータは、ごく少数の異なる命令のいずれかを実行できますが、より複雑なコンピュータでは、それぞれ固有の数値コードを持つ数百の命令から選択できます。コンピュータのメモリは数値を保存できるため、命令コードも保存できます。このことから、プログラム全体(これらの命令のリスト)を数値のリストとして表現し、数値データと同じようにコンピュータ内で操作できるという重要な事実が導き出されます。プログラムを、それが操作するデータと共にコンピュータのメモリに保存するという基本的な概念は、フォン・ノイマン型、すなわちストアード・プログラム・アーキテクチャの核心です。[133] [134]場合によっては、コンピュータはプログラムの一部またはすべてを、操作するデータとは別のメモリに保存することがあります。これは、ハーバード・マークIコンピュータにちなんでハーバード・アーキテクチャと呼ばれています。現代のフォン・ノイマン型コンピュータは、 CPUキャッシュなど、その設計にハーバード・アーキテクチャの特徴をいくつか取り入れています。
コンピュータプログラムを長い数字の羅列(機械語)で書くことは可能であり、この手法は初期のコンピュータの多くで使われていたが[i]、特に複雑なプログラムの場合、実際には非常に面倒で、潜在的にエラーが起こりやすい。代わりに、各基本命令に、その機能を示して覚えやすい短い名前(ニーモニック、ADD、SUB、MULT、JUMPなど)をつけることができる。これらのニーモニックは総称してコンピュータのアセンブリ言語と呼ばれている。アセンブリ言語で書かれたプログラムをコンピュータが実際に理解できるもの(機械語)に変換するのは、通常、アセンブラと呼ばれるコンピュータプログラムによって行われる。

プログラミング言語とは、コンピュータプログラムを作成するためのソースコードを記述するための表記法です。プログラミング言語は、コンピュータが実行するプログラムを指定するための様々な方法を提供します。自然言語とは異なり、プログラミング言語は曖昧さを許さず簡潔に記述するように設計されています。純粋に記述言語であるため、読み上げるのが難しい場合が多くあります。通常、実行前にコンパイラまたはアセンブラによって機械語に変換されるか、実行時にインタプリタによって直接変換されます。場合によっては、この2つの手法を組み合わせた方法でプログラムが実行されます。
プログラミング言語は何千種類もあり、その中には汎用プログラミングを目的としたものもあれば、高度に特殊化されたアプリケーションにのみ役立つものもあります。
機械語とそれを表現するアセンブリ言語(総称して低水準プログラミング言語と呼ばれる)は、一般的にコンピュータの中央処理装置(CPU)の特定のアーキテクチャに固有のものです。例えば、スマートフォンや携帯型ビデオゲームに搭載されているARMアーキテクチャのCPUは、PCに搭載されているx86 CPUの機械語を理解することができません。[j]歴史的には、Zilog Z80に加えて、MOS Technology 6502と6510など、他にも多数のCPUアーキテクチャが開発され、広く利用されました。
アセンブリ言語は機械語よりもかなり簡単ですが、長いプログラムを書くのはしばしば難しく、エラーが発生しやすいという欠点もあります。そのため、実用的なプログラムのほとんどは、プログラマーのニーズをより簡潔に表現できる(したがってプログラマーのエラーを減らすのに役立つ)より抽象的な高水準プログラミング言語で書かれています。高水準言語は通常、コンパイラーと呼ばれる別のコンピュータプログラムによって機械語(またはアセンブリ言語にコンパイルされ、さらに機械語にコンパイルされる場合もあります)に「コンパイル」されます。[k]高水準言語は、アセンブリ言語ほど対象コンピュータの動作とは関係がなく、最終的なプログラムが解決する問題の言語と構造に関係しています。そのため、同じ高水準言語プログラムを、異なる種類のコンピュータの機械語に変換するために、異なるコンパイラーを使用することがしばしば可能です。これは、ビデオゲームなどのソフトウェアを、パーソナルコンピュータや各種ビデオゲームコンソールなどの異なるコンピュータアーキテクチャで利用できるようにするための手段の一部です。
小規模プログラムのプログラム設計は比較的単純で、問題の分析、入力の収集、言語内のプログラミング構造の使用、確立された手順とアルゴリズムの考案または使用、出力デバイスへのデータの提供、および該当する場合は問題の解決策の提供が含まれます。[135]問題が大規模かつ複雑になるにつれて、サブプログラム、モジュール、正式なドキュメント、オブジェクト指向プログラミングなどの新しいパラダイムなどの機能が登場します。[136]数千行以上のコードを含む大規模プログラムには、正式なソフトウェア方法論が必要です。[137]大規模ソフトウェアシステムの開発は、大きな知的課題を提示します。[138]予測可能なスケジュールと予算内で、許容できるほど高い信頼性を持つソフトウェアを作成することは、歴史的に困難でした。[139]ソフトウェア工学という学術的および専門的分野は、特にこの課題に重点を置いています。[140]

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

コンピュータは1950年代から、複数の物理的な場所間での情報調整に利用されてきました。米軍のSAGEシステムは、このようなシステムの最初の大規模な例であり、その後、 Sabreのような多くの特殊用途の商用システムへと発展しました。[143]
1970年代、米国中の研究機関のコンピュータ技術者は、通信技術を使用してコンピュータを相互にリンクし始めました。この取り組みはARPA(現在のDARPA)によって資金提供され、その結果生まれたコンピュータネットワークはARPANETと呼ばれました。[144] 論理ゲートは、上記のデジタルまたはアナログパラダイムのほとんどに適用できる共通の抽象化です。プログラムと呼ばれる命令のリストを保存して実行する機能により、コンピュータは極めて汎用性が高く、計算機とは異なります。チャーチ–チューリングのテーゼは、この汎用性を数学的に述べたものです。最小限の能力(チューリング完全)を持つコンピュータは、原理的には、他のコンピュータが実行できるのと同じタスクを実行できます。したがって、十分な時間とストレージ容量があれば、あらゆる種類のコンピュータ(ネットブック、スーパーコンピュータ、セルラーオートマトンなど)は同じ計算タスクを実行できます。
20世紀の人工知能システムは主にシンボリックであり、ソフトウェア開発者によって明示的にプログラムされたコードを実行していました。[145]しかし、 機械学習モデルには、トレーニング中に調整される一連のパラメータがあり、モデルは提供されたデータに基づいてタスクを達成するように学習します。機械学習(特にニューラルネットワーク)の効率は、並列コンピューティング用のハードウェア、主にグラフィックス処理装置(GPU)の進歩により急速に向上しました。[146]一部の大規模言語モデルは、コンピューターやロボットを制御できます。[147] [148] AIの進歩は、少なくとも人間と同様にあらゆる知的タスクを実行できるタイプのAIである、人工汎用知能(AGI)の創造につながる可能性があります。[149]
コンピュータの利用が社会全体に広がるにつれ、コンピュータに関わる職業も増えています。
コンピュータが連携して動作し、情報を交換できるようにする必要性から、公式および非公式の両方の性質を持つ多くの標準化団体、クラブ、協会の必要性が生まれました。
コンラート・ツーゼは「現代コンピューターの発明者」という半ば公式な称号を得た
[
誰?
]
。
フォン・ノイマンは…私に対して、そしておそらく他の人たちに対しても、その基本的な概念はチューリングによるものだと強く強調しました。ただし、バベッジ、ラヴレース、その他によって予見されない限りは。スタンリー・フランケルがブライアン・ランデルに宛てた手紙、1972年。
{{cite journal}}: CS1 maint: DOIは2025年7月時点で非アクティブです(リンク) (サブスクリプションが必要です)。
{{cite journal}}:ISBN / 日付の非互換性(ヘルプ)
比較的シンプルさと低消費電力が、今日のマイクロコンピュータ革命を促進しました。
これはストアード・プログラム・アーキテクチャまたはストアード・プログラム・モデル、あるいはフォン・ノイマン・アーキテクチャとも呼ばれます。本稿ではこれらの用語を互換的に使用します。
初の本格的な大規模商用リアルタイム ネットワークである SABRE コンピューター航空予約システムが実現しました。