プログラムってなんだろう?

この問いに対する答えを自分の中で明確にしないといけない気がした。そして納得感がある形でまとめられたので言葉にしておく。

 

プログラムとは何か?

この問いの最初の回答は「コンピュータへの指示書」である、ということ。

コンピュータはすべからくプログラムに書かれた通りに動く。

動いて欲しいように動くのではなくて、書かれた通りに動く、なんてのはよく言われること。

最終的にプログラムは0と1で構成された機械語と呼ばれるものに変換される。

それはもう人には読めない、まさにコンピュータに指示するためだけにあるものと呼べるだろう。

これがプログラムの本質であり、役割であり、絶対に忘れてはいけないことになっている。

 

次に考えるのは「動かしたいことの設計書」である、ということ。

プログラムを記述するのに使うプログラミング言語はどんどん新しいものが作られている。

それぞれ作られた目的はあるが、基本的には機械語は人には読みにくいのでもっと読みやすくしたい、ということがある。

それは表現したいことを表現しやすいものを作る、ということになる。

人間が話したり書いたりする自然言語でも言葉によって表現しやすいことが異なると聞く。(外国語に対してそれを自信もって主張出来るほどは精通してないので伝聞でしか言えない)

例えば、日本語よりも英語の方が論理的に表現できる、と言ったことだ。

そうして発展してきた結果、昨今のプログラミング言語オブジェクト指向と呼ばれ、構造をオブジェクト=モノとして表現してそれらの間で情報をやりとりすることでソフトウェアは構成されている。

その結果、プログラムはモノとモノとの関係を表現し、その間のやりとりを設計することになった。

「利用者」というモノがあり、その利用者が「ブログ」というモノを持ち、ブログはさらに「記事」というモノを持つ。

そうしてソフトウェアが成したいことを成すためための構造を設計している。

 

最後に、最近感じるようになったプログラムとは?の問いへの回答は「メッセージ」である、ということ。

上記の設計書としての部分もそうだが、その中の一行一行がメッセージとなっていると感じている。

よく仕事でコードレビューをすると「読みやすい」「読みにくい」ということをコメントする。

どんなコードがそれに該当するかは触れないけれども、その読みやすさを含めてプログラムは後から読んだ人へのメッセージになっていると感じる。

例えば、変数名がtypo(誤字)しているものを見れば、そこには「後から読むことはどうでも良い」というメッセージを感じてしまう。

最初の「指示書としての役割を果たせば良い」というメッセージを感じる。

プログラムは基本的にどんどん改修されて形が変わっていく。後から改修するためにはまずは何をしているかを読まなければいけない。

その読む人のことを考えていないから誤字をするし、読みにくいと思えることを書いている。そう感じてしまう。

これはある程度被害妄想に近いものであることは自覚しつつも、自身を振り返ると確かに後のことより今のことしか考えていないコードを書くこともゼロではないから根拠がないものとも思っていない。

 

プログラミングには「明日の自分も他人と思え」という言葉もある。

作っている時はその背景があり、意図があり、それを理解していても残さなければいずれは忘れてしまう。

それらを忘れた自分は他人である。

そうなってから読んでももはやわからない。

自分が過去に書いたプログラムを読み返してこれは書き直さないといけないと思って書き直した結果、ほとんど同じプログラムを生み出したことがある。

これは背景にある制約によって、望まないけれども読みにくく書き直したくなるようなプログラムを作ってしまった、というケースだ。

(自分が成長したり、より対象を理解することで良いものに出来る可能性も十分にある。)

 

この回答を出した時、それを成せていない人についても考えた。

というより、この問いを考えないといけないと思ったのは、指示書としての成果物をレビューすることが増えたからだ。

「このままでも動くのになぜこんなに指摘をしなければいけないのだろう?」と疑問に思ってしまったのだ。

おそらく、そういう人たちは能力や経験が足りずその視野を持つことが出来ないのだろうと思っている。

(あるいは、自分のレベルが低くて逆に理解出来ていないケースもある、という可能性は捨てていないが話が進まないので無視する)

理解できるようになるためには、良いものと悪いものをたくさん見て、自分で良いと思ったり悪いと思ったりしながら、人の考えも聞いて作り上げていくものだろうと思う。

自分が教える側になる、というとおこがましいようだけどそういった考えが必要なのだろう。

 

このメッセージになる、という考え方はプログラムに限らないとも思った。

おそらく、人が作った生産物のほとんどはその本来の役割の他に、その手の経験のある同業者にしかわからないメッセージを持っていることだろう。

あまり例は思いつかないが、自分の仕事以外で関わった範囲では、保険の契約にそれを感じていた。

友人が保険の営業になったことで当時、相談をしながらプランを組んでもらったのだけど、そのプランには自分の生き方を前提としてその生き方を支えるためのプランを組んでもらった。

保険の本来の役割は、掛け金を払って何かあった時に保証すること。だけど、その保証の対象ややり方、掛け金の支払い方法などそれらの一つ一つから「生き方を応援したい」というメッセージを感じていた。(友人だから、ということの他にその手の熱を感じたから契約したのを覚えている)

 

この観点で何かを見れる人をプロフェッショナルと呼ぶのだろうと思う。

自分自身がこれからもそうなり続けると同時にそう言った能力を持つ人と色々と話してみたいと思った。