コンピュータ科学の扉を探して – 執筆の裏舞台02

01

教職コアカリキュラム対応のテキストの執筆に参加した。その執筆にまつわる裏舞台の第2回。

教職向けテキストでプログラミング教育を扱ったものは多くない。特に単独の章を設けてまで扱ったものは数少ない。あとは部分的に触れるに留めているものがほとんどである。

小学校へのプログラミング体験が導入されたことをきっかけとして、プログラミング教育を題材にした書籍は多々刊行された。それらの中には教員の研修を意識したものもある。

しかし、今回の執筆にあたって、参考・参照すべきものは、慎重に検討する必要があるだろう。

プログラミング教育に関する言説を乱暴に振り返ると、次のようなものが考えられそうだった。

  • 情報処理・計算機科学分野のもとで展開するプログラミング教育
  • 大学におけるプログラミング教育
  • MITの取り組みを源流とするプログラミング教育
  • パーソナルコンピュータブームにともなうプログラミング教育
  • ネットワークとフリーソフトの文脈におけるプログラミング教育
  • 中等学校段階におけるプログラミング教育
  • モバイルデバイス時代のプログラミング教育
  • STEM・Makers教育の文脈におけるプログラミング教育
  • 小学校におけるプログラミング教育
  • AI時代のプログラミング教育

プログラミング教育というよりも、そのときどきのプログラミング学習の動きを捉えた部分もある。たとえば、パソコンブームの際に子どもたちがBASIC言語などを触れたり習得したりした文化が存在したが、これはある種の学習活動だったし、そこにプログラミング教育的な言説が成立していたと考えられる。

さて、先達原稿は、どちらもSTEM・Makers教育の文脈や小学校におけるプログラミング教育の導入あたりを射程にして執筆されたことがわかる。これは時節を反映した原稿としては当然だっただろう。

確かに文部科学省「小学校プログラミング教育の手引」を無視することができないとはいえ、私たちはこれを乗り越えるためにも参照範囲を拡げる必要がある。

板垣原稿がそうしていたように、中等教育におけるプログラミング教育の言説を参照することは大事なのかも知れない。

「プログラミング的思考」なる用語において強調される「順次」「分岐」「反復」は、すでに中学校で扱われていることを根拠に引っ張ってきているところもあるし、共通教科「情報」に至るまでの高等学校情報科にも様々な蓄積がある。

たとえば、情報科教育に関しては次のような文献がある。

現行学習指導要領を対象としたものはこの3冊になる。また、旧学習指導要領を対象とした文献が他にも流通しているので適宜参照してもよいだろう。

高等学校情報科に関する書籍は、情報科学分野の執筆者が関わっている率が高く、そういう意味ではプロパーによるプログラミングの言説が読めるのではないかと期待された。

しかし、「プログラミングとは何か?」という問いを解消するには至らなかった。

誤解無きよう、これらの文献がプログラミングについて書いていないというわけではない。

どちらかといえば、プログラムやプログラミングについて丁寧に解説をしてくれている。モデル化とシミュレーションも扱っている。アルゴリズムとプログラミング指導のポイントさえ載っている。

にもかかわらず、そこには学習指導要領をがっちりと意識した縛りのようなものが敷き詰められており、それに沿うように専門知識が展開してしまっていた。

おそらく私が「プログラミングとは何か」という問いでみつけたいのは、プロパーの人々が素でプログラミングを語っている様子なのだ。その語りの印象をうまく翻訳して原稿に載せたいと考えている。

高等学校情報科について理解するには意義ある文献たちだけれども、そもそもの原点を知るためには、もっと源流に近づく必要がありそうだった。

つまり、コンピュータ科学の扉を探してまわることだ。

読んでいるあなたは、少し呆れ始めているかも知れない。

教職課程向けテキストのプログラミング教育を扱う原稿で、こんな回りくどいことをする必要があるのかと。

あらかじめ断っておけば、行きつく先に意外な答えはない。

回りくどいことをしてもしなくても、おそらく出来上がる原稿に違いはない。

それでも、コンピュータ科学の扉を探して覗き込もうとする必要があると考えているのは、プログラミング教育の領域で出会った方々を理解したいという欲求があるからだ。

たとえば、Scratchの日本での普及に伴走している阿部和広先生や、Viscuit開発者である原田康徳先生と、直接お話した経験がある。ご両人ともソフトウェア工学やコンピュータ科学の専門家であり、様々な語りや記述の端々に、そうした専門性がにじみ出ているのを感じられる。

文系起点の学際学徒である私からすると、同じコンピュータを語るにしてもその方々との大きな差を感じずにはいられない。

埋められる差ではないが、埋める努力をすることが誠実な向き合い方だと思う。

プログラミング教育に関する原稿に携わるのであれば、コンピュータ科学について自分なりにでも探索を経ておかなければ、記述の強度は保てない。

無駄な我流に過ぎるが、そういう流儀で原稿執筆の準備をした。

とはいえ、「プログラミングとは何か」をコンピュータ科学関連の文献に尋ねるのは、また違った難しさにぶつかることになった。

コンピュータ科学の世界で、プログラミングとは何かという素朴な問いに答える意味がないからである。

そりゃプログラムをつくることでしょう…と。

プログラミング(Programming)とは,いうまでもなくプロムグラム(program)を作成することである.そして現実世界におけるプログラムは,まとめられてソフトウェアとなり,コンピュータ(電子計算機)をただの電子部品の集合体から,きわめて強力で高速な情報処理システムへと変身させる.

プログラミングの方法 – 岩波講座ソフトウェア科学』(岩波書店)まえがき

プロセッサが計算機のときには,アルゴリズムはプログラム(program)と呼ばれる形で表わされる.プログラムはプログラム言語(programming language)で書かれる.また,アルゴリズムをプログラムとして表現することをプログラミング(programming)という.

計算機科学入門〔第2版〕』(近代科学社)7頁

プログラミング(programming)とはプログラム法,あるいはプログラムするということである.何をどうプログラムするのか,それが問われる.

コンピュータサイエンス入門(第1版)』(サイエンス社)100頁

定義的な説明としては、これらの引用に準ずることで十分だろうと思う。

語用的な理解としては、まだこれだけでは不十分である。プログラミングに対してどのような解釈の幅があるのかを理解するには、もっと渉猟する必要がある。

そんなことを思いながら紐解いていたのは、竹内先生と玉井先生の著書だった。

この2冊は、専門家の立場からプログラミングやソフトウェアの世界に誘ってくれる貴重な著作である。

「ソフトウェア」などの言葉の語源といったところから興味深い話を展開している。

プログラミングについて…

プログラムとプログラミングの違い
 どっちも同じようなものだと言わないでください.名詞としてのプログラムとプログラミングには,楽譜と作曲ぐらいの違いがあります.

『プログラミング道への招待』(丸善出版)55頁

プログラミングとは、プログラミング言語という人工言語でプログラムを記述するという仕事である。だからその作業は、小説や詩や論文や戯曲を書くという言語による創作行為と似ている面がある。

『ソフトウェア社会のゆくえ』(岩波書店)17頁

どちらも創作的なイメージを用いて、ずいぶんと一般向けにかみ砕いている印象に読めるかも知れないが、これらの記述以降もプログラミングとプログラム(ソフトウェア)に関する興味深い記述が続いている。

文芸(芸術)としてのプログラミングやプログラミングの美学といった話題に至ると、これはもうプログラミング教育の範疇を越えてしまいそうだけれども(その文脈に構造的プログラミングの話もあるけれども),こうした景色の存在を意識しながら、そろそろ出発点に戻った方がよさそうだ

「プログラミングとは何か」という問いを設定したところまで戻り,一旦それを置いておくことにしよう。

プログラムとは何か、プログラミング言語とは何か、コンピュータとは何か…などなど。

こうして広がっていく問いを包括するであろうコンピュータ科学全般について、これを読み手に意識化させることが大事なのだろうという思いが強くなった。

第14章の最初のページで「コンピューテーショナル」(Computational)、続くページで「コンピューティング」(Computing)という用語をあらためて持ち出したのは、こうした回り道の結果である。

学びを育む 教育の方法・技術とICT活用』(北大路書房)は全国の書店からも注文できますし、オンライン書店でもご購入いただけます。

第14章の執筆にまつわる裏話はまだまだ続きます。

プログラミングとはなんだ! – 執筆の裏舞台01

昨年末(ほぼ今年)発刊された教科書の執筆に参加した。

副題にあるように教育工学と教育心理学の分野の執筆陣によって生まれた教職コアカリキュラムに対応した教職課程向けテキストである。想定読者は大学院生や現職教員も含んでいるので、内容は歯ごたえのあるものになっている。

私は、第14章を担当した。

当初受け取った依頼は「プログラミング的思考の育成を考える」という章題だった。

プログラミング的思考…私の嫌いな用語だ。(Inspired by リュグナー)

最初は引き受けるべきかどうかも少し悩んだ。嫌いだと公言しておきながら、その言葉を使わざるを得ない原稿を引き受けることは、主義主張に反していないか。

とはいえ、教科書執筆に参加できることは栄誉なことでもある。声をかけてくれたなら「こいつならできるだろう」という期待もちょっとはあっただろう。応えられるあてはないにしても引き受けない選択肢もない。

私は「プログラミング的思考」と真正面から闘うことにした。

まずは類似の試みを参照し、この手の原稿に求められているものをどう設定しているのか理解することから始めることにした。少し好戦的な言葉だが「敵情視察」というヤツである。

その当時、教職コアカリキュラムへの対応をうたったテキストとして次のようなものが発刊されていた。

プログラミング教育について単独の章を立てているのは、この2冊であった。前者は、石塚丈晴「第13章 プログラミング教育」。後者は、板垣翔大「第17章 プログラミング教育で育てる資質・能力」である。

先達が心血注いだ仕事をまな板の上に載せるのは本位ではないが、これらの成果を乗り越える気概をもって取りかかろうとすることは大事だろう。両原稿がどこまで到達したのかは見極めなければならない。

2019年発刊の石塚原稿は、執筆時期的には小学校へのプログラミング体験の導入が決まってしばらくの頃だったこともあるだろう、プログラミング教育導入の経緯と、諸外国の事例としてイングランドの教科Computingについて具体的に紹介をする流れを取っている。後半は学習指導要領におけるプログラミングの位置付けについて「プログラミング的思考」に触れつつ、「小学校プログラミング教育の手引 第二版」を参照しながら第5学年算数における例や低学年向けの活動案などを示したものになっている。

2021年発刊の板垣原稿は、限られた紙数の中でまとめる困難さもあっただろう。コンパクトにまとめるため、プログラミング教育の必要性から始めて、「小学校プログラミング教育の手引 第三版」を参照して、「プログラミング的思考」やA〜Fに分類されたプログラミングに関する学習活動を紹介しつつ、第5学年算数の例を示している。後半は駆け足でプログラミング言語と「プログラミングの3要素」として順次、反復、分岐の考えを図で示し、最後に中学校・高等学校のプログラミング教育とのつながりで情報活用能力を意識させている。

両原稿とも、時節における状況を的確に反映した内容だと思う。

なにより、この手の原稿のひな型が無い、ゼロの状態の中で形を作り上げられた点は敬意を表せざるを得ない。おかげで後続の私たちは、乗り越えるべきものを手にすることができているのだから。感謝感謝。

さて、私はどんなアプローチをとるべきだろう。

先達を参照したのち、私は再び「プログラミング的思考」の扱いをどうするか考え始めた。

私はすでに「アブダクション習得としてのプログラミング教育の検討」という研究報告の中で、プログラミング的思考の育成なるものと格闘していた。その経験をベースに、何かうまい扱い方はないものか考えつづけた。

一方で、コンピュテーショナルシンキング(Computational Thinking)を原稿の中で扱うことは決めていたわけで、このままだと、プログラミング的思考とコンピュテーショナルシンキングが同じ原稿で同居しているにもかかわらず、両者の関係性を明確にするロジックが無いままになっしまう。

最初のうちは「プログラミング的思考」という文言を排除しようかとさえ考えていた。しかし、教科書である手前、それをするのは非現実的だ。とはいえ、論理的思考の角度から考えた先の論考をもとに「プログラミング的思考とはアブダクティブな思考のことだ」と唱えるのも、プログラミングが捨象されてしまう。

執筆の素材となる断片を集める作業と並行して、プログラミング的思考とコンピュテーショナルシンキングとの折り合いをつけるための枠組みと表現を模索しつづけていた、ある時、開き直りが降りてきた。

小学校段階は、プログラミング教育ではなくプログラミング体験をさせるといった語られ方もされるし、また、論理的思考という従前から重視されてきたものを今日的な社会課題のもとプログラミング的思考という言葉を使って再認識させたがっている。

こうした一連の言説が捕らわれているものは何か。逆に言えば、何を語るにしてもそこに捕らわれることによって今日的な議論の俎上に載せていることになるに過ぎないものとは何か。

それさえまぶせば、それなりであるもの。かつ、それをまぶすことに意味があること。

それは「プログラミング」ではないのか。

プログラミング?!…なんという堂々巡りだろう。そんなことはあらためて言うまでもないことではないか。私の心の中にだって、そう嘲り笑う影がいる。

けれども、そういうことなのだ。私はこの表現を中心に据えることにした。

プログラミングを視座とする思考/思考力

『学びを育む 教育の方法・技術とICT活用』195頁

斯くして、第14章は「プログラミングを視座とする思考力の育成を考える」という章題にすることを決めた。この言葉さえ掴まえておけば、あとは素材を揃えて、どう料理するかを考えればいい。

先達はプログラミング教育の導入経緯や必要を説くことから始めたが、私たちはそこから一歩前に進めて、プログラミングというものの重要性を認識することからスタートすべきだろうと考えた。

そうなのだ。プログラミング的思考やコンピュテーショナルシンキングが注目されていることを強調する言説は溢れているものの、そもそもプログラミングとは何かを考える機会はほとんどない。

私とて、プログラミングのささやかな経験はあるが、その言葉を深掘りしたことがあるほどプロパーではない。ここから「プログラミングとは何ぞや」という問いを抱きながら文献を漁り始める日々が始まった。

学びを育む 教育の方法・技術とICT活用』(北大路書房)は全国の書店からも注文できますし、オンライン書店でもご購入いただけます。

第14章の執筆にまつわる裏話の続きは、またそのうち。

謹賀新年 2024

明けましておめでとうございます。

2024年は、りん研究室にとって新しい門出の年となります。

本年もどうぞよろしくお願いします。

2024年 元旦

ゆく年 2023

2023年中は大変お世話になりました。

生成AIに明けて暮れる2023年でしたね。りん研究室も、関係する原稿を執筆する機会などがありました。

日常的には、検索するための予備的準備のツールとしてChatGPTを利用するようになり、プログラミングではGitHub Copilotなどがかなり役立ってくれています。

2023年はコロナ禍明けのタイミングともなりました。社会経済活動もずいぶんと以前のように自由が利くようになってきました。それはよかったなぁと思います。

様々なことが元に戻り始めてはいるものの、さて、また同じ場所に戻るべきなのか。いやいや、生成AIひとつとってもかなりの変化。ずいぶんといろんなことが変わっていますから、戻りようもない。

というわけで、間もなくりん研究室は、徳島時代に区切りをつけます。

徳島時代にお世話になった皆様にあらためて感謝申し上げます。

それではよいお年をお迎えください。

ICカードとクラウドをScratchで

2023年も残り僅かな時期となりましたが、私自身はここしばらく、プログラミング環境であるScratch3.0向けに開発した拡張機能を更新する作業をしていました。プログラミング環境のためのプログラミングというちょっと面白い作業です。

更新したのはScratchからICカードリーダーを使える拡張機能と、クラウドにデータを保存できる拡張機能です。前者を「パソリッチ」(PaSoRich)、後者を「ナンバーバンク」(NumberBank)と名付けています。

2つの拡張機能は、やりたかったことを実現するために突貫的に開発したものでした。

そのため、複雑なことに利用しようとすると、いろいろと機能不足や安定性に欠けるところがあり、多くの皆さんに使ってもらう水準には達していなかったというのが正直なところでした。

ずっと改修する機会をうかがっていたのですが、本業やら状況やらが目まぐるしかったこともあり、なかなか作業に取りかかれずに放置した状態となっていました。

そして、今回、その機会がやってきたというわけです。しかも、2023年は生成AI元年ともいうべき年であり、プログラミング作業においても生成AI技術が支援してくれるようになったことで、拡張機能の改修作業も効率的に達成することが可能となりました。

というわけで、2つの拡張機能は揃ってバージョン2.0にアップすることとなりました。

パソリッチは、ソニー社製ICカードリーダーPaSoRiをScratch3.0環境から操作して、ICカードのIDm(識別番号)を読み取ることができます。(※書き込みはできません)

ICカードのIDmを読み取れると何が嬉しいのでしょうか。

IDmごとに異なる表示や動きなどを実行できるようになります。つまり、かざしたカードによってプログラムの処理を変えることができるということです。電子マネーや会員カードのようなものがつくれます。

今回の2.0では…

  • 新しい型番のICカードリーダーに対応した
  • ICカードリーダーを複数接続して利用できるようになった
  • カードの読み取りに反応するブロックが利用できるようになった
  • デバイスのリセットができるようになった
  • 安定性を向上させた

などの改善改良を施しました。

開発した時点で対応していたPaSoRi(ICカードリーダー)は当時販売されていたRC-S380という型番のみでした。それが2年前(2021年)に新たな型番RC-S300に販売製品が置き換えられたため、新たに拡張機能を利用したいと思った方々が対応カードリーダーを入手できない状態になっていました。

新しい型番への対応は、挑戦してくださる利用者を増やすためにも重要な課題だったので、今回のバージョンアップで達成できたのはよかったです。

さらに、複数のICカードリーダーを接続したときや複数のプロジェクトからICカードを利用するときに生ずる様々な課題についても今回の更新作業で対応を試みました。

ナンバーバンクは、Scratchプロジェクトで扱っているデータをクラウド上のデータベースに保管することができます。Scratchの公式サイトで提供されているクラウド変数のようなものです。

クラウド上に保管できると何ができるのでしょうか。

プロジェクトで使っていたデータを、終了したあとでも後日再利用することができたり、他の人たちのプロジェクトと共有することができます。データの受け渡しで通信するようなこともできます。

今回の2.0では…

  • 動作の安定性と信頼性の向上
  • データの書き込みが発生したら反応するブロックが利用できるようになった

などの改良改善を行ないました。

ナンバーバンクは、Firebaseというサービスのデータベース機能を利用しています。このサービスを自分自身で登録してデータ保存に利用することもできます。

これまで、単純素朴なデータ保存で利用する分には問題はなかったのですが、連続して頻繁にデータ保存の処理を実行しようとすると呼び出しのコンフリクトや安定性に欠けていたのです。これを内部設計を見直して、発生した処理をこなせるように改修しました。

また、クラウド上にデータを読み書きできるのですが、クラウド上のデータが書き込まれたタイミングを確認する方法がありませんでした。今回、特定の保管場所に書き込みが発生したら反応するハットブロックというものを追加しました。データの共有や受け渡しをする際に便利です。

ちなみに、先ほど書いた「Firebaseを自分自身で登録して…」という話は、自分自身でFirebaseサービスに登録して作成したデータベースのAPIキーを預けて、マスターキーを介して利用できるようにするMasterkeyBankという仕組みが用意されています。

これら2つの拡張機能を利用したい場合、すでに用意されている環境を利用するのが便利です。

ストレッチ3(Stretch3)環境は、豊富な拡張機能を用意してくれているScratch3.0環境で、利用者も多い人気のサイトです。他の拡張機能とも連携させながら挑戦してみてください。

なお、これらはSC2Scratchというサイトで情報をご紹介していますが、新しいバージョンを提供できるようになったので、対応した情報を更新する作業はこれから本格的に取りかかります。説明不足なところが多いかとは思いますが、いろいろ自由に試行錯誤して利用してみてください。