子どもたちが体験しているのはプログラミング?それともコーディング?
探究型プログラミング学習のワークショップでは、はじめにプログラムの説明を簡単にしています。
プログラムとは、命令の集まりである。
命令を実行すると、結果が出る。
先日のワークショップでは、アイスブレイクに「大人を命令しよう!」を取り入れて
命令によってコマ(大人)が動かせることや、2ビットで作った命令というものを身体を使って学んでもらいました。
0と1という最小単位からなる命令がたくさん集まるとプログラムになる。
そして、プログラムを組み合わせることで、大きくて複雑なプログラムを作ることができる。
という概念を、ワークショップを通じて学んでもらうことを狙いとしています。
対して、例えばScratchを使ってゲームやアプリを作るワークショップの場合、まずパソコン上でScratch環境を開き、Scratch言語のお作法を習い、命令に該当するブロックを組み合わせてプログラムを作っていきます。
視覚的に非常に分かりやすいですし、キーボードを使えない年齢の子でも親しみやいことから多くのワークショップで使われているようです。
プログラミング入門として本当によく出来た環境だと思うのですが。。。
そういったワークショップを見るたびに、私がずっと疑問に思っていることがあります。
それは、子どもたちがScratchなどの言語を使ってプログラムを作る行為は、本当にプログラミングと呼べるのだろうか?
ということです。
プログラミングとコーディングの違いは諸説あり、こんな定義もあったりします。
私なりの解釈で定義すると、プログラミング言語の仕様に従ってコンピュータが理解できるものを作る(=コードを書く)作業のことをコーディングと呼び
命令を組み合わせてプログラムを作る作業のことをプログラミングと呼ぶ
のだと捉えています。
後者が少し分かりづらいかもしれないので補足します。
A、B、Cがそれぞれ命令だとすると、AとBの因果関係を考えたり、AとBを組み合わせたプログラムにCをどう組み合わせるか?などを考えたりすることがプログラミングとなります。
一般的なシステム開発の現場では、いわゆる設計と呼ばれる工程の中でやりますし、簡単なプログラムであれば、コーディングをする直前に頭のなかで描きながらやることも多いです。
探究型プログラミング学習では、このようなプログラミングの中心がアルゴリズム(命令を実行する順番)にあると考えているので、学習フレームワーク(MAC)では「アルゴリズム化」と定義し、その上で、実際のコードを書く作業としての「コーディング」を位置づけています。
従来のプログラミング学習では、この辺を特に区別せずに「プログラミング」と一括りにしているのですが、アルゴリズムを意識せずにブロックを積み重ねるだけでは、コーディングになってしまい、肝心の思考力があまり身につけられずに終わってしまうのではないかと危惧しています。
とはいえ、だからまず設計ありき、と言うつもりは全くありません。
子どものプログラミング学習と大人のそれとは進め方が違って良いと思っています。
はじめは試行錯誤してとりあえず動くものを作る、というやり方でも構わないので、そのあとに自分の作ったプログラムを見ながら、どんなアルゴリズムになっているのか?
どの辺を改良したら良さそうか?
などを振り返る時間を作ることを勧めます。
従来のプログラミング学習では、自分の作りたいものを作りたいように作る、という経験をすることができますが、それだけでは何れ限界がきます。
だから、自分の作ったものと他の人が作ったものを繋げれば、より大きなもの、より複雑で難しいものを作ることができる、といった経験からプログラミングの概念を学ぶことが重要であると探究型プログラミング学習では考えています。
そのために必要なのは、「コーディング」力よりも「アルゴリズム化」力です。
子どもたちは、動くものを作れたり、見栄えの良いものが作れるだけで満足する傾向があります。
でもそれだけでは、単なる「コーディング」をしているに過ぎない可能性があるので、思考に繋がるような学習の促しが必要になると考えていますし
探究型プログラミング学習ではその点を重視した学習プログラムを作っています。