16進を知らない子供達へ

僕はハードウェアは苦手・無知だし、なんでも低水準現象に還元しちゃう説明がいいとも思っていません。むしろ個人的な興味は、(アブストラクト・ナンセンスと呼ばれるほどに)高水準の道具立てで計算現象を理解するほうにあるんです。

でも、それでも、次のような状況には、さすがにグンニャリしちゃいますよ。

  1. 0x20が、(多くの場合に)どんな文字(「文字」概念はホントに難しいのだけど!)を指すか知らない。そもそも、0xナントカはワケワカラン記号だとしか思ってない。
  2. IDEからビルドはできるが、背後にコンパイラやリンカ/ローダという処理系があることを全く知らない。コンパイラを直接起動することはできない。
  3. 「正の数+正の数=負の数」という(コンピュータにおける)現象に出会ったことがない(少なくともそう思っている)。
  4. 「ファイルには、テキストファイルとバイナリファイルの2種類があります」なんて説明を素直に納得して信じてしまう。
  5. キーボードや制御コードの文脈で「^C」と出てきても読めない。
  6. PATH環境変数の存在を知らない。
  7. レジスタ、スタック、ヒープという言葉は聞いたこともない。

まー、時代は変わっているわけだから、こういったことを初級技術者に要求すべきではない、というのは僕も納得します(んー、イマイチ納得してないかも)。が、ずっと知らなくてもいいのかぁ? と、そんな思いで、かつて次のようなエントリを書いたわけ:

次のようなご意見もあるでしょう:

  • いまどき、バイナリ・レベルでデータをいじる機会なんてない。
  • IDEが面倒を見てくれるのだから、背後のメカニズムまでは知らなくてよい。
  • 多くのプログラミング言語GCがあるからメモリ管理は要らなくなった。
  • 仕事で必要なプログラミング言語1つ(だけ)を習得して欲しい。

こういうことが言えるようになるのが進歩なのだ、という側面はあります(本音)。でもね、現状で「そこまで割り切っていいのか?」というのがオジサンの懸念なわけよ。

「16進が難しい」というのは、高度な概念だからってわけではなくて、いまさらに小学生(低学年)の算数みたいなことをやらされるのがバカバカしい/辛いってことじゃないのかな。次のようなことをしてみてはどうでしょうね。

  1. 16進電卓(実物でもソフトウェアでもいい;って実物入手困難か)を手元に置く。
  2. 16進ダンプ・プログラム(バイナリ・ビューワー)を使ってみる。いろいろな種類のファイルを眺めてみる。
  3. ASCIIコード表を憶えなくてもいいが、10秒以内でコード(文字番号)を引ける手段を準備する。(例:perl -e "print ord('x')"
  4. HTML文書内で、 とか とか(いや、x20は見えないから良くないか)を使ってみる。
  5. Base64かURL(のパーセント・ナンタラの部分)のデコーダーを作ってみる。それが面倒ならQuoted-Printable(日本じゃお馴染みじゃないけど、形式は簡単)のデコーダーでもいい。