タケルンバ卿とTwitterしてる中でこのテーマが僕の中で書きたいことにあがってきたので、書いてみる。へだちさんの普通の人がプログラミングについて誤解してることから多くの示唆を得ています。
プログラムは「プログラミング言語」で書かれ、日本語の文章は「日本語」で書かれますが、「言語という記号体系に従って頭の中にあるものを文字で表す」という点は同じだからです。
僕も、この点について完全に同意します。「言語という記号体系に従って頭の中にあるものを文字で表す」点については同じです。大事なことなので引用文含めて2回言いました。よって、整然とした文章を書くような方は素質を持っているという考えに賛成です。
プログラミングというのは、大きく分けて2つの構成要素に分解できます。「フロー」と「データ」です。
ロジックをつなげて流れを作り出し1つのアウトプットを出すという行いは、文章を書いて1つのエントリなり日記なりを書くという行いと、相当の部分が似ていると私も感じます。文章にとって一番大切なのは前後関係(Context)だと思うのですが、その「文と文をつなげる」という行いは、プログラムで言うところの「ロジックを作る」という行いと恐らく同質です。自分の思考を言語によって秩序を保ちながら文章の集約により1つの世界を作るという行いは、プログラミングと同じだと思います。知的娯楽としては最高の部類だと思います。
ただ相手は機械ですので「気の利いた表現」など解釈する余地は無く、0か1かのデジタルな世界です。プログラムは空気を読んだり含ませた表現は一切通用しない命令文なので、明確で正しく連続的であることが求められます。順番が違ったらえらいことになります。
プログラミングは機械を相手にしますのでどうしても「理系」というラベルを貼られやすい所があります。でも、学術の専攻分野が「ものごとの構成原理を勉強する」理系であることと、プログラミングができるかどうかの間には、直接的に何の関連性もありません。文系・理系というのは、扱っているモノが違うだけの違いでしかなく、そこから何を得て、そして得たものをどう自分の思考フレームワークとして形成されていくかは、全く別の話です。
むしろ、理系的な思考を求められるのは「データ」の取り扱いです。自分のプログラムが保有しているデータ・取得しようとしているデータ、そういったものを「どのような計算を行う設計にすれば最適なのか」という領域は科学的なもので、ここは理系の領域だと思います。プログラミングは計算の集積であり、それに即したファンダメンタルな知識・考え方がちゃんと存在します。
また、言語の違いは文化の違いです。これは自然言語とプログラミング言語のあいだにも厳然たる違いがあり、人を引きずりこませるような文章を書く能力があったとしても、プログラミング言語の概念(変数とか関数)が体得できないこともあります。プログラムは原文が無いので、翻訳とは真逆の頭の使い方をします。
多かれ少なかれプログラマーというのはプログラムの中に美的感覚を感じる生き物なのですが(作家が自分の文章に美的こだわりがあるのと同じで)、その美的概念が好きでコードを書くタイプと、明確な対象や目的が無いとコードを書く気がおきないタイプがいるように思う。自分がやりたいから・その世界が好きでそれを表現化したいアーティスト気質の方と、自分が成し遂げたい世界観の手段としてプログラムと付き合うプロフェッショナルみたいな感覚。弾さんのプログラミングとアプリ開発の違いと殆ど同じことだけど。ちなみに、僕は後者です。モノができるのはあくまで出発点タイプ。
プログラミングをやっていて「怠惰のための改善」という考え方が身についたのは大きな収穫でした。自分が楽をするためにがんばる。コンピュータにできることはコンピュータにやらせる。同じことを手作業でやるとどうしても人間系のミスが生まれるし、そういったミスを防ぐ意味でも大きな役目を果たす。そういった「正しいことを荒削りでいいから迅速に行う」という哲学は、プログラミング特有のものかもしれません。