情報教育の中核としての プログラミング

情報教育の中核としての
プログラミング
日本語プログラミング言語「言霊」
情報教育論2003
大岩 元([email protected])
慶應義塾大学 環境情報学部
日本の教育問題
• 入試にコンピュータを導入した(1979)
• コンピュータで測れる物だけで競争しだし
た
– データベースの充実と正確な計算
– 即ち、人間をコンピュータにする教育
• 覚えるだけで、考えない人間が育つ
– 分数が計算できなくても困らない
大学入試の数学
• 解法を約1000覚える
• 問題を見たら、どの解法を使うか決める
– データベースの充実
• 素早く正確な計算を行なう
– 文字通りコンピュータ
• 人間をコンピュータにする
– 情報化時代には不要な人材
日本の教育の問題
• 初等幾何学が教えられなくなった
– 公理と定理の違いが分らない
• 覚える数学しか教えられない
– 入試が考えること禁止する
• 哲学が教えられていない
– フランスでは理系でも必習
フランスの哲学教育
「エリートのつくり方」柏倉康夫 ちくま新書058
• 中等教育の最後に哲学教育を行なう
• 文学は週8時間、社会科学で5時間、理科
系でも3時間の授業がある
• 内容は「意識とは何か」、「情熱とは何か」、
「他人とは」、「時間とは」、「言葉とは何か」
• ベルグソン、アラン、サルトル、シモーヌ・
ヴェーユは哲学教師だった
哲学教育の目的
•
•
•
•
哲学教育指導要項(1925)
学んできた理科系・文科系の学習自体の有効性と価値
を、知的努力を通じて把握させ、それらの総合を可能に
する
思索の方法及び知的・道徳的生活の基本原理を身につ
ける
自らの職をこえて事物を考察する職業人を育成し、自主
的判断力をもつ市民を育成する(思索の訓練を通じて自
由を学ぶ)
教師は、日常生活で使われることば、法律・歴史・実証
科学で使われることばを用いて哲学を表現する
ヴェーユの哲学講義 ちくま学芸文庫
• 第一部
–
心理学で用いられる方法、反射、本能、行為における身体の
役割、感情における身体の役割、思考における身体の役割、
精神を求めて
• 第二部
– 第一編 精神の発見ののちに
• 精神、意識、人格、判断、推論
– 第二編 社会学
• 社会学をいかに考えるか、社会的抑圧とその理論、経済
生活の動き、現在の状況、国家について、国際関係、個人
と社会の関係
• 第三部
–
倫理のよりどころ、審美的感情の心理学、自己認識・真実へ
の愛・犠牲・哲学と形而上学・認識の相対性・誤謬・時間、直
観と演繹法………についてのメモ
哲学の試験問題(3題中1題選択)
•
社会科学
–
–
–
•
文学
–
–
–
•
人間の歴史を一人の人間の歴史に対比できるか
正しい先入観というものはあるか
ヒュームの正義に関するテキストについて注釈せよ
幻想のない情熱というのはありうるか
すべてのことは正当化できるか
ベルグソンの言語の機能に関するテキストについて注釈せよ
理科系
–
–
–
想像力は必ず誤ると言えるか
人は真実にたいして無関心でいられるか
アリストテレスの責任に関するテキストを注釈せよ
英国14-16歳の問題(レベル4)
• オーストラリアでの休日の費用を分析する
のに表計算ソフトを使うとする。
– 出力したい情報を1項目書け(1行)
– 表計算に入力するデータの項目を二つ書け
(各2行)
– 結果が妥当かどうかをテストするために使用
するデータ項目を二つ書け(各2行)
英国14-16歳の問題(レベル10)
• 体育の日の結果を処理するための情報
処理システムを開発するのにどのように
するか述べよ(7行)。
• もし失業が起こるとして、政府はどの程度
まで工場に情報技術を利用することを奨
励すべきかについて論ぜよ(7行)。
• POS端末導入によって、店員は何が困る
か、また、雇用の変化を二つ述べよ。
学習におけるストックとフロー
知
識
フロー(取り込んだ知識)
ストック(知識の体系)
時間
ブートストラッピング
コンピュータに最初のプログラムをどうやって書きこむか?
• 小さなブーターが次々と大きなプログラム
を読みこんでいく
• ブートストラッピングは汎用概念
– 言語学、素粒子物理、ベンチャー起業
• 情報処理能力のブーターは何か
– タイピング、プログラミング、図解力
情報処理能力のブーター
• 身体軸
– タッチタイピング
• 論理軸
– プログラミング
• 感性軸
– 図解力(発想力)
情報教育のブーターとしてのプ
ログラミング
• 情報教育において「プログラミング」の学習は、
「ブーターの読み込み」の過程に相当する
– 「ブーター」とは、コンピュータが起動(ブート)する際に
一番最初に読み込まれる最小限の命令群
– ブーターは、その後に読み込まれる、より複雑なプロ
グラム(ひいてはシステム全体)の基礎となる
– ここでは、「応用的な知識を生み出すために必要な最
小限の基盤」を表す比喩
コンピュータの本質
• コンピュータの本質はプログラム
• コンピュータのあらゆる動作はプログラム
によって規定される
• 「コンピュータの何たるか」を理解するため
には、「プログラムの何たるか」を学ばなけ
ればならない
プログラムとは
• プログラムは「仕事の手順」を書いたもの
• プログラムが書けないことを、コンピュータ
は実行できない
– 人間は手順が書けなくてもいろいろなことを実
行できる
– 人の顔を見分ける、声を聞き分ける、字を
読む
プログラムの基本構造
• 逐次、繰り返し、条件分岐は、仕事の手順を記述
する際のもっとも基本となる構造
• これら三つをまとめて「制御構造」と呼ぶ
プログラムの基本構造(続き)
• 逐次、繰り返し、条件分岐は「入り口1つ、出口1
つ」の構造を持つ点で共通している
• 一つの構造の中に別の構造を埋め込んで(=入
れ子構造)、複雑な手順を実現できる
プログラムのコメント(1)
• 実際にプログラムを書く場合、命令文(=コ
ンピュータに対する指示)だけを書けば済
むわけではない
• 命令文に加えて、コメント(=人間に対する
注釈)を書くようにする
• コメントはコンピュータの動作にとっては不
要だが、人間にとっては重要な意味を持つ
プログラムのコメント(2)
• コメントには目的を書く
×
double x; // xは正の数とする
double y;
○
double x; // xは正の数とする
double y;
// xの小数部は0.5以上か?
// xを四捨五入する(xの小数部は?)
if((x - Math.floor(x)) < 0.5){
if((x - Math.floor(x)) < 0.5){
y = Math.floor(x); // xの整数部を
y = Math.floor(x); // (0.5未満)xの
// yとする
// 整数部をyとする
}else if((x - Math.floor(x)) >= 0.5){
}else if((x - Math.floor(x)) >= 0.5){
y = Math.floor(x) + 1; // xの整数部+1を y = Math.floor(x) + 1; // (0.5以上)xの
// yとする
// 整数部+1をyとする
}
}
プログラムのコメント(3)
/**
* 家を描くプログラム
* 作成日:00.5.3 (1bcBコース教材より)
*/
import Turtle;
class House01 extends Turtle{
/**
* 家を描く
*/
void start(){
見出しコメント
ブロックコメント
// 屋根を描く
rt(30); // 前処理(タートルの角度を調整する)
int i;
for(i=1; i<=3; i++){
fd(100); rt(120);
// 三角形の一辺を描く
}
rt(60); // 後処理(タートルの角度を調整する)
}
}
// 本体を描く
for(i=1; i<=4; i++){
fd(100); rt(90);
}
// 四角形の一辺を描く
行コメント
書法を徹底したプログラム
日本語プログラミング
• 日本語をベースとしたプログラミング言語
が実現されることによって、従来コメントと
して記述していた内容がそのままプログラ
ムの命令文となる
日本語プログラミング言語「言霊」
Javaと日本語プログラム言語
• 例えばタートルグラフィックスで家を書くプ
ログラムはJAVAではどうなるか?
public class House extends Turtle{
public static void main( String args[] ){
drawHouse( 100 ); //一辺の長さが100の家を描く。
}
//家を描くメソッド
public static void drawHouse( int length ){
drawTriangle( length ); // 一辺の長さがlength の三角形を描く。
drawRectangle( length ); //一辺の長さがlength の四角形を描く。
}
//三角形を描くメソッド
public static void drawTriangle( int length ){
rt(30);//前処理として角度を調整する
for( int i=0 ; i<3 ; i++ ){ //一辺を描く処理を3回繰り返す
fd(length); rt(120); //一辺を描く処理
}
lt(30); //後処理として角度を調整する
}
//四角形を描くメソッド
public static void drawRectangle( int length ){
//「一辺を描く」という処理を4回繰り返す。
for( int i=0 ; i<4 ; i++ ){
rt(90); fd(length); //一辺を描く処理
}
}
}
Javaと日本語プログラム言語
• 日本語プログラミング言語「言霊」を用いる
と、先ほどのプログラムが日本語で記述で
きる
「言霊」によるプログラム
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{
長さがAの三角形を描く。
長さがAの四角形を描く。
}
長さが「A(整数型)」の三角形を描くとは{
30度右に曲がる。
{A歩進む。120度右に曲がる。}を3回繰り返す。
30度左に曲がる。
}
長さが「A(整数型)」の四角形を描くとは{
{90度右に曲がる。A歩進む。}を4回繰り返す。
}
言霊の特徴
• 手続きの表現が自由である
• 文法表現が理解しやすい
手続きの表現が自由
• ここでは「大きさが~の家を描く」と表現し
たが、状況によっては違う表現の方が良い
かもしれない・・・
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{
長さがAの三角形を描く。
長さがAの四角形を描く。
}
手続きの表現が自由
• 好きなように表現を変えることができる
メインとは{
大きさが100の家を描く。
}
大きさが「A(整数型)」の家を描くとは{・・・}
メインとは{
一辺の長さが100の家を描く。
}
一辺の長さが「A(整数型)」の家を描くとは{・・・}
手続きの表現が自由
メインとは{
家を、三角形と四角形の長さを100として描く。
}
家を、三角形と四角形の長さを「A(整数型)」として描く
とは{・・・}
メインとは{
家描画100。
}
家描画「A(整数型)」とは{・・・}
手続きの表現が自由
• 既存のプログラム言語では、可能な表現
が限られている
手続き名の変更
引数の順序
drawLine( 0 , 0 , 100 , 100 );
手続きの表現が自由
• 日本語プログラム言語「言霊」なら、好きな
文型で表現する事ができる
座標(0,0)から座標(100,100)に線を引く。
座標(「A(整数型)」、「B(整数型)」)から
座標(「C(整数型)」、「D(整数型)」)に線を引くとは{
・・・
}
コメントがプログラムになる
• 言霊はその表現力により、
Javaなどで記述していたコメントの
大部分が必要なくなる。
文法表現が理解しやすい
• Javaによる以下の表現がどういう意味か、
わかるでしょうか?
if ( a%3 == 5 && b != 10 ){ ・・・ }
• 既存のプログラム言語は、文法が難しいと
いう問題がある
文法表現が理解しやすい
• 日本語プログラム言語「言霊」では、以下
のような記述になる
if ( a%3 == 5 && b != 10 ){ ・・・ }
もし aを3で割った余りが5と等しく かつ
bが10と等しくない ならば{
・・・
}
※空白を入れなくても解釈できます。
文法表現が理解しやすい
• 既存のプログラム言語は文法が難しいと
言う問題がある
• その為、やるべき事が分かっているのに、
その処理の記述ができないという人が非
常に多い。
文法表現が理解しやすい
• 例えば、以下の問題。
タートルグラフィックを使って以下の画像を描いて下さい。
ただし、for文とif文を使って下さい。
ヒント:繰り返し回数が奇数と偶数で場合分けをする
文法表現が理解しやすい
• 議論すると、この?部分が分からず困る人がたく
さんいる。
public static void main( String args[] ){
for( int i=0 ; i<4 ; i++ ){
if( ?????? ){
drawSikaku( 50 );
}else{
drawSankaku( 50 );
}
move( 60 );
}
}
文法表現が理解しやすい
メインとは{
繰り返し回数(整数型)を生成する。
繰り返し回数に0を代入する。
{
繰り返し回数を2で割った余りが0と等しいならば{
長さが50の4角形を描く。
}そうでなければ{
長さが50の3角形を描く。
}
右に60移動する。
繰り返し回数を1増やす。
}を4回繰り返す。
}
日本語プログラミング言語「言
霊」
• これにより、
Java言語の文法に悩むのではなく、
アルゴリズムを考え、作り出し、記述する
事に集中できる
プログラムを学ぶもう一つの意味
何故、プログラムを学ぶか?
コンピュータの本質を理解するため
論理的思考・表現能力を得るため
論理的思考能力とは?
・ 漠然としたアイデアを具体的な「目的」に
置き換える能力
・ 「目的」を実現する為に必要なプロセスを、
正確に順序だてて組み立てる能力
・ 組み立てたプロセスを正確かつ
簡潔に記述する能力
なぜプログラムを学ぶのか
• この能力は、あらゆる所で必要になる
• なぜなら…
自分の考えを組み立てる能力
自分の考えを他人に伝える能力
に等しいからである
リテラシーとは何か
• ことばの使用
• 文字の使用
– 人間が解釈する
– 学校教育が始まる
• プログラム(=ことばによる仕組)の使用
– コンピュータが解釈する
– 学校教育が変わる