「コラム」カテゴリーアーカイブ

コンピュータの歴史

なぜ、コンピュータの歴史にふれるのか?
それは、基本情報処理技術者のシラバスとして提示されている、『基礎理論』の「離散数学」や「応用数学」といった科目をなぜ学ぶ必要があるのか?を理解する助けになるからである。

『離散数学』『応用数学』が試験範囲として設定されている意義は、
・コンピュータの中では、情報は「0」か「1」かになる
・コンピュータは人間が組み込んだプログラム(=アルゴリズム)を忠実に再現する
この点を理解するために、用意されているとも言える。

1:計算機以前のハナシ

そもそも、「コンピュータ」というのは、何者なのか?
日本語で直訳すれば、「電子計算機」と訳される。
要するに、何らかの計算をするための機械ということになる。

では、コンピュータというものは、ある時に誰かが突然その原理を思いついて発明したものなのか?
もちろん、答えはNOである。
先人達が、必要に迫られて計算を行うための道具をつくろうとする過程から、徐々に生まれてきたものなのである。

人類にとって、計算するための最初の道具として使われたものは、人間の指や石ころであったと言われている。今の常識から考えると、あまりにも単純なことではあるが、これでも立派な「計算道具」である。計算する、という意味の英語”calculate”の語源は、ラテン語の『小石』から来ていることからも、それはうかがい知ることができる。

また、コンピュータの中ではすべての情報は0か1で表されており、そのようなデータを『デジタル』と読んでいるが、『デジタル(digital)』の語源も、ラテン語の『指』から来ている。

2:計算道具の進化

小石や指で数を数える方法を、もう少し発展させてものが、東洋の「ソロバン」や西洋の「計算尺」である。

「ソロバン」の起源は紀元前の中東で用いられていたという説があり、中国では14世紀ごろ、日本には室町時代には伝わっており、古い歴史のある計算道具である。こちらは、コマが「上がっているか」「下がっているか」のどちらかの状態しか見ないので、指や小石の延長で「デジタル」な計算道具である。

「計算尺」は、目盛をつけた2本の定規を使って簡単に計算を行う道具で、1622年にイングランドの数学者・オートレッドが発明した。
スコットランドの数学者・ネイピアが1617年に考案した「ネイピアの棒」を起源としており、数学の「対数」という考え方を使って、掛け算や割り算を簡単な足し算や引き算で置き換えようとしたモノ。
定規のカーソルの位置で計算結果を求める「アナログ」の計算機であった点が特徴である。「関数電卓」が登場した1970年代頃までは理工学系の設計計算や測量の分野で使用されていた。
cf)ネイピアの棒:http://www.geocities.jp/kyo_oomiya/napier.html など

*対数とは・・・

16世紀末にジョン・ネイピアやヨスト・ビュルギらによって、考案され、便利な計算方法として広まったモノ。

定義:
正の実数 a ≠ 1 をとると、 任意の正の実数 xに対し、x = ap を満たす 実数 p が唯一つ定まる。
この p を p = logX と書き、p のことを 「a を底(てい、base)とする x の対数」という。

ソロバンも計算尺も「手動」で計算を行う道具だが、機械式の計算機も17世紀に登場している。以下、登場順に

  • シッカートの計算機:6桁の加減算と、オーバーフローの検出、複数の「ネイピアの棒」を使った乗算が可能
  • パスカルの計算機:歯車を使って、加減算を計算。自動で桁上りする機能を持つ
  • ライプニッツの計算機:パスカルの計算機を改良し、乗除算が出来る

ライプニッツは、計算機を単純に数値の計算だけに使うのではなく、「論理的な仮説を検証することにも使える」という考え方を打ち出している。これは、現在のコンピュータにも通じるもので、その後の計算機の理論的な発展に重要な影響を及ぼしたとされている。

ただし、ここまでの機械は歯車などの比較的単純な機構を用いた装置であった。

3:コンピュータ誕生前夜

(1)プログラムの誕生

現在のコンピュータにもつながる基本的な仕組みは、産業革命期のイギリスにおいて発明された。航海に必要な天文学の計算や、機械設計などの科学技術分野で、膨大な計算作業が必要になったことを受けてのことである。

それは、イギリスの数学者・バベッジによる「階差機関」と「解析機関」として、開発が着手され、とりわけ「解析機関」は現在のコンピュータにも通じる、重要なアイディアが盛り込まれていた。
「演算機能」と「記憶機能」が分離されていて、「プログラム」によって色々なパターンの計算をさせよう、という考え方を採用していた点である。そのため、バベッジは「コンピュータの父」とも言われている。
*ただし「階差機関」も「解析機関」も、バベッジが生きているうちには完成しなかった。

「解析機関」では外部から「プログラム」を与えるとされているが、その「プログラム」の入力には、織り機のために発明されていた「パンチカード」を使うことが考えられていた。「パンチカード」は紙で出来たカードに穴をあけたもので、開けられた穴の位置によって計算の指示を与えるものである。

ちなみに、「解析機関」の開発に深く携わった人物として、エイダという女性がいる。彼女はバベッジに対して、「解析機関」の開発費用の援助を行っただけでなく、解析機関の解説書の作成や、解析機関で利用されるプログラムの作成にも携わっている。そのプログラムの考え方は、現在のコンピュータのプログラムにも通じるほど高度なものであり、『人類初のプログラマ』とも言われている。

(2)0と1の世界の確立

ライプニッツによって『計算機械が論理的な仮説の検証にも使える』という考え方が提唱されたが、19世紀になって、イギリスの数学者・ブールがこの考え方をさらに発展させて、コンピュータで使われる理論の基礎を築いた。

1854年にブールは『真』と『偽』の二つの値を使う『論理学』という学問を、『1』と『0』という2つの数字だけを使って扱うことが出来るという考え方を示した。これを『ブール代数』と読んでいる。

ブールは『事象1』が『真』であり、かつ、『事象2』が『真』であれば、『結果』も『真』であるということを、『論理積』として、単純に1×1=1という演算で表現した。この『論理積』以外の他に、『論理和』や『否定』といった『論理演算』を使って、論理の世界を1と0の演算で表現できることを証明した。

つまり、1と0の演算を行える機械を作りさえすれば、その機械でどんな論理的な計算もできることを示したのである。

その後、20世紀に入り、イギリスの数学者・チューリングによって、論理的な計算を仮想的な機械で行うことが出来ることが示された。

チューリングは、無限に長いテープと、それに0か1かの情報を読み書きするヘッドを持った、テープレコーダーのような機械を想定し、その機械を何回か動作させれば、加減乗除をはじめとして、数学的な様々な問題が解けることを証明したのである。この仮想的な機械は『チューリング機械』と呼ばれている。

また、チューリング機械の可能性を示すと同時に、限界も示されており、「プログラムに書けない問題は解決することは出来ない」ということである。プログラムに書ける=アルゴリズムが分かっている、という言い方もできるが、アルゴリズムがわからない問題は、チューリング機械では解決できないということである。

(3)コンピュータの誕生

バベッジの『解析機関』で構想された、『プログラムによって動作する計算機』というものが実現するのは、第二次世界大戦前後まで待つこととなる。

まずは、ドイツで1938年に『Z1』という計算機械が開発される。初期型の『Z1』は機械式だったが、改良版の『Z2』では、電気のオン・オフを切り替える『リレー』という電子部品が使われており、航空機の設計計算に用いられた。

一方、アメリカでは1939年にアタナソフにより『ABC』という名の電子計算機が試作された。『ABC』では、リレー回路だけではなく、『真空管』という電子部品も使われた。さらに1944年に『MarkⅠ』というリレーを使った大型計算機も開発されている。

それ以外にも、1943年にイギリスで『COLOSSUS』という真空管を使った電子計算機が開発されている。

しかし、当時は世界大戦中ということもあり、情報の交換は行われず、各国内で独自に開発が行われ、現在の形のコンピュータが開発されるのは、第二次世界大戦終了後のことである。

3:コンピュータ誕生と発展

(1)最初のコンピュータ・ENIACの誕生

一般的に、「世界初のコンピュータ」と言うと、1946年に誕生した『ENIAC』を指す。

『ENIAC』はアメリカ・ペンシルバニア大学のエッカートとモークリーによって開発された計算機で、『ABC』の技術も取り入れているが、最大の違いは真空管だけを使ってすべての計算をさせるという点である。

真空管はリレーと同様に電気のスイッチの役割を果たすが、動作がリレーよりも格段に速いという特徴を持っていた。反面、リレーよりも信頼性に劣り、価格も高かったのだが、『ミサイル弾道のシミュレーション』に使いたいというアメリカ陸軍の思惑もあり、開発が進められた。

但し、『ENIAC』のプログラムは実際に人間が配線を変更することで行われ、現在のコンピュータの仕組みとは異なっている部分もあり、コンピュータの定義によっては必ずしも世界最初のものではない。 しかし、いずれにせよ『ENIAC』が、コンピュータの黎明期において歴史的に重要な役割を果たしたものの1つであることに変わりはない。

(2)フォン・ノイマン型コンピュータの確立

『ENIAC』の計算速度は、それまでの計算機械と比べて、圧倒的な性能を誇った。しかし、プログラムの変更が、人手による配線の変更を要し、手間がかかるという欠点があった。

そこで、後継機の『EDVAC』では、プログラムをあらかじめ記憶装置に内蔵しておく方式が採用されることになった。この方式を、『プログラム内蔵方式』といい、この方式を取るコンピュータのことを『フォン・ノイマン型コンピュータ』と呼ぶ。

当時すでに有名な科学者であったフォン・ノイマンは『ENIAC』の開発に途中から参画し、『ENIAC』・『EDVAC』開発プロジェクトにも深く関わっていたのだが、そのなかで出てきたアイディアをフォン・ノイマンが纏め上げたことから、彼の名が残っているわけである。

その『EDVAC』は1950年に完成したが、実は、世界初の『フォン・ノイマン型コンピュータ』とはならなかった。フォン・ノイマンらのアイディアを知った、イギリス・ケンブリッジ大学のウィルクスらが『EDSAC』というコンピュータを1949年、つまり『EDVAC』より先にに完成させたのである。

しかしながら、現在のコンピュータが『EDVAC』の延長線上にあること。すなわち『フォン・ノイマン型コンピュータ』であることには変わらない。

(3)その後のコンピュータの進化

『EDVAC』以降のコンピュータの発展は、「計算スピードの向上」「記憶容量の増大」「小型化・低価格化」といった変化を日進月歩で繰り返し、さらにそのサイクルも短くなる形で急速な発展を遂げできたわけだが、「プログラム内蔵方式」であり、「スイッチの集合体」であるという点で、『EDVAC』の延長線上にあると言える。

この数十年でのコンピュータの進化は、コンピュータの5大要素『演算』『制御』『記憶』『入力』『出力』の各機能の小型化・高速化・大容量化という点に尽きる。

具体的には『スイッチ』の機能を果たす電気部品である『真空管』が『半導体素子』に変わり、『半導体素子』自体も、初期のトランジスタから小型化・高速化が進んでIC、LSIと進化してきた。

コンピュータの形態としても、初期の大型汎用コンピュータから、オフコン・ミニコン、サーバ・ワークステーション、パソコン、といった形でダウンサイジングが進みつつ、現在のパソコンは初期の汎用大型コンピュータよりも高性能を誇るほどの高性能化も進んでいる。

しかしながら、コンピュータがどれだけ小型化・高性能化しても、スイッチの集合体であり、0と1の論理演算の組合せで、処理を実行している点や、アルゴリズム化できない問題は解決できないという、チューリング機械の限界といった、基本的な考え方については変わっていない。

コンピュータの進化という話題では、とりわけパーソナルコンピュータ(パソコン)の進化のスピードは凄まじいものがある。その大きな要因となっているキーワードが、『デファクト・スタンダード』『オープン・アーキテクチャ』『水平分業』である。

オープン・アーキテクチャとは、内部仕様の公開ということで、元々の狙いとしては、ソフトや周辺機器の開発を容易にし、多数のソフト・周辺機器を競わせることで、本体の魅力をより向上させようというものであった。

現在のパソコンの多くは『PC/AT互換機』と言われ、元はIBMの1商品で、その商品力アップのために仕様が公開されたわけだが、仕様を公開することで、ソフトや周辺機器のみならず、パソコン本体の仕様を真似た物(=互換機)も登場することとなり、パソコン市場を独占しようというIBMの目論見は失敗に終わる。

しかし、世に多数の『PC/AT互換機』が出回り、シェアを拡大することで、『PC/AT互換機』が事実上のパソコンの標準規格となってしまったわけである。(=デファクトスタンダード)
*水平分業が技術革新を進めるというのは、パソコンに限定される話ではない。殆どの産業に言えることである。

4:離散数学や応用数学との関連

結局のところ、基本情報処理技術者やITパスポートという国家試験のカリキュラム(シラバス)で、なぜ離散数学や応用数学といったテーマが出てくるのか、という事だが、
『コンピュータは色々なパターンの計算をさせるための機械である』
『様々な計算は、0と1を使った論理演算の組合せで実現できる』
という基本的な事項は、コンピュータが進化しても変わりない部分である。

コンピュータの中での情報の表現方法や、論理演算といった、コンピュータの根幹に関わる理論を扱っているのが『離散数学』という分野であり、「どんなパターンの計算をさせるのか?」といった具体的な事例について触れているのが、『応用数学』(特に確率統計や、数値解析)という分野ということになる。

あくまでも、情報処理技術者として、『離散数学』や『応用数学』の分野から、役に立ちそうなエッセンスを吸収してくださいね、という事であり、情報処理技術者に学問としての『離散数学』や『応用数学』をマスターすることが求められているわけではない。(無論、マスター出来れば、大きな武器にはなるし、ハード/ソフトの根幹に近い部分では、高度な離散数学や確率統計・数値解析手法について熟知していることが求められる)

また、『数学』という学問が、『論理的思考能力』を鍛えるための学問である点も見逃せない。
『論理的思考』とは『物事を数理的に捕え、筋道を立てて考え、処理する』という事になる。

実際の仕事では『習うより慣れろ』『理論より実践』ということは、よく言われるが、慣れることで処理能力は向上しても、『なぜそうなるのか?』ということが分かっていなければ、これまでの経験を応用して異なる仕事をしたり、何がしかの問題が発生したときに原因を究明することが難しくなる。

例えば、何がしかのプログラム言語で「1÷3×3」という計算をさせたところ、1になるはずの解が1にならない。いくら算数のドリルを解いたところで、コンピュータ上で、数字がどう表現されているのか、四則演算がどう行った仕組みで行われているのか、を理解しておかないと、何が悪くて期待通りの結果が出ないのかが分からないのである。

人間の脳は直感的に、この数式の解が1であると分かるが、それはあくまでも四則演算というアルゴリズムを刷り込まれているから『直感的』に解が出せるが、コンピュータにもそのアルゴリズムを教えてあげないと、正しく計算はしてれないし、コンピュータの内部では『分数』という便利なものは表現できない点、割り算では誤差が出る可能性がある、という原理が分かっていないと、対処法が導き出せないのである。

参考文献

  • 「誰がどうやってコンピュータを創ったのか?」 星野 力 著(共立出版 1995年 )
  • 「エニアック 世界最初のコンピュータ開発秘話」 スコット・マッカートニー 著 日暮 雅通 訳(パーソナルメディア 2001年)