リバースエンジニアリングで全てを学びに。

人生

ITに携わる人でなくともコンピュータが「プログラム」と呼ばれるモノによって動いていることは知っていることでしょう。人間が読める英数字と記号で書かれたプログラムを「ソースコード」と呼びますが、これを見たことがある人も幾何かはいると思います。

しかし、ソースコードがコンピュータ向けにコンパイル(変換)されて使われるという事や、コンパイル後のバイナリコード(機械語)を見たことがある人は少ないかもしれません。

一般に「プログラム」としてユーザに提供されるのはバイナリコードとなったプログラムです。これをソースコードに戻すことをリバースエンジニアリングと呼んだりします。より広義には手元にあるバイナリコードであるプログラムからソースコードのみならずもとの設計(仕様)を復元することを指すこともあります。

ソフトウェアに限らず工業製品一般では個別の製品からその設計を復元することも同様にリバースエンジニアリングです。

つまり、リバースエンジニアリングとは具体を抽象に戻す手続きと解釈できます。逆に通常の製造工程は設計図や製造方法という一種の抽象を具体化する作業と言えます。

ところで、教育では通常は抽象概念を教わります。なぜなら具体よりも抽象の方が汎用性が高いからです。ただし、抽象概念はそのままでは理解が難しいため教わる際には具体例が添えられるのが普通です。例えば、三平方の定理を教わるときには必ず具体的な三角形が例として使われる、というようにです。(この一文自体がひとつの具体例になっていることにお気づきでしょうか?)

さて、抽象概念を具体例とともに教わるのが教育ですが、目の前にある具体から何らかの抽象を取り出すことが出来たとしたらどうでしょうか?つまり、身のまわりにあるものをリバースエンジニアリングするのです。適切にリバースエンジニアリングが出来れば、何らかの構造が浮かび上がるでしょう。それは抽象ですから、別な具体へと再展開可能なはずです。つまり汎用性のある何かを手にしたことになります。

世の中には誰かが「意図」を持って具体化したモノがあふれています。それらを片っ端からリバースエンジニアリングすれば多くの「意図」を再展開可能な形で汲み取れるわけであり、それすなわち大きな学びになることは間違いありません。

もしかすると、この態度こそ本当の意味での「学ぶ」姿勢かもしれませんね。

タイトルとURLをコピーしました