Yokohamaの中でもちょっと毛色の違うものである。最近とても筆がノッているようで、非常に良い記事を生み出すことができているのが、今回も非常に良い記事になった。Yokohamaを復元できたというのもある。Yokohamaの授業には固定のカリキュラムがなく、カリキュラムも教材も個人個人に合わせる形で制作される。そのため、授業料はあまり安くはないのだが、実は時間単価は非常に安い。進みが良い生徒さんだと大変だ。固定のカリキュラムがないとはいえ、全部毎回まっさらの状態からスタートしていては大変なことになってしまうので、ある程度使い回せるように「教材のフラグメント」というのがある。これを「ベース教材」といっており、授業の進み方に関わらずその事柄に関して説明すべきことがまとめられている。「プログラミング初歩」においてもカリキュラムのベースになる考え方というのはある。場合によってはそれは全く適用されないが、プログラミング初歩は特徴的なこととして、「そもそも二段階あるにも関わらず、アプローチが3つある」ということである。「プログラミング初歩」では基本として「プログラミングにおける一般論を学んだ後、特定の言語でプログラムを組み立てられるように学ぶ」という形式がある。これが二段階の由来である。(だいたい職業プログラマ)の3タイプがあり、アプローチが全く違う。まっさらタイプの人に対する授業は、基本的に今回の記事のような「体験」を主体とした考え方になる。小さな「プログラミング体験」を積み重ねることでプログラミングの「感覚」や「像」を組み立てるもので、これはヤマハ音楽教室の授業を参考にしている。基礎がためをすることで高い地力の獲得を目指す。Yokohamaの専門的な授業はこの方向性であるため、もっとも「王道」であると言える。ボトムアップ方式がデフォルトだが、見えないまま積み重ねるのが苦手な人の場合はトップダウン方式がとられる。(プログラムに広く通用する形で正しく認識できている方が初歩の授業を受けることはない)。信頼感が高い方の場合はボトムアップ方式が取られる。経験があり、プログラミングがどういうものでどういう要素があるかを知っている以上、トップダウン方式をとることはない。プログラミングしない、できない人の感覚に寄り添う人に教えるほどプログラミング大好きな人間の感覚としては、当然ながら「プログラミングの楽しいところ」とか「プログラミングの要素やテクニック」というものを語りたくなる。根本的に普通の人にとって「コンピュータは怖いもの」なのだし、プログラミングなんていうのは怪しげなエセ科学製品か、さもなくば巨大工場で作られる想像も及ばないプロダクトと大して変わらない。プログラミングに対する一般的な感覚としては、プログラミングをはじめるにはすごくお金がかかると思っている人が多いし、プログラミングするには特別な高性能なコンピュータが必要だと思っている人も多い。この記事を読んでいる人の中にも、そのように考えていた心当たりのある人も多いだろう。いや、私ぐらいの世代だと、実際「本物のプログラミング」のためには非常にお金がかかるものだったりしたのだが。プログラミングってこんなことしているんですよ、という種明かし、そして、「そんなことができるなんて想像したことがない」ようなことを実際に体験し、それを成功体験にする、ということが大事だ。授業は常に、「できない人がどんな気持ちで、どんなことを考え、あるいはどんな認識でいるか」ということを考えなければ成立しない。JavaScriptの理由HTMLをプログラミング言語として言われること、実際は多いのだが、私は常に「それはプログラミング言語ではない」と言っている。HTMLはデータフォーマットであり、しかもマークアップ言語という「意味付けを追加したテキスト」でしかない。文章を書くことを「プログラミング」と呼ぶのはさすがに無理がある。それを「プログラミングだ」と感じるのは、“普通ファイルというのは専用のアプリによって自動的に作られるものであり、意味を自ら書いてコンピュータに解釈されるものだからプログラミングだ”という感覚である。テキストファイルでデータを記述する感覚というのは、初歩的な段階ではやはりプログラミングに近いし、プログラミングをする人間の領域にも近い。「HTMLはプログラムではなく、HTMLを書くことはプログラミングではない」というのはHTMLという成果物に基づいて述べているが、HTMLをプログラミングだと言う人の意見は行為に対して述べている。HTMLをプログラミングだと認識する人であっても、ホームページビルダーで書いたり、あるいはWordPressでHTMLを生成することをプログラミングだとは認識しない。逆に言えば、グラフィカルな環境でプログラムをビルドするタイプの体験(例えばScratch)は、プログラミングの要素を多分に含んでいるにも関わらず、プログラミングをしたという成功体験にならない。プログラミングという感覚がない人に対する説明においては、この感覚に寄り添う必要がある。HTMLを書くというのは第一の成功体験になり、プログラミングへの導入として機能するのである。これを踏まえて、入門にあたり私は「HTMLはプログラミングではない」という立場を捨てて、プログラミングの入門としてHTMLを書くということをすることになる。JavaScriptを初学に推奨する理由もここにある。JavaScriptは非常に簡単にビジュアルプログラミングが可能であり、要素を大幅に省略可能であるからだ。特別なソフトウェア導入が不要で、馴染んでいるソフトウェアを利用できるという点も大きい。未知の行為というだけでも抵抗があるのに、ソフトウェアを導入するとなるとものすごく嫌がられる場合が多いからだ。この場合によおいてはプログラミングしやすいエディタの導入なども避けている。JavaScriptコンソールを使って対話的にコマンド実行が可能であるというのも大きい。対話的実行という点だけを見ればPython対話モードであれ、irbであれ、Luaシェルであれ、あるいはPerlデバッガであれ色々と方法はあるのだが、そのためにはやはり嫌がられるコマンドライン環境を利用する必要があり、ハードルが上がってしまう。した始めの一歩に良い、というのもあるが、JavaScriptにはさらにいくつか重要な点がある。かなりの大幅な省略が効くことだ。省略して書けることは、まず本質部分だけを書いて動作することを確認し、少しずつ知識を増しながらよりしっかり書いていくということができる。この部分においてあまり特殊な部分がなく、非常にオーソドックスな書き方ができるため、小さな知識の修正で他の言語に適用できる書き方になるというのも非常に大きい。プログラミングを概念として学ぶ言語はなるべく中庸なほうがよく、RubyやPythonのように尖った文法を持つ言語はいささか採用しにくい。PHPのように挙動にクセがある言語もだ。ひとつ重要な点として、JavaScriptにはしっかりしたクロージャがある。クロージャは様々な場面で利用でき、「オブジェクト」を理解する上でも鍵になる。一般的な知識には直結しないが、直感的に理解しやすいのも大きい。初学にJavaScriptを使うことに対してはかなり批判もあるが、意図としてはこのようなものである。批判はおそらく「JavaScriptで初学っていうことは、ウェブアプリとか作らせるんだ」みたいなことが念頭にあるのだろうけど、それは事実ではない。