ちょっと昔話をします。
高校生の頃に数学と物理で成績の良かった私は、進路をソフトウェア方面にすることに決めました。
当時は具体的なことはよく分かっていませんでしたが、とにかくソフトウェアのことを学べる大学に進まないと、とは思ってました。
ところが、1980年頃の日本の大学で、ソフトウェアのことを教える学科がある大学は限られていたのです。
東大や京大レベルの大学ならありましたけど、私が入れるレベルの大学では皆無でした。
私はソフト開発をするサラリーマンに成りたかっただけで、研究者に成りたかったわけではないので、実務を学べる専門学校に進むのが正解だったのかもしれません。
(実際に新人の頃は専門学校出身者に圧倒された)
ただそういう知識は高校の進路指導をする先生でも持っていなくて、今ほどコンピューターに関する知識は一般的ではなかったのです。
結局私は、ハードウェアを学ぶ大学に進学することになりました。
学ぶつもりのなかったハードウェア(電子回路)のことを三年間学び、四年生で入る研究室を選ぶときにソフトウェアに詳しい教授の研究室を選びました。
※今だから言えますが、その教授は日本で初めてパソコン選びの指南書を書いた人です。
我々学生に取材させたデータを元にして一冊書いて、そこそこ儲けたようですね。
当時はまだまだコンピューターの世界は戦国時代。
天下泰平な江戸時代が来て、明治・大正・昭和と発展していくよりかなり手前です。
結局ソフト開発の仕事をするにあたり、ソフトウェアやハードウェアがどういうものかを理解しておけば十分だったのです。
実務は会社に入ってから覚えればいいし、大学では学べないものでしたから。
当時は私と同じ境遇の若者が大勢いたのです。
さて、そんな研究室に入って最初の課題は、迷路でした。
当時のPCに標準的に入っていたBASICというプログラミング言語を使って、迷路を解くプログラムを書けという課題です。
10✕10のオセロみたいなマスがあって、通れる空間になっているマスは0、通れないマスは1として、入口は左上の角のマス、出口は右下の角のマス(両方0ね)とします。
0のマスを辿って入口から出口までのルートを算出するプログラムを書けということです。
斜め移動はNGですよ。
| 入口 | |||||||||||
| 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | ||
| 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | ||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | ||
| 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | ||
| 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | ||
| 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | ||
| 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||
| 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | ||
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| 出口 |
↑ こんな感じですね
※ちなみにBASICはインタプリタ(直訳すれば通訳者)という種類のプログラミング言語で、入力されたプログラムを一行ずつコンピューターに分かる形に変換させて走らせるタイプです。
実務で使うプログラミング言語はコンパイラと言い、これは走らせる前にプログラムをコンピューターに分かる形式に一括で変換しておくタイプです。
一々変換させるインタプリタよりコンパイラのほうが速いのですが、プログラミングを学ぶにはインタプリタのほうが手軽という特徴があります。
みなさん、どんなプログラムを書けばいいかイメージできますか?
同級生がみんな悩んでいる中で、私には一つのアイディアが浮かびました。
・迷路を解くには、行き止まりの脇道を排除してしまえばいい
・そして残った道が迷路の解になる
このアイディアさえ浮かべば、プログラムは簡単です。
0のマスを一つ一つチェックして、三方向に1(か場外)のマスがあればデータ上で1にします。
そこから隣の0のマスへ進み、二方向に0のマスがあれば1に、三方向に0のマスがあれば交差点ですからそのまま残します。
これを入口と出口以外の全てのマスでやって、残る0のマスが迷路の解です。
(通路の幅が2マス以上の場合は解として残します)
※追記します。
ちょっと上の書き方が間違っていて、自分のマスの周囲四方向のマスの中に0のマスが一つだけのマスがあれば、そのマスを1に変えます。
これはつまり、行き止まりのマスを消しているのです。
そうするとその隣のマスは自分の周囲の0のマスが一つ消えるので、もしまだ脇道の途中なら周囲の0のマスは一個になるはずです。
そうだとしたら、そのマスは1に変えます。
そうではなくて、もし残った周囲のマスの中に0が二個以上あるなら0のまま変えません。
入口と出口のマスはいじりませんので、正解のルート上のマスは必ず周囲に0のマスが二個以上あるわけです。
この繰り返しで、自分の周囲のマスに0が一個だけのマスはなくなり、行き止まりの道が消えて正解のルートだけが残るのです。
失礼しました。
研究室時代はこんな感じで、パズルをやるのと同じで面白かったです。
ただこういうアイディアを考えるようなことは、銀行や証券会社のコンピューターの世界では必要ないことでした。
前にも書いた「汎用機」の世界では仕事の進め方は既に決まっていて、それを忠実に守るものだからです。
それは自動車工場のラインで働くのに似ています。
私がそれを知るのは就職した後のことですけどね。

他人に話しても中々理解されない仕事の話を書きました、お粗末。
NHKの番組で「激突メシあがれ」というのがあって面白いです。
アマチュアの料理マニアがとことん拘った料理を作って対決する番組です。
ただこないだ放送された塩ラーメンの回で驚いてしまって。
当然ながらラーメンを食べるシーンが何回も登場するのですが、その食べている人全員の食べ方が汚いのです。
ラーメンの専門家ばかりのはずなのに……
みなさんはああいう食べ方をしてはいけませんよ。
NHKなんだからどうにかならないのかな、と思いました。
最後まで読んでいただき、ありがとうございます。