エンジニア界隈でちょくちょく話題になることの一つに「プログラミングは手段にすぎないか否か」というのがあるのではないだろうか。前提として、ここで指すプログラミングというのは仕事としてのプログラミングを指しており、設計なども含む。
これに対する私の個人的な意見はやはり「仕事におけるプログラミングは手段に過ぎない」だ。プログラミングで作るものは何かしらのシステムやサイトなわけだが、そもそもそうした成果物は、何かの目的を達成するためのツールにすぎない。
そしてプログラミングはそうしたツールを手に入れるための手段であり、道具に過ぎない。究極の理想をいえば、開発を発注しなくても、「こんなシステム、サイトが欲しいな」と思った瞬間にそれが手に入り、開発期間0秒ですぐさまビジネスにツールを導入できるというのが理想形なわけだ。
極端な話、AI技術やノーコードツール、既存サービスの進化によって、現在のエンジニアがやっているような開発業務がこの世から不要になれば、それは多くのビジネスや活動がより迅速に進むことになり、社会全体にとって良いことだと言えるのではないだろうか。(とはいえ実際になくなったら私は職業的に困りますが…)
なのでやはり私としては、仕事としてのプログラミングは手段であり、そこに高尚な工芸的側面を求めることは適切ではないのではないかという意見になる。個人的に小規模な案件を受けていても、クリエイティブ的思考重視の方たちが言う「良くないコード」の方がベターな選択になる案件というのは少なくない。
しかし一方で、エンジニア個人の在り方として、上述の考えに相反するような職人的気質というのは併せて持っておかなければならない。別に持っていなくてもいいのだが、ほとんどの人はそれがないと仕事に必要なスキルレベルに達するのは厳しいのではないだろうか。
つまり、職人的なこだわりや情熱を持ち、スキルを突き詰めていく面もないことには、「手段としてプログラミングを利用する」ということができるレベルには中々なれない。
業務の中で手段としてのプログラミングを冷静に行い、効率的にさまざまな要素を取捨選択していくためには、多くの無駄を身につけておく必要がある。手段と割り切って仕事でプログラミングをするというのは、スキルが最低限でいいということではない。取捨選択をしようというだけであって、「選択ができる」状態になるためには色々なものを持っている必要がある。
この相反する二面性を持って使い分けるということは非常に基本的で当たり前の話のようで、こうした話題のやり取りの中ではどうもその認識が見逃されがちになることがあるような気がする。
色々書いたが実際のところ、プロダクトが大規模になるほど、クリエイティブの文脈で語られる「良い」が必要になってくるケースが多い。クリエイティブ文脈の「良い」も、実際の仕事の中で発生した様々な問題とそれに対する解決策が根底にあることがほとんどだからだ。大事なのは、その必要性がどこに起因しているのかを忘れず、状況に応じて適切な使い分けを選択できることだろう。