ホチキス先生の「プログラマーと呼ばれたい」

InfoPath & SQL Server !

Archive for the ‘プログラミング教育’ Category

Amazon で BBC Micro:bit を注文した

leave a comment »

本家、英BBCの Micro:bit を使ってみたいと思い Amazon で検索するとバルク品の英BBC Micro:bit がいくつかの業者から売られていることがわかった。

BBC_Microbit_Amazon_mid_640.png

リテール BOX と書かれた箱入りの英 BBC Micro:bit はおよそ 3,000円。それ以外にバルク品と書かれたものが、およそ 2千百円台からある。今回は試しにバルク品で 2,160円のものを発注した。アマゾン Prime 対応でクリスマスイブまでには届くようになっている。

Microbit_bulk_Amazon_mid_640.png

英 BBC 本家の Micro:bit がスイッチサイエンス社の Micro:bit と違いがあるのか、興味深い。

広告

Written by Yoshio Matsumoto

2018年12月22日 at 11:07 PM

ほっともっとで弁当を注文しながら「ソフトウエア職人気質」の一節を思い出す

leave a comment »

P1690034_mid_640_480

ピート・マクブリーン Pete McBreen 著、村上雅章訳でピアソン・エデュケーションから Professional Computing Series の別巻7として出版された「ソフトウエア職人気質 Software Craftsmanship – The New Imperative」は2002年3月の出版であり、もはや16年前の書籍になるが、いま読んでも示唆に富む本だ。このことは逆に日本のソフトウエア産業が足踏みしたままであることも示している。情報教育、プログラミング教育に携わりながら教務システムの内製を経験した私は、常にプログラミングと価値の創造について考えているが、今日たまたま近所のほっともっとで昼食の弁当を買いに行ったとき、レジでの注文のあとぼんやりと弁当が出来上がるのを待ちながらこの本の一節を思いだした。

P1690038_mid_640_480

いま年の瀬も押し迫った12月末だが、たとえば客に「年末年始の営業日はいつもと同じか」と聞かれたとしよう。「少々お待ちください」と言いスケジュール表を見るようでは優れたレジ係とは言えない。この時期だから、もしかしたら客からこのような質問があるかもしれないと思い、あらかじめ店舗スケジュールを頭に入れておくはずだ。そうすれば即座に返答ができるだろう。レジ係は客の注文を受け、代金をもらい、厨房に注文を出し、できた弁当を客に渡すという仕事だが、このルーチンだけできればいいというものではない。

「ソフトウエア職人気質」には「顧客の利益はソフトウエア職人の利益と一致する」の節があり、こう書かれている。「顧客は、優れたソフトウエアを望んでいます。そしてソフトウエア職人は、誇りに思え、自分の評判を支える優れたソフトウエアを作り出したいと考えています。こういった相互利益の一致によって、顧客とソフトウエア職人のより良い関係を築き上げることができるわけです。」

優れたレジ係の利益は客の利益と一致する。ソフトウエア開発者があらかじめ調整された仕様書だけを頼りにして開発する時代が終わったように、レジ係もマニュアル通りの注文、集金業務だけしていればよい時代も終わったのだろう、などとぼんやり思う年の瀬である。

プログラミングせずにプログラミング思考が身に着くはずがない – 「プログラミング思考」という言葉のまやかし – Visual Studio を使った C# プログラミングは最高の学習環境である。

leave a comment »

「情報教育」や「プログラミング教育」という言葉が表に出るたびに本質を捻じ曲げる言葉が作り出される。その理由は明らかだ。コンピュータのことを知らない人間が「情報教育」を語るとき、「情報教育はコンピュータを教えるものではない」と言い、プログラミングを知らない人間が「プログラミングができなくてもプログラミング思考を身に着けることができる」と言う。この二つの理由の根は同じだ。

たとえばこのように言ってみよう。「英語で話ができなくても英語的思考を身に着けることができる」「足し算引き算ができなくても数学的思考を身に着けることができる」「電池を豆電球につなぎ光らせることができなくても理科的思考を身に着けることができる」「楽器を何も弾くことができなくても音楽的思考を身に着けることができる」

もうこれでいいだろう。

つまり、「プログラミングができる」ということは「プログラミング思考」を養う基本的な一歩なのだ。

しかし、このことは当然、実用的なアプリケーションを完成させるまでのプログラミング力を養う必要はない、ということも真実である。またどのような言語を使うかも、学習者のレベルにあわせて選択すべきであろう。学習ツールとしてのプレアットフォームも同様だ。

小学生ならブロック型のプログラミング言語を使うことがいいだろう。そしてブロックの背後にはコードがあることを体験させる。中学生程度なら多くの学校で実践されているエクセルのマクロ、VBA を使うのもいいだろう。厳密に言えばエクセルのマクロはプログラミングではなく、エクセルというアプリケーションソフトの「オートメーション」だ。しかしエクセルのマクロには学習者にとってたいへん有効な、マクロの自動記録の機能がある。マクロの記録をしながら画面を操作すると、操作の手順がマクロとして記録される。このコードを元にして応用、発展させることで、マクロの自学自習ができる。

高校生では本格的なプログラミングを学習させるべきだ。高校生には実際に社会で使われているアプリケーションやプラットフォームを使って実習をさせるべきである。筆者は20年も前に高等学校でマルチメディアデザインの授業を始めたが、当時いくつかあった安価な画像編集ソフトを使わず、Adobe の Photoshop を使った。

新しい技術の概念はツールに表現されている。適切なツールを使うことで新しい技術概念を正しく身に着けることができる。技術とツールは不可分である。

どの言語を使ってプログラミング教育をしていい。とならば、Visual Studio を使った C# プログラミングは大きな選択肢の一つである以上に、コンピュータの OS が Windows であるならば、最も開発環境を整えやすく、実社会で使われており、効率よく、単純なものから高機能なものまで作ることができ、データベースやネットワークの実習ができるアプリケーションも簡単に作ることができ、しかも書店に行けば初心者から上級者まで様々な解説書が手に入る、Visual Studio と C# の組み合わせは最高の選択肢だといえる。

2018年10月10日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部制単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。2015年から2017年まで兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行い、現在は兵庫県立神戸甲北高等学校に勤務する。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在15回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞し、現在4回目の連続受賞。

Micro:bit の電源に使えるんじゃないか – スイッチ付きの CR2032 ボタン電池バッテリーホルダー

leave a comment »

Micro:bit 関連の拡張デバイスがいろいろと発売されており、単体での実習だけでなく様々な応用が簡単にできるようになり、Micro:bit をさらに楽しめるようになった。ただそれらの拡張デバイスは、一つ一つはそれほど高いものではないが、実習に使うとなれば 20個、40個と数をそろえなければならず、結果として合計金額は決して安くはない。

Micro:bit は USB で給電することができるので、スマートフォン用のモバイルバッテリーを使うことができる。また筆者は高校の授業で Micro:bit や Arduino を使うとき、百均で買った乾電池の USB モバイル給電アダプターを使っている。

もし Micro:bit をウエアラブルに使うことを考えると、たとえばバッチのように胸に着けて LED を光らせるようなことを考えたとき、ボタン電池を使うとうまくいくだろう。そこで目を付けたのがこれだ。

button_battery_holder_CR2032_mid_640

これは CR2032 ボタン電池を 2個装填し、6V出力するバッテリーホルダーだ。このホルダーのいいところは、スイッチもついているところだ。もし工作で Micro:bit 給電ユニットを作ろうと思うと、乾電池ホルダーとスイッチは必須であるので、このホルダーを使うと手軽に作ることができそうだ。

あとは基板と Micro:bit の接続をどう工夫するか、基板の大きさ、部品の配置、ネジ穴の位置、ボルトとナットの選択、などを考える。

2018年9月4日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部制単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。2015年から2017年まで兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行い、現在は兵庫県立神戸甲北高等学校に勤務する。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在15回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞し、現在4回目の連続受賞。

Written by Yoshio Matsumoto

2018年9月4日 at 3:37 PM

Micro:bit の学習用拡張実験モジュールを作る – CR2024 ボタン電池による給電と外部 LED のコントロールボード

leave a comment »

Micro:bit は本体に LED 表示機能を有し、加速度センサや磁気センサ、CPU の温度測定機能を利用した温度センサ機能、LED を照度センサとして利用できるなど、他のマイコンボードとは違い単体で様々な実験ができるところが特徴だ。さらに Micro:bit によるプログラミング実習を、外部 LED のコントロールやウエアラブルに使うことを考え、拡張ボードを作っている。

P1950915_Microbit_module_mid_640

市販のフレキシブル基板を使い、Micro:bit にあわせて穴を開ける。CR2032 ボタン電池ホルダーと接続ケーブル、赤、緑、青の LED を取り付ける。まだプロトタイプなので抵抗など必要な部品の全ては配置できていない。

Micro:bit 本体とは距離をあけて取り付けなければならないので、プラスチックのスペーサーを使う。

P1950917_Microbit_Bolt_mid_640

P1950918_Microbit_Module_Attach_mid_640

ここで問題点がひとつある。それは Micro:bit をボルトとナットで止めるときに、隣の I/O ピント接触してしいそうなところだ。

P1950922_Microbit_Module_Bolt_mid_640

なぜいま少し、1mm でも内側に穴を配置してくれていればこのような問題はおこらなかったのに、と設計者に恨みを言いたくもなるが、Micro:bit はこのような設計であり、ボルトには頭の下側が斜めになった「皿ネジ」を使うことが推奨されている。しかし皿ネジは見た目が悪く、安定感に欠けるのでできれば使いたくない。このあたりはどう解決するか試行錯誤している。

P1950925_Microbit_Battery_Connector_mid_640

給電コネクタ部分はこのようになる。あえてスイッチを設けず、コネクタを付け外すことでスイッチとするシンプルな構造とした。

P1950920_Microbit_Module_Attach_Overview_mid_640

2018年4月18日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部制単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。2015年から2017年まで兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行い、現在は兵庫県立神戸甲北高等学校に勤務する。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在15回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞し、現在4回目の連続受賞。

10分でわかる – Visual Studio と C# で理解するオブジェクト指向プログラミング

leave a comment »

オブジェクト指向は現代プログラミングにおいては強力な手法だが、高度に抽象化された概念を伴うため理解するには適切な学習と訓練が必要である。そこで Visual Studio 2017 を使った C# プログラミングにより、具体的な例をあげて、オブジェクト指向を説明してみよう。

たとえばフォーム上にボタンがあり、ボタンの大きさをスライダの操作によって変化させるようなプログラムを考えよう。Visual Studio ならツールボックスにボタンコントロールとトラックバーが用意されているので、マウス操作だけでフォーム上に配置することができる。

OOP_001

OOP_002

トラックバーで変化させる値の範囲を、0から300にしよう。それには作成した trackBar1 のプロパティをプロパティウィンドウで変更する。Minimum の値は 0 のまま、Maximum の値を 300 に変更する。

OOP_003

次にトラックバーをマウスでダブルクリックし、トラックバーのスクロールイベントを作成する。ここに次のコードを書こう。これはオブジェクト指向ではないプログラミングの例だ。

————————————————————————————–

button1.Height = trackBar1.Value;
button1.Width = trackBar1.Value;

————————————————————————————–

OOP_004

ビルドして実行する。すると、スクロールバーを動かすことでボタンの高さの値と幅の値がスクロールバーの値になるので、大きさが変化する。ちゃんと動くプログラムができる。

OOP_005

OOP_006

OOP_007

フォームの大きさに対して 300 というボタンのサイズは大きすぎるので、スライダを右端によせればボタンがフォームからはみ出すようになる。

では、ここからだ。

スライダの値範囲は 0 ~ 300 のままとし、スライダを操作してもボタンのサイズが 100 ~ 200 の範囲に留まるようにプログラムを書き換えよう。if 文を知っていれば、たいてい次のようにコードを書くだろう。

————————————————————————————–

if (trackBar1.Value > 100 && trackBar1.Value < 200)
{
button1.Height = trackBar1.Value;
button1.Width = trackBar1.Value;
}

————————————————————————————–

OOP_008

もちろん、これで求める動作をするアプリケーションが得られる。しかし、オブジェクト指向では、こう考える。ボタンのサイズが 100 から 200 の範囲に留まるのは操作をする側で調節するのではなく、ボタン自体の性質にするべきだと考える。サイズを 100 以下にする指示や 200 以上にする指示を無視するように実装するのだ。

ではオブジェクト指向でやってみよう。

それにはもともと用意されたボタンオブジェクトに変更を加える必要がある。そこでオブジェクト指向の「継承」という概念を用いる。「継承」は、あるオブジェクトの性質を引き継ぐ別のオブジェクトを作る方法である。次のコードでは「継承」を利用して custumButton のオブジェクトを作っている。

————————————————————————————–

class CustomButton : Button
{

}

————————————————————————————–

そして Form1 クラスに myCustomButton の名前で CustomButton オブジェクトを作り、フォームの Load イベントで myCustomButton のインスタンスを生成してフォームに表示する。

————————————————————————————–

CustomButton myCustomButton;

————————————————————————————–

myCustomButton = new CustomButton();
this.Controls.Add(myCustomButton);

————————————————————————————–

OOP_009

この状態でビルドすると、フォームの左上にボタンができているが、これは Button オブジェクトを継承して作った CustomButton である。ただ、この CustomButton には何もコードを付け加えていないので、このままでは単なるボタンと同じである。

OOP_010

次に、この CustomButton に自分のサイズを変更するメソッドを定義する。こんなかんじだ。

————————————————————————————–

public void changeSize(int x)
{
this.Height = x;
this.Width = x;
}

————————————————————————————–

これにより CustomButton オブジェクトは changeSize メソッドを持つことになり、myCustomButton.changeSize(100) のようにしてサイズを変更できるようになる。

ここでさらに、ボタンのサイズを 100 ~ 200 に限定するため、次のようにコードを書き加える。

————————————————————————————–

public void changeSize(int x)
{
if (x > 100 && x < 200)
{
this.Height = x;
this.Width = x;
}
}

————————————————————————————–

このことにより、ボタン自身がサイズの変更を 100 ~ 200 の場合のみ受け付けるようになる。トラックバーのスクロールイベントには次のようなコードを書く。

————————————————————————————–

myCustomButton.changeSize(trackBar1.Value);

————————————————————————————–

OOP_011

OOP_012

OOP_013

OOP_014

これにより、ボタンのサイズを変更するプログラムは、全体のコードでは changeSize メソッドを利用して「大きさ変われ」と指示を出し、それを受けたカスタムボタンオブジェクト自身が指示通り動くかどうかを判断して動くようになる。カスタムボタンは 100 ~ 200 の値しか受け付けないので、それ以外の指示を出しても無視する挙動をする。オブジェクトにふるまいを実装することで、値の指示範囲を主プログラム側で気にする必要がなくなるのだ。

さらに CustomButton クラスの記述を分離コードの Form1.Designer.cs に移動すると、プログラム全体はより見やすくなる。

OOP_015

OOP_016

さらに c# には、オーバーロードという概念があり、同じ名前のメソッドでも引数の型が異なれば重複して実装することができる。たとえばこのカスタムボタンに、サイズが 150 × 150 の決まった「mid」サイズの定義があるとして、それを次のように定義することができる。

————————————————————————————–

public void changeSize(string x)
{
this.Height = 150;
this.Width = 150;
}

————————————————————————————–

OOP_017

全体のコードでは、数値で大きさを変える changeSize メソッドと同じ名前でカスタムボタンに「ミッドサイズになれ」と指示を出すことができる。

————————————————————————————–

myCustomButton.changeSize(“mid”);

————————————————————————————–

新しくフォームに作ったボタンをクリックして「ミッドサイズ」にするコードは次の通りだ。

————————————————————————————–

OOP_018

このようにオブジェクト指向プログラミングでは「ふるまい」をオブジェクトの側に実装し、全体のプログラムからは

180 × 180 の大きさになれ

myCustomButton.changeSize(180);

ミッドサイズの大きさになれ

myCustomButton.changeSize(“mid”);

といった指示を出すように書くことができるようになる。このことでオブジェクトのふるまいがオブジェクト自身に記述され、プログラム全体が見やすく、また合理的にコントロールできるようになる。

2018年3月8日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部制単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。現在は兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行う。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在14回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞し、現在3回目の連続受賞。

小学校の先生はオブジェクト指向を知らなくてよいか – 高度な領域を知ることで教え方も変わる

leave a comment »

プログラミング教育において「オブジェクト指向」を学ぶことは重要だが、もちろん小学生にオブジェクト指向を教えろと言っているのではない。もちろん将来的に小学校のプログラミング教育にオブジェクト指向が取り入れられることになれば、それは歓迎すべきことだが、今すぐそうはならないだろう。また近い将来にオブジェクト指向ではない別のアプローチがプログラミングの主流になるかもしれない。ただ、現代プログラミングにおいてはオブジェクト指向は強力な手法であり、およそ個人レベルで使われるアプリケーションのほとんどがオブジェクト指向によって作られているといえる。このことから高等学校レベルではオブジェクト指向を身につけることをプログラミング教育の目標のひとつにしたい。

発達段階に応じたプログラミング教育を考えたとき、小学校では手続き型のプログラミングに留めるべきだろう。またキーボードから文字入力をするコーディングではなく、ブロックを視覚的に組み合わせてプログラムを作る、いわゆる「ブロック型」の開発環境が望ましいだろう。そして構造化プログラミングとしてまとめられる「順次構造、繰り返し構造、条件分岐」を理解しプログラミングができること、センサやアクチュエータをマイコンボードやロボットで制御し、入出力を体験的に理解し活用できること、などが目標になるだろう。では小学校の先生はオブジェクト指向を知らなくてよいのかといえば、そうではない。小学校の先生もオブジェクト指向を理解するべきである。

オブジェクト指向は高度に抽象化されたプログラミング手法である。中学校、高等学校と発達段階がすすむにつれ、どこかの段階で身につけさせたい概念である。小学校の授業では教えなくても、これを知っているのと知らないのとでは教材の作り方や教え方が違ってくるだろう。

たとえば数学なら、中学校では連立方程式を学習する。よくある問題として「予算が290円あります。鉛筆は1本30円、消しゴムは1個50円です。予算を全部使って7人に渡すには、鉛筆と消しゴムをそれぞれ何個ずつ買えるでしょう。」がある。中学校の数学では、鉛筆を x 本、消しゴムを y 個として連立方程式を作って求めるだろう。小学生にとって連立方程式は抽象化度が高いので学ばないが、小学校6年生では「文字と式」の単元で数字を○や□にあてはめた計算方法を学習する。また「鉛筆を1本だけ買った場合、2本買った場合、3本買った場合・・・」と実際の数をあてはめながら答えを求めることもさせる。そしてこれは、中学校で連立方程式を学ぶ前段階として位置づけられている。もちろん教師は中学校では連立方程式を学習することを知っており、それを前提に授業を組み立てる。学問は系統だっており、学習も発達段階に応じて系統的に組み立てられるからだ。

したがって小学校の先生がプログラミング教育を行う時も、学習の先にオブジェクト指向があることを知っているのと知らないのとでは授業のアプローチも違うはずだ。その意味でも、小学校の先生もオブジェクト指向を理解しておくべきだ。オブジェクト指向は難しいと言われるが、すぐれた教材と学習メソッドがあれば理解できる。小学校からプログラミング教育を、と言われて奮闘する小学校の先生には頭が下がる思いであり、先駆的な実践を始めている先生方は子どもたちの未来を切り開く希望の星だと言えるが、そこを、あえて、さらに質の高いプログラミング教育を実現するために、オブジェクト指向を学んでいただきたいと望んでいる。

2018年3月8日

松本 吉生(まつもとよしお)
Microsoft MVP Data Platform

1961年京都に生まれ、神戸で幼少期を過ごす。大学で応用化学を学んだのち、理科教諭として高等学校に勤務する。教育の情報化が進む中で校内ネットワークの構築運用に従事し、兵庫県立明石高等学校で文部科学省の「光ファイバー網による学校ネットワーク活用方法研究開発事業」に携わる。兵庫県立西宮香風高等学校では多部制単位制の複雑な教育システムを管理する学籍管理データベースシステムをSQL ServerとInfoPath、AccessなどのOfficeソフトウエアによるOBA開発で構築・運用する。現在は兵庫県立神戸工業高等学校でC#プログラミング、IoTなどのコンピュータ教育を行う。2004年からマイクロソフトMVP(Microsoft Most Valuable Professional)を受賞し、現在14回目の連続受賞。2016年にマイクロソフト認定教育者(Microsoft Innovative Educator Experts : MIEE)を受賞し、現在3回目の連続受賞。