はじめに
これを書こうとしてたら rosylilly が良い感じに書いてくれてて、内容的にはかなり被ってる感じがするから書かなくても良いかなと思ったんだけど、自分の中でアウトプット欲が高まったので書いておきます。
プログラミングの話 - 鳩舎
「まずは何を作りたいか考えてよ」について
僕自身、プログラミングを教える経験は
- 高校のコンピュータ部
- 京都クリエイティブワークショップでの活動
の大きく2つです。
それを踏まえて上の記事を読んで反応的に書いたpostがあるので、下に貼っておきます
ちゃんと読んでないけど、「『プログラミングしたい』の前に何が作りたいかを考えろ」ってやりとり自体は僕自身も人に言ってしまう経験あるけど、この発言はプログラミング経験者が人に教えるときにその方が教えやすいとかそういう意図が大きいと思う
でも、プログラミングを学びたいとかやってみたいって人は「プログラミングで何が出来るのか」が分からないから、そもそも自身でアイデアを出しても実現(不)可能性が検討できなくてアイデアが出し辛いから「何でも良いからプログラム書かせてよ」って人が多いのではないかなあと感じる
Scratchとかで色んな年代の人にゲームやら何やら作る体験をしてもらうと、反応として「こんなゲームが自分で作れるんだ」って一度その人がなると「こういうのが出来そう」とか「?がしたいんだけど、どうすればよい?」というフェイズに移るように見える
元記事の
実は勉強って後からの方が効率的
っていう部分は僕もすごく同意しています。
僕自身のプログラミング遍歴についてはhttp://d.hatena.ne.jp/Pasta-K/20110518/1305724107に書いてあるので、割愛しますが、僕自身の場合は
- 作りたいものがある
- そのために必要な関数やテクニックなどを検索して見つける
という流れで今までプログラミングをすることが多かったので、ちゃんと勉強したり本を読むのはいつも後になっていました。なので、後から勉強する方が効率が良いことを体験として知っているつもりです。
その結果、友人などに「プログラミング学びたいんだけど〜」って言われたら「何か1個作りたいもの決めて、それに必要な機能とか調べていけば良いよ」って言ってしまうのですが、今になってよくよく考えれば、これこそまさに「F1ドライバー視点」で話してしまっているなぁということに気づきました。
こういう返答をしてしまうのは、「F1ドライバー視点」と僕の場合は「人に教える手順を知らない」というのが大きいように感じています。
僕が初めてプログラミングをしたのはBasicで、ポケットコンピュータの説明書には学習本と同じく各関数などが機能ごとに章立てられてたのですが、僕には当時それを1つずつ読んでいく気力と忍耐がなかった(「で、この命令って何にどうやって使うの??」状態になってしまっていた)ので、サンプル集みたいなのから面白そうなゲームを写経してました。その中でIFとかFORとか諸々の使い方を覚えていきました。
また、僕がJSでプログラミングを始めたての時に書いていたブログのアドレスを恥ずかしながらもここに貼っておきます。
http://pastalablog.s3.zmx.jp/
ここのトップページからリンクが貼られている「メガマック変換機」やら何やらは僕が初めてJSを書いた時につくったものです。見てもらえば分かると思いますが、とってもとても糞コードが並んでいます。
それはさておき、僕の場合はこれらのアイデアが先にあって、プログラミングを使えば実装出来ることや、JSとHTMLで簡易な計算機のようなものを作れることを知っていた*1ので、調べながら自学でJSで実装して作っていました。
なので、「作りたいものがない人」にプログラミングを教える方法・手順を自身が知らないけど、個別の機能については知っているので「作りたいものを考えてよ(そうすれば、必要な機能をベースにしてプログラミング教えられるからさ)」と言ってしまうのかなと自分自身のことを考えてみると思いました。
実際、僕が高校のコンピュータ部で初めて後輩たちにプログラミングを教えるってなった時にはすんごく悩んだのを覚えています。結局は部室に転がっていた本を片手に僕が毎週予習をしたのを発表するって感じにしていました。
話題は戻りますが、前述のやり取りをした時、だいたい相手から返ってくる反応は
- 何が出来るのか分からない
を言い換えたものであったように思います。
要するに「自分の考えたアイデアが無茶苦茶なものでプログラミングでやるにはとてもむずかしい課題になったらどうしよう」と不安に感じるようです。
きょーくりっでの経験話
上記2つ目のpostや上にも書いたことなのですが、僕らはプログラミングについて経験があるので、ある程度プログラミングで出来ることを把握しています。なので、こういうことをしたければ、こういう方法を使えば実装できそうだなってことを考えていると思います。(アイデアありきで、どうにかこうにか創意工夫をして問題を解決している例も多々あるとは思っていますが…)
そこで例えばScratchワークショップの場合だと(暴力的に誤解を恐れずに表現すると)誰もが知ってるゲームの模倣をしてみようというタイプのワークショップをやっています。*2
プレイしたことあるゲームだと、必要な機能などがイメージしやすいから、プログラムを書くときに完成をイメージしながら作業できるかなと思っています。
僕らのWSの場合、最初にみんなでベースを作って、+αはそのあとの時間にという風にしていて、その+αの部分で、前述のような「何が出来るのか分からない」問題を抱える参加者が毎回数人います。そういう人たちには敢えて「大体何でも出来るので、やりたいことはドンと言ってくれたら、そこから一緒に方法を考えよう」って言うようにしています。これが正解かどうかは分かりませんが、こう言うと「じゃあ、〜を付けてみたい」という風にアイデアが出てくるという様子を何度も見てきているので悪くはないのかなと自分では思っています。
まとめ
「プログラミング学びたいなら作りたいもの考えてよ」はログラミング経験者が人に教えるときにその方が教えやすいとかそういう意図が大きいと思っています。
ただ、プログラミングを経験してから、後で正攻法で学ぶ方法が理解に役立つことも事実だと思います。
その辺をお互いで理解しあって、仲良く平和な世界を作れると良いですね。
こんな感じで僕なりのプログラミングを学びたい人とプログラミング経験者の間のやりとりの話を書いてみました。
(ちなみにこんなことを書いていますが、明日(正確には14日だから今日か)提出のレポートが1文字も進んでいません。)