プログラミングとは?

http://q.hatena.ne.jp/1222018850
本質ではなく定義について書いてしまったので、日記で…。
━━━━━━━━━━━━━━━━
プログラミングとは、小さく単純な要素を組み合わせて大きく複雑な目的を実現する行為、だと考えています。
(これ以下は最初の一文の補足に過ぎません)

      • -

例えばC言語を用いたプログラミングでは、要素はprintfやchar *な変数など、大きく複雑な目的はgccコードの構築だったりPerlコードの構築だったり何かしらのライブラリの構築だったりするでしょう。
例えばからくり人形では、要素は歯車やお茶受けなど、大きく複雑な目的はお茶を載せると前方に進むことだったり特定の時刻になると踊りを披露することだったりするでしょう。
例えば作曲では、要素は四分音符やスタッカートなど、大きく複雑な目的は作曲者の心情を伝えたいとか聴衆を慰めたい、などでしょう。
例えばアナログテレビの放送では、要素は各々の放送企画や臨時ニュースなど、大きく複雑な目的は放送局に金銭的な利益や社会に利することにより社会的な名声をもたらすことなどでしょう。
例えば小説では、要素は各々の文字や単語や記号・記号など、大きく複雑な目的は読者に与えたい感動でしょう。
人類は現在はしっかりと生命を直接プログラミングすることはできないようですが、遺伝子操作というハックを試してみたり、特定の解析されたウイルスの再構築や、特定の生態をとるウイルスをデザインしたりはできるようになってきているようです。
私は、プログラミングという言葉自体には、コンピューター分野への限定性は感じられません。ただ、特にコンピューター分野で多用されてはいると思いますが。

      • -

コンピュータープログラミングの特徴は、その抽象度の高さにあると思います。その根源的な要素は(多くはライブラリや関数などの抽象を介しての)ブール代数の演算(格納は演算に含むとします)と条件分岐だけでしょう。
逆に言えば、もともと演算と条件分岐には潜在的に強力な応用性が秘められていたということです。
著名なプログラミング言語やライブラリは、その演算や条件分岐から構成されるものに適切な抽象性を付加することによって、潜在的なものを上手く顕在化したために大部分のコンピュータープログラマーから歓迎されたのでしょう。
ディスプレイしたり、演奏したり、暗号復号したり、認証したり、並び替えたり、通信したり、ブラウズしたりと、コンピューターの様々な機能は、演算と条件分岐に適切な抽象を施すことによって実現されています。
ときどきあの言語がどうのこうのとか、あのCPUがどうのこうのとかでどちらがよいなどの論争になりますが、ほとんどの場合は論争対象が掲げる抽象の適切さを問うものでしょう。
ある言語は、呪文のように難解でも文字数少ない入力で済む、そんな抽象を掲げます。別の言語は、とても括弧を多用する抽象を掲げます。さらに別の言語は、表面は簡潔で視覚的ですが、背後に膨大なライブラリを抱えた抽象を掲げます。
大きく複雑で具体的な目的のために、どの抽象を用いるのがよいか。時に難しいこの問題に、コンピュータープログラマーの多くが悩んでいるのだと思います。

      • -

コンピュータープログラミングがどのように為されるべきかは、既にahirusanさんの回答などがあるため、割愛します。
━━━━━━━━━━━━━━━━
わーい。論点が質問とズレてる。