Chienomi

非プログラマ向けプログラミング記事を書いた

プログラミング

  • TOP
  • Old Archives
  • 非プログラマ向けプログラミング記事を書いた

記事の主旨

Mimir Yokohamaでプログラミングの記事を書いたのだけど、今回の記事はMimir Yokohamaの中でもちょっと毛色の違うものである。

プログラミングという言葉は知っているけれど、漠然としたイメージがあるだけで、自分がプログラミングをするなんてことを露ほども思っていない人に対し、 「プログラミングができるように」という主旨 ではなく プログラミングに対するイメージを正しく固めてもらうことを主旨として プログラムを書く ものである。

最近とても筆がノッているようで、非常に良い記事を生み出すことができているのが、今回も非常に良い記事になった。 データをふっとばしてから、ようやくMimir Yokohamaを復元できたというのもある。

授業カリキュラムの話

Mimir Yokohamaの授業には固定のカリキュラムがなく、カリキュラムも教材も個人個人に合わせる形で制作される。 そのため、授業料はあまり安くはないのだが、実は時間単価は非常に安い。特に進みが良い生徒さんだと大変だ。

しかし固定のカリキュラムがないとはいえ、全部毎回まっさらの状態からスタートしていては大変なことになってしまうので、ある程度使い回せるように「教材のフラグメント」というのがある。 これを「ベース教材」といっており、授業の進み方に関わらずその事柄に関して説明すべきことがまとめられている。

「プログラミング初歩」においてもカリキュラムのベースになる考え方というのはある。 もちろん、場合によってはそれは全く適用されないが、プログラミング初歩は特徴的なこととして、「そもそも二段階あるにも関わらず、アプローチが3つある」ということである。

「プログラミング初歩」では基本として「プログラミングにおける一般論を学んだ後、特定の言語でプログラムを組み立てられるように学ぶ」という形式がある。 これが二段階の由来である。

ところが、そもそものスタート地点から

  • プログラミングに対して全く無知で、まっさらの状態からスタートする人
  • プログラミングに対して関心が強く、目的意識がある
  • 既にプログラミングをしている (だいたい職業プログラマ)

の3タイプがあり、アプローチが全く違う。

まっさらタイプの人に対する授業は、基本的に今回の記事のような「体験」を主体とした考え方になる。 小さな「プログラミング体験」を積み重ねることでプログラミングの「感覚」や「像」を組み立てるもので、これはヤマハ音楽教室の授業を参考にしている。

プログラミングに対する意欲が強い人に対する授業は基礎からみっちりやる感じ、プログラムが書けるようになるまでの道のりの長い大変なやり方だが、 しっかり基礎がためをすることで高い地力の獲得を目指す。 全体的にMimir Yokohamaの専門的な授業はこの方向性であるため、もっとも「王道」であると言える。

このパターンはさらに、トップダウン方式(全体像を示してから個々を掘り下げていく)とボトムアップ方式(細かい要素を積み重ねていく)の2つに分かれ、 ボトムアップ方式がデフォルトだが、見えないまま積み重ねるのが苦手な人の場合はトップダウン方式がとられる。

職業プログラマの方だと、認識の不足や間違いが問題になることが多い (プログラムに広く通用する形で正しく認識できている方が初歩の授業を受けることはない)。

このため、その認識の確認と修正を繰り返すようなちょっと変わったカリキュラムになることが多く、 より信頼感が高い方の場合はボトムアップ方式が取られる。既に経験があり、プログラミングがどういうものでどういう要素があるかを知っている以上、トップダウン方式をとることはない。

プログラミングしない、できない人の感覚に寄り添う

人に教えるほどプログラミング大好きな人間の感覚としては、当然ながら「プログラミングの楽しいところ」とか「プログラミングの要素やテクニック」というものを語りたくなる。

だが、根本的に普通の人にとって「コンピュータは怖いもの」なのだし、プログラミングなんていうのは怪しげなエセ科学製品か、さもなくば巨大工場で作られる想像も及ばないプロダクトと大して変わらない。

プログラミングに対する一般的な感覚としては、プログラミングをはじめるにはすごくお金がかかると思っている人が多いし、プログラミングするには特別な高性能なコンピュータが必要だと思っている人も多い。 きっとこの記事を読んでいる人の中にも、そのように考えていた心当たりのある人も多いだろう。 いや、私ぐらいの世代だと、実際「本物のプログラミング」のためには非常にお金がかかるものだったりしたのだが。

そうした、プログラミングなんて自分とは関係ない、という感覚の方のためにするプログラミングの話というのは、 プログラミングってこんなことしているんですよ、という種明かし、そして、「そんなことができるなんて想像したことがない」ようなことを実際に体験し、それを成功体験にする、ということが大事だ。

授業は常に、「できない人がどんな気持ちで、どんなことを考え、あるいはどんな認識でいるか」ということを考えなければ成立しない。

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で初学っていうことは、ウェブアプリとか作らせるんだ」みたいなことが念頭にあるのだろうけど、それは事実ではない。