優れたプログラマーは2進数を使う。全ては0と1で出来ているのか?

スマートフォンが発売された時にそれまでパソコンの使い方がわからなかった人でもウェブが利用できるようになったという人は多い(特に俺の周りでは)文字を打たなくても音声認識で検索したり、ハイパーリンクや検索を使わずともネットを利用した便利な機能たとえば乗り換え検索とかそれまでもパソコンで出来たことだかスマートフォンで出来るので「もうパソコンはいらない」と言い始めたのだが「スマートフォンもコンピュータだって分かってる?」と試しに聞いてみると「えっ?コンピューターって0と1だけで動いてるとかお前言ってなかったか?この便利なスマートフォンも0と1だけで出来てるっていうの?お前馬鹿か?」「お前のほうが馬鹿か?」とやりとりした。
それで、俺がプログラムをオープンソースにした時に相手も一応ソースコードを眺めることくらいはしたらしく「0と1だけじゃなくアルファベットとか3とかの数字とかいっぱいあるやんけ」と言ってきた。ひととき、これは直しようが無いバカだと思った。だが、確かに0と1以外の文字を使っているので、試しに例えば数字の3が0と1でどう表現されるのか分かるか試してみた。
「お前なぁ、コンピュータの中で3が0と1で出来ているって知ってるか?11(「いちいち」です。「ジュウイチ」でなく)だぞ」
「それがわからん」
「あのなあ、小学生でも分かる子は分かるぞ?(指折って)親指が1親指を立てて人差し指が2そして親指と人差し指両方曲げて3や」
「え?え?オレは指三本で3や!そうか、オレでも0と1が10個あったら10まで数えれることは分かったわ!」
「やろ!そやろ!全てはその応用や!確かにな、お前のゆうようにプログラムでは0と1だけちごて3でもABCでも使っとる。俺だってな、アルファベットを使う時にそれがアスキーコードで何番か0と1で打つわけではない。だけどコンピュータの中に入った時にそれらは全て電荷のあるなし0と1で出来ているし、そういうことが分かっていないとプログラマーは出来ないのんや」
説明しているうちに、10まで数えるだけでも4ビットで出来るプログラマーと10ビット必要なプログラマーがいて、もしかしたらもっと丁寧に説明していけば相手もプログラムを使ってコンピュータをもっと色々と使えるようになるかもなと考え直した。だからこのブログを書いている。優れたプログラマーは2進数を使う。しかし、例えば分子論を理解していてもジャガイモがどういう風に炭素と水素で出来ているかは分からないように、プログラムを書いてバイナリに変換していてもバイナリファイルの中身がどのように0と1になっているか全て把握しているわけではないし、ある日に突然変異した3進数のメモリに技術が置き換わっていたとしても気づかずに2進だと思って使っているかも知れない。
というかむしろ、そういう人でもC#とか使えば有益なアプリを作る可能性だって無いとは言い切れない。プログラムもコンテンツの面白さを競う時代だからバイナリが小さいとか最適であるとかそういう時代じゃないかもしれない。俺が将棋ベーシックをC言語でなくビジュアルベーシックで作ったのも「オレだってビジュアルベーシックやったら分かるわ」と言ったからで、そこでデータ構造に2進数を使ったから相手がわからなかっただけで、もっと数的には抽象化して言語的には具体化すれば相手もコンピュータ将棋のアルゴリズムくらいは分かるようになるかも知れないと考え始めるとアイツとの会話も無駄ではなかったなと思うようになったのだ。


🄫1999-2023 id:karmen