[アーカイブ]考える/疑う/伝える(2009/07/18)

ある時期、ぼくは会社で新人研修を担当していました。ぼくがいた会社は小さなところでしたので(ソフトウェア会社としては普通でしょうが)、新人研修担当は自分の仕事にまるまるプラスで新人の面倒を見なければなりません。その負担は結構大きいのですが、ぼくはそもそもプログラムそのものも、プログラムに関して考えることも好きなので、この仕事は本当に楽しんでやっていました。

さて、研修において、しばしば新人さんたちが共通して戸惑うことがありました。それは10進‐16進変換です。コンピュータでは2進数が基準になりますから、それをもう少し扱いやすくした16進表記に慣れる必要があります。これは技術的には極めて容易なことですから、慣れてしまえばどうということはありません。けれども、単なるテクニックとして10進‐16進変換ができても、それではあまり面白くないのです。というより、そんなことを言ってしまうとあらゆることが単なるテクニックで片づいてしまう。理解し、使えるというだけでは、三流のプログラマにしかなれないとぼくは思います。「良い歯車」を作る新人研修など反吐が出そうです。

さて、10進‐16進変換に話を戻しますと、新人さんたちはこのように言うことが多いのです。「16進で13は、本当は19です」。プログラムをしているほとんどの方は、こんなこと言わないだろうと思うでしょう。また、プログラムをしない方はそもそも何を言っているのかお分かりにならないかもしれません。けれども、経験的にこういう言い方(この通りでなくとも)をする新人さんを何度も見てきました。要するに、初めて16進数に触れたとき、それはすごく人工的なものに感じられるようなのです。彼らの感覚では、「本当の数」はあくまで10進数であって、16進数は単に技術上便利だから作られた、ある種仮想的なものに過ぎない。だからこそ、最初のうちは10進‐16進変換を頭の中で意識的に変換しないといけないのです。

でも本当にそうなのかな、と、研修担当だったぼくは彼ら/彼女らにねちねち絡みました。いや嘘です、さわやかに絡みました。本当の数ってなんでしょう。10進数だって、人間の恣意に過ぎないのではないでしょうか? 人類の指が基本的に4本4本の8本構成だったら、ぼくらは8進数の世界に生きていたかもしれない。そんな世界では、きっとぼくらは、「10進数の12は、本当は14」だと考えていたかもしれない。本当って、何でしょうね。

ぼくらが直接には表現できない本当の数っていうものがあって、10進も16進も2進も、いや何進数だっていいのだけれど、それは単に、その本当の数のそれぞれ恣意的な現れに過ぎないのかもしれない。それを感覚的に理解している人というのは10進‐16進変換に何の抵抗も抱かないのです。恣意‐恣意変換は、真‐仮変換よりも移行がたやすいということかもしれません。もちろん一般的に言えばそんな変換などたいした手間ではありませんから、慣れてしまえば誰だって問題なくできます。けれども根本的なところでそれは頭の良さに頼った方法ですから、進数の変換だけではなく、あるものとあるものを変換するということにおいて、問題が複雑になるにつれ、だんだん対応するのが大変になってきます。

いずれにせよ、ぼくらは言葉では捉えきれないリアルな何かに対して恣意的に言葉を与え、それを表現し、形を与え、理解可能なものへと落とし込んでいくしかない。それがプログラミングです。それは、不定形のナニモノかを切り落とし、ぼくらが共通認識できる形へと暴力的に整形してしまうことです。それはそうせざるを得ないのですが、けれどもその向こうにある不定形の何かに対する感覚を忘れてはならない。ぼくはそう思います。

と、そんなことをですね、プログラムの基礎を普通に学ぶ一方で、新人さんたちと一緒に考えるのです。無論、この通り話すわけではまったくありません。そもそもここまで話した内容って、完全に適当な法螺です。けれども、ぼくは新人研修において、何よりもまず考えることに重きを置きたかったのです。そして当然、ぼくの法螺に対して疑うということも。

本に書いてあるから、学校で学んだから、先生や先輩が言っているから、あるいはそれが習慣だから。冗談ではありません。そんなものを疑わずに飲み込むようでは、まともなプログラマになどなれるはずもないのです。あらゆるものを考え、疑わなければならない。一方で、ぼくは口だけはうまいので、そんなぼくを言い負かし、言いくるめられるくらいに、自分の考えを伝える能力も身につけなければなりません。プログラミングの知識と技術だけあってもコミュニケーション能力が低くては一流のプログラマにはなれません。プログラマに限らないですが。別に社交的であれ、ということではなく、自分の考えを他人に伝える能力ということです。

一からプログラムを学ぶのは、語学を学ぶときと同じくらい、多くの違和感や疑問を感じるチャンスです。単に技術を学ぶだけなら、誰にだってできるでしょう。けれども、自分の腕に誇りを持てるプログラマになるためには、あるいはプログラムを組むことの楽しさを知るためには、ぼくはその第一歩として、考える/疑う/伝えるということが欠かせないのではないかと思っています。

まあ、全部法螺なのですが。