これはプログラミング教育 Advent Calendar 2015 - Adventarの五日目の記事です。
今日はちょっと変わってプログラミング教育についての話し。最近HTML5井戸端会議やプログラミングワークショップなどで、他の人とプログラミングをしたり、他の人にプログラミングについて教えたりする機会があります。
そんな中で思ったのは、最近「初心者はまずここからはじめると良いよ」っていう言語・環境があんまりないな ということ。
たしかに、CUIベースの言語なら、たくさんあります。RubyやPHP、Pythonなどのスクリプト言語であれば、インタプリタとエディタを集めれば使えますし、RubyやPythonはコマンドプロンプトで直接コードが書けるので、ざっくりどんなものか動きを確かめるときには良いかもしれません。
ただ、GUIを伴うとなるとどうか?今だとVisual StudioとC#か、ちょっと値は張るけどDelphiかくらいしか思いつきません*1。
EclipseとWindows Builderを組み合わせてJava という手もありますが、元々言語がそういうIDEに向けて作られてないのもあってか、ちょっといびつな感じになってしまっているように感じました(Android StudioとAndroidJavaなんてのは、ある意味ありなのかもしれませんが、Android開発自体に独自ルールが多くて取っつきづらいように感じます)。
手軽に使えて、アプリ公開までいける という意味ではVisual Studio(Community Edition)ですが、最小構成でも1GB超えという容量は初心者にはちょっとハードルが高いですし、何よりワークショップなんかでやった日には一発で回線が干からびます(無線がすでに用意されている場所であればまあ、良いのですが。今度はセットアップの時間が…)。
こう考えると、今のプログラミング環境って、初心者にあんまり優しくないなあ と。もちろん無料で使える環境も増えて、ある程度敷居は低くなりましたが、それは英語が読め(英語でのユーザー登録が滞りなく行えて)て、ある程度環境の差異について理解できている人の話。全くの初心者にはいきなり飛びつくのが難しい環境が多いな… なんて思いました。
このカレンダーはプログラミング教育のアドベントカレンダーですので、Scratchなどのプログラミング学習環境についての話しを期待している方もいらっしゃるでしょう。実際自分も、まちづくりエージェントSIDE BEACH CITY.として、今年6月のワークショップでScratchを、8月のワークショップでCode.orgを使用しています。
ただ、そこで興味を持った人がステップアップして、とりあえず手を出す場所はどこか と言われると、それもまたお勧めできる環境がなかったりします。
前に読んだアイディアを実現させる最高のツール プログラミングをはじめようにも、現状の教育向け環境には、「実用性がない」ということを問題として掲げています。そう、そこそこでもいいので「実用性のあるもの」が作れる、かつ「学習にももってこいなプログラム環境」が存在しないのです。
コードを無くせ
そのためには何を無くせば良いのか というと、個人的にはコーディングを無くせばいいと思っています。
コーディングは、わかる人にとってはやりたいことを的確に表現できますが、選択肢が多すぎて初めての人にとっては何から手をつけて良いのかわからなくなるのです。
また、スペルミスや記号の欠損から来る構文エラーを防ぐことによって、アルゴリズムと関係ないところでエラーが発生するリスクも減らすことが出来ます(文末のコロンとセミコロンを間違えて構文エラーで止まる なんてことは、学生時代よく目にしました)。
そうではなくて、例えばScratchのように、ブロックで表現したら?処理の最小単位だけで良いのでフローチャートなどで表現できるようにしたら?それだけでもかなり初心者がステップアップしやすくなる と思います。
なんでそのような環境が存在しないのか?
自分は、どちらかというと「プログラミングで作れるものを考えたり、そのためにアルゴリズムを考える」という工程は好きですが、「そのために言語をこねてコードを書く(いわゆるコーディング)」という工程は大嫌い*2な人間なのでイマイチわからないのですが、「上記の両方が好き」という人が多すぎるのが問題なのかなあ と漠然とですが思っています。
そのせいで、実用性のあるプログラムを作ろうと思ったら「そんなのコードで表現すれば良いじゃん」になってしまう。そのせいでいっこうに「実用性があって、かつ初心者にも容易に扱える環境」というのが少なくなってしまったのかな(というか、増えないのかな)と思います。
コードが無くなるだけで良い。構文エラーやスペルミスで悩むことが無くなるだけで良い。構文上あり得ない場所にあり得ない命令が書けないようになっていれば良い。それだけで初心者にお勧めしやすくなると思うんですが、どうでしょうね。
とはいえ、そういう環境だってある
たしかに、そういう環境は少なからずあります。
- Windows Workflow Foundation:なんだかしばらく噂を聞きませんでしたがまだ使えるんでしょうか・・・
- MIT App Inventor:良い環境だと思います。ただし英語です。
ほかも聞いたことがある気がするのですが、今ググったら見つかりませんでした。
でも、あまり数がない。そして、これらの環境はプログラムコードに変換することができないので、今後の学びにつなげたり、開発の下地に使ったりすることができない という問題もあります。
どんどん複雑になっていくプログラミング
そして、プログラミングもどんどん複雑になっていっています。
Windowsデスクトップアプリ(with Visual Studio)なら、フォームデザイナにコントロールを配置して、その動作を定義しておしまいですが、UWPだと密接に関わる二つのプロジェクト*3をうまく連携させて書かなければいけない。
別OSではAndroidなどもありますが、こちらはインテントの仕組みや動作の流れなども理解してコードを書かないといけないし、少しでも古いコンポーネントでコードを書くと、メモリリークを引き起こしたり強制終了したりしてよろしくない。
ちょっとしたアプリを作ろうというだけで、プログラマが直面する問題がどんどん増えていっています。
そんな中で、プログラミング教育とは、プログラミングにちょっと興味を持ってくれた人が使う言語は何が良いの?なんて思ってしまいます。
現状
今の時点でプログラミングを初めてやるのであれば。これくらいしかないのかなぁ(すべてそれぞれのデメリットを乗り越える必要がありますが)
- Visual Studio Community:大容量のデータをインストールする必要がある上、インストールに失敗したときの処理等を含めると結構大変ですが
- xojo, Delphi:お試し版なら無料です。Delphiだととりあえず買い切りが可能なようなので、一度頑張れば配布も可能な環境が整えられますね。
- Microsoft Office(VBA):たぶん一番手軽だと思います。まあ、それぞれの環境を立ち上げないとアプリが起動できない上、迂闊にメッセージフックなどしようものならOfficeを巻き込んでアプリが強制終了したりしますが。
- HSP:いちおうフォームデザイナがあったと思います。とはいえ標準命令でできることが少なく、ツールアプリを作ろうとしたらすぐWinAPIのお世話になることが少なくないため、むしろハードルが高いように思えました。
まあ、GUIデザイナという時点で割と高度な技術なので、多少値が張るのは仕方がないとして、このくらいなのかな。
プログラミング初心者向けの環境については、「今の開発環境が優しくない」というわけでなく「昔から開発環境は優しくなかった」という気もしますが。
これからどうなる?プログラミング教育
ほんとうに、どうなるんでしょう?自分も「子どもの環境を用意するのは親や地域」ということで、まちづくりエージェントSIDE BEACH CITY.としては地域メイン(子ども向けではない)プログラミングワークショップを行っていますが、正直あの中の人がもし、プログラミングに興味を持ってくれて、何か作ってみたいとなったとき*4に、お勧めできる環境がないのが心理的にとてもつらいです。
正直、つくるしかないのかなあ なんてのも思っています。とりあえずブロックライブラリなら、そら豆ブロック:ブロック型コードエディタ - catch.jp-wikiやgoogle/blockly · GitHubもあるようですし。とはいえ、これらを使ってちゃんとしたアプリを作れる自信などは全くないのですが。