へなちょこSEの考察

0x1E歳のへなちょこSEが、日々思うことを考察します。自社内、金融系を経て現在法人系PKG開発に従事。

プログラミングとイメージ

プログラミングというと、「論理的思考」とか「理系の人が得意」というイメージがあるのではないかと思います。
確かに、プログラムは一つ一つの論理を組み上げて、1ステップも残さずに正確に書いて行かなければ動きません。
人間なら、「あれをあーしておいて」って頼まれたら、「あれはこれのことであーしろってのはまぁきっとこんなかんじかな」みたいに行間を読んで上手いことやってくれます。
それが出来ないプログラミングは、確かに論理的でなくてはならず、数学の問題を解くように正確にこなさなければなりません。


でも実際、プログラミングをさくさくやってしまう人って、そんな「まずこの変数を用意して、そっからこれを取り出して、これを繰り返して」みたいな細かいことを考えながらやっているわけではないのではないかと思います。
少なくとも、自分はそんな一つ一つ考えながらやってません。
もっと大雑把に、「あれやってこれやってそれやればできるな」みたいなイメージから作ります。
正直なところ、細かいことなんてどーでもいい、というスタンスからスタートします。


まず自分が作ろうとしているプログラムの全体像をイメージして、その中にはどういう作業があって、どういうものを使うかとイメージする。
創作料理のレシピを考えるみたいな感じかもしれません。
まず、作ろうとする料理のイメージを決め、そのためには材料がこれとこれが必要で、どういう切り方をして、煮るのか焼くのか選んで、味付けをどうするかをイメージします。
で、いったんそれで作ってみて、「んーなんか美味しくないな」となると、切り方を変えてみようとか、調理時間を変えて、調味料を追加しようとかなるわけです。
「んーなんか美味しくないな」が、プログラミングであればコンパイルエラーなり、出力結果の誤りであるわけですね。


家の設計をするときに、「玄関の段差は○センチにしよう」とかいうことから決める人なんていないでしょう。
まず間取りを決める。次に必要な物を決める。そのあとで、細かいところを調整する。
大きな視点から、だんだんと形を作って、最終形に仕上げていく。
どんな創作活動でも同じことだと思います。


あとは、プログラミングはただの文字の羅列ですが、それを脳内でイメージに変換できるかということも重要だと思います。
「"ABCDE"という文字列から"BCD"を削除する」というプログラムを書くときに、まずは

"ABCDE" → "ABCDE" → "AE"

という、「データの変わり方」のイメージを持てるかどうか。
例えば最後に画面に出てくるとして、その画面のイメージが浮かぶかどうか。
それが浮かんでいないと、そこに向けてどうして行けばいいかがわからなくなるのではないかと思います。


僕はいつも、プログラムを書く前にイメージを浮かべるようにしています。
それは先程の例のような文字のイメージだったり、もっと教育番組の「イメージ図」のようなものだったり、3DCGで想像することもあります。
実際の人が出てくるというのも、時によっては有効です。
初めのうちは難しいかもしれませんが、この方法に慣れると、「そもそもやりたいことが違った」みたいなことも少なくなるのではないかと思います。


プログラミングは、個人的には「創作活動」に近いものではないかと思います。
尤も、設計をそのままプログラムに直すだけの「翻訳」の場合もありますが、アルゴリズムも一緒に考えるとき、それは作曲や小説の執筆にも近い、「芸術的活動」にすらなり得ると思います。
だからこそ、「プログラミングは面白い」という人がいるのではないかと。
「美しいプログラム」というのはそういうものだと思います。