オブジェクト指向は子ども向けには難しいということをもう少しちゃんと書いてみようと思う.
オブジェクト指向プログラミングの最初の言語 Smalltalk は子ども向けとして作られたと言われているけれど,やっぱり僕は難しいと思う.構成要素が多すぎる.
僕のオブジェクト指向の理解は,沢山の文があって,それらの文の主語が数種類のとき,その文の主語でまとめて,主語を省略して文を記述できる,というものである.リンゴは赤い.リンゴは丸い.リンゴはおいしい.をまとめて,リンゴについて言います.赤い,丸い,おいしい.という感じ.オブジェクト指向のありがたさは,文が沢山ないとわからない.1つや2つの文で,それらの主語を省略できたからといって,ありがたみは感じないだろう.
Squeak, Scratch, そしてプログラミンであるが,これらのオブジェクト指向の部分について.これらの言語に共通しているのは,見た目を自由に変更できるということ.オブジェクトというモノが最初にあって,そいつは今こういう見え方をしているけど,何かの処理でその見え方を変えることができるようになっている.逆に,見え方が全く同じでも,違うオブジェクトであれば動きが違う場合もある.実装的には,オブジェクトという抽象的なものがあって,それに見え方や動きやその他の状態が結び付けられている.つまり,これらの言語をきちんと理解するためには,その抽象的なものの考え方ができなければならない.
オブジェクト指向を教えたいのではなくて,プログラミングの楽しさを教えたいのであるから,オブジェクト指向の抽象的な考え方を理解させる必要はない.僕はScratchを子どもに教えている現場を知らないけれど,このあたりを子どもに理解させるのに苦労するのではないかと想像する.抽象的な考え方ができるのは小学校高学年だと思うが,抽象的なものの理解が苦手な子どもを脱落させるのではないだろうか.
それに対して,ビスケットはオブジェクト指向ではない.見えているものがすべてである.頑張ってまったく同じ絵を描けば別だけれど,そうじゃなければ,同じ絵は必ず同じ動きをする.見た目以外に隠された状態はない.(このあたりの徹底さが,Visibility なのであるが)
ビスケットのプログラムは,メガネで記述するが,そのメガネは特定の絵に結びついているわけではない.メガネは絵と独立している.メガネは単独で文の意味を持つので,それをそのまま言葉にして読むことができる.抽象的なものを理解する必要はなく,具体的な絵に対して考えればよいだけである.
ビスケットでも頑張って大きなプログラムを作る子どもが出てくる.プログラムはだんだんぐちゃぐちゃして,わかりにくくなる.そういう子は,自分で整理法を編み出すようになるだろう.そこでオブジェクト指向のありがたみを体感できるだろうし,その辺で普通の文字の言語を学ぶ準備ができるんじゃないかと思う.
オブジェクト指向プログラミングの最初の言語 Smalltalk は子ども向けとして作られたと言われているけれど,やっぱり僕は難しいと思う.構成要素が多すぎる.
僕のオブジェクト指向の理解は,沢山の文があって,それらの文の主語が数種類のとき,その文の主語でまとめて,主語を省略して文を記述できる,というものである.リンゴは赤い.リンゴは丸い.リンゴはおいしい.をまとめて,リンゴについて言います.赤い,丸い,おいしい.という感じ.オブジェクト指向のありがたさは,文が沢山ないとわからない.1つや2つの文で,それらの主語を省略できたからといって,ありがたみは感じないだろう.
Squeak, Scratch, そしてプログラミンであるが,これらのオブジェクト指向の部分について.これらの言語に共通しているのは,見た目を自由に変更できるということ.オブジェクトというモノが最初にあって,そいつは今こういう見え方をしているけど,何かの処理でその見え方を変えることができるようになっている.逆に,見え方が全く同じでも,違うオブジェクトであれば動きが違う場合もある.実装的には,オブジェクトという抽象的なものがあって,それに見え方や動きやその他の状態が結び付けられている.つまり,これらの言語をきちんと理解するためには,その抽象的なものの考え方ができなければならない.
オブジェクト指向を教えたいのではなくて,プログラミングの楽しさを教えたいのであるから,オブジェクト指向の抽象的な考え方を理解させる必要はない.僕はScratchを子どもに教えている現場を知らないけれど,このあたりを子どもに理解させるのに苦労するのではないかと想像する.抽象的な考え方ができるのは小学校高学年だと思うが,抽象的なものの理解が苦手な子どもを脱落させるのではないだろうか.
それに対して,ビスケットはオブジェクト指向ではない.見えているものがすべてである.頑張ってまったく同じ絵を描けば別だけれど,そうじゃなければ,同じ絵は必ず同じ動きをする.見た目以外に隠された状態はない.(このあたりの徹底さが,Visibility なのであるが)
ビスケットのプログラムは,メガネで記述するが,そのメガネは特定の絵に結びついているわけではない.メガネは絵と独立している.メガネは単独で文の意味を持つので,それをそのまま言葉にして読むことができる.抽象的なものを理解する必要はなく,具体的な絵に対して考えればよいだけである.
ビスケットでも頑張って大きなプログラムを作る子どもが出てくる.プログラムはだんだんぐちゃぐちゃして,わかりにくくなる.そういう子は,自分で整理法を編み出すようになるだろう.そこでオブジェクト指向のありがたみを体感できるだろうし,その辺で普通の文字の言語を学ぶ準備ができるんじゃないかと思う.