% プログラミングって大変ですか?

\documentclass{jsarticle}
\pagestyle{myheadings}
\markright{tmt's Math Page}
\renewcommand\baselinestretch{1.33}
\def\O{\item[\textbf{O:}]}
\def\Q{\item[\textbf{Q:}]}

\begin{document}

\section*{●プログラミングって大変ですか?●}

\begin{enumerate}

\Q 伯父さん、こんにちは。

\O $\dots$。

\Q こんにち・わっ・と!

\O ああ、びっくりした。$\dots$なんだ、おまえか。てことは、今日の作業はここまでか$\dots$。

\Q ま〜た、なんかのプログラミングに没頭してたね。

\O まあね。やり始めるとつい集中しちゃうんだ。

\Q ふ〜ん。でも、そんな難しいことをよく何時間も続けられるね? やってて楽しいから?

\O たしかに楽しいね。だけど難しいってわけじゃない。

\Q それは、伯父さんが頭いいからでしょ。普通の人には難しいと思うけど。

\O 普通の人がどう普通なのかは知らないが、中学校を普通に卒業する人なら、プログラミング自体は別に難しいことではないと思うよ。

\Q マジで言ってんの?

\O マジだよ。だって、プログラミング言語ってたくさんあるけど、どの言語も基本的な命令は数十個程度のものだから外国語を覚えるより楽だ。単語が変化することもない。それに本当は覚える必要もない。だって、ネットや本で調べればいいんだからさ。学校の試験と違って学習のハードルはかなり低いと思うよ。

\Q え〜。でも、挫折する人は多いって聞くよ。

\O そりゃそうだ。プログラミングは単に道具だから、道具が使えるだけでは意味がないよ。その道具で``何をするか''が重要なんだからね。たとえば調理器具の包丁とかフライ返しの使い方に習熟するだけでは意味がなくて、包丁やフライ返しを使って``何を作るか''が決まってないと道具は何の役にも立たないでしょ。挫折する人が多いのは、プログラミングで何をするかという\textgt{明確な目的もないまま始める}からだよ。それだと、包丁やフライ返しを振り回すことに終始するのと変わらない。途中でイヤになって当然さ。

\Q じゃあ、プログラミングで何をしたいがが明確なら挫折しないってこと?

\O その通り。でも一般の人は、プログラミングで明確に何かしたいことが、そんなにあるわけじゃない。何かしたいことのほとんどは、プログラミングをしなくても実現できるからね。他の方法で実現できることをプログラミングでやろうとしても、モチベーションが続かないでしょ。

\Q だったらプログラミングをやる意味ってなに?

\O まず、目的や目標がはっきりしていることだね。無目的に始めれば、いくら誰にでもできるといっても挫折する可能性は高いものだ。結局、始めてみて『あ、これ楽しい』と思えた人だけが続けられるんじゃないかな。

\Q でも、なんか大変そうだなあ。

\O そんなことないよ。やり始めは大変なことが多いかも知れないけど、でもプログラミングは、コツをつかめばサクサクできるようになるのもだよ。

\Q じゃあ、コツを教えて欲しいんだけど。

\O それは無理。コツってのは``つかむもの''であって、``教わるもの''ではないからね。誰かが言うコツは、その人にとってのコツなんだよ。だから、それを聞いたところで他の人に有効かどうかは怪しいものだね。

\Q 結局、プログラミングをやらないことにはコツはわからないってことか。

\O 勘違いしてる人が多いようだけど、プログラミングにコツがあるとすれば、それはコードに置き換える部分だけだよ。

\O え? プログラミングってコードを書くことなんだから、みんなそれを覚えるんだよね。

\Q 違うって。コードに置き換えるには少しばかりの命令の使い方がわかればいい話。それは、さっきも言ったように特別難しいことではない。コツがあるとすれば、命令に置き換える感覚が人それぞれだからだろう。うまく馴染めた場合、コツがつかめたということになるのかな。むしろ、プログラミングの本質はアルゴリズムを考えることなんだよ。

\O アルゴリズムってプログラムと違うの?

\Q アルゴリズムはコンピュータにさせることの手順を考えること、とでも言えばいいかな。そのためには、コンピュータにさせる内容を十分把握できている必要がある。難しいとしたら、ここ。大抵の人は単にコンピュータに命令することがプログラミングだと思っているようだけど、``何をさせるか''がはっきりしないのであれば、命令だけ覚えても何かをさせるようには書けないだろう。たとえ話をするなら、文章が書けるからといって小説が書けるわけではない、ってことかな。小説を書くにはテーマや話の筋がきちんと定まってなければ、文章を書き始めても完成はおぼつかないだろうね。

\Q ふ〜ん。つまりは、プログラミングのためだけにプログラミングを勉強してもダメってことか。

\O その通り。プログラミングは、自分が作りたいものを試行錯誤しながら作るのが一番。プログラミングなんて、そうしているうちに自然と身に付くものなんだよね。

\Q 結構、大変そう。

\O そうでもないよ。私は自分で書いているから言えるんだが、一旦ある動作の仕組みを実装すると、新しく機能を追加することは案外簡単にできてしまうものだ。だから、調子に乗って余計な機能をホイホイ加えてしまったりするんだけどね。

\Q じゃあ、自分もコンピュータにさせたいことが見つかれば、アプリとか作れるかな?

\O そりゃ、できるだろう。

\Q 本当? 大変じゃないの?

\O いきなり大規模なアプリは作れないだろう。でも、自分の目的に合ったものを作りたければ、アプリの見た目は気にせず、正しいアルゴリズムでプログラムすることを優先すればいい。

\Q へえ。あ、でも数学が必要だよね?

\O いいや。プログラミング自体には数学はいらない。強いて言えば、中学校一年程度の数学の知識があれば十分だね。ただし、コンピュータにさせたいことが数学的な内容なら、当然その内容に関する数学の知識は必要だけど。

\Q でも、中学校一年程度でよければ大丈夫だな。

\O ただ、プログラミングの仕組みにおいては、数学的な考え方が使われている場合がある。なにしろ、プログラミング言語を作成した人の多くは、数学の素養が優れた人たちだからね。プログラミングには数学は不要でも、数学的な考え方ができる人はプログラミングの理解を深めやすいだろう。

\Q なんだ、やっぱり大変じゃないか。

\O そうかな。まあ、始める気になったら、とりあえずやってみればいい。そうすれば、思いのほか大変じゃないことがわかるはずだ。あ、コンピュータにさせることがない状態なら、あせって始めない方が無難かな? 何かやらせたいことがある?

\Q う〜ん。あるような、ないような$\dots$。でも伯父さんは、いつもプログラミングしてるみたいだけど、そんなにコンピュータにさせることがあるわけ?

\O いや。実は私はアプリを作るより、プログラミング言語を使うこと自体が好きな``言語フェチ''なんだよ。

\Q なに、それ?

\O なんて言うか、エキスパートと言うほどの達人じゃないし、オタクと言うほどハマっているわけじゃないし、マニアックと言うほど知識豊富じゃないし$\dots$まあ、ちょっとした嗜好(しこう)程度に触れていたいだけなんだよね。だから、いろいろな言語で広く浅く遊んでいるわけだ。

\Q てことは、大した目的もなくプログラミングしてるってこと? アプリを作ったりしないの?

\O アプリなら自分専用に作ることはあるよ。でも、アプリでなくても用が足りることは多いからね。つい、まったく役立たずのプログラムを組んでしまうんだ。コードを書くのって楽しいからね。

\Q ちょっと、キモいんだけど。

\O だから、自称``言語フェチ''なのさ。

\Q $\dots$(どうりで、人が寄りつかないわけだ)。

\O $\dots$(こりゃ、完璧に引かれたな)。

\end{enumerate}

\end{document}