まだ高校生だった頃、プログラムがコンピュータを動かしている仕組みがとても不思議でした。

プログラムがコンパイルされることでバイナリが生成され、バイナリというのは 1/0 で表現されていて、それが電気信号の On/Off に対応するらしい、といった知識はありましたが、ディスプレイ上の文字列が現実世界に作用し、おまけにそれを自由に編集できるなんてまるで魔法のようでした。それが私がソフトウェアとハードウェアの境界に興味を持ち始めたきっかけだったと思います。

大学に進学してコンピュータアーキテクチャを学ぶ中で、コンピュータは電子回路を組み合わせたものであり、プログラムやデータはその上を流れる電気信号の集合で、ディスプレイは電気信号を人が理解できる形に表現し直す機械であることを意識するようになってから、この辺りのことがスッと理解できるようになりました。

それにしても、このような理解に至るまでずいぶん回り道をしたような気がします。おそらく「プログラムとはディスプレイに表示された文字列の集合である」というイメージが強かったことが理解を妨げていたのではないかと思っています。こう考えてしまうと、文字列は電気信号へと変換されていく必要があり、その過程で仮想世界と物理世界を飛び越える何か得体の知れないことが起きているように錯覚してしまいます。

プログラミングとは究極的にはキーボードを叩くことによってコンピュータの回路(ハードウェア)を流れる電気信号のパターンを変化させることです。この電気信号のパターンはメモリやディスクなどに保存され、後で実行することができます。これをソフトウェアと呼びます。また、ディスプレイは電気信号を人が理解できる形に表現するハードウェアです。このような電気信号ありきの認識を持つことで、コンピュータを理解する一歩を踏み出せるんじゃないかな、と思っています。