プログラミングとポエム
ソフトウェアエンジニア界隈で「ポエム」という言葉を侮蔑的・諧謔的に使うことが横行してるけど、ポエムを舐めすぎでは。端的に文系軽視、文系蔑視が現れてるよね。単なる非論理的お気持ち文章が詩学だと思ってるのかと小一時間(略
まず「あらゆる芸術形式の上に立つのが言語芸術であり、その頂点が詩」という考え方がある。そして計算機科学の巨人ドナルド・クヌースは文芸的プログラミングを提唱した。クヌースはプログラムを人間精神の最高の発露としての言語芸術に見立てていた。ポエムを馬鹿にするプログラマーは無学。
ドメイン駆動設計におけるプログラミング活動の位置づけも、こうした歴史的文脈(文芸的プログラミング)において理解されなければならない。もちろんリーダブルコードも。プログラムは計算機への指示書であると同時に人間に向けた創作的表現なのだということ。
もしプログラムが人間に向けたものでないのであれば、リーダビリティなど必要ない。そもそも高級言語が必要ない。しかし現実はそうなっていない。プログラミングとは純粋な技術の問題ではない。人文の問題でもある。そのことをクヌースは「文芸的」と呼んだのだ。
最近のプログラマー教育はこんな基礎教養も教えないの?と言いたいが、まあ俺も学校で教わったことはない。だからちゃんと後進に教え伝えていかないといけないな。
ちなみに僕が文芸的プログラミングという概念を知ったのは90年台後半だったが、当時はピンと来なかった。後年Backbone.jsのソースコードを読んだとき、「あ、こういうことだったのか」と一瞬で理解できた。
このようなプログラミングスタイルが、TDD/BDDやDDDと組み合わさったらどうなるだろう。ユースケースに近い層のアプリケーションロジックは、非プログラマのドメインエキスパート(SME)にも読める文章として書かれることになるだろう。文芸的プログラミングの理念は死んでない。文芸的DDDの可能性。
もちろんプログラム自体がDSL化していく方向性とも相性がいいはず。
アプリケーション・プログラミングはポエティックになっていい。例えば「ユーザーを信頼するという理念に基づき、ここでは機能に制約をかけない」といった思いはプログラム自体では表現できない。文芸的プログラミングは、こういう情報をドキュメントとして分離せずにプログラムと一体化する理念。
クヌースはプログラム中のコメントというものの概念を革命的に変えようとしたのだと言える。それは単なるプログラムへの注釈に止まらず、人の思想や感情を表現するためのメディアでもあるのだと。
(というツイートを2019年11月30日にしたので記録しておく)