筆者の会社に、世界最初のコンピュータとして知られるENIACをパソコン上でシミュレートさせるソフトウエアを作った人がおり、先日そのソフトのデモを見せてもらいました。
ENIACそのものは、元々、第二次世界大戦中に米陸軍の大砲の弾道計算をする目的で始められたそうですが、完成したのは1946年で、戦争は既に終っていました。
当時、2万本近い真空管を使い、総重量30トンを超えた計算機は、今では、2キロに満たないノート型Macで、遥かに高速に走ります。(正確に言うと、Windowsアプリケーションなので、筆者の環境では、Mac上の仮想PCで走っています。)
このENIACですが、今のコンピュータと違い内部演算を10進数で行っています。当時、既に二進法の方が効率的である事は専門家の間では知られていましたが、スポンサー達を説得するために、わざわざ十進法を採用したそうです。
また、プログラミングは配線をいじって行うタイプで、所謂フォン・ノイマン型コンピュータは、ENIACの直接の後継機種であるEDVACによって初めて実装されました。
写真を見ると、プログラミング用のケーブルが一部配線されている様子が映されています。
ENIACそのものは、元々、第二次世界大戦中に米陸軍の大砲の弾道計算をする目的で始められたそうですが、完成したのは1946年で、戦争は既に終っていました。
当時、2万本近い真空管を使い、総重量30トンを超えた計算機は、今では、2キロに満たないノート型Macで、遥かに高速に走ります。(正確に言うと、Windowsアプリケーションなので、筆者の環境では、Mac上の仮想PCで走っています。)
このENIACですが、今のコンピュータと違い内部演算を10進数で行っています。当時、既に二進法の方が効率的である事は専門家の間では知られていましたが、スポンサー達を説得するために、わざわざ十進法を採用したそうです。
また、プログラミングは配線をいじって行うタイプで、所謂フォン・ノイマン型コンピュータは、ENIACの直接の後継機種であるEDVACによって初めて実装されました。
写真を見ると、プログラミング用のケーブルが一部配線されている様子が映されています。
真空管を2万本近く使っており、恐らく計算機内部の配線はもっとゴチャゴチャしたものだったでしょう。
ENIACほどエポックメーキングなものではありませんが、筆者も30年ほど前に、実験室でIC(TTLだったと思います)で構成されたNAND回路を使ってコンピュータを作った事があります。トランジスタや真空管ではなくICを用い組み立てたのですが(当時LSIや超LSIは既にありましたが、種類が限られており、実験機はICで作っていました)、それでも電線がのたくって渦を巻き、雲のようになっていて、配線をたどるだけでも大変な作業でした。
この当時を振り返って思い出すのは、ある有名な飛行家の言葉です。人類の初飛行は、アメリカのライト兄弟によって成し遂げられましたが、別にこの兄弟だけが初飛行に挑戦していたわけではなく、世界中で様々な人々によって試みられ、ことごとく失敗していました。この飛行家は、失敗が繰り返されていた頃、インタビューに答え、「飛行機を発明する事は何でもない事である。作る事も、頑張れば何とかなる。問題は、実際に飛ばす事だ。」と言う名言を残しています。
コンピュータも似たような事が言えます。コンピュータ回路も、動作原理さえ知ってれば、設計はすぐ出来ます。アナログ回路よりも、ある意味、遥かに簡単です。配線も頑張れば何とかなります。問題は、正しく動かす事、デバッグが極めて困難なのです。昨今、時々CPUのハードウエア・バグが見つかって、新聞雑誌の紙面を賑わす事がありますが、その複雑さ、困難さを示す良い例でしょう。
さて、目をソフトウエア分野に向けて見ましょう。
オブジェクト指向を含め、現在主流となっているソフトウエア・アーキテクチャの考え方の原形部分が、既にコンピュータの黎明期である50年代には大部分出そろっていたことに驚かされます。
様々な理由で、当時はまだ実用的でないと見做されたアプローチが50年後の現在、有効な手段として発展して来ています。
逆に言うと、アイデアの発見よりも、実用化の方が遥かに時間のかかる作業である、と言えます。
オブジェクト指向なり、フレームワークなり、昨今主流になりつつあるアプローチも、原理の理解よりも、実際に使う事の方が、時間と労力を要する作業と言えるでしょう。