プログラミングのために必要な三要素 ーSemantics, Syntax, Pragmaticsー
前回の記事では、「プログラミングをすれば、論理的思考を身につけることができる」という、言ってしまえばよくある短絡的な思い込みについて明らかにしていきました。
今回は、前回の記事で取り上げた、
「雪だるま式」のプログラミングと、
「写経式」のプログラミングでは、
「論理的思考」や、来年度より公立小学校のプログラミング教育の軸となる「プログラミング的思考」を身につけることはできないことはおろか、
プログラミングできるようになるまでの道のりは程遠いものになってしまうことを、プログラミングに必要な三要素からあぶり出していきます。
プログラミングの三要素
プログラミングの力は、下の3つが組み合わさって成長していきます。
意味を読み取る【Semantics】
構文を創り出す【Syntax】
文脈を使い熟す【Pragmatics】
それぞれの要素がどのようなものなのか一つ一つ見ていきましょう。
意味を読み取る【Semantics】
プログラミングを行う際には、
例えばScratchだったらブロックが指している意味、
Pythonだったらコードが指している意味を読み取る必要があります。
一つ一つの要素の意味がわかることによって、
全体でどのようなアプリケーションやゲームに仕上がるかを
細かいところまで想像し、実行するために必要不可欠です。
構文を創り出す【Syntax】
しかし、一つ一つのブロックやコードの意味をわかるだけでは、
全体の理解を果たすことができません。
一つ一つのブロックやコードは、規則的に並び替えられることで、
新たな意味をなし、アプリケーションやゲームに仕上げることができます。
順番が一つ違うだけで、ぜんぜん違う処理にもなってしまいます。
一つ一つの単語の意味を組み合わせて並べ、構文ができて初めてプログラムは意味を成すことができるのです。
文脈を使い熟す【Pragmatics】
ただし、意味を読み取れたり、構文を創り出したりすることだけで、
プログラミングができるようになるわけではありません。
実は重要なのは「コード」や「ブロック」が、
何に命令していて、実行させることなのか、
がわかっている必要があるのです。
例えばScratch。Scratchでは、「スプライト」と「ステージ」という
2つの「ブロック」で動かすことのできる対象が存在します。
単一のスプライトだけを動かすようなプログラムを書いていくことはカンタンに進められます。
しかし、背景を変えたり複数のスプライトに別の動きをさせようとすると、「今、誰にプログラミングしているのか?」ということを常に意識していないと、トンチンカンなアプリケーションやゲームになってしまいます。
さらに厄介なことに、実は、「今、誰にプログラミングしているか?」は大変見つけにくいのです。
特に、ウェブサイトでよく使われるJavaScriptでは、この「今、誰にプログラミングしているか?」問題は常に考えねばなりません。
ユーザーの目の前に現れている一つ一つの要素に、どのような動きを与えるかに注意し続ける必要性があるのです。
「雪だるま式」プログラミングでこの3つは育つのか?
さて、「雪だるま式」プログラミングをしていくことでSemantics/Syntax/Pragmaticsは育つのでしょうか?
「雪だるま式」プログラミングをカンタンにおさらいすると、
できたものをどんどん拡張させていくだけのプログラミング
です。
意味を読み取る【Semantics】は、拡張させていくときに新たなブロックを使う場合には身につけることができるかもしれません。
新しいブロックを使ってみて、どのような結果になるかを観察し、たくさんのブロックを組み合わせていくでしょう。
しかし、構文を創り出す【Syntax】ことを身につけるためには不十分と言わざるを得ません。
プログラムの構文は、ただ繋げていくだけではありません。
同じパターンが何度か現れたら、それを「ループ」にして記述したり、「関数」として再利用したり、応用性を高めたり、条件分岐を駆使して構文の柔軟性を高めたりすることで、より高度な構文を生成できるようになります。
さらに、目標なしにプログラムを書いていくため、「必要な要素を増やしてそれぞれのプログラムをして、調律していく」のではなく、必要となったものをどんどん追加し、寄せ集めるだけになってしまいます。
よって、文脈を使い熟す【Pragmatics】に関して、「何にプログラムをするか」を考えることについても不十分です。
ただひたすら拡張させていくだけの雪だるま式のプログラミングでは、
一つ一つのブロック・コードの知識が増えることは期待できますが、
「どんな組み合わせにするのか」、そして、
「何にプログラミングすればよいのか」を考える力は身につきません。
「写経式」プログラミングではどうか?
では、「写経式」プログラミングでSemantics/Syntax/Pragmaticsは成長するのでしょうか。
「写経式」プログラミングの前提として、学習者は常に写経したプログラムの意味を考えて学んでいかなければなりません。
そもそもこの「意味を考え続けて学ぶ」ことは、一つ一つの単語の意味が読み取れる必要性があります。
つまり、まずは一つ一つの単語の意味を説明しながら学んでいく必要性があります。ですので、意味を読み取る【Semantics】ことを自分から身につけるというよりは、与えられて身につけることになります。
また、構文に関しても「ただむやみに写す」だけの「写経式」プログラミングでは全く意味をなしません。
さらに、もっとわからなくするのは大体の場合「文脈情報」が切り離されているということです。
簡単に言えば、私達が日頃使っているスマホのアプリやゲーム、ウェブサイトなどを創るための環境と、「写経式」プログラミングを学ぶ環境が、
あまりにもかけ離れているということです。
サルを動かしてバナナを取るだけでは、ウェブサイトを作ることはできませんが、だからといって最初にウェブサイトを作ろうとしても難しいです。
なので「写経式」プログラミングでは、3つの要素すべてにおいてぎこちない学びになってしまうのです。
(続く)
ただ続けることを目的に、毎日更新しております。日々の実践、研究をわかりやすくお伝えできるよう努力します。