浜村拓夫(・∀・)作品集

頭の中にあるイメージを表現できるデザイン力が欲しいです(><)

学校のプログラミング教育で関数型言語も採用した方が良い理由

日本の義務教育で、将来的にプログラミングの授業が必修化されるそうです。

 

www.yomiuri.co.jp

 

このプロジェクトに関して、タスクのブレークダウンが提言されていました。

 

tonegawa.hatenablog.com

 

1. 各段階での目標整理

2. 単元設計

3. 教材設計

4. 指導者の育成

 

実現するためには、いろんな課題が山積していて、準備が大変そうですね!

 

 

●IT教育の課題

IT教育の課題を考える場合、参考になる提言があります。

 

d.hatena.ne.jp

 

林さんが最近公開した文書「あるソフトウェア工学者の失敗 日本のITは何故弱い」が注目を集めた

林さんのような当代きってのエキスパートが、その経験と知見を真摯に綴った文書

 

↓↓↓

あるソフトウェア工学者の失敗 -日本のITは何故弱いか-(PDF文書)

 

(私の解釈では)この文書で、林晋先生は、

「IT人材を育成するためには、単に教育だけでは不十分であり、

日本社会がITの重要性を理解して、受け入れる体制を整えて行かないとダメ」

と提言されていました。

 

(林晋先生のご提言は、以下の本にも掲載されてます。)

イノベーション政策の科学: SBIRの評価と未来産業の創造

イノベーション政策の科学: SBIRの評価と未来産業の創造

 

 

議論領域を広げ過ぎると、収拾がつかなくなるので、とりあえず、学校教育の部分だけを切り出して、プログラミング教育のあり方を検討してみましょう。

(上記文書の指摘=「教育だけいじってもIT人材育成は困難」を念頭におきつつも。) 

 

 

●英語教育の失敗

日本人は義務教育で一応みんな英語を習うけど、全員ペラペラにはなってないですね?

→この結果は、教師と生徒の双方に問題があるのでしょうが。

 

英語教育の失敗を反面教師として、プログラミング教育はうまく行ってくれたら良いですね?

第2次世界大戦で敗戦した日本は、宗主国たるアメリカ様(GHQ)の下命で、英語を押し付けられたけど、日本で暮らす分には英語ができなくても困らなかった?

 

プログラミングをどうしても学びたいんだ!っていう動機付けを、自発的に生徒に持ってもらうことは可能でしょうか?

→プログラミングができなくても食っていける人たち、困らない人たちばかりであれば、英語教育と同じ末路をたどる予感。。。 

 

 

●プログラミング教育の受益者

さて、日本の義務教育でプログラミング教育の必要性を訴えている人たちは、どんな人たちなのでしょうか!?

 

・子どもからの要望ではなく、IT業界の人材不足を補いたい経済界の要請で導入する。

 →実際に勉強する子どもたちにとっては欲しくないもの、つまらないものになる?

・プログラミングできない役人が、机上の空論でカリキュラムを策定する。

 →ITリテラシーの向上、優秀なエンジニアの育成に役立たない?

…とかだったら、コケる可能性もあって、困りますよね~><

 

せっかく、国家予算(税金)を投入して実施するなら、実りあるプロジェクトになって欲しいですw

 

●カリキュラムの柔軟性

私もプログラミング言語は、BASIC手続き型言語)から始めました。

手続き型は、買い物の指示と同じなので、人間にとって理解しやすいですね?

 

hamamuratakuo.hatenablog.com

 

構造化プログラミングは、手続き型言語の中で、最も基本的なやり方です。

とりあえず、構造化プログラミングの仕組みを理解すれば、すぐにプログラムが作れるようになると思います!

構造化プログラミングは、基本的に動作原理が3個だけなので、使い方は簡単です。

 

教えるプログラミング言語として、とりあえず「とっつきやすい」手続き型言語を採用すれば良いでしょうか?

教育用の手続き型言語なら、日本語のドキュメントも整っている「Ruby」とかが良いでしょうか?

 

何でもいいけど、「大人の都合」で勝手に言語の選択肢を狭めることはしないで欲しいと思います。

Rubyを使いたい生徒がいれば、Rubyを使わせれば良いし、

その他の言語を使いたい生徒がいれば、その他の言語を使わせてあげれば良いでしょう。

あれはダメ、これもダメとか、子どもの意向を無視して、変な縛りを作らないであげて欲しいです。

 

id:hamamuratakuo

プログラミング言語は基礎となる計算モデルによって4種類に分類できます。
分類 / 基礎となる計算モデル / 事例
(1) 手続型言語 / チューリングマシン / C, Java
(2) 問合せ言語 / 関係モデル / SQL
(3) 関数型言語 / ラムダ計算 / Lisp, Haskell
(4) 論理型言語 / 一階述語言語 / Prolog
小学校で(1)、中学校で(2)、高校で(3)(4)をやれば網羅できるでしょうか?
http://hamamuratakuo.hatenablog.com/entry/2015/11/21/123617

 

(一般的に)切り札になるカードを1枚しか持ってない人よりも、たくさん持っている人の方が、困ることが減ります。

同様に、プログラミングでも、必要に応じて道具=言語を使い分けられると便利です。

 

なので、「広く浅く」でも良いから、手続き型言語の1つしか知らないよりも、全部の種類を一応知っておいた方が良いです。

実際に手続き型言語以外でコードを書く機会がなかったとしても、コードを読めたり、エンジニアと話すときに共通知識を持っておくだけでも、メリットはあると思います。

知らなくて損していること、仕組みが分からないブラックボックスが減るので。

 

まあでも、これらの理由だけだと、網羅的に学ぶ理由としては、ちょっと弱いかなー?

 

 

●なぜ、関数型言語を採用するべきなのか?

学校のプログラミングの授業で、関数型言語も扱って欲しいのはなぜか?

 

結論から言うと、

「自分がそういう教育を受けたかった」

という個人的な理由に行き着きましたw

 

…って、ますます説得力がなくなるので、関数型言語を学ぶメリットを検討しましょう。

 

 

●関数型のメリット=副作用がないこと

関数型言語の特徴を一言で言うと、

「副作用」(Side Effect)

がないことです。

この性質によって、コードのテストが簡単になる場合が多いでしょう。

 

togetter.com

 

プログラミングは、楽しいことばかりではなく、つまらないことも多々あります。 

クソつまらないテストを延々とやったり、バグ修正でウンザリする機会が減ると、プログラミングも楽しくなり、モチベーションがアップするのではないか?という“仮説”に基づいて、(多少なりとも楽ができるなら)関数型言語の利用も推奨してみたいです。

 

副作用 (プログラム) - Wikipedia

プログラミングにおける副作用(ふくさよう)とは、ある機能がコンピュータの(論理的な)状態を変化させ、それ以降で得られる結果に影響を与えることをいう。代表的な例は変数への値の代入である。

 

postd.cc

 

関数型コードを特徴づけるのは、「副作用がない」という1点です。

その他の“関数型”なものは、全てこの特性から派生しています。

このことを学習の手がかりにしてください。

 

 

●限られたリソースの有効活用

id:yutatone

id:hamamuratakuo
コメントと参考記事ありがとうございます!
私の記事の 1. 各段階での目標整理 次第かと思っていますが、4種類のプログラミング言語を網羅する必要ってどういった理由になりますか?
学校教育なので、「エンジニア育成」というよりも「基礎教養としてのコンピューター科学」の文脈になるかと予想していて、そうすると 関数型等にはいたらないかなと思っております。

 

(1) 基礎:ITリテラシーを高める → レベル:低

(2) 応用:ITエンジニアを育成する → レベル:高

 

欲張っても仕方ないから、学校でできる範囲(ヒト・モノ・カネ)に絞るとなると、やっぱ、(1)基礎としてのプログラミング=触りだけ、ということになるのでしょうか?

→(2)応用は、学校じゃやってらんない?

 

学校で扱うには厄介な内容だとすれば、その原因を探り、解決策を模索しましょう。

 

 

●関数型は難しいのか?

そもそも論だけど、手続き型言語の方が分かりやすくて、関数型言語の方が分かりにくいという「序列」(?)は、単なる思い込みなのではないでしょうか?

 

ラムダ計算 - Wikipedia

ラムダ計算は1つの変換規則(変数置換)と1つの関数定義規則のみを持つ、最小の(ユニバーサルな)プログラミング言語であるということもできる。ここでいう「ユニバーサルな」とは、全ての計算可能な関数が表現でき正しく評価されるという意味である。これは、ラムダ計算チューリングマシンと等価な数理モデルであることを意味している。チューリングマシンがハードウェア的なモデル化であるのに対し、ラムダ計算はよりソフトウェア的なアプローチをとっている。

 

計算可能性理論的には、本来、手続き型言語チューリングマシン)も、関数型言語ラムダ計算)も等価なモデルなので、実質的にやってることは大差ないはずなんだけど。

 

とはいえ、現実は厳しい!?

Amazonを見てみると、関数型プログラミング言語の参考書は、堅苦しくて、つまらなそうな本ばかりが並んでいますねー。

(常々、この状況はどうにかならんのか!と、ブレークスルーを秘かに期待しているところでもありますw)

 

すごいHaskellたのしく学ぼう!

すごいHaskellたのしく学ぼう!

 

 

↑すごいHaskell本も、フレンドリーなタイトルや表紙とは裏腹に、内容は小難しいことのオンパレードで、正直面白いとは言えませんでした。(涙)

 

関数型言語を教育現場で採用してもらうためには、手続き型言語よりも、分かりやすくて面白い教材が必要になるのでしょう。

 

 

●結論

4種類のプログラミング言語について、それぞれやってみる価値があるなら、

・分かりやすくて、面白い教材

・動機付けが増して、モチベーションがアップする教材

を用意すればOKと。

 

そんな教材の作成に取り組んでみたいと思います。\(^o^)/

(→自分でも、分かりやすくて面白い教科書があったら欲しいと思うしwww)

 

逆に言えば、興味が持てない生徒にまで、無理矢理押し付けるのは酷かもね?

→コンピューターはあくまでも道具に過ぎないから、その中身を知っておくだけでもOK

 

 

学習意欲をデザインする―ARCSモデルによるインストラクショナルデザイン

学習意欲をデザインする―ARCSモデルによるインストラクショナルデザイン

  • 作者: ジョン・M.ケラー,John M. Keller,鈴木克明
  • 出版社/メーカー: 北大路書房
  • 発売日: 2010/07
  • メディア: 単行本
  • 購入: 1人 クリック: 15回
  • この商品を含むブログを見る
 

 

 

 

Perfume / おいしいレシピ

 

傷付くこと恐れたら

隠し味は見つからない

できる限りはチャレンジ

やらないのなら作れないの