% プログラム言語の勉強だけでは...

\documentclass{jsarticle}
\pagestyle{myheadings}
\markright{tmt's Math Page}
\renewcommand\baselinestretch{1.33}

\begin{document}

\section*{▼プログラム言語の勉強だけでは$\dots$▼}

いまや、コンピュータが組み込まれていないものなんて存在しないような世の中である。コンピュータが組み込まれているということは、当然、コンピュータを正しく動作させるプログラムが組み込まれていることになる。プログラミングの重要性は高まる一方である。

だから、小学生の時期からプログラミングを学習するのは自然なことだ。そうすれば、大人になるまでにプログラミングの「こと」が身につくだろう。「こと」を強調したのは、プログラミングの高度な技術のことではなく、プログラムがどんなものかを理解しているって意味だ。

車の運転や飛行機の操縦が時代とともに徐々に自動化されたように、プログラムだって自動化もしくはパッケージ化されてきたのだ。たとえば、でたらめに並んだ何かのリストを順番に並べ直すときは、大昔なら
\begin{enumerate}
\item 先頭から$2$個のデータを比較する
\item 順番が不正なら入れ替える
\item 次の$2$個のデータを比較する
\item 順番が不正なら入れ替える(以下繰り返す)
\end{enumerate}
みたいなことをちまちま書いていたものだが、いまでは\verb|sort(リスト)|みたいな一文で済むように進化しているのだ。だからいずれ、「○○せよ」の一文でどんな複雑なこともこなせる日が来るんだろう。

そうなると現在の高度なアルゴリズムは不要になり、真に「何をどのようにしたいのか」が把握できることが重要になる。つまり、プログラミング自体は必要な能力ではなく、処理すべきことを理路整然と組み立てられる能力が求められるのである。

日本語で自伝とか小説とかマニュアルとか記述することを考えてみよう。自伝ならたとえば「です・ます文体」を、小説ならたとえば「だ・である文体」を、マニュアルならたとえば「箇条書き」を主体にして書くとすれば、重要なことは内容が理路整然と書けるかどうかであって、文体だけに精通しても意味がない。

これをプログラミングに置き換えると、ゲームとかwebアプリとか科学技術計算とかのプログラミングをすることに相当する。ゲームならたとえば「X言語」を、Webアプリならたとえば「Y言語」を、科学技術計算ならたとえば「Z言語」を主に用いるとすれば、重要なことは正しく動作するようにプログラムを組むことであって、言語の文法だけに精通しも仕方ないのだ。

世の中がプログラミングで溢(あふ)れているからといって、プログラム言語の勉強をすれば豊かな生活が送れるわけではない。むしろプログラム言語に疎(うと)くても、プログラムで何をするか明確に指示できればよいのだ。なぜなら「○○せよ」を正しく指示できれば、あとは「プログラムを生成するプログラム」がコードを書いてくれるはずだから。

プログラム言語を勉強するってことは、プログラムの文法とアルゴリズムを勉強することだ。それは、自伝や小説やマニュアルを書く勉強をすることではなく、日本語の文法と慣用句を勉強することである。文法と慣用句の勉強は、それ自体が何に使われるか知らないまま、言語の構造を構築することである。そういう学術的なことが楽しいのならそれでよいけれど、大抵の人は、初歩的な語彙しか知らないまま小説を書き始めてしまう方が楽しいのではないだろうか。豊富な語彙や凝った言い回しは、小説を書きながら増やしていけばよいのだ。

なんの目的もなくプログラミング自体を勉強しても(マニアックな人以外は)楽しいことはないはずだ。ゲームとかwebアプリとか科学技術計算とかの目的を持って、その実現のためにプログラミングを勉強しないと長続きしないだろう。だって、目的があればどんな言語であっても、目的に沿った機能を軸に勉強すればよいから効率的に学べる。膨大な命令やアルゴリズムは、アプリケーションを作りながら必要に応じて学べばよいのだ。

けれど、目的がなければどんな言語であっても、闇雲に言語仕様を一から構築しなくちゃならないから大変だ。プログラム言語は先人が吟味を重ねて構築しただけに、並の人間が言語の仕組みから学ぶのは荷が重い。自分の興味に関係なく、単にカリキュラムに沿って機械的に進められる学校の勉強を思い出せば納得できるだろう。

\end{document}