プログラムと美しさ:終章 ―コードを見るまで信用するな―


~ プログラミングって面白そうと思った方に向けた連載エッセイ ~

 プログラムに存在する美について、いくつかの側面から見てきた。プログラミング経験のない方に、プログラムというものを身近に感じてもらうのが目的だった。つまみ読みして「へえ、そうなんだ」と、ぼんやりでも感じていただけたなら嬉しい。

 実のところ、プログラミングはセンスと言ってしまえばそれまでである。どれだけ規則で縛ろうと、規則への従い方にもセンスが表れる。ラップ調にもヨーデル風にも歌えます――いかほど言を尽くされても、実際に歌を聴くまでは信用できないだろう。プログラマも同様である。つまり、こんな風に理屈をこねる人間が美しいプログラムを書く保証はまったくない。これが面白いところである。

 例に出してしまったので誤解のないように補足しておきたい。プログラミングにおいてセンスは重要だが、その性質や習得過程は歌とは大きく異なる。いきなり上手に歌い出す幼児はいても、いきなり美しいコードを書き出す幼児はいない。プログラミングのセンスは、バグで痛い目を見たり、他人のコードに感心したり、コードレビューで指摘を受けたり、思いつきや先人の知恵を形にして効果を体感したり…そういった工夫、試行錯誤の繰り返しの中で磨かれていく、意外に泥臭いものなのである。初学者がセンスのなさに失望するのはまだ早い。向上心や情熱があれば自然と身についていくだろう。そしてそれを支えるのは「楽しい」「好き」という感覚である。プログラミングに触れて楽しいと思ったら、その人はひとまずプログラミングに向いていると思ってよい。

 さらに補足しておこう。「プログラミングはセンス」というのはつまり、試験でいい点数をとるとか、気がついたらスクールカーストの上位にいたとか、俺も昔は悪かったとか、そういった既存のほかの能力では言い表せない、独自のスキルセットだということである。世にあるすべてのプログラミング言語の文法と標準APIを隅まで記憶していたとしても、いいプログラムを書けるとは限らない。速く走れるからと言ってゴールを量産できるわけではないのと同様である。あえて言うなら、論理的思考力や文章力(表現力/構成力)との親和性が高い1、そしてどちらも後天的要素が大きいとは思う。あくまで私見であり、だからと言って「実は理系より文系の方が向いている」などと粗暴に帰結させるつもりはない。そう思うのは私に理数に明るくないからで、理数に親しんだ人ならば証明が得意とか、絵画に親しんだ人ならばデッサン力が高いとか、それぞれの分野において符合する能力はあるだろう。

 何よりもやってみるのが一番である。文系だからとか中卒だからとか、そんなことはどうでもよい。私が一緒に仕事をした優秀なプログラマの中には、文系の方も理系の方も中卒の方もいた。そんな心配をするより、自分で考えたコードを一行書いてみよう。

 なお、リファクタリングの章で書いたように、この文章は随時追記、変更、再構成していく予定である。縁あって再びご覧いただく方には、少しは洗練された姿をお見せできるかもしれない。内容に違和感を覚える部分があるのは、きっとリファクタリングが足りないせいだろう、と姑息に言い訳したくなる気持ちを抑えてここで締めることにする。

 少しでも読んでいただいた方、ありがとうございました。

 2014年 初稿
 以降、随時改変


序章
第一章 その美の特徴
第二章 見た目と冗長性
第三章 ロジック
第四章 命名
第五章 アーキテクチャ
第六章 リファクタリング
第七章 デザインパターン
第八章 正規化
終章


  1. 現代のプログラミング言語を習得する能力と自然言語の学習適性には、数学的素養などと比較して強い相関関係があるという研究結果が2020年に発表された。(https://www.nature.com/articles/s41598-020-60661-8)