「プログラミングとは何か?」について、僕なりの意見。"プログラミングは、科学でも、芸術でも、工学でもない。しかし体験として似ている。"
この記事を読んで、まぁ、なんとなく、僕なりの考えを表明しておこうかなと思う。
「プログラミングとは何か?」について、僕なりの意見。
体験は言葉で説明できるものでは無い
「プログラミングとは何か?」というのは、体験だとおもうのだ。まず、「どういうことをするか?」という体験というのは、言葉では説明し切れないものがあるとは思うのだ。やはり、やってみないと分からないということである。
僕らは、ストーリは語る事ができる、だがそのストーリの本質、テーマについては、言葉に説明できるものでは無い。そもそも、フィクション(物語)というのは、言葉で説明できないからこそ、言葉の説明を捨て、その本質を表現しようとするものだ。
まずそれだけ、前提に置いて、僕のプログラミングについて考えを書いておきたい。
ソフトウェアを作ることと、プログラミング
まずここで前提として考えたいのが、「ソフトウェア」を作ることと、プログラミングは同じものでは無く、「ソフトウェア」を作る工程の中に「プログラミング」があるということである。「ソフトウェアとは何か?」というのはいつか考え、まとめたい。
コーディングすることがプログラミングの本質では無い
プログラミングは、まず、エディタを起動し、ソースコードをキーボードやエディタの機能で高速テキストを入力するものだというイメージが人によって、あるのかもしれない。しかし、僕はそれはプログラミングでは無いと考える。
たとえば、コミュニケーションを考えてほしい。プログラミングというのは、プログラミング言語で、コンピュータと対話するものだ。それを、実際のコミュニケーションを類推してみたい。手紙でコミュニケーションをするとき、その本質は「書くこと」では無く、コンテンツの共有である。「本質」と言ったが、「目的」と言いったほうが分かりやすいかもしれない。
プログラミングを書くという「目的」というのは、結局「マシンがどう振る舞うべきか」を記述することだ。 「マシン」とは一体なんなのか、「振る舞い」とは何か?の議論はあるが、とにかく、そういう事なんだと思う。
組織化すること
プログラミングは原始的な命令(低レベルな命令)を、組み合わせ「組織」し、構造を作り、抽象化をするものであると考える。そして、抽象化を目的のレベルまで持っていくことがソフトウェアのゴールだ。そこで、「トップダウン」や「ボトムアップ」の考えがあり、「トップダウン」というやり方というのは、その「ゴール」まで辿りつくために、戦略である。「トップダウン」は、その「高いレベルの抽象」から「低レベルな命令」を目指す考え方であり、「ボトムアップ」はその逆である。
複雑化し、設計する。抽象化する。
ソフトウェアは複雑化する。だから、設計が必要だ。
思えば、プログラミングの言語の発展は、より複雑化するソフトウェアに対し、より良い構造化をし、抽象化をするため機能の発展である。 今のプログラミング言語には、さまざま構造化、抽象化の機構がある。変数、関数、クラス、モジュール、パッケージ、マクロなどだ。そして、構造化の手法、設計のソウトウェアをどう構築するか? に関して考えやパラダイムの違いはあれど、その本質は、プログラミングを上手く組織化することに変わりは無い。
話が逸れるが、なぜ僕がLispが好きで、言語をつくるのかの話をしよう。
脱線:Lispのマクロ、そして僕は言語を作る。
僕がLispが好きな理由は、その強力な抽象化機構である。つまりマクロである。僕にとってマクロは、Lispを拡張し、新しいLispを構築するためのものだ。
現段階のソフトウェアの最高の抽象化というのは、新しい言語をつくることだ。 言語をつくることは、新しい組織化を実現することである。
プログラミングは、芸術では無い。しかし体験として似ている。
プログラミングに感動することは無い。 だから、プログラミングは芸術では無い。単純に主観に近い考え方で、僕がアートに接し、感じることは、プログラミングに感じることと、同じものでは無い。しかし、アートのクリエイティブさとソフトウェアのプロセスは似ているところはあるとは考える。
プログラミングはプログラミングでしか無い
そして、結局のところ、僕の考えでは、プログラミングはプログラミングでしか無いということだ。しかし、その組織することに置いて、他の体験を似る可能性があるということだ。
とくにまとめず、いろいろ書いた。 仕事しろと言われそうなので、一旦書くのを辞める。