KogoLab Research & Review

遊ぶように生きる。Vivi kiel Ludi.

プログラミング能力とは何か

——掲示板に、理系文系の話題で反響をいくつかもらった:

エイミさんより:

ちはるせんせーい、赤尾センセイの近況はご存知ですか?
わかば日記の読者サロンにはご逝去説まで流れていて、
俄かには信じられず担がれているような気もするのですが・・・?

——あ゛、これはあまり関係ないでした。えへん。

りなりなさんより:

でも、どうなんでしょうね。就職してからは殊更「理系だったら」と後悔するまでのところはありません。確かに向き不向きがあって、理系出身の人の方が向いていることも多いですけどね。

私としては、ばりばり文系の自分がどこまでこの世界でやっていけるか、それが自分の存在意義だったりもするかも知れないです。確かに数学の世界では当たり前のことが分からなかったりしてプログラムの関数がなかなか理解できなくて辛い思いをしたことは沢山あります。でも、選択肢の広さとか職業人としての幅広さというものでは、文系学部出身の人間でも、それに甘えさえしなければ結構いいところまでいけるんじゃないかと思っています。

実際、私は大学に入るまでに自分の人生を決められませんでした。社会に出て数年してからでしょうか、自分の行くべき方向が分かってきたのは。その時に、文系理系どちらも齧ってきていて良かったな、と思いますよ。

きよきよさんより:

はじめまして。アメリカで、経済学の博士課程にいる大学院生です。現在、アメリカの経済学というのは、数式、統計、コンピューター無しには、まったく話になりません。文系理系を問わず、数学の知識というのは、必要です。高校時代、私も国立文系なんぞで、数学をやっていました。(文系のくせに数学をやっている人間を“数学に色気を使う”といっていました。)もし、進路が決まっていなかったら、数学は捨てるもんではないです。役に立ちます。もっと、勉強しておけばよかった。

よーまさんより:

僕の場合は入試で受験数学は勉強しましたが、大学では史学でしたので全く数学とはサヨナラしてました

卒業後マーケティングの仕事を始めてから、理系や心理学の方は当然ご承知の主成分分析や重回帰分析等の分析手法を知りました

振り返って思うのですが、歴史や文学についての考察でも線形代数に基づく情報処理手法を使用すれば、説明し易しいことも多いはずです

実際、源氏物語の各帖ごとに頻出語彙の出現率の変動を追いかけている研究者がいることを最近知りました数学とPCの組み合わせによって、人文科学の分野で革新的な研究が生まれる可能性も期待できるのではないでしょうか

日本文学を専攻するには数学が必修になる日が来るのかも(^^;

shiroさんより:

プログラミングは「理系」みたいに思われているようですが、必要なのは数学でも理科でもなく論理学。(まあ、「ブール代数」は数学なんでしょうけど)論理学というのは人文の一分野とも言えるのではないでしょうかね。一般教養でとったような覚えがあります。

「筋道を立てて考え、それを表現する」ことができればプログラミングはできますし、それは文系理系に関係ないと思います。「論理的な思考は、数学よりもむしろ国語教育によって培われるべきでは」みたいなことを数学者の藤原正彦さんが述べておられたように記憶しています。

皆さん貴重な意見をありがとうございます。こういう反響をもらうと、本当にWeb日記を書いていてよかったなと思う。

さて、ポイントを次のようにまとめてみたい。

まず、プログラミングについて:

  • 筋道を立てて考え、それを表現することができれば、プログラミングはできる
  • 従って、文系・理系出身の区別なく、プログラミングはできるようになる
  • 数学はプログラミングをするときに役に立つが、必須ではない
  • プログラミングに必要な論理的思考は、数学よりもむしろ国語教育によって培われるべきだ

もうひとつ、文科系の学問と数学について:

  • もはや、人文科学、社会科学においても、数式、統計、コンピュータなしには研究できない

——いったい、プログラミングは理科系なのか?

shiroさんは論理学だと言うのだが、僕が教養でならった論理学では「三段論法」のいろいろなバリエーションをやっていて、これがプログラミングに結びつくとはあまり思えない。and, or, xor なんかはもちろん必要なんだけど(これをブール代数と呼ぶんでしたっけ?)。

——では、プログラミングの基本となるものは?

もう古いのかもしれないが

  • ひとつのプロセスが終わったら次に進む
  • 条件分岐
  • 繰り返し

この三つだけですべてのアルゴリズムは組み立てられる、ということを習った。「三つだけで」というところに感動した。その後、Lispという言語に出会って、「再帰呼び出し」と「今実行しているプログラム自身を書き換えながら実行する」というすごいことができるということを知った。これはかなり高級なことだ。心理学者で「なぜ再帰呼び出しは理解しにくいのか」ということを研究している人もいるくらい。

——これが論理的な思考ということだね。

うーん。そこは保留。もちろん論理的な思考がなければプログラムは書くことはできないんだけどね。もっと重要なのは、書かれたプログラムとそれがどう動くのかということのシミュレーションが頭の中でできることなんだろうと思う。それから、イメージの操作や概念的なものの操作というのがある。これも全部頭の中でやる。たとえば「ポインター」という概念と実体があるわけだけど、これがうまく理解できるかどうかは、プログラミングにおける初期の重要なハードルになっている。

——メモリーの内容も実際には目には見えないわけだから、プログラムを手がかりにしてブラックボックスの中で何がどう動いているかをイメージする能力が決定的なわけだな。

そう。つまり自分の脳を「コンピュータ」として正確に動かしてみる能力が必要なんだ。

——ということは、プログラミング能力とは、自分の脳をコンピュータ化できる能力ということだ。

そして、そうするには多少の訓練が必要になる。なぜならば、もともと融通の利く自分の脳を、わざわざ融通がいっさい利かない脳にしてシミュレーションする必要があるからだ。