プログラミングスクールの講師を始めて、もう8年ほどになります。最初に講師になったスクールでは、今も引き続き務めていますが、それ以外にもいくつかのスクール、研修機関などから講師のお話をいただいて、定期的にプログラミングや、ITのお話をする場を持っています。
未経験者がプログラミングを身につける(そう、まさに「身につける」です)には、どうすれば良いか。
その答えは、プログラミングは自分でかけた時間だけ身につくということではないかと。講師や教科書が良ければ、あっという間に身につく・・・という代物ではない。そんなことを講師が言ってはいけないのかもしれないけれど。
自分はどう習得したか
自分自身のことを振り返ると、誰かに教えてもらってプログラミングを身につけたわけではありません。だから、どう教わったら出来るようになる・・・というのが分からないのですが、プログラミングは学問というよりも技能なので、自分でやってみて、試行錯誤しないと身につかないのではないかということは言えます。
講師としての現場には、様々な生徒さんがいます。自分で学ぼうとする人、予習・復習をする人は講師がいなくても勝手にできるようになります。身近に講師がいれば、何か詰まったときに聞けるというのはあります。聞きすぎも結局身につかないので良くないのですが・・・。
生徒さんから出てくる質問で、自分で学んでいるのか、そうでないのか分かります。自分で学んでいない人は、いつも同じような質問しかしません。もちろん、聞く内容やその場面は違うのですが、講師からすれば本質的に同じことが質問されていて、そこが分かっていないのだな・・・ということが見て取れる。その本質的なことを説明しても、結局、また翌週には同じような質問が繰り返されるので、なかなか難しい。
自分はどうやってプログラミングを習得したのかを振り返ると、とにかく本を買いました。当時、10代の中盤から後半だったと思いますが、バイトして稼いだお金を費やしてプログラミングの本を買っていました。当時の私はJavaを習得しようと必死になっていたので、家にはJavaの本がどんどん増えていきます。(その前に、MSX BASICは何となく身につけていたのですが・・・。)
なぜ同じようなJavaの本が増えるかというと、Javaが分からなかったからです。分からないと、次の本を買う。当時はまだネットもそれほど普及していなかったし、情報源はとにかく本しかなかった。プログラミングについて聞ける人もいなかった。だから、本をとにかく取っ替え引っ替えしていわけです。
でも、そのうち分かるようになってくるのです。それまだ何のことを書いているのかさっぱり分からなかった本の内容が、スッと頭の中に入ってくる「瞬間」が来る。その「瞬間」さえ来れば、プログラミングは習得したも同然なのです。
私にとって、その本がどの本だったかというのは明確に覚えていて、今はなきMicrosoft Visual J++についての本でした。当時はプログラミングの環境(言語とかエディタとか、統合開発環境)を無料で入手できるものはあまりなくて(LSI C試食版とかあったけど)、その本にはVisual J++の体験版(たしか機能が少ないだけで、有効期限はなかったような?)が付いていたので、それが良かったというのもあります。
それで、そのVisual J++で作った習作のアプリは今でもベクターに掲載されています。いまでも、その公式サイトがあったりします。
そんなことを思い出すと、やっぱり寝ても覚めてもプログラミングを考えている時期というのは必要で、その時間の積み重ねがあって、やっとその「瞬間」にたどり着けるのではないかと思うのです。
だから、プログラミングの講師としては、もちろん教えるし、質問されれば答えるし・・・ということはやるのですが、そのスクールの時間だけでは「瞬間」は絶対にやってこないことも分かっているのです。
講師がいる意味
では、講師として教えていることに意味がないのか、プログラミングスクールは不要なのかというと、そんなこともないだろうとは思っています。不要ではないけど、必要充分というわけでもない。
絶対に必要なのは、自分でやる時間の積み重ねで、講師やスクールができることはその時間を少しは短くすること。そして、その先を見せることではないかと思います。
プログラミングを学ぼうとする人が何から、どういう順序で学ぶか計画を作る手助けはできます。実際に学び始めたときに、変数とか関数とかアルゴリズムとか、いろいろな学ぶ要素がありますが、その概説をすることもできます。自分で本を読んだり、実際にコードを書いたりするときに(プログラミングは自分の手を動かさないと絶対に身につきません)、概説が何となくでも頭の中に合った方が理解が早いでしょう。
そして、プログラミングを身につけたら、どんな未来が待っているのか。それは仕事や給料のことかもしれないし、起業のしやすさかもしれないし、何か1つの言語を身につけたら、また次の言語なり技術に進まないといけないことかもしれない(1つのプログラミング言語を身につけただけで一生安泰なんてことはない。但し、1つ身につけてれば、他を身につけるのは比較的楽だったりもする)。そんな先の話をして、モチベーションを高めてもらうようなことも講師にできることかなと。
あと、プログラミングを習得したいという人は、自分で作りたい何かを見つけておくことも重要です。プログラミングを学ぶことは日曜大工を学ぶようなものだと言った人がいますが、まさにそのとおりで、人は犬小屋を作りたいからトンカチを持ち出すのであって、大工技術を学ぶためにトンカチで1日100本の釘を打ち続ける人はいないのです(たぶん)。
同様に、変数の使い方のドリルを1日100問解いたからといってプログラミングが身につくこともないし、やりたい人もいないのです(たぶん)。それよりも、いま学んでいるプログラミング技術を使って、どんなアプリを作ろうか・・・と考えている人の方がモノになる可能性は高いでしょう。ある程度の段階に来たら、教科書を1ページずつ進めていくよりも、自分の作りたいアプリを作るにはどうしたら良いのか、それを逆引きして関係のあるところだけを学ぶ方が効率的なのです。
プログラミングを学ぶ上での目標
私は、プログラミングを学ぶ目標として、自分の作品(アプリ)を作ることをオススメしています。自分が作った作品はこれです、と人に見せられるのは古今東西、誰にとってもモチベーションにつながるでしょう。
そして、その作品を持って、IT系のコミュニティに行ってみたり、場合によってはビジネスコンテストとかに挑戦すると(そういうところに連れて行くのも講師ができることかもしれない)、新しい仕事に就けたり、自分が想像していなかったような展望が開けたりするのではないかと思います。
プログラミングを学びたいという人はいろいろいて、自分は別に何となくできれば良いのであって、別に技能として身につけたいというわけではないという人もいるから(世の中の流れに乗り遅れたくない系の人はこういう場合も多い)、それはそれで良いと思うのですが、できることならプログラミングを仕事にしたいという方は、やっぱり地道な努力に優るものはないし、そのお手伝いはしていきたいと思っているのです。本当にプログラミングが好きになってもらえれば、その地道な努力も楽しいということになりますから、できればそこまでのお手伝いは・・・。