個別指導型のオンライン・プログラミングスクール「CodeCamp」を運営するコードキャンプは8月3日、現役学生を対象とした「CodeCamp for Students」を同日から9月30日の夏休み期間限定で開講したと発表した。CodeCampは、全国どこからでもプログラミングのマンツーマン・レッスンを受けることができる個別指導型のオンライン・プログラミングスクール。ユーザーひとりひとりのレベルや目的に合った、現役エンジニアによる1対1レッスンが行われている。今回同社が開講したCodeCamp for Studentsには2つのコースが用意されている。独力でWebサービスを開発したいユーザーやエンジニアになりたいユーザーを対象とした「マスターコース for Students」では、HTML5/CSS3、JavaScript/jQuery、PHP/MySQLを学ぶことができる。また、自分のWebサイトを作りたいユーザーや、プログラミングについて理解したいユーザーを対象とした「スタンダードコース for Students」では、HTML5/CSS3、JavaScript/jQueryを学ぶことができる。受講料は「マスターコース for Students」が19万8,000円で、特典を利用することで最大4万8,720円の割引となる。また、「スタンダードコース for Students」の受講料は、9万8,000円。特典を利用することで、最大3万4,720円の割引となる。入学金はそれぞれ1万円となっている(すべて税別価格)。これらのコースは、25歳以下の現役学生が対象となり、申込みの際に学生証の提示が必要となる。
2015年08月03日ギノは7月30日、ITエンジニアに特化したプログラミング転職サイト「paiza」にて、ITエンジニアを志す学生向けの就職を支援するサービス「paiza 新卒」を8月1日より開始することを発表した。「paiza 新卒」はエントリーシートの代わりにpaizaが用意したプログラミング問題を解くことで、書類選考なしで面接へ進める就職支援サービス。スキルチェックで企業指定のランクが取れれば、エントリーシートを書かずに面接へ行ける。また、優秀な人材は企業からのスカウトを受けることもある。paizaでは、従来より「プログラミングスキルチェック」にてプログラミング問題を解いたITエンジニアのスキルを6ランクに分け、求人企業が指定したランク以上を取得できていれば、書類選考なしで必ず面接に進めるという転職支援サービスを運営してきた。同社は「paiza 新卒」でもその仕組みを活かして、通常の採用プロセスでは見つけにくい技術力の優れた学生を発掘することで、ITエンジニアを目指す学生が、より有利に就職活動を進められるようサポートしていく考えだ。同サービスの展開により、今後1年以内に、学生登録者数を現在の5,000人から、20,000人に増やしていくことを目指していくという。
2015年07月30日誠文堂新光社が発行する科学雑誌『子供の科学』は7月1日より、小中学生向けのプログラミングコンテストを実施している。『子供の科学』では、これまでにMITメディアラボが開発した教育用プログラミングツール「Scratch」でゲームをつくる連載記事を実施するとともに、小学生向けのプログラミング教室「Tech Kids School」と協力して読者向けのプログラミング教室を展開してきた。同コンテストは、記事や教室を通してプログラミングを学ぶ子供たちの力を発揮する場として企画されたもので、オリジナルゲームの制作テクニックを競う「ゲーム部門」と、ゲーム・動画・ツールなど何でも応募可能なアイデア勝負の「自由創作部門」の2部門を実施。自由創作部門では、『子供の科学』誌に登場するさまざまな人気キャラクター(サイトにてダウンロード)を使って制作することが条件となっている。作品の募集は、9月13日まで。Windows(Windows 7以上)、Mac(OS X ver10.8(MountainLion)以上)、GNU/Linux、Android、iOS環境で動作すれば、どの言語で制作してもよい。応募された作品は、テクノロジー(技術力)・デザイン(芸術性)・アイデア(独創性)を基準に、『子供の科学』編集部とTech Kids Schoolによる審査が行われる。最優秀賞および優秀賞の受賞者にはオリジナルプレゼントが用意されているほか、作品を雑誌およびコカねっと上で発表、受賞イベントを開催予定だという。
2015年07月27日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日オープントーンは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日サイバーエージェントの連結子会社で小学生向けプログラミング教育事業を行う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日NTT東日本は、タブレットや電子黒板等を用いた授業等において活用できる学習支援アプリケーションをクラウド型で提供する学習支援クラウドサービス「おまかせ教室」を4月27日より提供開始すると発表した。現在、全国の自治体では、小中学校全校に児童生徒1人1台のタブレット導入が進められている。「おまかせ教室」は、これをサポートするもの。本サービスでは、小中学校のタブレット・電子黒板等を用いた授業において既に利用されている学習支援アプリケーションをクラウド型で提供する。また、小中学校のタブレットの活用が効果的とされる、「一斉学習」・「協働学習」・「個別学習」という3つの学習場面において利用できるアプリケーションを網羅している。「おまかせ教室 テックキャンバス」では、先生と児童生徒のタブレット間において授業補助教材等の一斉配布や児童生徒の閲覧・回答等状況の一覧表示等が可能となる。「おまかせ教室 コラボノート」では、児童生徒同士のグループ討論や協働作業を円滑に実施できるよう、複数人による画面の同時編集等が可能。そして、「おまかせ教室ラインズeライブラリ」では、小中学校の国語、算数/数学、理科、社会、英語の5教科、約6万問のドリル教材や百科事典等「確かな学力の向上」に役立つデジタル教材が利用可能となる。利用料金は個別見積もり。学校毎の児童生徒数等により料金が変動するという。
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日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日アップルは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日日常のあらゆる場面でコンピューターが使われるようになったこの社会で、今後、プログラミングスキルはどのような意義を持つのだろうか。世界中のプログラマに愛されるプログラミング言語「Ruby」の開発者であり、安倍内閣IT戦略本部の有識者本部員にも選ばれている、まつもとゆきひろ氏にお話しを伺った。○プログラミングという"自由さ"まつもと氏がプログラミングについて語るとき、その根底にいつも流れているのは"楽しさ"である。「私たちは普通、なにかのソフトウェアを経由してコンピューターを使っています。でもその機能は、そのソフトが提供する範囲、そのソフトを作った人が許している範囲内に限られているんです」たとえば文章作成ソフトを使うとき、メニューに載っている機能を選ぶ他に選択肢は無い。「仕事で求められることができればそれで良し、という考えは当然あると思いますが、自分のできることを他人に決められるのは、私はなんだか許せないんです。プログラミングができれば、制約はゼロではないにせよ、ぐっと下がります。プログラミングの楽しさというのは、自分がやりたいことを、自由にコンピューターに命令できることだと思います。発想によって、いくらでも工夫できるわけです」○Programmer’s Best Friendまつもと氏が開発したプログラミング言語"Ruby"のキャッチフレーズは"Programmer’s Best Friend(プログラマの親友)"だ。「プログラミングで何でもできると言っても、自分の頭の中でやりたいって思っていることと、実際にコンピューターに伝えることのギャップは、かなり大きいんですよ。レゴ マインドストームを例にすると、円を描くように走って欲しいとき、『モーターのステップが何度で~』といちいち記述するのではなく、『円を描くように走れ』と書けば動いて欲しいわけです。だからRubyは、目配せで通じ合う親友のように、プログラマの意図をくみ取ってくれるような言語であって欲しいと思い、開発しました。私が満足できるバランスであればそれで良しと思っていましたが、それが世界中の多くのプログラマにとっても、心地良いものだったようです」○自分のアイデアを実現可能な社会にこれからの社会において、プログラミングスキルはどんな意義を持つようになっていくだろうか。ソフトウェア開発自体のかたちが変わってきていると、まつもと氏は話す。「20年前の開発であれば、納期と予算をきちんと守って、リスクを取らずに決められたことをきちんと開発できるのがプロの技でした。でも、そのやり方で開発できるソフトウェアは、もうだいたい出来上がってしまったんです。今やらなければならないことの多くは、『未来のことはわからないけど頑張る』『行き先は分からないけど歩いて行く』というプロ的でないやり方、いわば"素人"の開発です。そういうソフトウェアの割合がどんどん増えています」その背景には、ソフトウェア開発に関する敷居が下がった事が大きい。Rubyのような言語が生まれたことはもちろん、クラウドを利用する事で、パソコン一台あれば始めることができるようになったのだ。「専門的に学んだわけではなくとも、発想と実行力のある人、自分のアイデアで世の中を変えたいと思う人が、ソフトウェアを開発できるようになったんです。未来は、誰でも自分のアイデアが実現可能になるかもしれません。ただし、その社会は、具現化できる人と、そうでない人の差が広がる社会でもあります」○Rubyによる"まちづくり"まつもと氏が住む島根県松江市では、行政、大学、IT業界が連携して、Rubyによる産業振興に取り組んでいる。そんな松江市の"Ruby熱"はどうなっているのだろうか。「イベントがいろいろな場所で開催され、メディアに取り上げられるので、道を歩くおじさんやおばさんが、『Rubyというものがあるらしい』と認知してもらっていますね。ある企業がWebページを作るのにあたって、ITの専門家でないのに『Rubyでできるのか?』と尋ねたりするなど、発注側が言語を選ぶという面白い現象も起きています」松江市はプログラミング教育にも熱心であり、各地でRuby教室が開催されている。来年度からは、中学校の授業でRuby教育がはじまるそうだ。こうしたプログラミング教育の一部には、レゴ マインドストームも活用されている。「ものが実際に動くことに興味を持つ人は、私が思っていたよりも、はるかに多いようです。そういう意味ではレゴ マインドストームの新モデル「EV3」は素晴らしいですね。メモリが増えたことで、なんの制約もなくRubyを載せることができます。もし、私がEV3とRubyで何かを作るなら…ペットの監視をさせようかな。玄関で犬を飼っているのですが、時々暴れ出すんです。犬が悪さをしたら警報を発する、ペットの躾用マインドストームなんてどうでしょう(笑)」
2014年12月08日Appleは、12月8日から14日までのコンピュータサイエンス教育週間に合わせ、コンピュータプログラミングの基礎を学べるジュニア向けワークショップ「Hour of Code(コーディングの時間)」をApple Store各店で11日に開催する。参加は無料、要予約。同ワークショップは、コードの謎を解き明かし、誰もがプログラミングの基本を1時間で学べるような内容になっているという。Apple Store各店で、11日の15時から、16時15分から、17時30分からの3回行われる。Appleウェブサイトより、申込みをすることで、同ワークショップに参加することができる。
2014年12月05日国内・国外の人材業界に特化したキュレーションメディア「HRog」を運営するゴーリストはこのほど、プログラミング言語別に集計した求人給与額のランキングを発表した。調査対象の媒体は、@type、DODA、FindJob!、Green、イーキャリア、エン転職、マイナビ転職、リクナビNEXTで、対象の求人件数は3万1743件。首位を獲得したのは、「Python」で、求人年俸額平均が382万2018円、求人件数が281件だった。求人件数はそれほど多くないが、海外での利用の広まりから、国内でも急速にニーズが高まっていくことが予想されるという。第1位になった要因としては、 プログラマーの数も他の言語と比べて少ないことが挙げられている。第2位は「Ruby」で、求人年俸額平均が361万9448円、求人件数が664件となった。PHPと比較検討されることが多が、PHPと比べると高度なプログラミングを駆使するケースが多く、需要に比べてプログラマーの数がまだ多くない分、より求人ニーズは高いという。第3位は「Perl」で、求人年俸額平均が352万6370円、求人件数が542件だった。比較的古くからWebアプリケーションで利用されてきた言語だが、近年の新規開発案件での利用はPHPやRubyに代わられた傾向にあると指摘されている。ただし、「はてな」などの老舗の大規模Webサービスを中心に今でも主要言語として 利用されており、求人案件でも、より高度な技術を求められる傾向にあるとしている。第4位以降は、「Objective-C」「JavaScript」「Java」「PHP」「C++」「C言語」「C#」となっている。ちなみに、同社のエンジニアからは「Perlが第3位というのが意外」という声が聞かれたという。
2014年11月04日ゴーリストは30日、「プログラミング言語別の求人給与額」に関する調査結果を発表した。それによると、求人年俸額が一番高いプログラミング言語は「Python」となった。同調査は、2014年10月20日に、ゴーリストが運営する国内・国外の人材業界に特化したキュレーションメディア「HRog」において、プログラミング言語別に求人給与額を集計したもの。調査対象求人件数は3万1,743件。求人年俸額1位となったのは「Python」で、求人年俸額平均は382万2,018円、求人件数は281件。Pythonは比較的新しい言語だが、利用範囲が広く、様々な環境で動作し、かつ読みやすく書きやすいなど、生産性や保守性が高いことが特徴。今回は、プログラマの人口も他の言語と比べてまだ少ないことから、1位になったと分析している。先日ソフトバンクから発表された人型ロボット「Pepper(ペッパー)」の制御にも、Pythonが使用されており、今後は海外での利用の広まりから、日本国内でも急速にニーズが高まっていくことが予想されているという。2位は「Ruby」で、求人年俸額平均は361万9,448円、求人件数は664件。3位は「Perl」で、求人年俸額平均は352万6,370円、求人件数は542件。4位は「Objective-C」で、求人年俸額平均は348万9,549円、求人件数は1,110件。5位は「JavaScript」で、求人年俸額平均は348万6,366円、求人件数は1,214件となった。
2014年10月30日「U-22プログラミング・コンテスト」を主催するU-22プログラミング・コンテスト実行委員会は10月6日、10月5日に秋葉原UDXで行われた同コンテストの最終審査会において、入選作品20作品に関する各賞受賞を決定したと発表した。同コンテストは、「日本のプログラミング学習熱を高めよう」をコンセプトに、自らプログラミングを学び、日本の未来を創る若者を応援するために開催される、歴史あるプログラミング・コンテスト。同コンテストは、これまで34年間にわたり「U-20プログラミング・コンテスト」として経済産業省主催で開催されていたが、今年度から応募対象者をU-20(20歳以下)からU-22(22歳以下)に拡大し、「U-22プログラミング・コンテスト実行委員会」が主催として開催されることになった。各賞の受賞者は以下のとおり。経済産業大臣賞経済産業省商務情報政策局長賞スポンサー企業賞/サイボウズ賞スポンサー企業賞/オービックビジネスコンサルタント賞スポンサー企業賞/首都圏コンピュータ技術者賞スポンサー企業賞/usefule賞(日本事務器)スポンサー企業賞/日本マイクロソフト賞スポンサー企業賞/ハンズラボ賞スポンサー企業賞/豆蔵ホールディングス賞CSAJ会長賞モバイル賞
2014年10月07日ジャストシステムは10月1日、企業内の情報共有基盤として活用できるよう大幅強化した、ノンプログラミングWebデータベースソフトの最新版「UnitBase 4.5」を、10月20日より発売すると発表した。UnitBaseは、案件管理や問い合わせ管理、顧客管理、不具合管理など、企業におけるさまざまな業務のシステム化に活用されているWebデータベース。専門知識がなくても、ドラッグ&ドロップなどの簡単操作で柔軟に構築や変更が行える。最新版では、カレンダーからレコードを表示・編集できる「カレンダービュー」が追加された。同機能により、イベントの色分け、カレンダー書式の複数登録が可能になり、視覚的にもわかりやすい管理が実現される。また、Excelやメールなど、既存ツールとの連携が強化されたのも最新版の特徴。具体的には、Excel形式の帳票を「UnitBase」に取り込める機能「帳票取込」も追加され、「UnitBase」から必要なレコードを絞り込んで事前に設定したフォーマットのレポート(Excel)として一括出力できるようになった。その他の新機能としては、申請金額や決裁内容によって決裁者を設定できる「決裁ルートの選択」機能、グループ内の全ユーザーに通知し、そのうちの一人が承認すれば次のフローに進める「グループ決裁」機能、社員ごとに必要な決裁ルートを自動設定できる機能などがある。価格は、同時ログイン5ユーザーで98万円、年間保守料が19万6,000円となっている(いずれも税別)。
2014年10月01日