英BBCは7月7日(現地時間)、2015 Make it Digitalイニシアチブの一環としてコーディング教育向けボードコンピュータ「BBC micro:bit」を提供するプロジェクトの詳細を明らかにした。英国ではプログラマー不足が深刻化しており、若い世代にデジタルスキルを身につけさせ、テクノロジ分野における次世代のパイオニアを育成するためにBBCはmicro:bitの提供に乗り出した。まずは最大100万台を英国内のYear 7(中学1年)の11歳~12歳に無償配布し、2015年後半には販売も開始する。micro:bitの開発・提供は以下の11組織を含む29のパートナーシップによって実現した。ARM: mbedハードウエア、SDK、コンパイラサービスBarclays: 製品流通elements14: 部品調達、製造管理Freescale: センサ、USBコントローラLancaster University: ランタイムMicrosoft: TouchDevelopツール、サービスホスティングNordic Semiconductor: プロセッサSamsung: AndroidアプリScienceScope: iOSアプリTechnology Will Save Us: デザインThe Wellcome Trust: 教育関係者向けサポートmicro:bitは5×4センチ (重さ:8グラム) のコンパクトなボードに、ARM Cortex M0 CPU (32-bit)、3軸の加速度センサ、デジタルコンパス、Bluetooth Smart、Micro-USBコントローラ、Five Ring I/O、5×5に配列された赤色LED、プログラマブル・ボタン×2などを備える。JavaScript、Python、C++、MicrosoftのTouchDevelop言語、ビジュアル言語BlocksなどをサポートするWebベースのエディタを使ってプログラミングし、クラウドでコンパイルしたプログラムをmicro:bitにダウンロードする。Webベースの開発環境はスマートフォンやタブレットでも使用でき、Bluetooth Smart Technologyに対応しているモバイルデバイスからはBluetooth経由で直接micro:bitにフラッシュできる。プログラムされたmicro:bitは単4型電池×2を電源に単独で動作するほか、USBやBluetoothでノートPCやRaspberry Pi、スマートフォン、タブレットなどに接続して外部デバイスとして機能させられる(Tetheredモード)。たとえばセンサーデバイスとして使用したり、音楽やビデオの操作デバイス(再生/一時停止/停止など)として使用できる。Tetheredモードではインターネットに接続できるため、IoT(Internet of Things)オブジェクトのように使うことも可能だ。
2015年07月08日Pythonに限らず、多くのプログラミング言語には「関数(Function)」という概念があります。関数は特定の機能を「呼び出す」ために使われます。たとえば今までの回で利用していたprint()も関数のひとつで、()の中に入れた変数や定数を出力するという処理を呼び出します。今回はこの関数と、コードを整理するための「モジュール」について扱います。○関数でしか実現できないことプログラムは必ず、キーボード入力やファイルの読み込みといった「外からの情報の入力」と、ディスプレイやスピーカー出力といった「外への情報の出力」を必要としています。入出力のないプログラムも作れますが、動かしても「プログラムの外の世界」に何も影響がないので、CPUとメモリを無駄に消費するという目的以外には使えません。変数や条件分岐といった制御はあくまでもデータを処理するための手段でしかなく、プログラムの外とやりとりするためには関数が必須です。先に説明した画面への文字出力を行うprint関数もその一例です。プログラムが読みやすくなる「関数を使わなくても書けるコード」も、うまく関数を使うことでより良いコードになります。関数を使うとプログラムが読みやすくなるというメリットもあります。例をあげて説明してみます。絶対値を得ようと思った場合、以下のようにif文で条件分岐させることで実現が可能です。x = -5if(x<0):x = x * -1print(x)2、3行目を見てもらうとわかりますが、「もしxが0より小さければ、xに-1をかける」という処理をしており、絶対値を得ているということが読み取れますね。同じ処理を、絶対値を得る関数abs()を使って書くと、以下のようになります。x = abs(-5)print(x)前者と後者は同じことを実現していますが、どちらのほうがわかりやすいと思いますか。圧倒的に後者ですよね。関数も、突き詰めると中は処理の塊です。ただ、関数の名前はその「処理の要約」なので、どういう実装で処理が実現されているのかは関数の利用者に隠蔽されており、たとえばabs()では、「どうやって絶対値を求めるか」を理解していなくても、絶対値をパッと得ることができます。人間の思考能力には限界があるので、ゴチャゴチャとした実装を見せられるよりは、関数名という要約を見せられたほうが、何をやっているか判断しやすくなります。同じコードを何度も書かなくてすむプログラムを書いていると、同じ処理を何度も使うという場面が多々あります。たとえば「2つの数字の絶対値を比較する」というプログラムを作る場合、関数を使わないと以下のように絶対値を得るコードが2回出現する冗長なものとなります。x = 5y = -10if(x<0):x = x * -1if(y<0):y = y * -1print(’abs x > abs y ?’)print(x > y)xとyの絶対値を得る処理はほとんど同じなのにもかかわらず、2回書いていますね。2回程度なら書いてもいいような気もしますが、これが5回、10回となればどんどん面倒になっていきます。先のコードを、関数を使って書き直すと以下のようになります。x = 5y = -10x = abs(x)y = abs(y)print(’abs x > abs y ?’)print(x > y)冗長な要素が省かれてずいぶんと読みやすくなったのではないでしょうか。今回はabsのような簡単な関数でしたが、これがたとえば100行以上必要なアルゴリズムだったら、関数で冗長性を減らすことによる多大な恩恵を得られます。また、同じコードを何度も書いていて、そのなかに「バグ」があることがわかった場合、すべての場所に修正を施す必要があります。一方、関数で同じ処理をまとめていると、理想的には一箇所のみの修正となります。これはプログラムの「保守性(メンテナンス性)」を向上させるというメリットがあります。○関数の宣言と使い方関数のメリットがわかったところで、関数をどのように作って利用するかを具体的に説明していきます。以下の図を見てください。これが関数の基本的な概念です。関数は入力を受け取り、それを加工して出力する。基本的にはこれだけです。入力と出力はそれぞれなくてもかまわず、入力がない場合は関数の宣言の引数(入力の宣言)をなくし、出力が不要な場合はreturn文(出力の宣言)をなくします。具体的には以下のように関数を定義します。# 引数がない関数def my_func1():return 0# 返り値がない関数def my_func2(x):x = x * -1関数をどう呼び出すかについては今までさんざん利用したのでなんとなくわかると思いますが、宣言した引数に対応する箇所に入力値を入れることで呼び出します。ひとつ目の変数は引数がないので、呼び出し時に()に何も入れていないものの、後者は引数をとるので()に値を与えています。print(my_func1()) # 0 と表示されるprint(my_func2(5)) # None と表示される簡単ですね。ほかに知っておくべきこととしては、引数は複数指定できますが、return文は一度しか実行されないというルールがあることです。これも具体例を示しましょう。def my_func3(x, y):print(’A’)if(x > y):return xprint(’B’)return yprint(my_func3(5,1))# A# 5print(my_func3(2,4))# A# B# 4上記関数では入力値を2つとっています。コンマで区切られた引数の数のぶんだけ入力を受け付けるという簡単なルールです。そして、内部では2つのreturn文が確認できます。注目して欲しいのはx < yの条件を満たす場合はprint(’B’)が実行されていないということです。return文はいくつあっても構わないのですが、returnされたあとの関数の処理は一切無視されます。ほかには「デフォルト引数」や「可変長引数」といった関数の書き方もあるのですが、ここでは紹介を控えます。演習で問題を出すので、余力がある場合は自分で調べて書き方を覚えてください。○global宣言関数内の処理の実装は、関数の定義の中で完結すべきです。その関数を実行することで、その関数の外の変数などの値を変更すべきではありません。この思想は守るべきですが、時と場合により守らないほうが、良いコードが書ける場合もあります。関数内でのglobal宣言もそのひとつです。さっそくですが次のコードを見てください。x = 5def add():x += 1print(x)add()print(x)このプログラムを実行するとどのようになると思いますか。addという関数がxに1をインクリメントするので、56と出力してくれそうなところですが、実際はエラーが出てしまいます。Traceback (most recent call last):File "/Users/yuichi/Desktop/hello.py", line 7, in <module>add()File "/Users/yuichi/Desktop/hello.py", line 4, in addx += 1UnboundLocalError: local variable ’x’ referenced before assignment上記エラーを見ると、関数の中で「変数xに値が与えられる前に参照した」というような内容となっています。結論から言いますと、プログラム1行目のxと関数内のxは別物です。そのため関数内のxを使おうとしたところ、エラーが出てしまったのです。どうしても1行目の変数xを関数内で使いたい場合は、関数を以下のように書き換えます。x = 5def add():global xx += 1こうすることで、関数の外で定義された変数xを関数の中で利用することができるようになります。難しい話となってしまうのですが、関数などを動かすことで「期待される範囲を超えた外の世界に影響がおよぶ」ことを「副作用」といいます。この副作用を減らすことがきれいなコードを書くコツですので、意識してみるといいかもしれません。たとえば上記プログラムだったら、globalを使うよりx = 5def add(x):x += 1return xprint(x)x = add(x)print(x)と書くほうがいいです。「同じ入力値を入れたら、同じ出力値を返す」というのが一般的には理想的な関数だと思ってもらえればOKです。○モジュールPythonのプログラムは書けば書くほど大きくなります。数百行のコードでしたらひとつのファイルにすべて書いてしまえますが、何千行にもなってくるとコードを複数のファイルに分けたほうが管理がしやすいです。これは日常生活の整理整頓とまったく同じです。たとえば洋服ダンスがあるとすると、それを使いやすく使うためには下着、シャツ、ズボンといった種類ごとに引き出しを分けて使いますよね。ひとつの大きなダンボール箱にすべての服をつっこんでしまうとどこに何があるかわからなくなり、なおかつ服もきれいに管理できずにシワシワになってしまいます。プログラムのファイルを分けないと、後者のような乱雑な服の管理法に近い形でコードを書くことになります。ひとつの大きなファイルのなかにさまざまなコードをゴチャゴチャと書くのでどこで何をやっているのかわからなくなってきます。一方、特定の処理ごとにファイルを分けて「このファイルはXXの処理」「このファイルはYYの処理」などと整理すると、XXの処理を追加したり修正したりする際にすぐに場所がわかります。Pythonでは「ファイルに分けられた各プログラム」のことをモジュールと呼んでいます。ここではこのモジュールを使ったり、作ったりする方法について学びます。モジュールの利用モジュールを自分で作ることも可能ですが、まずはPythonが提供してくれているモジュールを利用することからはじめていきましょう。モジュールを利用するには「import宣言」が必要です。たとえば、数学処理がまとめられたmathモジュールを利用するには以下のようにします。# import モジュール名import mathこのようにimportをすると、mathモジュールに入っている関数などが利用できるようになります。たとえばmathモジュールの切り捨て関数を使うには以下のようにします。>>> import math>>> math.floor(5.5)5.0モジュール内の関数を呼び出すには"モジュール名.関数()"としますが、毎回毎回これを書くのが面倒であれば、適当な名前の変数に代入してしまってもかまいません。>>> import math>>> floor = math.floor>>> floor(5.5)5.0fromを使うことで、モジュール内の関数をモジュール名なしで呼び出すことも可能になります。# from モジュール名 import 関数名>>> from math import floor>>> floor(5.5)5.0モジュール内の関数すべてをモジュール名なしで呼び出すには以下のようにワイルドカードを使います。ただ、このような乱雑なモジュールの利用法はコードの安全性を保つためにも推奨できません。>>> from math import *今回はすでにpythonから提供されているモジュールを読み込みましたが、自分で作成したモジュールもまったく同じ方法で読み込めます。モジュールの作成モジュールの作成は簡単です。本連載の最初に説明したように.pyという拡張子をつけたファイルにpythonのコードを書くだけです。ここではモジュールmy_util.pyを作成し、それをmain.pyから呼び出す例を示します。my_util.pydef say_hello():print(’hello!’)def say_python():print(’python!’)main.pyimport my_utilmy_util.say_hello()my_util.say_python()実行結果hello!python!特別に難しいことはありませんね。モジュールを書くにあたって注意すべきすることは、それが再利用可能か似た処理のみをまとめているかというあたりです。たとえば標準ライブラリで提供されていない特殊な数値計算が必要なら、その計算のためのモジュールを作ってもよいでしょう。ただ、そこに特殊な文字列処理であったり、ネットワークの処理も書くというのは誤った設計です(もちろん時と場合によりますが)。また、そのモジュールを誰しもが簡単に使えるようにすることが理想です。実際は複雑なプログラムを分割するためだけにモジュール化することも多いのですが、それでも「使いやすい」ように書くことを心がけておくといいかもしれませんね。自作モジュールのテスト余談となりますが、モジュールのテストについて記載します。複数のファイルを使ったプログラムを起動するとき、それらのファイルは大きく分けて起動する起点となるファイル (python xxx.py で指定されるファイル)起動されたファイルがimportするモジュールのファイルに分かれます。すべてのファイルは前者にも後者にもなりえるのですが、前者の場合のみだけ実行したい特別な処理がある場合はif(__name__ == ’__main__’):処理とすると、上記の「処理」はモジュールとして読み込んだ場合は実行されません。たとえば先程のmy_util.pyを以下のように変更します。def say_hello():print(’hello!’)def say_python():print(’python!’)if(__name__ == ’__main__’):print(’my_util.py: loaded as script file’)else:print(’my_util.py: loaded as module file’)そしてこれを、直接呼び出してみます。% python my_util.pymy_util.py: loaded as script fileif文の条件がTrueとなり、Trueの際の処理が実行されていますね。次に、先ほど作ったmain.py経由でmy_util.pyを使ってみます。% python main.pymy_util.py: loaded as module filehello!python!今度はif文のelse節が実行されていますね。通常、直接起動されないモジュールを作る際、そのif(__name__ == ’__main__’)の中にモジュールをテストするような処理を書いておくと、プログラムの保守性が増します。覚えておくと便利かもしれません。演習1絶対値を返す関数my_absを作成して下さい。この関数内では標準ライブラリなどで提供されているabs関数などは使わないでください。演習2引数で与えた数だけフィボナッチ数を配列で返す関数my_fiboを作成してください。フィボナッチ数については調べればすぐにわかるはずです。演習3演習1、2で作成した関数もしくは自分で適当に作成した関数をモジュール化し、それを別ファイルから利用してみてください。import文、from文の両方を使ってみてください。※解答はこちらをご覧ください。Pythonのプログラムを起動する際にオプションとしていろいろなパラメータを与える「コマンドライン引数」と呼ばれる手法があります。次回はコマンドライン引数の扱い方について学びます。また、プログラムに対してキーボードで入力を行う標準入力についても学びます。
2015年07月06日プログラミング教育の必要性について議論が盛り上がっている昨今、Life is Tech! やCA Tech Kidsなどプログラミング教室を事業として行う企業も増えてきた。その一方で、総務省の調査結果をみると、プログラミング教室の開催地は都市部に集中しており、地方での開催例は未だ少ない現状もうかがえる。こうした状況のなか、地方からプログラミング教育を盛り上げるべく、Rubyの開発者 まつもとゆきひろ氏が在住する島根県松江市を中心に活動を行っているのが、「Rubyプログラミング少年団」だ。Rubyプログラミング少年団は、毎月第3日曜日の「しまね家庭の日」にあわせて小学3年生以上の児童を対象に1日プログラミング体験教室を開催している。「親と子どもの会話を大切に」という「しまね家庭の日」のコンセプトに沿って、子どもと保護者にそれぞれ1台ずつ用意されたコンピュータを使用し、親子でコミュニケーションをとりながら進めていく形式になっている。プログラミングの作業に用いるのは、小型シングルボードコンピュータ「Raspberry Pi 2」とビジュアルプログラミングツール「Smalruby」。Smalrubyは、ブロックを組み合わせていくことで簡単にゲームやアニメーションを作成できるもので、ボタンひとつでプログラムをRubyコードに変換して確認することが可能だ。1日体験教室には小学3年生の児童も参加していたが、スタッフのサポートを受けながら、オリジナルのゲームを作成することができていた。Rubyプログラミング少年団の代表を務める高尾宏治氏は、自分の子どもにプログラミングを教えたいという思いをきっかけに、2014年2月からSmalrubyの開発を行ってきた。それまでのプログラミング教室では、中学生に向けてRubyのソースコードを“写経”するような講義を行っていたが、Smalrubyによって、対象が小学生まで広がり、また子どもたちが自分で考えたオリジナルのプログラムを作れるようになったため、よりプログラミングの楽しさを伝えることができるようになったという。「都会では、保護者が積極的にプログラミング教室への参加を促しているが、地方では子どもがコンピュータやインターネットを利用することに対して抵抗がある保護者が多く、プログラミング自体にもあまり興味を持っていないように感じている」という高尾氏。親子でのプログラミング体験教室への参加を勧めているのは、保護者に実際にプログラミングを経験してもらうことで、子どもとインターネット社会との関わり方について理解してほしいという狙いがあるためだ。また、1日体験教室でプログラミングに興味をもち、もっと勉強してみたいと思った児童のために、ステップアップのための「プログラミング道場」という月に1回行われる無料のプログラミング教室も用意されている。最近、徐々にプログラミング道場への参加希望者が増えてきており、現在は10名の小学生がスタッフに手伝ってもらいながらそれぞれ自分の考えたゲームを開発している。高尾氏は、「将来的には“スポーツ少年団”のプログラミング版にしていきたい」としている。スポーツ少年団とは、運営元の日本体育協会によると「子どもたちがスポーツを楽しみ、野外・文化・社会活動などを通じて協調性や創造性を養い、社会のルールや思いやりのこころを学ぶ」もの。全国大会やプロを目指すというよりは、スポーツをとおして子どもたちの健全な心を育てて行くことを目的としている。プログラミング教育には、次世代のIT人材育成を期待されている面もあるが、Rubyプログラミング少年団としては、まずプログラミングの楽しさを知ってもらい、コンピュータやネットリテラシーを身につけた子どもたちを増やしていくことを主眼に置いている。今後は鳥取にも拠点を広げて行く予定で、「いずれは日本全国の各地域に展開していきたい。地方でプログラミングを教えてみたいと思っている方は、ぜひ問い合わせていただければ」(高尾氏)。今年の秋にも、NPOとしてプログラミング少年団を法人化し、その土台を固めていく考えだ。
2015年06月29日第5回は「型と変数」の後編です。前回の記事を読まれていないかたは先にこちらをご覧ください。○文字列型プログラミングでは、テキストデータを扱うことが非常に多いです。そのため、テキストデータを扱う「文字列型」を使いこなせるようになることが重要です。数字はそのまま書けば認識されていましたが、文字列は「特別な記号」でテキストを囲むことではじめて、Pythonで解釈できるようになります。今まで特にことわりなくシングルクオテーション「’」を使っていましたが、それもその特別な記号のうちのひとつです。たとえば、text = ’abcdefg’のように使います。テキストも数値と同じように演算することができます。先に示したように「+」で結合もできますし、あまり知られていませんが「*」で同じ文字列を繰り返すこともできます。>>> text = ’hello’ + ’ python’>>> print(text)hello python>>> text = ’hello’ * 3>>> print(text)hellohellohello文字列をコードで作成するやりかたは以下の3つです。シングルクオテーションで囲む「’」という記号がシングルクオテーションです。シングルクオテーションで囲むのが、Pythonで最も一般的な文字列の宣言です。空白文字もそのまま含めることができます。>>> text = ’hello python’>>> print(text)hello pythonタブや改行といった特殊な文字はエスケープ処理をすることで加えることができます。たとえば改行は、"\n"と表現されます。英語キーボードの半角の\(バックスラッシュ)と日本語キーボードの¥は同じ意味なので、\n(バックスラッシュは半角)も改行の意味を持ちます。>>> print(’hello \n python’)hellopythonわかりやすいように\nの前後に空白をいれましたが、改行させたいだけの場合は空白は不要です。’hello\npython’と書けば改行コードが入ります。ダブルクオテーションで囲むダブルクオテーションは「"」記号のことです。これで囲むとシングルクオテーションと同様に、文字列として認識されます。ほかのプログラミング言語だとダブルクオテーションのほうがよく使われるので、Pythonでもこちらを好んで使う人がいます。シングルクオテーションとダブルクオテーションの使い分けは特に決まったものはないのですが、「シングルクオテーションをダブルクオテーションで囲むと文字として扱われる」というルールがあるので、文字列の中にシングルクオテーションを使いたい場合はダブルクオテーションを使うと便利かもしれません。>>> print("it’s nice!!")it’s nice!!>>> print(’it\’s nice!!’)it’s nice!!2つめの例のようにエスケープ記号を使うことで、シングルクオテーションの中でシングルクオテーションを使うこともできます。ダブルクオテーションでシングルクオテーションを囲むのと同じように、シングルクオテーションでダブルクオテーションを囲むこともできます。その効果はまったく同じで、ダブルクオテーションをエスケープせずに文字列で使うことができるというものです。トリプルクオテーションで囲む最後にトリプルクオテーションを紹介します。これはテキストをシングルクオテーションかダブルクオテーション3つで囲むというものです。トリプルクオテーションで囲まれると、その中身が見たままにテキストとして表示されます。>>> text = ’’’it’s nice!!’’’>>> print(text)it’s nice!!プロンプトでは使えませんが、ファイルにプログラムを書き込む場合は、改行も含めてひとつのテキストにすることが可能です。たとえば以下をPythonのプログラムファイルに書き、text = ’’’hellopython’’’print(text)それを実行するとhellopythonが返されます。ちなみにトリプルクオテーションは文字列の宣言としての利用よりも、複数行のプログラムをコメントアウトするときに使われることが多いかもしれません。たとえば以下のような例があげられます。処理1’’’処理2-1処理3-1’’’処理2-2処理3-2処理4処理2,3の動きを変更したいと思ったので、昔の処理「2-1,3-1」を文字列にしてしまうことで実行されないようにして、新しく「処理2-2,3-2」を書いたものです。改良やバグ探しの場面では「昔の処理は実行させたくないのだけれども、消したくはない」ということが多く発生するので、そのようなときにトリプルクオテーションが便利です。また、関数やクラスの前に「それが何をやっているか」ということをトリプルクオテーションで表明することもよくあります。なお、CやJavaでいうところの範囲指定のコメントアウト「/** コメントアウト **/」はPythonでは使えないので注意してください。文字列型の操作文字列の操作については後の連載で詳細を扱いますので、ここでは簡単な説明にとどめておきます。演算子の利用は先に話したとおりです。>>> ’hello’ + ’python’’hellopython’>>> a = ’hello’>>> a += ’python’>>> print(a)’hellopython’これに加えて関数を使う方法もあります。たとえば数値などの「文字列でない型」を文字列型にするにはstr関数を使います。この関数で囲ったすべての型は文字列に変換されます。>>> str(5)’5’>>> str(5.5)’5.5’この関数は文字列に「文字列以外の型」を結合する際によく使われます。この変換をしないとエラーになる場合が多々あります。たとえば、以下の1行目の「文字列 + 数値」はエラーとなりますが、2行目は「文字列 + 文字列」なので問題ありません。>>> ’hello’ + 5Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: cannot concatenate ’str’ and ’int’ objects>>> ’hello’ + str(5)’hello5’文字列に対するより複雑な操作は「文字列から関数を呼び出す」ことで行います。なぜこのような書きかたをするかについては連載後半で扱いますが、とりあえずは "文字列.関数()" とすることで文字列に対する操作をすると覚えておいてください。文字列を格納した変数に対して "変数.関数()" としても同じです。>>> a = ’Hello Python’# ’Py’ が ’Hello Python’ の前から何番目にあるか。0からカウント。>>> a.find(’Py’)6# ’Hello Python’ を小文字にする>>> a.lower()’hello python’# ’Hello Python’ を空白 ’ ’ で分割する>>> a.split(’ ’)[’Hello’, ’Python’]# ’Hello Python’ のなかにある文字列 ’Hell’ を取り除く>>> a.strip(’Hell’)’o Python’○Bool型Boolは別名「真偽値」とも呼ばれる型です。真偽値という名前を聞くとなんだか難しそうに思えるかもしれませんが、要するにYES/NOに相当する「True/False」という「正か非」の2値しかない単純な型です。Pythonのプログラム中で "True" と "False" は特別なキーワードとして扱われます。それぞれその言葉のとおりに、YES/NOとしてPythonに解釈されるのです。このようなキーワードのことを「予約語」と呼び、予約語は変数名や関数名に使うことはできません。Boolは「比較演算子」と呼ばれる記号で2つの値を比較した際に返されます。例として数字の大小を比較してみます。>>> 10 > 5True>>> 10 < 5False>>> a = 10 > 5>>> aTrue特に難しいことはありませんね。「10は5より大きい -> True(YES)」とされていますし、「10は5より小さい -> False(NO)」とされています。Boolを変数に格納することも当然できます。比較演算子の一覧を以下に記載します。and、or、notがCやJavaと異なりますが、それ以外はほぼ同じです。以下に例を書いてみます。>>> ’hello’ == ’world’False>>> ’hello’ != ’world’True>>> a = ’hello’>>> b = ’hell’ + ’o’>>> a == bTrue>>> not TrueFalse>>> True and FalseFalse>>> True or FalseTrueほかには返り値がBool値である関数もよく利用されます。Bool型は次回以降で扱う「ifやfor」といった制御文で利用されることが多いため、これもマスターが必須な型です。条件分岐のif文では、たとえば変数aがTrueなら処理Aを実行し、Falseなら処理Bをするといった使い方をします。具体的にBoolをどのように書くかは制御文を学ぶ際に理解できると思いますので、今回はここで解説を切り上げます。リストリスト(List)が今回紹介する最後の型です。言葉からわかるようにデータを「リスト」状に複数個並べたような型です。今までの数値や文字列、Boolに比べると使いどころがよくわからないかもしれないので、まずは例を示します。たとえば生徒のテストの点数を管理するアプリケーションを書くとします。リストを使わずに3人の生徒の平均点を求めようとすると、以下のようなコードが書けます。student1 = 68student2 = 81student3 = 49average = (student1 + student2 + student3) / 3print(average)生徒ごとに変数を作って、そこから平均値を求めています。それほど難しくはありませんね。ただ、上記のプログラムには問題があります。たとえば生徒の数が4人になった場合などに修正する箇所が多くなってしまうことです。生徒が40人だと変更はもっと大変です。このような問題は、リストを使うことでかなり解消できます。リストは「リストというデータの中に複数のデータを格納できる」という型ですので、「生徒達の点数」というデータに「具体的な各生徒の点数」を格納します。results = [68, 81, 49]average = sum(results)/len(results)print(average)1行目では「生徒たちの点数」というリストを作成しています。見ればわかると思いますが、リストは [] の記号のなかにコンマ区切りでデータを羅列することで作成されます。2行目にあるsum()はリスト内にあるデータの合計値を算出する関数で、len()はリストに格納されるデータの数を返す関数です。ここでは平均値を求めるために「生徒の点数の合計値/生徒の人数」としています。2番目のコードは生徒一人ひとりの点数ごとに変数を作成していないので、「複数の生徒たちの点数の格納」も簡単ですし、なにより平均値の算出方法が生徒の数に依存していません。このようにリストを使うことで「ひとつのグループに属するデータ」を便利に扱うことができます。リストの概念を以下に記します。リストの操作リストがどのようなものかわかっていただけたかと思いますので、操作方法について例を交えながら説明していきます。リストの作成は以下のように [] 記号でリストの要素を囲むことで実現できます。>>> a = []>>> b = [1, 2, 3]>>> c = [1, "2", False][] の中に何も入れない場合は空のリストを作成します。注意が必要なのは3行目のように「リストの中にはさまざまなデータが入れられる」ということです。基本的には同じ型しか入れられないCやJavaの配列やリストとは違うので注意してください。次にリストの「要素」を取り出したり、書き換えたりする方法を示します。先の b = [1,2,3] では要素数が3つあるリストを作成していて、その中身は1、2、3となっています。この中身を取り出すためにはリスト内の「x番目の要素を指定」する必要があります。そのためには、リスト名[要素の番号]とします。ただ、気をつけなければいけないのは、指定する順序は1からではなく0からということです。たとえば、以下のように使います。b = [1,2,3]print(b[0]) # -> 1print(b[2]) # -> 3b[1] = 5print(b[1]) # -> 5ちなみに、この「x番目」ということを「インデックス番号」と呼びます。b[2]は、「リストbのインデックス番号が2の要素」という意味になります。次にリストにデータを追加する方法です。追加するといっても「リスト末尾への追加」と「リストの途中への追加」でやりかたが異なります。これには文字列型の説明でお伝えした「変数名.関数()」という操作方法を使います。>>> b = [1,2,3]>>> b.append(4) # 末尾への追加>>> print(b)[1, 2, 3, 4]>>> b.insert(1,10) # 1番目の要素に10を追加>>> print(b)[1, 10, 2, 3, 4]追加とくれば削除です。削除にはremove関数を使います。>>> b = [1,2,3]>>> b.remove(1)>>> print(b)[2, 3]ほかにもさまざまな操作がありますが、あえてひとつだけあげるのであればリスト長の取得です。リスト範囲外へのアクセスはエラーになってしまうので、リスト長を超えたアクセスをしないためにもリスト長をどうやって取得するかを知っておく必要があります。>>> b = [1,2,3]>>> b[3]Traceback (most recent call last):File "<stdin>", line 1, in <module>IndexError: list index out of range>>> len(b)3つまり、len(配列)で配列長を得て、要素へのアクセスは「配列長 - 1」番目までとすればよいのです。これら以外のリストの使い方については、まず上記をマスターしてからでよいと思いますので、解説はいったんここで終えます。配列とリストこのセクションではCやJavaの「配列」とPythonのリストを比較します。そのため、配列をそもそも知らない方は、飛ばしてもらってかまいません。まず簡単に両者のイメージ図を記載します。左側の配列は「メモリ」上に連番でデータを格納するスペースを用意するのに対して、右側の「リスト」は複数のデータ間を順序を持って結びつけることで実現されています。Pythonのリストは、CやJavaのVectorやListに相当する型です。Pythonのリストはまるで配列のように利用されますが、CやJava の配列とは大きく異なります。たとえば純粋な配列では、「要素(配列やリストの中にあるデータ。Elementとも呼ぶ)」の間に新しいデータを挟み込むことはできません。そのため、配列に入っている要素を詰め替えるなどしてデータを追加します。一方、リストはN-1番目の要素とN番目の要素の間に新しいデータを挟み込むことができます。配列ではメモリ上に要素を連番で格納するためのスペースを用意するのに対し、リストは以下の図のようにバラバラに用意された要素間を順に結びつけることで実現されているためです。Javaの配列のコードを確認してみます。int a[] = {0, 1, 2};System.out.println(a[1]); // 2番目の要素の値を取得 -> 1System.out.println(a.length); // a の配列長を取得 -> 3a[1] = 10;a[3] = 3; // Error1行目では要素数3のint型の配列の変数を宣言し、それに代入しています。前記事でお伝えしたように、Javaの変数には型があるのでしたね。a[x]とすると配列aのx番目の要素にアクセスできます。そして、a.lengthとすることで配列長が取得できます。4行目では配列の2番目の要素に値を代入しています。ただ、5行目では配列長3の4番目の要素に値を代入しようとしているのでエラーとなってしまいます。次にPythonのリストを使ってみます。Pythonの変数には型がないので、特に型を指定していない変数aに[0, 1, 2]という3要素のリストをそのまま代入しています。2行目ではリストの中身を確認しています。そして3行目では配列長を取得しています。a = [0, 1, 2]print(a[1]) # 2番目の要素の値を取得 -> 1print(len(a)) # a の配列長を取得 -> 3a[1] = 10;a.append(3)print(len(3)) # 4異なるのは5行目です。配列は配列長を超えて要素を代入することができませんが、リストはリスト長を伸ばすことができます。Pythonではリストをまるで配列のように使いますが、両者はあくまでも別物という認識を持っておく必要があります。演習1文字列 ’ hello ’ から前後の空白をすべて取り除いてください。演習2以下の図のCとDおよび2つの円をくっつけた領域をAとBを用いて表現してください。次回は制御構造について扱います。今回取り扱ったBoolやリストは制御構造に大きく関わるので、不安な人はもう一度資料を読み直すなどしておいてください。
2015年06月22日第4回の記事からはプログラミングに必要な知識について詳細に学んでいきます。今回はまず、プログラミングの基礎である「型」と「変数」という概念について解説していきます。○型プログラミングで使われるデータには「型」と呼ばれるものがあります。たとえば、1や2というのは「数値」という型で、“Hello”というテキストは「文字列」という型です。プログラミングをする際に、初心者の方はこの「型」について意識することが重要です。なぜかというと、「型」と「処理」は密接に結びついているためです。例をあげて説明してみます。Python のプロンプトを立ち上げて以下を実行してみてください。>>> 3 + 36>>> 3 - 12上記のように数値は足し算、引き算することができます。当たり前といえば当たり前ですね。では、文字列はどうでしょうか。文字列は ’ ’ でアルファベットや記号を囲むことで作成できますので、先ほどと同じように足し算と引き算をさせてみます。>>> ’hello’ + ’python’’hellopython’>>> ’hello’ - ’python’Traceback (most recent call last):File "<stdin>", line 1, in <module>TypeError: unsupported operand type(s) for -: ’str’ and ’str’文字列の足し算はできました。文字列の後ろに別の文字列をくっつけるという「結合」処理がされています。文字列の結合は数値の足し算とは違いますが、これも直感的な処理内容といえるのではないでしょうか。ただ、文字列の引き算をしようとしたところ、エラーが表示されてしまいました。このエラーの内容は「operand(オペランド)」という言葉で小難しく説明されていますが、要するに「文字列 - 文字列」という処理はできないということを言っています。最初にも説明しましたが、「型」と「処理」は密接に結びついています。数値だったら足し算も引き算もできますが、文字列は足し算(結合)しかできません。同様に文字列でしかできない処理というのも存在しています。すべてを暗記する必要はありませんが「どの型がどのような処理をすることができるか」「その処理をするにはどういう書き方をすればいいか」ということをある程度知っておくことは重要です。これはほかの言語でも使える知識なので、決して無駄にはなりません。なお、ぱっと見て同じように見えるデータであっても、型が違えば別物ですので注意が必要です。例えば数値の3と文字列の’3’は別物です。前者は引き算に使えますが、後者は使えません。後者はあくまでも文字列としての3であり、数値ではありません。○変数型の続きを説明する前に変数の話をしてしまいましょう。変数はデータを格納するための箱のようなものです。プログラミングは1行1行に命令を書き連ねていくことで実現されますが、後ろの行で前の行の結果を利用する場面などが必ずあります。そのような場合に、変数に命令の結果を保存して、それを後で使うといった利用方法がとられます。イメージとしては以下の図のようなものとなります。変数の使い方は非常に簡単で、以下のように変数名 = 変数に入れたい値と宣言するだけで、変数に値が格納されます。変数名はアルファベットから始まる「特別なキーワード」を避ければ、好きなものを使ってかまいません。特別なキーワードとは、これからの連載で扱う「Pythonの文法」で利用されるものです。たとえば、条件分岐のifやelseなどは変数名には使えません。なお、変数に値を入れることを「代入する」といいますので、覚えておいてください。変数が利用される場合は、その中に実際に代入されている値が自動的に取り出されて使われます。以下に例を示します。>>> a = 5>>> print(a)5>>> b = a + 5>>> print(b)10>>> b = a + 6>>> print(b)11取り出しただけではデータは消失しないので、何度でも利用できます。たとえば変数aに5を代入した後に、変数aから2回値を取り出していますが、2回とも5が取り出されています。一般的には、取り出すというよりも“変数aが5を「返す」”というような言い方をします。ただ、注意してほしいのは「なにか値が代入されている変数」に新しい値を代入してしまうと「昔の値」は上書きされてしまうということです。上記例で、bは10を保持していましたが、そこに11が代入されると10を消失してしまいます。また、代入されていない変数を使おうとするとエラーとなります。少し高度になりますが、変数に同じ変数の値を加工して代入することも可能です。たとえば、変数aにすでに文字列が入っており、それに別の文字列を追加したいという場合は以下のように書きます。>>> a = ’hello’>>> a = a + ’python’>>> print(a)hellopython上記の「a = a + ’python’」はという意味になります。それほど難しくはないですね。なお、「a = a」のように加工せずにそのまま代入することもできますが、その処理にとくに意味はありませんので普通はしません。以上のように、Pythonの変数の概念は非常に簡単です。「変数はどのような型の値でも格納する入れ物のようなもの」ということを理解していれば、しばらくは何も問題ありません。ただ、CやJavaなどのほかの言語だと、変数の概念はもう少し複雑なので、次のセクションではその話をします。興味がない人は読み飛ばしていただいてかまいません。○変数と型Python以外の言語を少しでも学んだことのある人は、先ほどのPythonの変数の使い方に違和感を覚えられたかもしれません。CやJavaなどは「変数」と「型」が密接に結びついています。具体的にいうと変数にも型があり、変数の型と代入する値の型は同一である必要があります。たとえば、Javaで変数xを宣言し、それを利用するには以下のように書きます。// JAVAint x;x = 5; // OKx = "Java" // ErrorPythonで変数を利用する場合、変数xの前に「int」というキーワードは存在していませんでした。intは整数型のことなので、この場合は「整数型の変数x」を作っています。Javaの変数には必ず型があるので、変数を宣言する(作る)際には必ず「int」といった型を示す必要があります。上記例では変数を作成した後で、その変数に整数値5と文字列“Java”を代入しています。変数xは整数型なので、同じ整数型である5は代入できるものの、文字列型の“Java”は代入できずにエラーとなります。文字列型の変数もこれと同じです。文字列を格納するために作成された変数yに文字列を代入することは当然できますが、整数型である5を代入することはできません。// JAVAString y = "Java"; // OKy = 5; // Error一方、Pythonの変数にはどのような型でもいれることができるので、以下のように「整数を代入した変数に文字列を代入する」ことも、問題ありません。そもそもJavaでいう「int」や「String」といった変数の型宣言がPythonのコードにはありませんね。# PYTHONx = 5x = ’python’Python と Java の変数の使い方の違いを図にまとめます。ただ、上記のような「変数を使いまわす」ようなコードは一般的には避けたほうがよいです。一度宣言された変数を「別の使い方で再利用」すると、その変数に何が入っているのかわかりにくくなるため、プログラミングの行儀がよくありません。専門的な言い方をすると「保守しにくいコード」といわれます。まぁ、脱線はこのぐらいにして本題に戻りましょうか。○Python の型の種類型と変数の基本的な使い方がわかったので、最初に知るべき重要な型とその利用法をいくつか紹介したいと思います。今回紹介するのは以下の4つとなります。数値文字列Bool(ブール)リスト(配列)この4つの型を使わずにプログラムを書くことは不可能と言ってもよいほどです。これ以外にも重要な型はいくつかありますが、まずはこれら4つの型をしっかりと使いこなせるようになることが大事です。○数値型と演算子いくつかのプログラミング言語では、同じ数値といっても、それが種類ごとに細かく分類されて別の型として扱われます。たとえば、CやJavaでは「整数」と「小数」は別物ですし、それらも表現できる上限値が決まっています。Javaの整数型であるintは32bitで整数を表現する型であるため、小数点は扱えない(切り捨て)ですし、32bitで表現できない非常に大きな数なども利用できません。一方、Pythonで数値を使うのは非常に簡単です。正確には、整数型や小数型は存在するものの、それらは同じ「数値型」のようなイメージで扱うことができます。たとえばJavaのintで表現できない非常に大きな桁も、特別な操作をせずに表現できます。>>> 123456789 * 12345678915241578750190521では、数値型でどのような処理ができるかという話に移りましょう。とくに断りなく使ってきましたが、数と数の計算に使用する「+」や「-」といった記号は「演算子」とよばれています。そして演算子の演算対象となる値を「オペランド」と呼びます。たとえば、1 + 2の演算子は「+」であり、そのオペランドは「1」と「2」です。数値型に関しては、この演算子の種類を知ることが「処理」を知ることの第一歩といえます。Pythonの数値計算で利用可能な演算子は以下となります。いくつかは算数で使われる記号なのでわかりやすいですが、プログラミング独自の記号の使い方や、Pythonだけでしか使えない記号もあります。足し算、引き算、掛け算、割り算がメインとなる処理ですが、ほかの演算もときどき使うので覚えてしまってもいいかもしれません。算数の授業で習ったかと思いますが、演算子にも優先順位があります。たとえば算数で「1 + 2 x 3」という計算をする場合、足し算よりも掛け算が優先されるため、1+2よりも先に2x3が計算されて、答えは7になりますよね。Pythonでも同様に、上記の計算結果は7となります。掛け算よりも足し算を優先する場合は「足し算を()で囲む」ことをしますが、Pythonも同様です。>>> 1 + 2 * 37>>> (1 + 2) * 39とりあえず数値型の処理の紹介はこれで終わりです。ただ、当然ながらほかにも多くの処理が存在しています。たとえば今までも利用していた「絶対値を得る方法」や、「文字列の数字を数値型に変換する方法」などもあります。よく行われる処理は調べればすぐわかるので、その都度ドキュメントをあたるなり、検索エンジンを使うなりして解決してください。○数値型と代入演算子演算子の話をしたので、次に代入を行うための特別な演算子である「代入演算子」の紹介もします。名前からわかると思いますが、代入と演算を同時に行うのが代入演算子です。演算子と代入の記号(=)がくっついているだけなので、規則性は見てとれますね。注意すべきなのは、PythonにはCやJavaでいうインクリメント/デクリメントが存在しないことです。インクリメントは変数の値に1を加えることで、そのためには特別な演算子である「++」を使います。たとえばJavaの以下のコードint i=0;i++;では、i は 1 になります。Pythonで同様のことを行うには、以下のように書きます。i = 0i += 1変数iに1を加えた値を、再度iに代入することは、インクリメントすることと実質的に同じです。デクリメントも同じように使います。○関数による数値の操作演算子と代入演算子以外にも、数値を操作する方法があります。特定の関数に数値を与えることで、新しい数値を得ることができます。たとえば絶対値を得たり、べき乗の値を得たり……# -5 の絶対値>>> abs(-5)5# 2 の 8 乗>>> pow(2, 8)256数値の操作はさまざまな処理で利用されます。たとえば解析ツールや統計処理を行うアプリケーションを作るのであれば、数学的な処理をする必要があります。演算子と数学的知識を使って、それを自力で実装する方法もありますが、可能であれば実装の労力と実効速度およびバグの少なさを考慮して「標準ライブラリ」や「外部のライブラリ」を使うべきです。演習1以下の図形の面積を求めて下さい。演習2まだ説明していない組み込み関数を利用して、以下の問題をクリアしてください。公式のドキュメントから関数を探す、検索エンジンを利用するなど手段は問いません。※解答はこちらをご覧ください。さて次回は、今回の続きです。文字列型、Bool型、リスト型について取り扱います。
2015年06月15日サイバーエージェントの連結子会社で、小学生向けプログラミング教育事業を行うCA Tech Kidsは6月10日、日本マイクロソフトの協力のもと、共同で小学校への出張プログラミング授業を行うと発表した。第1回目として、6月25日の14:30~16:30に神奈川県湯河原小学校にて出張プログラミング授業が実施される。CA Tech Kidsはこれまでに、全国9都府県の学校や公民館などでの出張プログラミング授業や、立命館小学校の5・6年生全児童を対象とした2年間計8時限にわたる継続的なプログラミング授業などを行ってきた。一方、マイクロソフトも、子どもたちがプログラミングスキルを身につけるための支援プログラム「Microsoft Imagine」を展開している。今回の出張授業の開催にあたっては、マイクロソフトからWindows タブレット端末が無償で貸し出されるという。
2015年06月10日ディー・エヌ・エーは、2014年10月より佐賀県武雄市の公立小学校1年生に対して、プログラミング教育に関するタブレットPC用の教材アプリケーションの提供および授業の実施を実証実験として行ってきたが、6月9日、2015年度においても、小学2年生向けの新カリキュラムの開発と授業を実施することを決定したと発表した。同社は、2014年10月~2015年2月の期間中、武雄市立山内西小学校の1年生に対し、実証研究授業として全8回のプログラミング教育授業を、放課後の時間を活用し実施。同社が独自に開発した教材アプリケーションの利用方法を学びつつ、児童自身が描いたイラストを使用したオリジナルのゲームやアニメーションを創作し、最終授業でその作品を発表し、保護者やほかの児童に共有するというカリキュラムを提供した。この最終授業後のアンケートの結果を受けて、昨年度受講した山内西小学校の新2年生に、新たに開発したカリキュラムにて授業を実施するという。また、昨年度の授業実施を通じて得られたデータをもとに改修した小学1年生向けカリキュラムを、山内西小学校および武雄市立若木小学校の2校の新1年生に対しても2学期以降に提供する予定だ。
2015年06月09日総務省は6月5日、平成26年度に実施した「プログラミング人材育成の在り方に関する調査研究」の結果を取りまとめた報告書を公表した。同調査によると、プログラミング教室・講座の開催地は関東に集中しており、また、都市の規模でみると、ほとんどが大都市での開催で、中都市・小都市では事例も少なくプログラミング教育の認知度が低いと考えられる。また、教育関係団体の講師のスキルについては、高度なプログラミングスキルを持つ講師が多いが、半数以上の団体で講師数は2人以下。定期的に受講する教室・講座の受講者数については1~10人という回答が過半数となり、多くの団体では継続的な受講者数は比較的少数に留まっていることがわかる。教材に関しては、過半数の教室・講座でオリジナルのテキスト教材を利用しており、市販のテキスト教材を利用しているケースは2割未満に留まる。ただし、Scratchについては、市販の教材書籍が存在し、活用されているようだ。現在、国内で実施されているプログラミング教室・講座は、プログラミング体験自体を目的としていたり、プログラミングを楽しみ、創造力を養うことを目的としていることが多いが、一方、諸外国におけるプログラミング/コーディング教育においては、「論理的思考力の育成」「コーディング・プログラミングスキルの育成」「問題解決能力の育成」など、主に「21世紀型能力」の育成を目的としている国が多いことが明らかとなった。プログラミングに関する教育がもたらす効果に関しては、学説や有識者の意見と教育事業者の見解が概ね整合していることが確認できた。また、民間企業が求めるプログラミング人材像としては、「論理的思考力が高い」「自主性・行動力が高い」「独創性が高く、イノベーティブ」などがあげられた。プログラミングに関する教育の普及啓発に関する課題としては、普及のボトルネックと考えられる認知フェーズ・選定フェーズを重点的に解決する必要があると考えられるという。
2015年06月08日近畿日本ツーリストとライフイズテックは6月4日、グローバル人材教育を推進する一環として、業務提携したと発表した。ライフイズテックは、中高生のためのプログラミング・ITキャンプ/スクール事業を手がけており、プログラミング・IT教育プログラム「Life is Tech !」を企画、運営している。両社は、第1弾の取り組みで、修学旅行などにおけるキャリア教育・ICT教育の機会として、プログラミング・IT教育プログラム「Life is Tech !」を提供する。内容としては、スマートフォン向けのアプリ開発コース、メディアアートコース、ゲーム開発コース、Webサイト構築のコースなどのコースで、最先端のITプログラミング技術を学ぶきっかけを提供する。今後は、キャンプを通し「課題発見・役割分担・ITプログラミング(解決)・プレゼン」を学ぶ機会を提供するほか、海外での外国語によるITプログラミングキャンプや有名IT企業からの協賛・連携によるキャリア学習の提供など、企業・自治体などとも連携した事業を展開していく。
2015年06月05日オープントーンは5月28日、2015年6月に第1回 プログラミングコンテストを開催すると発表した。同社は、技術で勝負をしたい「職人」エンジニアとの出会いを求めて同コンテストを開催するという。参加資格は特になく、学歴・年齢・国籍は不問だが、「実装を含む開発技術に自信のある方、評価してもらいたい方」「ITエンジニアリングで世界を変えたい方」「オープントーンで働いてみたい方」「プログラミング技術で自称世界1位の方」が応募条件として挙げられている。同社Webサイト経由もしくはメールでの申込者に「お題」が送付され、2015年の7月(予定)までに提出されたプログラムの中から、ノミネート対象作品が選定される。このノミネート対象作品に選ばれた時点で、ノミネート賞として2万円が支給される。その後、ノミネート対象者に面接をしたうえで大賞が決定。入賞者には現職以上での待遇が保証され、同社からの採用通知が送られる。賞金は、最優秀賞50万円(1名選出)、優秀賞30万円(2名選出)、佳作10万円(5名選出)。なお、同イベントはオープントーンの求人イベントであるため、大賞を含む入賞授与者は、内定者に限られる。
2015年05月29日サイバーエージェントの連結子会社で、小学生向けプログラミング教育事業を行うCA Tech Kidsは5月26日、国立情報学研究所に協力し、6月12日~13日に開催される「国立情報学研究所オープンハウス 2015」にて、小学生向けプログラミングワークショップを実施すると発表した。「国立情報学研究所オープンハウス 2015」は、国立情報学研究所が取り組んでいる研究や事業の内容を、小中学生や高校生を含む一般から研究者まで幅広い層の人に向けて紹介するイベント。CA Tech Kidsは、小学生向けプログラミングワークショップである「情報学ワークショップ」を国立情報学研究所と連携し、提供する。このワークショップ「くまを動かそう:楽しいプログラミング講座」は、小学5~6年生が対象で、定員は60名。6月13日11:15~12:15に学術総合センター2Fの小会議室で開催される。初学者が楽しくプログラミングを学習できる手法の研究を行っている国立情報学研究所アーキテクチャ科学研究系の坂本一憲助教が講師を務め、坂本氏が開発したプログラミング教育用アンドロイドアプリを利用して、画面の中のキャラクターとぬいぐるみを同期させて操作する体験を行う。CA Tech Kidsは、教材の開発と講師の派遣、ワークショップの運営で協力する。
2015年05月27日サイバーエージェントの連結子会社のシーエー・アドバンスと、レキサスは、沖縄県の小学生を対象としたプログラミング学習奨学金制度「CA-Frogs キッズプログラマー奨学金」を設立し、5月20日より奨学生の募集を開始したと発表した。現在沖縄では、情報サービス、ソフトウェア開発などの情報通信産業を、観光に次ぐ注力産業として振興している。同制度は、沖縄の未来を担うIT人材を育成・輩出するためのプログラミング学習奨学金制度だ。沖縄で小学生向けプログラミングスクール「Tech Kids School」を運営するシーエー・アドバンスと、アプリ・Webサービスの企画・開発を行うレキサスが、奨学金の原資提供と企画運営を行う。また、県内の中学生~大学生をシリコンバレーへ派遣して、次世代リーダーの育成を目指している「Ryukyufrogs」が企画運営を支援し、小学生を対象としたプログラミング学習を無償提供する。同プログラムでは今後2名の奨学生を採択し、「Tech Kids School」の協力のもと、半年間で計約100時間のプログラミング学習を行う。Xcodeを使ったiPhoneアプリ開発や、HTML・JavaScriptを用いたWebアプリ開発を学んだ後、2015年12月に、奨学生自身が企画・開発したオリジナルの作品をプレゼンテーションする発表会を行う。学習に係る諸費用はシーエー・アドバンスとレキサスが負担するので、奨学生は無償で学習できる。将来的には、同プログラムで学習した奨学生を、Ryukyufrogsを通じてシリコンバレーに派遣し、より高度なリーダー育成につなげられるよう、発展させていく予定だという。募集期間は5月20日~6月14日18時で、沖縄県内の小学1~6年生、または同様の学齢に該当する人を対象とする。プログラミング経験は不問。
2015年05月22日20世紀初頭、オーストリアの神秘思想家、ルドルフ・シュタイナーが考案した、自由と芸術、そして創作を基調にした教育が「シュタイナー教育」です。近年、日本では、教育熱心な親御さんたちが注目している、オルタナティブ教育といわれるジャンルの1つです。現在、シュタイナー教育を行っている学校は、日本で8校。全世界では91ヵ国、1,000校以上に及ぶそうです(2015年4月時点)。今回はそんな世界に広がるシュタイナー教育の中から、注目のシュタイナー教育校を4校ご紹介します。■世界のシュタイナースクール(1)San francisco Waldorf school (北アメリカ、サンフランシスコ)カリフォルニア州は、全米でもっとも公的資金によるシュタイナー教育を行っている学校が存在している、オルタナティブ教育が盛んなエリアです。その中で35年間の歴史が在る、サンフランシスコ・ウォドルフ・スクールは、幼稚園から高校までウォドルフ教育を一貫して行っている、北アメリカで一番大きな私立のシュタイナースクールです。芸術や実践を重視するシュタイナー教育は、いわゆる一般的な教育を行っている学校との学力の差についてしばしば話題になりますが、サンフランシスコ・ウォドルフ・スクールは、Western Association of Schools and Colleges (WASC)(※)にも認定されていて、それぞれの学年でしっかり学力も学べる学校です。 (※)WASCは、アメリカに本部がある教育認定機関。WASCの認定資格は、世界的な資格として有用とされ、WASC認定校で12年の課程を修了した18歳以上の者は大学入学資格あり=高等学校を卒業した者と同等以上の学力があると認められています。■世界のシュタイナースクール(2)Panyotai Waldorf School(タイ、バンコク)タイで一番初めに設立されたシュタイナースクールです。創設者である Porn Panosot医師が、自分の子どもを通わせたいと思う学校がなかったため、「いっそのこと自分で学校をつくってしまえ」と考えたことが、設立の理由の1つです。 Porn Panosot医師は、その後、医者を辞めて、アメリカまでシュタイナー教員の資格を取りに行き、1996年にPanyotai Waldorf School学校が開校されました。Panyotai Waldorf Schoolは学校法人認定校であり、タイ国内では、国内の有名大学のほか、海外の有名大学に進学する率がとても高い学校としても知名度があります。現在は、定員がいっぱいの状態。長いウェイティングリストに名を連ねなければ入学できない人気校です。 ■世界のシュタイナースクール(3)Rudolf-Steiner-Schule Schwabing (ドイツ、ミュンヘン)シュタイナー教育の生みの親ルドルフ・シュタイナーの出身国であるドイツ。1970年代に、日本に初めて「シュタイナー教育」を紹介した、子安美知子氏の著書「ミュンヘンの小学生」で、著者の娘さんが通っていた学校がRudolf-Steiner-Schule Schwabingです。系列校に、高等教育まで学べるRudolf-Steiner-Schule München-Schwabingという学校もあります。 ■世界のシュタイナースクール(4)Moscow Waldorf School Nr. 1060 (ロシア、モスクワ)ゴルバチョフ大統領が起こした政治改革運動、ペレストロイカ時代に行われたロシアの教育システム改善によって、ロシアにやってきたシュタイナー教育。全校生徒400名ほどのMoscow Waldorf School Nr. 1060は、1996年に公立の学校に認定されたシュタイナー教育校です。世界各国のシュタイナースクールには、ユネスコのプロジェクト校に指定されている学校も多くあります。興味のある方は、世界中の学校をネット検索してみるのもおもしろいかもしれませんね。
2015年05月20日「子どもが生まれたら学資保険に入りなさい」親からそう言われて教育資金づくりを意識するようになった人は多いのではないでしょうか。でも、教育資金を準備できるものは学資保険だけではありません。本コラムでは学資保険以外の保険を活用して教育資金を準備する方法をわかりやすく解説します。また、昨年(2014年)国会で可決された保険業法の一部改正により、保険加入の際に受けるアドバイスに変化の兆しがみえています。保険選びがどのように変わっていくのか。その方向性についてもお話しします。教育資金を効率よく貯めるために必要な4つの要素皆さまはデヴィッド・バックという人をご存じですか?アメリカで活躍している資産コンサルタントです。彼の著書「自動的に大金持ちになる方法[オートマチック・ミリオネア]」には、資産形成を成功させるには次の要素を満たす必要があると書かれています。日常のちょっとした無駄(コーヒーやたばこなどの「ラテマネー(注:著書に出てくる言葉)を節約する毎月の給与から一定割合を積み立てる積み立ての一部を投資にまわす長く続ける教育資金という資産形成をする場合、必要となる時期・金額がほぼ明確です。学費を払うタイミングで資金が足りないのは困るので、そうならないようにゴール設定を明確にして、積み立てを行うことになります。また、貯金が苦手な人は「続ける」ことが苦手なことが多いので、上記の要素を教育資金づくり向けに、次の言葉に置き換えてみました。小さな無駄を節約して、積み立てにまわすお金を捻出する毎月の給与から一定額を積み立てる必要な時期に資金が用意できるものを選ぶ解約しにくい金融商品を選ぶ教育資金づくりのための金融商品を選ぶときは、まず、4.解約しにくい商品を選ぶこと。特に貯金が苦手な人はこの要素が外せません。学資保険や貯蓄性のある生命保険の場合、短期間で解約すると解約控除(解約の手数料のこと)がかかる仕組みになっているので、解約しにくい(=続けやすい)ところがいいですね。なかでも低解約返戻金型終身保険は、保険料の払込期間中の解約返戻率を通常の7割以下に抑えてあります(図1)。しかも、「保険設計書」に解約返戻金の推移表が記載されているので、何年後に解約した場合にいくら戻ってくるかがあらかじめわかります。必要なタイミングで解約することを前提に利用することができます。図1 低解約返戻金型終身保険のしくみ資料:執筆者作成保険料の払込期間と解約返戻金をチェックする低解約返戻金型終身保険を教育資金づくりに活用する場合、真っ先に確認したいのは保険料の払込期間と解約返戻金の推移表です。家計に無理のない設定になっているか、その積み立てで必要な資金を用意することができるのかをみるようにしましょう。お子さまが生まれた年(お子さま0歳)で契約した場合、経過年数とお子さまの年齢が一致します。例えば、0歳のお子さまのいる30歳男性が、払込期間10年の低解約返戻金型終身保険に加入した場合、保険料の払い込みが終わるのはお子さまが10歳のときです。10歳は小学4年生になる年齢ですので、私立中学受験のために進学塾に通うことになったとしても、それまで支払っていた保険料を塾の費用に充てることができます。なんとかなりそうな積立計画といえるのではないでしょうか。保険料の払い込みが早くに終われば、それまで支払っていた保険料相当分を再び教育費に充当することができます。それも含めて、無理のない計画かどうかをチェックしてください。一般的に、契約年数の経過とともに解約返戻率は増加していきます。しかし、低解約返戻金型終身保険では、保険料払込期間中の返戻率を通常の終身保険より抑えてあります(その分保険料も抑えられています)。一方、保険料の払い込みが終わった後は、解約しなければ解約返戻金は年々増加していきます(図1参照)。一般的に支払った保険料の累計を上回りますが、この保険に加入する際は、解約返戻率が低く設定されている保険料払込期間中に解約することのないように、十分注意して計画をたてる必要があります。もちろん、解約返戻率は保険会社によって設定が異なります。複数の保険会社に見積りをとり、比較検討するとよいでしょう。保険募集時に義務付けられた「意向把握」と「情報提供」。保険業法改正で保険提案はこう変わる!保険業法では、これまで虚偽の説明等、「不適切な行為の禁止」に限定された募集規制が明記されているだけでした。しかし、今回の改正で新たに「積極的な顧客対応」が追加されることになりました。顧客ニーズを把握して提案すること(意向把握義務)や、お客さまが判断するのに必要な情報提供を行っていくこと(情報提供義務)が求められることになります。保険を提案する人(保険募集人)は、お客さまのニーズをくみ取ることと、保険加入にかかわる判断材料を適切に提示することを求められるようになります。これらは喜ばしいことですが、契約者である私たちが保険の内容を理解しようとしなければ、せっかくの制度改正も絵に描いた餅にすぎません。自分の意向を整理して担当者に伝えることと、複数の保険から比較して選ぶ努力を惜しまないこと。この2点に注意して保険を選びたいものです。コラム監修者プロフィール 柳澤 美由紀(やなぎさわ みゆき)CFP(R)/1級ファイナンシャルプランニング技能士関西大学社会学部卒。大学時代に心理学を学び、リクルートグループに入社。求人広告制作業務に携わった後、1997年ファイナンシャルプランナー(FP)に転身する。相談件数は800件以上。家計の見直し、保険相談、資産づくり(お金を増やす仕組みづくり)が得意で、ライフプランシミュレーションや実行支援も行っている。家計アイデア工房 代表※この記載内容は、当社とは直接関係のない独立したファイナンシャルプランナーの見解です。※掲載されている情報は、最新の商品・法律・税制等とは異なる場合がありますのでご注意ください。
2015年05月12日サイバーエージェントの連結子会社で小学生向けプログラミング教育事業を行うCA Tech Kidsは、5月9日に世界各地で同時開催される子供向けプログラミング学習ソフト「Scratch」のイベント「Scratch Day」に合わせ、Scratchを用いたゲーム開発講座のテキストをWeb上に無償で公開すると発表した。今年のScratch Dayは、全世界287カ所でイベントが行われる予定。日本では、Scratch Day 2015 in Tokyo実行委員会により、東京大学本郷キャンパスにて開催される。これに合わせCA Tech Kidsは、Scratchを利用したプログラミング学習体験用教材を提供。同社Webサイトより、無料で閲覧・利用することができる。ただし、2015年5月31日までの限定公開となっている。
2015年05月08日GTC 2015において、MPIを使うマルチGPUプログラミングというチュートリアルセッションが行われた。これからマルチGPUのシステムのプログラムを作ろうという人には役立ちそうな内容であるので紹介する。次の図のように、CPUにメモリが付き、さらにPCIe経由でGPUとネットワークカードが付いているというのが計算ノードで、複数の計算ノードがネットワークでつながっているというのが、一般的なマルチGPU環境である。これらのノード間の通信には、MPI(Message Passing Interface)というライブラリが使われることが多い。MPIはSPMD(Single Program Multiple Data)実行モデルであり、すべてのノード(後述のように、正確にはランク)で同じプログラムが走る。MPIを動かすと、ネットワークに繋がっているすべてのノードを見つけ出し、それぞれのノードに実行すべきプロセスのコピーを作って一連のランク番号を付ける。ここでは各ノードに1ランクとして説明をしているが、MPIの起動時の指定で1つのノードに複数のランクを作ることもできる。1個のCPUに複数台のGPUを接続する場合は、複数のランクが1個のCPUで走り、それぞれのランクが1つのGPUに対応するという造りにするのが一般的である。MPIによる通信は、メッセージの送信と受信のペアの動作で行われ、次の図のように、rank 0がMPI_Sendを行ってs_buf_dに入っているデータをRank n-1に送り。rank n-1がMPI_Recvを行ってRank 0からのデータを受け取るという手順で行われる。最小のMPIプログラムは次のようなものである。最初にMPIのヘッダファイルをincludeしておく。そして、mainプログラムの中では、まず、MPI_Initを呼ぶ。この関数はMPI環境を初期化して、指定された数のランクの実行プロセスを立ち上げる。そして、これ以降はすべてのランクが並列に実行されることになる。各ランクでは、まず、MPI_Comm_rankとMPI_Comm_size関数を呼ぶ。MPI_Comm_rankは自分のランク番号を返し、MPI_Comm_sizeは全部でいくつのランクがあるかを返す。各ランクはsizeで自分がどれだけの処理を分担するか、自分のランク番号からどのデータ処理を行うのかなどを知ることができる。そして、相手のランク番号を指定してメッセージの送受信を行い、各種の計算処理などを実行して行く。処理が終わるとMPI_Finalizeを呼び、後始末をしてMPI処理を終了する。#include <mpi.h>int main(int argc, char *argv[]) {int rank,size;/* Initialize the MPI library */MPI_Init(&argc,&argv);/* Determine the calling process rank and total number of ranks */MPI_Comm_rank(MPI_COMM_WORLD,&rank);MPI_Comm_size(MPI_COMM_WORLD,&size);/* Call MPI routines like MPI_Send, MPI_Recv, ... */.../* Shutdown MPI library */MPI_Finalize();return 0;}MPIプログラムを作るには、MPIをサポートしたmpiccなどのコンパイラを使ってソースプログラムをコンパイルして実行形式を作る。そしてmpirunコマンドで実行を開始する。ここで-np 4の指定で4つのランクを起動することを指定している。ここではノードが4個あるので、各ノードに1ランクが割り当てられる。ヤコビ法は隣接する4点の値から中心の点の次の値を計算するというもので、分散処理の説明に良く使われる。n×kランクで処理を分担すると右下の図のようになる。1個のGPUで処理する場合は、単純に周囲の4点の平均で次の値を計算して行けば良い。しかし、1つ前の図のように複数のランクで処理を分割すると、端の部分では一部の隣接点は他のランクが分担しており、自分のところにはデータがないということが起こる。このため、端の部分(Haloと呼ぶ、日本語では袖領域ともいう)のデータは隣接するランクと情報交換する必要がある。上下の隣接したランクとの情報交換は次の図のようになる。この図の上半分はOpenAcc、下半分はCUDAでの記述である。なお、ここでは送信と受信を同時に行うMPI_Sendrecv関数が使われており、u_new+offset_first_rowからランクt_nbにデータを送り、ランクb_nbからのデータをu_new+offset_bottom_bondaryに受け取る。これが右の図で1と書かれた通信である。そして青字で書かれたMPI_Sendrecvで2の通信を行う。こうすると、上下の隣接行の内容が白○の部分でも上下の隣接データが存在することになる。図の下半分のCUDAのコードでもほぼ同じ記述で上下の隣接領域のデータのコピーを行うことができる。なお、これはCUDA対応のMPIを使った場合で、一般のMPIを使う場合は、送信データをcudaMemcpyで明示的にホストCPUのメモリにコピーしてから送信し、受信はホストCPUのメモリに確保したバッファに入れる。そして、また、cudaMemcpyで受信データをGPUのメモリにコピーするという手順が必要となる。横の隣接データはアドレスが連続していないので、いったんto_leftという配列にコピーしてから送り、from_left配列に受け取ったデータを縦方向に並び替えているが、Halo部分を埋めるという考え方は縦の隣接と同じである。このようなヤコビ法のプログラムを、プロセスあたり4K×4Kを分担させて1000ステップ実行した場合の実行時間の例を次の図に示す。黄色がK20X GPUでの実行で青はXeon E5-2690 v2の3GHzクロックでの実行結果である。E5-2690 v2は10コアの各コアで1スレッドを実行させ、K20Xは1GPU/ランクでの実行であり、K20Xの方が3~4倍速いという結果になっている。また、各ランクが分担する仕事量は一定であるが、ランク数が多くなると若干処理時間が長くなっている。
2015年04月16日システム開発およびエンジニア派遣事業を行うリベラルエンジニアズは4月15日、「エンジニアの芸能事務所」キャンペーンと題し、各プログラミング言語の担当アイドルを募集すると発表した。同キャンペーンは、所属エンジニアのタレント化を目的に行われるもので、オーディションによって入社の可否が決定される。入社後は、エンジニアとして仕事をしながら、SNSなどで自分を発信し、サイドビジネスや社内ジョイント・ベンチャーなどの活動を行う。イベントの登壇や、各種メディアなどへの出演も予定しているという。同社は、JavaやPHP、Rubyなど全部で12のプログラミング言語に対して「アイドル」を募集しており、すでにCOBOLの担当者が決定している。
2015年04月15日主婦向けクラウドソーシングサービス「シュフティ」を運営するうるると、オンラインマンツーマン・プログラミング学習サービス「CodeCamp(コードキャンプ)」を運営するトライブユニブは4月7日、在宅ワーカーのスキルアップを支援する共同プロジェクト「在宅ワーカーの主婦・主夫がプログラミング習得チャレンジ!」を開始すると発表した。同プロジェクトは、全国のシュフティ登録ワーカーのなかから応募があった約500名より選ばれた3名の子育て中の主婦・主夫が、CodeCamp提供のプログラミング習得コースを使い、2015年6月末日まで無料でプログラミングを在宅学習するというもの。さらにこの3名は、未経験者のプログラミング習得について関心のある人向けに、毎週各々の学習過程を、うるるが運営するオウンドメディア「在宅ワークマガジン」に掲載。プログラミングを初めて学ぶ主婦・主夫の奮闘や悩みなどをブログで発信することで、在宅ワーカーへのプログラミング学習への障壁を下げ、ワーカーのスキルアップ機会の増加を図っていくという。参加者の一人であるcarp0p0さん(30代主夫)は、「今月中には仕事を退職して専業主夫となるため、在宅でもしっかり稼いでいけるようにプログラミングスキルを習得したい」とコメントしている。
2015年04月08日「U-22プログラミング・コンテスト」を主催するU-22プログラミング・コンテスト実行委員会は4月1日、22歳以下を対象とした2015年度プログラミング・コンテストの応募要領を公開するとともに、2015年版公式Webサイトをオープンした。同コンテストは、優れた才能を持ったイノベイティブなIT人材の発掘と育成などを目的として、1980年より経済産業省の主催で開催されてきたが、2014年からは同コンテストの主旨に賛同・協賛する企業から構成された「U-22プログラミング・コンテスト実行委員会」が主催している。今回の応募資格は、日本国内に居住する西暦1993年4月2日以降に生まれた方。未発表または2014年9月1日以降に発表したオリジナル作品が審査の対象となる。ジャンルやプログラミング言語は特に問われない。応募作品は、「プロダクト」、「テクノロジー」、「アイデア」の3つの評価カテゴリをもとに審査され、総合的に優れた作品、各評価カテゴリで優れたものに各賞が与えられる。応募受付期間は7月1日~8月17日。受賞者には副賞のほかに、コンピュータソフトウェア協会のスタートアップ支援事業への推薦や、スポンサー企業への会社見学ツアー、インターンシップへの参加権利の授与などの特典が付加されるという。
2015年04月01日jig.jp(ジグジェイピー)は、子供のプログラミング教育ツールとして開発した「IchigoJam(イチゴジャム)」のライセンス販売を開始したと発表した。IchigoJamはまったくの初心者でも一歩一歩プログラミングについて学ぶことが可能で、福井県鯖江市立鯖江東小学校ほか、子供向けイベントや高等専門学校などで、すでに導入されている。オープンデータや、IoTによってプログラミングの可能性が広がる現代において、スキルさえあれば子供でも、グローバルに普及するプロダクトやサービスを提供できる世界が整いつつある。一方、教育現場におけるプログラミング教育はまだ始まったばかりで、その入口にすら立てない子供たちがほとんどだという。そこで同社は、セットアップ不要・シンプル・安価をコンセプトとしたプログラミング学習用ツールとして「IchigoJam」を開発。NXP Semiconductorsのマイコン「LPC1114FN28」用のOS、IchigoJam BASICとIchigoJamの回路図を一般利用者には無償で提供、また、プログラミング教材として幅広く第三者へ販売、提供するためのライセンス販売をスタートした。IchigoJamは小さなメモリ(4KB)でも動作するIchigoJam BASICをOSとして搭載したプログラミング入門用ワンボードマイコン。ビデオケーブルでテレビと接続、PS/2キーボードを差し込み、microUSBを電源としてつなぐだけで、プログラミングの学習を始めることが可能だ。参考価格は1500円(税込)で、IchigoJamを営利目的で利用する際には1販売数につき150円(税別)が必要となるという。
2015年03月23日ソニー生命保険は13日、子どもの教育資金と学資保険に関する調査結果を発表した。それによると、子どもが小学生から社会人になるまでに必要な教育資金の平均予想金額は1,156万円となった。同調査は、2月15日~2月16日にインターネット上で行われ、大学生以下の子ども(複数いる場合は長子)がいる20~69歳の男女1000人に有効回答を得た。未就学児の親(248名)に、子どもが小学生から社会人になるまでに必要な教育資金はいくらくらいだと思うか聞いたところ、「500万円~900万円くらい」(14.1%)、「1,000万円~1,400万円くらい」(36.7%)、「2,000万円~2,400万円くらい」(14.1%)といった金額帯に回答が集まり、平均額は1,156万円となった。2014年調査の平均予想金額(1,229万円)と比較すると、やや減少傾向(73万円減少)となった。子どもを育てるにあたって、学校の学費以外にも様々な教育費がかかるが、親はそれらに対していくら支出しているのか。大学生以下の子どもがいる20~69歳の男女1,000名に、子ども一人に対し、学校以外での教育費に1ヶ月あたり平均でいくら支出しているかを聞いたところ(子どもが複数いる場合は長子について聴取)、子ども一人あたりの学校以外での教育費の平均支出額の合計額は9,757円/月となった。内訳は、スポーツや芸術などの習い事は3,335円/月、家庭学習費用(通信教育、書籍など)は2,424円/月、教室学習費用(学習塾、英会話、そろばん教室など)では3,998円/月となっている。子どもの就学段階別にみると、中高生の親が最も平均支出額が高く、16,079円/月となった。内訳を比較すると、中高生の親の教室学習費用への平均支出額は9,506円/月と、他の層に比べて突出して高い支出額となり、高校受験や大学受験に向けた学習費に、支出がかさむことがうかがえる。子どもを大学等へ進学させるための教育資金の準備方法について、高校生以下の子どもの親(748名)に聞いたところ、最も利用されている方法は「学資保険」で6割(59.5%)、次いで「銀行預金」が5割強(53.5%)となった。大学などのための教育資金を準備する方法は、学資保険と銀行預金が中心としている。
2015年03月16日2013年に発表された、アベノミクスの成長戦略の素案の中で、義務教育段階からのプログラミング教育など、IT教育の推進が取り入れられたことから、子どもを対象にしたプログラミング教室がここ1~2年でジワジワと人気を集め始めています。わざわざ教室に通うほどではないけれど、ちょっと習わせてみたいという人は、インターネット上にある、無料で学べるプログラミング学習サイトを利用してみては?プログラミングというと、高度なプログラミング特有の言語を使うことから、頭ごなしに「難しい」とイメージする人が多いかもしれませんが、今回ご紹介する3つの日本語対応のフリーサイトは、動物や物などの子どもが興味のありそうな視覚的な物体の操作で行うビジュアルプログラミング使用なので、大人も子どもも楽しく、ゲーム感覚でプログラミングを学べます。■子どもにおすすめ、日本語対応のプログラミング学習サイト3選(1) プログラミン プログラミンは、日本の文部省が開発した、コンピュータプログラム学習用のウェブサイトです。このサイトをどのように利用するかなどを詳しく説明したムービーもあり、カーソルを移動するだけでも子どもの好きそうな音が鳴るので、まさに、気軽に楽しく遊べるサイトです。(2) SCRATCH マサチューセッツ工科大学(MIT)のメディアラボで開発された、子ども向けのプログラミング学習開発環境です。このサイトの面白いところは、自分で作ったアニメーションやゲームを同じくSCRATCHを利用しているオンラインコミュニティにシェアできるところです。毎日たくさんの作品がシェアされています。(3) Hour of Cord 全米の子供たちにコード教育を広めているCode.orgが主催するサイト。アナと雪の女王やアングリーバードなど、子どもに人気のキャラクターを利用して勉強できるのが、このサイトの大きな特徴となっています。これらのサイト以外にも、海外では、プログラミングを覚えるボードゲーム「 Robot Turtles 」や、積木のような物を利用して小さな子どもでも抵抗なくプログラミングを学べる「 primo 」など、インターネットを利用せずとも、五感やコミュニケーションを通してプログラミングを勉強できるおもちゃも発売されています。小さな子どもには極力コンピューターを触らせたくないけれど、プログラミングは将来のために学んでほしいと思っているご両親にとっては、こうしたおもちゃの日本での販売も待ち遠しいかもしれませんね。
2015年03月09日中高生向けのプログラミングキャンプやスクール事業を手がけるライフイズテックは2月23日、全国の中学校と高校の教師を対象に、授業支援プログラム「TECH for TEACHERS」を3月14日より開始すると発表した。「プログラミングを学べる最先端のIT教材」を簡単に授業に取り入れられるようになる。参加者は、同プログラムに登録すると、iPhoneアプリ開発コース30本とWEBデザインコース30本のすべての動画教材を無料で利用できる。また、同プログラムの映像教材は、リクルートマーケティングパートナーズと協業し、同社が運営するオンライン予備校「受験サプリのコンテンツとして、情報科を受け持つ教師だけでなくIT教材に興味のあるユーザーに無料で提供される。プログラムは、5分ほどの映像を中心に構成され、映像教材とオリジナル教科書による実習を交互に組み合わせ、映像で指示されたことを実際に手元で体験することで、個人のスピードに合わせて授業を進行できる仕組み。オンラインで無料の映像教材を提供するので、簡単に「最先端のIT」授業をサポートする。プログラミング経験のない先生が、内容を理解して生徒を導くための補助資料や、IT教育の経験豊富なスタッフによる相談も無料で提供する予定だ。事前登録の受け付けは、2月23日より、特設サイトを通じて行う。
2015年02月24日エデュケーショナルネットワーク(栄光ホールディングスグループ)とアフレルは2月4日、プログラミング学習を通じて子どもたちの生きる力の育成する小中学生向けアフタースクール「ロボットアカデミー」を新サービスとして4月より提供を開始することで業務提携を締結したと発表した。「ロボットアカデミー」では、社会のIT化や理数系学習重視の流れにいち早く学習対応することはもちろん、これからのグローバル人材、イノベーション人材に不可欠な創造力や論理的思考力、問題解決力を養成する。また、プログラミング学習には、レゴのロボット「教育版レゴ マインドストームEV3」を活用し、子どもたちが"体験"しながらモチベーションを高く、アクティブに学べるカリキュラムを提供する。具体的には、PDCAサイクルを採用し授業が展開される。PDCAサイクルとは、ビジネスの現場でも多用されるフレームワークで、それぞれPLAN(計画)、DO(検証)、CHECK(改善)、ACT(発表)の頭文字を取ったものであり、PDCAの順にサイクルを何度も回していくことで、学習が継続的に改善されていく手順のことである。授業では、最初に各回のテーマが提示され、その課題にそって、ロボットの組み立てとプログラミングを行う。そして、ロボットを動かして動作検証を行い、そこで見つかった問題を、子どもたち自身で考え、改善していく。さらに、授業の内外で開催される発表会や競技会を通じて、学んだ成果をプレゼンしたり、プログラミングを競い合ったりすることで、子供たちは自身の成長を実感していくとしている。なお、両社では、3年後の2018年に全国500教室の展開を目指すとコメントしている。
2015年02月05日信託協会は2日、2014年12月末の教育資金贈与信託の受託状況を発表した。それによると、12月末の教育資金贈与信託の契約数は10万1,866件となり、前期(9月末)から1万2,765件増加した。信託財産設定額合計は前期比925億円増の6,973億円だった。教育資金贈与信託は、孫の教育資金として祖父母が金銭などを信託した場合に、1人当たり1,500万円まで贈与税が非課税となる制度を利用した信託商品。同協会によると、2014年4月1日の取扱い開始以降、新規の契約数・信託財産設定額が安定的に増えており、多くの人が利用しているという。
2015年02月03日Amazon.comの創立者ジェフ・ベゾス、英国王室のウイリアム王子とヘンリー王子。国外の多くのロイヤルファミリーや著名人が特に実は幼少時代にモンテッソーリ教育を受けていることをご存知でしょうか? 特に、Google.com の創業者、ラリー・ペイジ&サージェイ・ブリンは、かつて受けたインタビューで「幼児期に受けたモンテッソーリ教育なしでは、現在の成功はありえない」と語っているほどです。このように近年、海外で注目されているオルタナティブ教育法「モンテッソーリ教育」。国内でもこの教育方法を導入している幼稚園もありますが、日本ではまだ、馴染みが浅いのが現状です。そんなに素敵な教育方法であれば、試してみたくなるもの。実際、家庭でも、日常生活で取り組めるモンテッソーリ教育方法があれば取り入れてみたいのではないでしょうか? 「敏感期(0歳~6歳)」は、モンテッソーリ教育で発達の第一段階とされる一番大切な時期。今回は、2歳~6歳の子どもさんを対象に、日々の生活の中で無理なく取り入れられる環境作りのポイントを3つご紹介します。■家庭でできるモンテッソーリ教育(1)毎日の「ルーティーン」をしっかり決めよう幼児期の子供は、「今日」「明日」「明後日」という時間の区切りが理解できない時期です。正確な時間でなくとも、朝この時間には起きて、ごはんをたべて、お昼寝をするといった1日の流れ、大まかなルーティーンを家庭でも習慣づけてみましょう。■家庭でできるモンテッソーリ教育(2)サポートしながら自分のことは自分でやらせるモンテッソーリ教育の1つに「日常生活の練習」という分野があります。日常生活の取り組みを自分で行うことにより、自立心を養うというのが目的です、モンテッソーリの幼稚園などでは、子供用サイズのティーセットを使用してお茶を実際に入れてみたり、洗濯板を使い洗濯をしてみたりという日常生活を学習しています。家庭でも日々の生活、たとえば、・子供が自分で着替えやすい洋服を購入して、時間をかけてでも1人で着替えさせる・手を洗う時は、小さなボウルを用意して自分で手を洗わせるといった小さなことでも、できるだけ子供が1人でできるように、親がサポートしてみましょう。■家庭でできるモンテッソーリ教育(3)親は子供のお手本になるように行動するイライラして思わず子どもを怒鳴りつけてしまったり、TVを見ながらご飯を食べたり、「子どもには真似してもらいたくないな」と親が思う行動は、まず親自身が日常生活でしないように心がけましょう。親が本を熱心に読めば、子どもも自然に本を手に取るようになります。親は、援助者であるのと同時に子どものお手本です。そのことを忘れずに行動しましょう。どれも、簡単に行動を起こせる取り組みです。皆さんもぜひ、今日からご家庭で実践してみてはいかがでしょうか?
2015年01月16日TIOBE Softwareは毎年1月に前年にもっともシェアが増えたプログラミング言語を発表している。2014年はJavaScriptが賞を受賞。2位にはPL/SQL、3位にはPerlがつける展開となった。当初はSwiftかRがアワードに入ると予想されていたが、12月にObjective-Cのシェアが急落。これを受けてほかのプログラミング言語のシェア割合が増えることになり、結果としてJavaScriptがもっともシェアを増やしたプログラミング言語となった。同社は2015年の動向予測として、Objective-Cのさらなるシェア減少と、JavaおよびSwiftのシェア上昇を予想している。モバイルアプリを開発するプログラミング言語としてJavaとSwiftの重要性が高まるとしており、JavaはCを抜いて再び1位になるだろうと予測している。また、ビッグデータ処理やモデリング処理などの要望の高まりを受けて、MATLABやRが10位入りする可能性もあると指摘している。あわせて、2015年1月のTIOBE Programming Community Index (PCI)も公開された。TIOBE PCIは、複数の検索エンジンの検索結果から対象となるプログラミング言語がどれだけ話題になっているかをインデックス化したもの。2015年1月におけるインデックスは次のとおり。
2015年01月08日楽天銀行は22日、「楽天銀行教育ローン」の取り扱いを開始した。「楽天銀行教育ローン」は楽天銀行が提供する初めての教育資金専用のローンとなる。楽天銀行は2009年4月より「楽天銀行スーパーローン」(カードローン)、同年5月より「フラット35」、2012年1月より「フラット35」と変動金利住宅ローンを組み合わせた「固定と変動」、そして2013年11月より「楽天銀行住宅ローン(金利選択型)」を提供してきたが、このたびの「楽天銀行教育ローン」の取扱い開始で、より顧客の資金用途に合わせたローンニーズに対応できるようになるという。○「楽天銀行教育ローン」の特徴簡単な申し込み方法申し込みフォームの入力は楽天銀行ウェブサイトから行う。また、必要書類はスマートフォンのカメラで撮影し、「楽天銀行アプリ」から送ることができるので、郵送の必要はない。「楽天銀行アプリ」を利用しない顧客は、必要書類を郵送する必要があるスピーディーな融資審査結果は原則翌営業日に回答する。また、申し込みから最短で翌営業日に融資するので、急ぎの顧客も利用できる。申し込み受付時間によっては審査結果の回答が翌々営業日以降になる場合がある選べる金利タイプと魅力的な金利金利タイプは「変動金利」と「固定金利」を用意したので、顧客のプランに合わせて選ぶことができる。また、「変動金利年3.36%」(22日現在)、「固定金利年3.90%」(同)と、魅力的な金利で提供しているという○商品概要なお、楽天銀行アプリはAppStoreおよびGooglePlayから無料でダウンロードできる。楽天銀行は、今後も魅力ある商品・サービスの提供を続けていくとしている。
2014年12月26日アップルは11日、12月8日から14日までのコンピュータサイエンス教育週間に合わせ、コンピュータプログラミングの基礎を学べるジュニア向けワークショップ「Hour of Code(コーディングの時間)」をApple Store各店で実施した。本稿ではApple Store, Ginzaで開催されたワークショップの様子をお届けする。Hour of Codeは、コンピュータサイエンス教育普及を推進するNPO団体であるCode.orgが提唱している運動だ。180カ国以上の生徒数千万人が参加しており、誰でもどこでもHour of Codeのイベントを主催することができる。アップルは以前よりHour of Codeの運動を支援してきたが、この度、世界規模でスペシャルイベントを開催する運びとなった。受講に際してプログラミングの経験は必要なく、4歳から104歳までを対象としているとのことだが、Apple Storeでのワークショップは小中学生向けに実施された。このワークショップは、コードの謎を解き明かし、誰もがプログラミングの基本を1時間で習得できるような内容になっている。用意されたチュートリアルを進めることで、プログラミング言語のイロハを学べるというわけだ。実際にチュートリアルを動かす前に、Apple Storeのスタッフから、プログラミングとは何ぞやという講話が。その存在を知ることで、コンピュータやモバイル端末以外の電子機器でもプログラミング言語が背景で動いていることが分かるようになる、など、小学校低学年の参加者にはちょっと難しい話もあったが、皆、退屈せずに注意して聞いている様子だった。チュートリアルはiPadを使って進められた。ゲームアプリ『Angry Birds』に登場するキャラクターを実際に動かしてみるというもので、スタッフからの「『Angry Birds』知ってる?」という問いかけに「知ってるー、この鳥は『Red』って言うんだよー」と、子供たちのリアクションも上々。Redを動かしてブタを捕まえるという動作を実行させるのだが、プログラムの構築は命令が書かれたブロックをつなぎ合わせて行っていく。「前方に移動します。」「左に曲がる」「右に回転」といった基本的な動きが書かれたブロックをくっつけて組み立てていく中、上手くいく子もいれば、苦労する子もいる。そこで、スタッフから、実際にブロックを組み立てる前に、絵を良く見て、どういう動作がどういう順番で必要なのか先に考えてみると良い、というヒントが出された。このヒントを上手く飲み込んで、子供たちはブロックをつなげていく。なるほど、プログラミング言語を学ぶ以前に思考方法を鍛錬できるというわけだ。作成したプログラムを実行し、課題がクリアできると、「おめでとうございますあなたはパズルを完了しました」というダイアログがあらわれ、その中で書いたコード(JavaScript)を表示できるのだが、そのコードは不可視化されており、実際はこういうものが動いているのだけどね、といった記述にとどめてある。ここで重要なのはプログラミング言語そのものを習得する以前に、プロセスの重要性を説き、発想を柔軟にしていこうというスタンスを示していることだろう。チュートリアルを進めていく中で、インターミッション的にスタッフの四方山話が挿入されるのだが、それらも学習者には興味深いエピソードだったはず。例えば、Appleの共同設立者の一人でもあるスティーブ・ウォズニアックは、とてもエレガントなプログラムを書いた、とか、映画『アポロ13』でも描かれた、当時の技術ではごく限られた量しか送ることができないプログラムを、搭乗を認められなかった船員がギリギリまでシェイプアップして送信したことでアポロは地球に戻ってくることができたといった話は、大人でも惹きつけられてしまう。テーマパークにある巨大迷路は、常に右に行く、あるいは常に左に行く、とタスクを実行し続ければ出ることができる、プログラミングもそのアナロジーを使って書き上げることができるという例え話は実に秀逸だった。予告どおり、約1時間でワークショップは終了。参加した子供たちからは「とても楽しかった」「マウスで動かすのより、指で触るだけで命令が出せるのが楽しかった」「綺麗なコードを書く大切さがわかった」といった感想が飛び出した。今回の参加者は、Apple Storeが用意したiPadを使用していたので、成果をそのまま持って帰るというわけにはいかなかったが、Code.orgでは、本ワークショップと同じ体験ができる。Webサイトでは、映画『アナと雪の女王』に登場する、アナとエルザがナビゲートするチュートリアルも用意されている。このチュートリアルでは雪の結晶をプログラミング言語を使っていくというものだが、進めるにつれて、さまざまな絵を描けるようになっているという。是非、こちらも試していただきたい。
2014年12月12日■最近よく聞く「オルタナティブ教育」っていったいどういう教育?みなさんは、「オルタナティブ教育」という名前の教育スタイルを耳にしたことはありますか?オルタナティブ教育は、学力だけでなく人間性を高める独自の教育スタイルを取り入れている海外では、ずいぶん前から人気がある教育です。世界中には、各種フリースクールを含めて大小さまざまな「オルタナティブ教育」が存在していますが、現在、世界の2大「オルタナティブ教育」といえば、オーストリア生まれの哲学者ルドルフ・シュタイナーが1919年にドイツで始めた芸術性を教育実践に多く取り入れた「シュタイナー教育」と、20世紀初頭イタリアの医学者、マリア・モンテッソーリが知的障害の幼児教育の成功から提案した感覚教育を行う「モンテッソーリ教育」です。■オルタナティブ教育(1)シュタイナー教育哲学者ルドルフ・シュタイナーが自身の哲学に沿った芸術性を重んじている教育法です。人間は、7年ごとに節目がくるという理念に従い、7歳までは体や心作りを重視して文字の書き方や読み方などは、まったく教えません。第二期である7歳から14歳までの時期は、芸術性を重視した授業を展開。家を建てたり、楽器を作ったりといった実践を通して知識を学び、教科書は一切使用しないという伝統的教育とはまったく異なるスタイルをとっています。それぞれ子どもの成長時期に合った感性を重視した授業で、自発性や個々の発想力を身につけていくようです。■オルタナティブ教育(2)モンテッソーリ教育感覚教育ともいわれているモンテッソーリ教育。特に、3歳から6歳の間を敏感期と呼び、子どもの五感が一番発達する時期だと、モンテッソーリ教育では考えられています。感覚の発達は、知識の発達の基礎になるという考えから、シュタイナー教育とは正反対に、幼少期から独自に開発した日常生活に密着した豊富な教材を使い教材を実際に手で触った教育を行います。知識を高める感覚を養うと同時に、自発的に自分から選択する能力を学ぶため、自分から教材を選ばせます。そして、その子どもがその教材をもっと続けたいという意思を表現すると、同じ教材を一定の時間以上、続けさせることもあります。この方法は、モンテッソーリ教育が、集中力と自発性を授業内で無理なく自然に身につけることができる理由のひとつのようです。■世界の著名人も受けていた! モンテッソーリ教育「モンテッソーリ教育」は、・英国王室のウィリアム王子、ヘンリー王子をはじめとした、各国王室教育・Google創立者であるラリー・ページとセルゲイ・ブリン、Amazon創業者 ジェフ・ベゾス、Facebook創業者 マーク・ザッカーバーグ、Wikipedia創業者 ジミー・ウェールズなど、現代を代表するトップ起業家・オバマ現米国大統領、クリントン元大統領にヒラリー・クリントン元米国務長官とする政治家このほかにも多くの著名人が幼少時に受けていた教育として近年、国内外での注目度が高くなっています。日本では昨年、2013年には教育再生実行会議が、国公立大学の入試2次試験を学力試験から、人物像を重視する面接に変更するという法案に変更する案を検討しているという動きがあります。グローバルに世界を渡り歩かなければいけない時代に生きる未来を背負う子ども達。学力以上に、人間性を重視する幼児期のオルタナティブ教育に日本でも今後もっと注目が集まりそうですね。
2014年12月11日