読者です 読者をやめる 読者になる 読者になる

愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

プログラマーは文系の仕事か、理系の仕事か

というような大きく構えたタイトルにしてみたが、デジタルな結論を持った記事ではない。

教育制度として文系とか理系とか分ける意味あんのか、というような議論はさておき、現行でそういう制度が存在している以上は僕の身の周りにも文系学部からプログラマーになった人、理系学部からプログラマーになった人がいて、僕の知る限りでは両者にプログラマーとしての能力の差は見受けられない。

世間では、どうやらプログラムを書くのには数学的な能力が必要だと思われているせいか、あるいはいわゆる情報システム系の学部が理系学部に分類されているせいか、理由は全員に聞いてみたことがあるわけじゃないのでよく分からないが、どうやらプログラマーといえば理系だと思っている人が多いようだ。

僕個人で言うと、大学・大学院と数学の点数の低さを英語の点数でカバーしてきた(これは実際には点数の照会なんてしてないので実際には不明なのだが、明らかに手応えとして英語の方が出来ていたのでこういうことにしている)こと、かつ複数行の数式を繰り返し見ると発狂することなどからいって、自分はどっちかというと文系脳なのだろうと思っている。文系脳という言葉が曖昧なら、能力が言語能力の方に寄っている。その人間がまがりなりにもコードを書いて生計を立てているので、やはり文系理系というのはあまりプログラマーとしての能力に関係がないような気がしている。

とまあ、曖昧な分類の上で人々および個人の曖昧な認識を語るのはあまり意味がないとしても、人間の頭の中の曖昧な分類、曖昧な認識はその人の行動に影響を及ぼす。これは間違いのないところである。

要は何がいいたいかというと、「コードを書く」という営為を「数学的なモデルをコードに落とす」と捉えるか、「誰かに伝わるように文章を書く」と捉えるかで、その人のコードの書き方は影響を受けるのではないか、ということである。

あえて両極端な例を挙げたが、実際にコードを書いた人なら誰でも、コードを書くという営為が(極端な例を除いて)どちらか一方に還元できるものではないことを知っている。コードは数学的なモデルを実現するものでもないし、誰かへの手紙でもない。数学的に正しくても現実界に意味のある影響を与えなければ用をなさないし、読みやすければ効率が悪くてもいいかといえばそうでもない。

汚いコードよりは綺麗なコードが良いが、効率を追求するためには読みやすさを犠牲にしなければいけないこともある。コンパイラがエラーを吐かなくても、人間が読めなければ保守できない。同じ結果をもたらすコードでも、人的ミスを誘発しやすいコードもあれば、そうでないものもある。これら全てはバランスであって、教条的な判断(例えば、メソッドはとにかく短ければ短いほどいいとか)を積み重ねるだけではどうにもならないものである。正しい唯一のコードの書き方なんてものがないのは、正しい唯一の文章なんてものがないのと同じである。同じ目的を達成するにも、千差万別の書き方がある。

微妙に脱線したが、同じコードを書くといっても人ごとに頭の中のものをコードに落とす時のやり方が違うので、コーディングというのは、非常に面白く、また人間的な営為だなあ、と僕は思っているのである。ここまでの流れだと、イマイチ伝わらないかと思うが。

さらに脱線すると、関数型は果たしてオブジェクト指向の次のパラダイムかどうか云々、みたいな議論がたまにあるわけだが、僕は、オブジェクト指向というものが人口に膾炙した理由はそれがプログラミングの技法として適切であるからとかそれを使うとコードの設計がうまくいくとかそういったことが本当の原因なのではなくて、オブジェクトのない世界観(f -> g -> hみたいな関数の連鎖)よりも、オブジェクトのある世界観、つまり「AがBする」「BはCを持つ」みたいな世界観の方が人間の世界の捉え方(もっと大雑把に言ってしまうなら、人間の脳)にマッチしているからなのではないかと思っている。(断っておくがこれは実世界のモデリングが云々とかそういう話とは全然関係がない)要は正しさの問題ではないのである。

(ちなみに、この「オブジェクト指向は人間が認識しやすいのだ」理論は会社の後輩のHaskellerも同じことを言っていた。だから何、という話ではない)

もう一度脱線すると、最近会社でとあるコードを見ていて、「このコード書いた人、迷いがあるな」と思って喋ったら、なぜそのタスクをやるか、最終的な形はどうあるべきか、みたいなことがその人の中ではっきりしていなかった、ということがあった。コードに迷いがあるといっても、コミット数が変に多いとか、表記にゆれがあるとか、動作上問題があるとか、コメントに // TODO // ここどうしたらいいかな? と書いてあるとかそうしたことではなくて、何かよろしくないオーラが出ていた。とりあえず間に合わせようとしている感じ、というか。 僕も30に近づいて、多少エスパーになったのかも知れない。

人間のやることなので、そこに人間が滲み出してくるのは当たり前といえば当たり前なのだが、なんとなく一般通念に反論してみたくて書きました。