情報教育の中核としての プログラミング 日本語プログラミング言語「言霊」 情報教育論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言語の文法に悩むのではなく、 アルゴリズムを考え、作り出し、記述する 事に集中できる プログラムを学ぶもう一つの意味 何故、プログラムを学ぶか? コンピュータの本質を理解するため 論理的思考・表現能力を得るため 論理的思考能力とは? ・ 漠然としたアイデアを具体的な「目的」に 置き換える能力 ・ 「目的」を実現する為に必要なプロセスを、 正確に順序だてて組み立てる能力 ・ 組み立てたプロセスを正確かつ 簡潔に記述する能力 なぜプログラムを学ぶのか • この能力は、あらゆる所で必要になる • なぜなら… 自分の考えを組み立てる能力 自分の考えを他人に伝える能力 に等しいからである リテラシーとは何か • ことばの使用 • 文字の使用 – 人間が解釈する – 学校教育が始まる • プログラム(=ことばによる仕組)の使用 – コンピュータが解釈する – 学校教育が変わる
© Copyright 2024 ExpyDoc