文系のためのプログラミング講釈:小学校での教育は必要か

 日本のプログラマの7割は文系なんだそうです。理系大学は授業が厳しいので、文系に入学して、在学中、あるは卒業後に1,2年コンピュータ専門学校に通ってプログラマになるのだそうです。仕事は「IT関係です」という人が多いのはこの為です。大学生の7割が文系なので就職が難しく、人材不足のプログラマなら簡単に就職できるのです。

 が、そのような動機とその程度の努力でなったプログラマが優秀なわけがなく、おかしなプログラミングをして事故を起こしています。最近、日航全日空がコンピュータの不具合で搭乗できず、飛行機が飛ばなかったなどという事故は、どうなんでしょう。下請け、孫請け、ひ孫けのソフトウエァハウスの経歴を調べたら原因が分かるかもしれません。

 知人のソフトハウスの社長さんに聞いた話ですが、ソフトハウスにも序列があり、「うちのプログラマは全員理系で揃えています」などという自慢があるのだそうです。あくまで「理系」であって、「情報関連学科」だとは言っていないのがミソですが、それでも文系プログラマよりマシだという意味でしょう。

 プログラミング言語は言語ですので、ハードウェアなど知らなくても、情報工学を4年も学ばなくても、文法さえ学べば、書けます。文系のプログラマの弱点でしょう。英国、米国に一度も言ったことがなくても英語をある程度書けます。書けますが、そんな表現はネイティブはしないよという英語が多いでしょうね。電車に乗っていて、日本語の注意書きと並行して英語の注意書きが書いてあるのを見ますと、これは英語じゃないなあ、と良く思います。英語もどきです。言語にはこのような性質があります。

 コンピュータのハードウェアを知らないプログラマの書いたプログラムは、まあ、動くけどね(事故を起こすこともあるでしょうが)・・・という程度の物ではないかと思いますが、何千万行、何億行にも及ぶシステムのプログラムを全部読んで確認した人などいないでしょうから、誰も本当の所は知らないという恐ろしい事になっているのではないでしょうか。

 理系だからと言って、安心はできません。情報工学科、情報科学科、コンピュータサイエンス学科・・・という専門の学科の日本中の大学の定員を合計しても、大した数にはなりません。おまけに、旧帝大は皆、大学院に進んでしまい、プログラムは書きますが、ソフトハウスプログラマにはなりません。そもそも大した人数でないので大勢に影響はないかもしれませんけどね。しかし、上の学科を持つ大学には、Fランク大学だって含まれています。数学はできない、理科系科目も一切できない、英語もできない、日本語も日常の会話程度しかできない。この学生がプログラミングができるはずはなく、プログラマにはなりません。優秀な大学の文系学生のプログラマは日本のIT業界では必須なのです。

 さて、プログラムとは何か:

 以前、どこかに「式次第」の「次第」ですと書きました。手順ですね。ただし、コンピュータプログラムでは、必ず「停止する」ことが要求されます。停止が保障されている手順をアルゴリズムと言います。単なる手順ですと、プロジージャです。以下、面倒なので手順と言っておきます。

 さて、プログラムを作るための必要な能力は

 1.論理

 2.言語

この2つです。1ができる人にとっては、2は問題になりません。実質的には1が理解できる力があるかということになります。

 何かの手順とは論理がわからなければ考えられません。それを日本語で書いてもプログラムですが、日本語を始めとする自然言語には曖昧性がありますから、それを避けるためにプログラミング言語という、自然言語に比べれば、赤子の手をひねるくらい簡単な言語を使います。Cとか、C++、Javaなどです。

 曖昧性とは、例えば、日本語の「と」には、英語でいえば、「and」と「with」という二種の意味があります。

 「僕はミカンとリンゴが好きだ」→ I like oranges and apples.

                  I like apples with oranges.

これが曖昧性です。人間は意味で理解しているので、こんなもの分かると思うでしょうが、「僕はAとB C」となると、A,B,Cの意味が確定していないので、どちらなのか分かりません。プログラミング言語ではこのような事が起きない設計になっているのです。文法と意味が1対1対応しているのです。

 さて、言語とは、単語と文法と意味からなりますが、プログラム言語では、意味は一意的に決まっていますから意識されず、単語も簡単なので、文法だけが多少覚えるべき問題となります。

 という訳で、最大の問題は問題を論理展開できる能力があるか、ということになります。これは日本語で良いのです。日本語でできれば、プログラミング言語に書き直すのは簡単な事です。

 さて、練習です。

 3つの自然数、a, b, c があります。最大数を見つける手順を日本語で箇条書きしなさい

 これができないレベルの大学生は、プログラマは無理です。大多数の大学生には無理でしょう。なにしろ、代数ができないのですから。

 機械語アセンブラ言語は箇条書き方式なので、日本語で箇条書きでプログラムは書けるのです。解答はこちら

 さて、小学校でプログラミングを教えようとする動きがあるそうですが、GUIで、部品を手順に沿って配置する程度のものでしょう。そんな事に時間を使うくらいなら、鶴亀算とか、植木算などの文章題をきちんと考えられるような教育に時間を掛けた方が良いと思います。コンピュータが好きな小学生は自分で趣味でやることでしょう。Dr.Yもそうでした。エレクトロニクスの機械を自分で作っていたものです。