OfficeBooleはExcel(エクセル)VBAでみなさまのお仕事をサポートします
office boole logochoro
代 表 : Office Boole 末永尚登
E-mail : suenaga@officeboole.com
TEL / FAX   : 095-893-6090
携 帯 : 070-4087-0025




(The collection of miscellaneous stories)
ENIAC

なぜ「電子計算機」だったのか

コンピュータと脳の違い

真か偽か?

入替えてポン!

女性とコンピュータ

最初に触れたコンピュータ

電卓はコンピュータ?

1946 ENIAC「The Computer Museum History Center」より

 

なぜ「電子計算機」だったのか

20年位前まではコンピュータのことを「電子計算機」と呼ぶことも多かったと思う。今ではほとんど耳にすることはなくなったが。
そもそもコンピュータは、数学のむずかしい計算を機械にやらせてしまおうという発想から誕生した。その計算というのも 軍事目的のものであった。
第2次世界大戦当時、アメリカは当初、武器の開発に他国に比べて遅れていた。そこで大慌てで 武器の開発・増産に乗り出すが、とくに高射砲や大砲は弾道を計算させるために非常に複雑な計算を必要とした。砲弾の速度や 角度、空気の温度と湿度、風の影響など様々な要素を考慮しないと正しい結果がでないのだ。
そんなわけでアメリカ軍は 全米から優秀な科学者を募り、急いで新型の計算機を開発した。それがENIAC(エニアック)だった。
このように、人類最初のコンピュータは、 もともとは軍事目的で開発され、その後もしばらくは人間が行っていた計算を単に高速に行わせる目的で使われていたのだ。
しかし、ある科学者がコンピュータは科学計算だけではなく、あらゆる情報処理にも使えることを発表した。すると、人々はたちまち様々なものを コンピュータに入力し、処理させようと考えるようになった。
今では科学計算はもとより、通常の事務処理、画像処理、音響処理、データベース、通信、ゲームなどほとんどのことを コンピュータで行うようになり、もはや「電子計算機」という言葉はふさわしくなくなってしまったのだ。



コンピュータと脳の違い

コンピュータの方が計算速度が速く、しかも正確で、どんな処理も人間などかなわないように感じるが実際はそうでもない。
最近でこそチェスにおいて、IBMの「ディープブルー」と呼ばれるコンピュータが人間を負かしたと大騒ぎになったが、他の ゲームでは依然として人間には勝てないでいる。将棋などはやっと人間と互角に渡り合えるところまでは来ているみたいだが、 プロ棋士との対戦ではまだ勝てないはずだ。囲碁の場合はもっと弱く、アマチュア初級者でも勝てるかもしれない。
なぜコンピュータのほうが処理速度で人間に優っているのに、ゲームでは勝てないのか。それは、人間とコンピュータとでは 問題解決に対するアプローチがまったく異なるためである。コンピュータの場合は、どんな場合でも手抜きはせず、真っ正直に 問題を解いていくが、人間の場合は直感的に「このケースは考える必要がない」などと見抜き、余計なことは考えない。大事な 局面だけを過去の経験にもとづき解いていくので、時間もそれほどかからない。
しかし、それゆえに人間は勘違いや間違いも多い。
もうひとつ、コンピュータにできなくて人間に出来ることで挙げられるのは、人間は時間が経つに つれて不必要なものは忘れることができるが、コンピュータにはそれができない。自分で事の優劣(大事なものとそうでないもの)がつけられないためだ。 記憶の削除命令はあるが、あくまでも人間が指示することで実行する。一方、人間は不要なものを忘れることができることで、常に頭をリフレッシュし次の情報処理に備えることができる。
また、人間はあいまいなことをあいまいなままで考えを 進めることができるが、コンピュータはあいまいなものはこれもまた不得意である。デジタル処理はあいまいなものを嫌う。
だが、最近はファジー理論が取り入れられ、「ファジー コンピュータ」が出現してきているので、この件に関してはどうなるのだろう?



真か偽か?

コンピュータが2進数で計算をして動いていることは、誰でも知っていると思う。でも、なぜ2進数でなければいけないのか、 そして計算以外の論理的処理にもコンピュータは使われているが(人工知能、推論マシンだけではない)、どうやって論理を数式に置き換えているのか?そこまで知っている人は それほど多くないだろう。
まず2進数の採用については、ある程度納得いくはずだ。機械は単純なほど故障しにくい。また設計も容易である。 2進数の世界では数字は0と1の2種類しか存在しない。これですべての数を表現する。
ということは信号処理も2種類のみに対応していれば良く、 非常にシンプルな回路ですますことができる。いわゆるオンとオフの世界だ。電子回路に電流が流れていればオンであり、流れていなければオフとなる。オンとオフの中間はない。それゆえ処理も非常に簡単になる。
もし人間と同じ10進数を採用していたらどうなっていただろう。人間にとっては都合がよいが、機械に処理させるとなると0〜9までの10種類の 信号に対応させなければならない。電流、電圧を10種類に分類するにしても、環境によっては異なる割り当てをしなければならないかもしれない。 想像するだけでも大変そうだ。
また、論理的処理を数式に置き換えなければコンピュータは処理(計算)できないが、2進数をどう利用すれば実現できるのか?
これもある数学者がいたことで早期に実現できた。19世紀イギリスの数学者ジョージ・ブールである。彼が現れるまでは論理(人間の思考)と いうのは言葉によるものだから、数学には置き換えられないと思われていた。ところが彼は2進数的表現を採り入れることで論理学を数式で表すことに 成功した。のちにブール代数と呼ばれるものである。
つまり、その論理が正し(真)ければ1、間違って(偽)いれば0と置き換えることで論理の数式化を行ったのである。 アリストテレス以来の論理学と数学を初めて統合できたわけだ。
ブール代数の理論は2進数で計算する電子回路の設計に非常に都合が良かったので、コンピュータ動作原理の基礎となったということだ。

参考文献:「痛快!コンピュータ学」坂村 健



入替えてポン!

コンピュータの一番優れているところは、やはりどんな目的(すべてではないが)にでも使えるということだろう。 恐らく他の製品にはない特徴だと思う。よくもこういうものを考え出したものだ。電子卓上計算機(電卓)の 発明までは納得がいくが、計算機が音楽を演奏したり、動画を実行したり、ワープロになったりできるというのは 当時、誰も予測し得なかっただろう。
これらのことができるのは、現在のほとんどのコンピュータが「プログラム内臓方式」 と呼ばれるやり方で動作できるためだ。コンピュータに何か仕事をさせようと思えば、その仕事の手順を記したプログラムを コンピュータに記憶させ、実行ボタンを押せばよい。その仕事が終われば、また次のプログラムを記憶させ処理させるだけでよい。
コンピュータという機械そのもの(ハードウェア)は全くいじらずに、異なる仕事を次々とさせることができる。 この方式を考え出したのが、アメリカの天才数学者ジョン・フォン・ノイマンである。このようなコンピュータを一般にノイマン型 コンピュータと呼んでいるのも、そのためだ。世界最初のコンピュータと言われるENIACは、「プログラム内臓方式」ではなかった。 配線専門の人間が、仕事をさせようとする度に手順書に基づき、回路の配線をやり直していたということだから、計算がいくら速くても配線にかかる 時間の方が重要だったに違いない。
しかし、次のEDVACでは彼の提案が採用され、「プログラム内臓方式」のコンピュータ として作られた。以降ほとんどのコンピュータは、彼の方式を採用することになる。
だが、このことは非常にすばらしいことであるが、一方 どんな道具にもなりうるということで、人によっては簡単に操作が覚えられないという問題にもつながった。
これからは、人間にとっての使いやすさに 重点をおいたコンピュータ(ますますプログラム自体は複雑になる)がどんどん出てくることだろう。人間もプログラムを入替えるだけで 頭が切り替わり、やりたいことがスイスイできれば便利だと思うが...。



女性とコンピュータ

「女性とコンピュータ」というと、今でこそ全く違和感が無いが、ほんの少し前 (インターネットが出現する以前、またはパソコンが普及する以前)までは、 女性に最も遠い職業の一つとして考えられていたように思う。
コンピュータ技術者は理数系(特に数学)が得意な人がなる職業、機械いじりが好きな 一部のマニアックなひとがやっていること、などという思い込みが強かったためだ。
もちろん当時は技術者自体の数も少なかったし、コンピュータに関係した仕事 もずっと少なかった。 今でもシステムエンジニア、プログラマーという言葉からは男性をイメージする 人が多いかもしれない。

ところが、コンピュータ(特にソフトウェア)の歴史を調べていくと、開発当時から そこには多くの優秀な女性たちがかかわってきたことがわかる。

まず最初に、人類初のプログラマーは女性だったということである。
19世紀に、イギリスのケンブリッジ大学教授チャールズ・バベッジという人が「解析機関」 と呼ばれる機械式計算機を考案したが、その開発を資金面でもソフトウエアの 面でも援助したのがAda(エイダ)という女性だった。
Ada(Augusta Ada Lovelace)は有名な放浪詩人バイロンの娘で、貴族であるラブレイス 伯爵夫人でもあった。
バベッジの努力に感動した彼女は、高等数学の教育を受けていたこともあり、解析機関のマニュアルや そこで動く連立方程式を解くプログラムまで書いてあげたのだ。
そしてその名前は現在も、1980年米国防総省が制定したプログラミング言語「Ada」として受け 継がれている。

次に、事務処理系で最も多く使われていた(今も使われているが)言語にCOBOLがあるが、 これもその土台を作ったのはグレース・ホッパーという米国の女性であった。
彼女は世界最初の電気式計算機「MARK1」のプロジェクトに参加し、プログラミングを担当した。 そこで、彼女は多くの失敗による経験から、「コンパイラ」と呼ばれる新しい概念のプログラムを 開発した。
コンパイラは、人間が記述したすべての命令セットをいったん機械語(1と0のみで書かれた命令)に 翻訳したうえで、コンピュータに投入するためのプログラムである。これは現在も、逐次翻訳の インタープリター方式に比べてプログラムの処理スピードが速く、プログラム自体もコンパクトに なることから主流となっている。
その後、ホッパーは英語で記述できる最初のコンパイラ型言語FLOWMATICを開発し、 これを土台に1959年、一般事務処理のための言語COBOLが作られた。
ゆえに彼女は「COBOLの母」と呼ばれている。
また、プログラム上の不具合を「バグ(虫)」というが、この言葉を最初に使ったのも彼女と 言われている。

また、ENIAC(エニアック)が世界最初の電子式計算機だということはよく知られているが、 そのマシンレベルでのプログラミングを担当したのが、4人の女性数学者であったことはあまり 知られていない。
彼女たちは,それまで携帯型の計算器を使って何時間もかかっていた米国陸軍兵器の 弾道計算を数秒でできるようにするため、マシンの配線図を片手にプログラミングに取り組んだ。
ではなぜ米国陸軍が女性を雇ったのか?
実を言うと、戦時中ということで単に男性の数学者がいなかったための苦肉の策らしい。
しかし、彼女らが優秀で、チャレンジ精神に富んでいたことが、このプロジェクトを成功に 導いたことは間違いないだろう。

参考文献1:IBM(ソフトウェアの歴史) http://www-6.ibm.com/jp/lead/010115_p.htmll
参考文献2:翔泳社(ソフトウェアの20世紀) http://www.shoeisha.com/book/pc/20c/



最初に触れたコンピュータ

参考:IBM SYSTEM/3 私が最初に触れたコンピュータは、IBMの「SYSTEM/3」という今から考えると非常に原始的な(しかし面白い)コンピュータだった。(1980年頃)
今回はこのコンピュータについて、覚えていることをすこし記述しようと思う。

このコンピュータは磁気コアメモリを使用し、補助記憶装置としてディスクパックと呼ばれる円盤状の取外し可能なディスク(ディスク数枚から構成)を本体に装着して使用していた(当時でも結構古いコンピュータの部類に入る)。
また、外部媒体としてディスケット(FDのことをIBMではこう呼んでいた)を使用し、その大きさは8インチもあった。

データの入力は「3742データ入力装置」を使い、ディスケットを3742に装着後キーボードを使ってキーパンチャーによる入力が主であった。そしてその入力はSYSTEM/3本体とはオフラインでの入力のため、入力されたディスケットは今度は3741Data Station装置(ケーブルで本体と接続されている)に移され、そこから本体へ転送され実行されるのであった(ああ面倒くさい)。

また、ソフトの開発環境としてはIBM独自仕様のRPG2が用意され、コーディングはまず紙のコーディングシートにコードを記入し、それを入力装置でディスケットに入力し、そのディスケットをシステムへ転送してコンパイルをかけるという手順だった。

こうかけば非常に手間のかかるわずらわしい作業のようだが、まだパソコンというものが出現する前の時代であり、それほど不便と思った記憶はない。
しかもRPG2はプログラムジェネレータと言われるように、シートの所定の位置に命令や記号を書くことにより、自動的にプログラムが生成されるので、データの読み込み部分の記述や出力部分の記述は非常に簡単に記述でき、生産性は高かったように思う。

しかしコンパイラの処理速度は非常に遅く、そう何度もコンパイルするわけにはいかなかったので、今と比べて机上デバッグをかなり丁寧に行っていた。(現在ではプログラムを動作させてみてから、考えるという癖がついてしまっている)
コンパイルという作業は、経験したことがある皆さんはお分かりかもしれないが、結構時間のかかる作業である。
しかもこの作業はあくまでも文法(記述ルール)エラーを見つけるためだけのものであって、実際に目的どおりに動くかどうかのテストは別に行わなければいけない。
実際、プログラミングそのものよりもプログラム動作テスト(単体テスト)や、いくつか単体をつなげての結合テストのほうが数倍大変である。

この他、バッチ処理(一括処理)になくてはならないのがOCL(操作制御言語)と呼ばれるものだ。
これはジョブの手順を表す際に必要になる言語で、どのプログラムをどういう順番で流すのかとか、実行時はどの装置(記憶装置や印刷装置など)を使うのかとか、どのデータを(具体的にはどのディスクのどのトラックのどのセクタの何番目から何バイト分を何という名前のファイルとして使用するのか)等を細かく指示する為に使われる。ジョブを連続的に実行させるためには必ず必要となるものだ。 その際に誤った装置を指定していると、夜間運行などを無人で行う場合、途中でシステムが停止したまま朝を迎えることになる。

当時(1980年代)、月末処理でのバックアップ作業、集計作業、管理表の出力作業等に12時間くらいかかっていた時期もあった。おそらく現在では(処理量が同じと仮定すれば)1/4程度(3時間)くらいで終了するのではないかと思う。



電卓はコンピュータ?

よく電卓とコンピュータはここが違うということで、あっさりと片付けられてしまうことが多いが、コンピュータの動作を知る上で、電卓の仕組みを理解しておくことは 非常に役に立つ。

まず電卓とコンピュータの違いということで誰でもすぐ思いつくことは、計算をさせる手順の違いについてであろう。

例えば1からnまで連続した数字の総和を求める場合、電卓では「1+2+3+4+..+n」とキーを押していき、nまで入力した後で「=」キーを押して和をディスプレイに表示させる。

一方コンピュータではまず総和を求める計算式をプログラミングしておかなければ計算されることはない。
コンピュータで計算させる手順としては、最初に一時的にいくつかの数値を記憶させるための領域を宣言する。これでメモリの一部分を計算のために使える状態にするのだ。
次にnの値の入力を要求するコードを書き、1からnまでの総和を求めるコードを書く。
最後に求めた総和を出力するコードを記述する。その後、データを入力して出力結果を得る。

このようにコンピュータを使うと一見非常に面倒なようだが、そのかわりどんな計算でも、コードを置き換えることで可能になる。
また、いったん出来上がったプログラムは何らかの記憶装置に保存することが出来、いつでも呼び出して計算をさせることができる。
この部分が電卓と決定的に異なる部分ではないだろうか。
電卓の場合であれば、同じ計算であっても毎回1ステップ目からすべて手操作で行う必要がある。途中で入力に失敗すると最初からやり直さなければならないときもある。
何よりも不便なのは、途中の計算過程に誤りが無かったかどうかの検証が困難だということだろう。

私などよく電卓で計算するたびに異なる結果がでてきてしまい、何度も計算し直すはめに陥る。計算対象の数字が多い時は間違う頻度も当然増る。
あなたも、こんなことはよくあるのでは?

そんなとき、コンピュータではプログラムに与えるデータも残っている場合が多く、いつでも見直すことが出来て便利だ。
またプログラムそのものも計算方法に問題が無かったかどうかをいつでもチェックすることができる。
したがって何度かテストを繰り返し、問題がないとわかれば、そのプログラムを使って次回から短時間に結果を求めることができるようになる。

しかし、もともと電卓もコンピュータもハードウエア的にはなんら異なるものではないので、もし電卓にプログラム可能でしかもそれを保存可能な機能を与えてやれば、コンピュータと全く同様のことができるようになる。
事実そうなればもう電卓ではなく完全なコンピュータと言える。(プログラマブル電卓とうたった商品もあるが)

電卓でも信号の内部処理はコンピュータと全く同じ仕組みで行われている。
ではどのようなステップで計算が実行されているのだろうか。

まず電卓に備わっている0から9の数字キーを押すと、それぞれのキーに対応する電気信号が発生する。この電気信号を、10進数のキーに相当する2進数に変換する。これをエンコード (符号化)という。
1桁の10進数は以下のように4ビットの2進数で表すことができる。(1ビットで0または1を表すことが出来る)

10進数  2進数
------------------
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
6 = 0110
7 = 0111
8 = 1000
9 = 1001

なぜわざわざ2進数に変換するのか?その方が演算回路が非常にシンプルに作成できるからだ。どんなに複雑な計算でも、0か1かという2つの状態に対応する処理を考えるだけですむ。

例えば、テンキーの”7”を押すと”0111”という2進数が生成され、この2進数をレジスタという一時記憶場所に記憶する。
次に、テンキーの”+”(プラス)押すと、上の”0111”という2進数が加算器の一方の入力レジスタにセットされる。 (足し算の足される方の数値として用意)
次に、テンキーの”3”を押すと、”0011”という2進数が生成され、この2進数をレジスタに記憶する。
テンキーの”=”(イコール)を押すと、2進数の”0011”が加算器のもう一方の入力レジスタにセットされる。(足し算の足す方の数値として用意)

加算器の出力は5ビットの2進数”01010”になる。この演算結果を10進数に変換する。この変換をデコード(複号化)といい、それを行うのがデコーダ(復号器)である。
デコードの結果を人間の目に見える形で表示するのがディスプレイだ。電卓の場合、液晶表示装置になる。

このように内部で行われている処理はコンピュータの処理とまったく同じだ。
実際にはこれらの処理はCPU(中央処理装置)と呼ばれる部分で行われている。あなたもよくご存知の小さな正方形状のチップのことだ。
開発当時の電卓では、このCPUを4ビット単位の処理で行わせていたので4ビットマシンという言い方もする。
このアイデアを最初に考え付いたのが日本人のエンジニア(嶋正利氏)でだった。ところが日本ではどこも相手にされなくて、アメリカに渡りインテルという当時無名の会社で初めて実用化にこぎつけた。
これが世界初の4ビットマイクロプロセッサ4004となる。(1971年)
現在ではマイクロプロセッサというと、ペンティアムなどコンピュータ専用の部品のように思われているが、基本的には電卓に使われているものと同じものだ。

このように電卓から発展してきた計算機もソフトウエアをいつでも取替え可能にすることで、汎用的な使い方ができるようになり、計算以外の画像・通信・音楽などの処理も可能となった。

結論に入ると、計算に特化したものが電卓で、汎用的に使われるものがパソコンや汎用コンピュータということになる。
現代ではあなたもご存知のように、マイクロプロセッサはあらゆるところで使われており、コンピュータと呼ばれていないもの(自動車、炊飯器、エアコンなど)でも、実はコンピュータによる処理が行われてることがほとんどなのだ。



 


office boole banner 長崎県長崎市 オフィス・ブール 末永
E-mail: QYN00313@nifty.com   Tel/Fax: 095-893-6090