関西勉強会

昨日は帰ってきた時かなり疲れ果てていたのでとりあえず今書く。あ、3ヶ月ぶりですみません…(汗;

昨日、大阪まで行ってなでしこの勉強会(とは言ってもほとんど自己紹介&交流会程度の非公式お茶会)に参加してきました。ほとんど飛び入りでしたが。

色々興味深い話が聞けました。本当にパソコンができない人にとっては、「ツール」として使いやすいか否かが全てで、プログラミングなんてのはそれ以前の問題。主に話題になっていたのは、ネット通販をしている人達(買い手の方ではなく主に売り手の方)にとって「なでしこは使えるツールか?」ということ。そういう人達にはそもそもパソコンができない人も多くて、「なでしこならできますよ!」というキャッチフレーズはあまり意味がない。「なでしこで作ったこんなフレームワークを使えば簡単ですよ!」という方向性で押し進めないと、「道具」としては使ってもらえないのではないか?とまぁそんな感じの話でした。

今までなでしこは「使えますよー」「便利ですよー」と宣伝してきた。しかし、じゃぁ今まで具体的な「実績」があったかと言うと、個々人で使う分にはあったかもしれないが視野を広げて見ると実績は皆無に等しい。実際、なでしこ製のキラーアプリ(ヒットしたアプリ、ゲームとか)は今の所あまりない。

一応"あまり"と言っているのは、局所的に見れば十分にヒットしていると言えるものはちらほらあるからです(ε-近傍を十分小さくとれば十分大なる以下略)。

だから、まずは成果をあげないといけないわけです。通販に使えるようなフレームワークが登場するとか、なでしこ製のソフト・アプリ・ゲームが Vector や雑誌で日の目を浴びるとか、そういう方向性がなでしこの今後の発展には必要でしょう。

以上、勝手にも個人的な昨日のまとめ。

で、同じく昨日の参加者の AI さんが今作ろうとしているのが、ネットワーク越しになでしこの共同編集作業を行えるようなエディタ。 NakoNetEditor (仮)で通称 NNE プロジェクト。

さっきの話で言うと、キラーアプリだとか大きなものを作ろうとすると、個々人での作成では追いつかない所があるので、共同作業ができるといい。あるいは、初心者がプログラミングを学ぶには他人のアドバイスをリアルタイムに受けながらが一番いい。

そういう需要に対して、

  • 簡易チャット機能
  • ソースコードの同期

といった機能を実装した開発環境があるといいのではないか?というのが AI さんが NNE プロジェクトで目指す所です。

うまく完成すれば、かなり便利ではあるはずです。加えて、 area さんが絶賛作りかけ(のまま放置中)のなでしこ専用の統合開発環境 NakoRAD に統合できたりしたら、かなり未来性があります。(かなり(仮定|過程)を置かないと実現しそうにないですねぇ(苦笑))

実現性はともかくとして、未来性がある話ってとても楽しいので好きです。

ついでに、チャット機能はともかく、ソースコードの同期をとる処理はかなり難しいでしょうねぇ。旧時代のバージョン管理システム CVS が割と杜撰な管理で conflict を起こしていたという所を考えると想像に難くない。

ライブコーディング

で、まぁ一応各人何かしらテーマに沿った発表的なことをしたので、僕もぶっつけ本番でブラウザ・ネットワーク関連の命令を使ったライブコーディングしました。行き当たりばったり、いいですよね!

扱ったのは主に"ブラウザ支援"系の命令。

  • ブラウザINPUT値設定
  • ブラウザFORM送信
  • ブラウザHTML書換

これらを使ってログインフォームへの入力・送信を行ったりする方法をその場で組んだわけですね。「ブラウザHTML書き換え」命令は新しく追加された命令、ということで軽く紹介。

しかし、ばったりんコーディングの割には好評でした。自分では分からないですが、他の人がコーディングしている所を生で見ると言うのは意外に面白いようです。

ニコ動とかにライブコーディングうpしてみようかなぁ?と真剣に考えてしまいました(笑)。しかし、ニコ動はレスポンスあるけどそれはリアルタイムじゃないので、厳密に言うと少しライブコーディングというのとは違いますね。僕はその場で言われた感想とか疑問を受けて方向修正したりしながらの、文字通りライブコーディングをしてそれが受けたわけであって。

ゲームで学ぶプログラミング

最近、ゲームをしながらプログラミングを学べる Robocode というものの存在を知りました。ゲーム形式のプログラミング学習、ではなくて、ゲームをすること自体がプログラミングをすること。つまり、実際にプレイヤーを動かすコードを書いてゲームをする。結構昔からあったやつらしいけど、かなり面白いと思った。言語は Java です。

以下、関連リンク。(IBMの公式ページは今見れないっぽい・・・?)

やはり、体験的な学習というのは身に付きやすいと思うんです。ユーザエクスペリエンスですね(笑)。面白いことなら前のめりになってどんどん吸収できるから、変数や配列、関数もすぐクリアできる。しかも題材がロボットだから、ある一定以上に到達すれば自然とオブジェクト指向まで行きつける。これはすごいと思う。

ここまで褒めちぎっておいてなんだけど、僕は実際には Robocode やってみてませんよf(^^;) 解説ページとか紹介とか読んで、発想が面白いと思ったことを書いてるだけです、あしからず。

で、今考えてるのが、なでしこでも似たようなことをできないだろうか、ということ。迷路のようなゲームでプレイヤーを操作させてゴールまで辿り着く。もちろん、操作するのはなでしこのコードで、こんな感じ:

プレイヤーを1歩進める。
プレイヤーを右に向ける。
10回
 もしプレイヤーの前方が壁ならば
  プレイヤーを右に向ける。
 違えば
  プレイヤーを1歩進める。

どうでしょう?面白そうじゃないですか?上のコードのように、繰り返すことや条件分岐をすることもすんなりと頭に入る。変数は…どうでしょう、複雑な思考処理をさせるにはフィールドデータを保持しておく必要があるので、そこで必要になるでしょう。

基本的な"命令"の仕方は実際にやってみて覚えられる。まずは「試す」というスタンスを覚えさせる。使える命令数は少なくてもいい。最低限「前進」「回転」「前方調査」さえあれば何でもできる。むしろ、それだけしか使えなければ、あとは自分で工夫せざるを得なくなる。そしたら「後退」や「全方位調査」といったものを必要に応じて命令を作ることになる。自然と関数の概念を覚えられる。

まだ思いついたぐらいで漠然とした話ですが。昨日の今日思いついたぐらいなので、またこの発想を温めていけたらなぁと思ってます。