プログラミング?コーディング?スクリプティング?

code.org

プログラミング、コーディング、スクリプティング。コンピュータで何か作る人ならば必ず出くわす言葉。

僕が最初にプログラミングを始めたのはBASICだった(1980年代です)。その時はたぶん「プログラミング」とみんな言っていた(昔のことなので自信がないが)。

今なら、例えばMayaとかRhinocerosのような3D CADにコマンドを打って形を作る時は「スクリプティング」と言う。最初は「プログラム作ってんだからプログラミングでええやん」と思ってたけど。

そして「コーディング」。これは自分ではあまり使わない(と言いつつ「クリエイティブ・コーディング」は許している。え?)、最近とてもよく見かける言葉。偏見で、プログラミングを少し気取って言っているのかな、と思っていた(今でも思っています)。

これらの違い、そもそも、何なのでしょうか?

気になっていたので少し調べた。

スクリプティング

スクリプト言語とは、

あるプログラムの実行時に、人力だと面倒な処理をサポートするプログラミング言語のこと。
wikipedia(english)よりかなり超訳

ちょっと幅のある定義。シチュエーションによって「サポート」の意味が変わってくるからかなと。例えばSafariなどのwebブラウザ。webページを表示するプログラム。例えばそれにアニメーションをつけるのに使われるJavaScript。その時のJavaScriptはまさしくスクリプト言語。だからそれを書く作業はスクリプティング、ということに。

僕は3Dモデルをプログラムで作る時に、いつもRhinocerosを使う。ちょっと前はVBScriptしか使えなくてクラスとかオブジェクト指向系の技が使えなくて大変だった。今はc#, VB.net, Pythonもあって、ガシガシ何でも作れる。3D CADの本来の用途はマウス入力した形を記録し画面に描くことで、幾何学演算のエンジンが主要なプログラム。そのエンジンにPyhtonなどでコード側から指令を送ってやると、マウス入力では作ることができない複雑な形も描くことができる。その時のRhinocerosに対するPythonはまさしくスクリプト言語、その作業はスクリプティング、ということに。

問題は、プログラミングvsコーディング。こっちはかなりねじれている。

プログラミング ⊃ コーディング

やっかいなので、またwikiから。

プログラミングとは、問題の設定から、それを解く実行可能なプログラムを作成することまでの一連のプロセスのこと。問題の分析、理解、アルゴリズムの開発、そしてプログラミング言語による実装までの全てを含む。
wikipedia(english)よりかなり超訳

そしてコーディングとは、

実際のソース・コードを書くこと。
wikipedia(english)よりかなり超訳

他にも色んなところを見たけど(例えばMicrosoftさんとか)、

プログラミング ⊃ コーディング 

というのが公式的な解釈かなと。ソフトウェアを作るプロセス全体がプログラミング、実際にコードを作って打つのがコーディング。全体と部分。超ドライな区別。

仕事として考えれば、あるソフトウェアの全体を考える仕事であれば、その仕事はプログラミング、その全体の中でロジックをコードにしていく仕事はコーディングということに。

プログラミング > コーディング

ただ現実にはこんなにドライに使われることもあれば、使う人の立場を反映した裏側の意味を持っていることもある。そして後者が問題を起こしている。

上の仕事の例をもう少し具体的にすると、例えばこんな感じ。

  • プログラミング : プログラムの論理構成、その論理による全体の仕様を設計をすること
  • コーディング : 決められた仕様に沿って論理をコードに置き直すこと

このプログラミングとコーディングを別々の人が担当すると、バトル、どっちがえらいねん、ということです。例えば、「コーディングなんて本当の苦労も知らないくせに流行の先端を気取ってるマネージャーの類が使う蔑称にすぎないぞ!(超訳)」というような感情の発露がいかにネット上に溢れていることか、検索すればすぐに分かる。コーダーなんて絶対呼ぶな!「コード・モンキー」も同じ類の蔑称でしょう。

プログラミング < コーディング

一方、これとは全く逆の意味をコーディングは持ちつつある。code.orgの教育プログラム・マネージャーをされているKiki Prottsmanさんのこの記事。意訳すると、

  • プログラミングは元々、実際のコーディングからコンピュータ・サイエンスに至るまで、全てを含む言葉だった。
  • その潮目を変えたのはハッカーの登場。自宅で独学でコンピュータを覚えたハッカー・タイプの人間は、自分たちの作ったものの単なる見かけよりも、そこに実際に込められたスキルやウィットに焦点を当てる傾向。
  • つまりコードを創造しているのは、本当の意味でのプログラミングではなくて、コーディングなのだ。
  • そして近年、Hour of Codeを始め、コーディングという言葉が再浮上してきた。その時のコーディングはもっとくだけた意味、プログラミングの最初のステップを学習することを意味している。

確かに「近年のコーディングの再浮上」は顕著で、前述のHour of CodeやYear of Codeに代表される、国家戦略としてのコーダー教育プログラムの影響から、“code”と名の付く教育機関が爆発的に増えている。主なものだけでも(下表は営利・非営利団体を含みますが、特定の団体を推奨するなどの意図は当方にはありません。また全く順不同です)

例えばCode.org, code club, CoderDojoは各国に支部がある。どれだけのcodeと名の付く教育機関があるのか見当もつかない。末席に、Creative Code Salonもある、、、。

これらの機関が、Prottsmanさんが指摘するハッカーが逆転させたコーディングの意味、現実のコーディングがコンピュータ・サイエンスよりも創造的である、という考えを継承するのか、それとも国家を支える「コード・モンキー」を意図的にあるいは無意識に育てているのか。そんな視点が必要か。

ハッカー – 創造的コーダー

Prottsmanさんの指摘する創造的なコーダー、それを実践することがどんな意味を持つのか、それを明確に宣言したエッセーがある。ポール・グレアムさんの『ハッカーと画家』(2003, 川合史朗 訳)。グレアムさんは、ハーバードでコンピュータ・サイエンスの博士号を取得すると同時に、アート・スクールでも学んだプログラマー、Lispで現在のYahoo Storeの原型を作られた方。そのエッセーから創造的なコーダーに関する節を引用。

ハッカーと画家に共通することは、どちらもものを創る人間だということだ。作曲家や建築家や作家と同じように、ハッカーと画家がやろうとしているのは、良いものを創るということだ。良いものを創ろうとする過程で新しいテクニックを発見することがあり、それはそれで良いことだが、いわゆる研究活動とはちょっと違う。

どうやれば出来るかを理解せずに何をするかを決めようとするのは、 間違いのもとだ。でも、ハッキングには確かに、ある仕様をどうやって実装するか決めること以上のものがある。ハッキングの最良の形態とは、仕様を創ることだ— ただ、仕様を創るいちばんの方法はそれを実装することだ、ということに過ぎない。

私が言えるのは、大学で教わったプログラミングのやりかたは全部間違っていた ということだ。作家や画家や建築家が、創りながら作品を理解してゆくのと同じで、プログラマはプログラムを書きながら理解してゆくべきなんだ。

ハッカーとアーティストが同じだと考えれば、創造的な作品を作るために必要なことは全く同じ、実際に現場で試行錯誤を繰り返すしかない。美しい作品を作るという目的の前では、プログラミング/コーディングの区別は、コーディングという実践によって統合されるべきだ———。日夜キーを叩き続ける人はどう感じるだろうか?少なくとも僕はこのエッセーにとても勇気づけられる。


プログラミングとコーディング。言葉の表面上の意味の裏側に、プログラムにかける人間の意志の違いが、確実にある。そして特にコーディングが、単なる蔑称やプログラミングの初歩を意味することに終わるのか、芸術行為を意味するのか、今はその分かれ目、そう思う。