宣言型の仕事

2021/10/27

プログラミングの分類の1つに、宣言型プログラミング(declarative programming)と命令型プログラミング(imperative programming)というものがある。ごく簡単に説明すると、宣言型プログラミングは得たい結果を記述するもので、命令型プログラミングは結果を得る手順を記述するものだ。宣言型プログラミングの面白い点は、書き手は記述した結果がどのように達成されるのか考えなくても、その結果が得られてしまうというところ。よく知られた例はSQLで、SQLでクエリを書いたときにストレージに対してどういうアクセスが発生して、メモリに何が乗り、どういう手順でデータが処理されるのか意識せずとも結果が得られる。

結果しか書いていないにも関わらず、実際にプログラムが動いて結果を得られるのは、宣言型プログラミングが可能な世界には、記述された結果を解釈してコンピューターが理解できる命令に変換する役割が存在するからだ。

最近、自分の仕事のしかたについて考えていて、この考え方がヒントになりそうだと感じた。自分は組織の成果に責任を持つ立場なので、「達成したいこと」を設定しつつもそれを「どうやって達成するか」も決めていかないといけない。「どうやって達成するか」は元々プログラマーである自分にとっては深い沼で、実現に向けてどこまでも深く足を踏み入れることができてしまう。ここに足を踏み入れすぎてしまうと、より良い「達成したいこと」を探索することに注意が向かなくなってしまうことがある。

そういうわけで、自分の仕事を宣言型に寄せていく必要があると感じている。極端に振り切るならば、「達成したいこと」だけを設定して、それを「どうやって達成するか」は考えないというやり方だ。これだけ読むと無責任にも見えるが、設定された「達成したいこと」が組織の可能性を最大化するもので、組織にもそれを達成する能力が備わっているなら、それは良い役割分担だと言える。

実際には「達成したいこと」を設定した後に「どうやって達成するか」に着手することもできるので、宣言型の仕事に振り切る必要はない。しかし、1人でできることには限界があるので、どちらにどれだけ力を割くかのバランスは意識的に決めていかなければならない。今の自分の状況では「どうやって達成するか」を放棄して宣言型の仕事に徹することは全く現実的ではないし、そうしたいともそうすべきとも思っていない。しかし、「どうやって達成するか」に引っ張られがちな自分が良いバランスを探る上で役立つことは間違いないので、1つの極地として頭に置いておこうと思う。