2018年10月21日 日曜日

プログラマーという仕事

Bullet holes and bus stops

よく聞くのは、
文章を書く作業のようなものなので、文系の人でもプログラマーになれるよ。
文系の人はきれいなプログラムを書くんだよね..
とかいう話。

事実文系出身のプログラマーは多いと思います。
#ベタな組み込みソフトとなると回路を読む必要があるのでまたちょっと違うかも知れませんけどね..

確かに、プログラム言語は意味をもったワードの羅列なので、文章には違いありません。
なので、同じ機能を果たすプログラムでもそれを書く人によって
できた文章は千差万別それぞれ違う文章になる訳です。

それぞれ違う文章にも関わらず、同じ機能を果たす役割のプログラムな訳ですが
ではプログラマーによってどんな違いがでるのでしょう。
言い換えれば、どんなプログラムが優秀なプログラムと言えるのかという事ですが
その評価関数は多数あると思います。

例えば
・バグがない(少ない)
・使いやすい
・プログラムが必要最小限で出来ている(軽い)
・動作が早いなど

これに開発サイドの評価関数を加えると

・ソースが奇麗で見やすい
・開発期間が短くて済む構造
・メンテナンスがしやすい
・仕様変更に耐えうる設計になっている
などなど

取りあえず、お客様から貰った仕様通りに動くプログラムなら、「合格」っとなるはずなのですが
プログラマーによってこの評価関数のどこに重点をおいて設計するかが違うので
当然中身も違ってくる訳です。

僕は、プログラマーという仕事を一言で表現するなら「クリエーター」だろうと思っています。
たとえ仕様は決まっていても、それを完成させるまでのプロセスやテクニックなど
プログラマーの個性やアイディアが満載されてプログラムは出来ていて
それはまさに想像の産物と言って良いと思います。

では、仮にプログラマーという仕事のゴールを「機能をさせる事」と限定してしまうとどうでしょう。
きっとクリエーターの仕事と呼ぶには相応しく無い仕事になってしまうと思いますね。
「仕様どおりにできていればそれでいいではないか..」という考えもあると思います。
ですが、クライアントから出てくる仕様書なるものはそれだけで十分とは言えないものが殆どです。
これは本当はあるべき姿では無いかもしれませんが仕様を作る時点での限界という事もあるのではないでしょうか。
故にプログラマーのアイディアや創意工夫は不可欠であり
単に仕様を満たしているか否かでプログラムの評価は出来ない訳です。

スマートなプログラマーは私達に感動を与えてくれます。

実際に遭遇した場面ですが

デバッグも終わりプログラムが完成し、もうすぐリリースという時点で仕様に変更が出ました。
「これはインパクト大きいなぁ、納期は延ばさざるをえないだろう..」と関係スタッフは誰もが思った..
その時に担当のプログラマーからでた言葉が、

「大丈夫です」
「その仕様を変えられるように作っておきました。」

仕様変更が想定内だった..なので仕様が変更できるようにあらかじめ作ってあったという訳です。
まさにプロの仕事です。
どこまでどのような工夫を施すのが良いかについては
経験を重ねないとそう簡単に出来るものではないですが
仕様と仕様の狭間には、実際にソフトが使われる場面で、使う人が「心地いい」
と感じるアイディアを施す事が可能な場面も多く存在していると思います。

今はまだ、もし仮にプロのプログラマーが「僕はクリエーターです」と言っても
通じる業界では無いと思いますが、
現役あるいはこれからプログラマーを目指すエンジニアの方には、
いつか「あなたは素晴らしいクリエーターだね」と言われるような
そんなプログラマーを目指して欲しいと願っています。