約2.5ヶ月くらいかけて、プログラミングを全く知らない人がJavaScriptをゼロから勉強出来るサイト、算数で挫折した人向けのJavaScript入門 を作りました。

mastodon.cloudという所で住人の一人が「RPGツクールMVの為にJavaScriptを覚えたいが、自分は算数で挫折しているからな〜」と言ってたのを見て、「別に算数で挫折しててもプログラムはある程度は出来るんじゃないか?」と思ったのがきっかけで作りました。 見てみれば分かるけれど相当時間掛けて作ったもので、ここ二ヶ月くらいはこれ書いてばかり居ました。

モチベーション

以前からあまり学校とか行かなかった人でプログラム覚えたい、という人にちょくちょく出会う機会がありました。

そういう人向けにプログラムを全くやった事無い人が無料でプログラムを覚えられる入門サイトがあっても良いなぁ、と思っていたので、目の前に全く分からないが意欲が高い人が居たのと、ちょうど暇だったので作ってみました。

JavaScriptの入門サイトは結構あるのですが、webを前提とした物が多く、プログラミングの完全な素人がプログラミングを学ぶ為の入門としては、htmlやDOMという余計な事を学ばないといけない為不向きと思っていました。実際プログラムを覚えたいと言っている目の前の人は、これらの入門サイトで挫折した経験を持っています。 実際挫折した、という入門サイトを見てみた所、確かにこれじゃあ完全な素人には辛いかもな…という内容でした。

また、Coursera世代としてはプログラミングの入門は課題とかやっていく形が良いと思うのだけど、 そういう形式の物はユーザー登録が必要だったりして中身が良く分からない物も多い。 JavaScriptでオンラインで自由に自習出来て、課題があって、 分かりにくい所を問題でちゃんと分からないと認識出来るような物があってもいいんじゃないかな、と思っていました。

目の前にちょうど分からない、と言っていて意欲はありそうな人が居たので、試しにその人向けに作ってみた、というのが今回の粗筋となります。

形式

普通にweb上で解説を読んで行きながら課題を解く、という形式です。 完全に自習で進められるように、と考えて作りました。

自主的に中身を変えて試したりしなくても、先頭から課題を進めていくだけで十分なバリエーションの課題を用意するようにしています。 最初から指示通りにやれば個人差無く内容を習得出来る事を目指しています。

また、分かったと勘違いしやすい所に関してはなるべく課題で分かってない事がちゃんと判明するような課題を用意するよう心がけました。

自分が理解出来ているかどうか、というのを判断するのは、 ある程度この手の物の学習経験が必要だと思っていて、 この辺を慣れている事を前提としたプログラムの入門が多い、と感じています。

ですが、慣れていない人だって教材の方をちゃんと準備すれば別にプログラムを学習する事は出来るはず。 むしろそういう人こそプログラムを覚える事の人生に対するインパクトは大きい、という気がします。

そこで、自分が分かったかどうか、のような高度な判断を各自がしなくても、 課題が出来れば分かっている、出来ていなければ分かっていない、 というのが明らかなように課題を用意しました。

また、とにかく課題を数こなす事で、動かしてなんとなく理解する、というのを、 教材を進めていくだけで出来るように、と考えて作っています。

既存の教材は自分でいろいろ変えたり作ってみたりして学ぶ、 という事を最初から読者に期待している事が多いのですが、 必要な所で立ち止まっていろいろ試す、というのにもある種の才能が必要です。 別にそんな才能無くてもプログラムを覚える事は出来るはず、と思ってこのシリーズを作りました。

やってもらった結果

まず結果から行くと、その人は全11回を終えて、おまけの第一回を現在やっている、という所まで来ています。第一回は乗り越えられそう。 おまけの第二回はちょっと難しすぎる感はあるので最後まで終わるかは現時点では分かりませんが、配列、辞書、関数といったあたりはそれなりにちゃんと理解していて、 このシリーズの目的は達成出来たかな、という気がしています。

やってもらって感想を聞きながら手直しをして完成させたのですが、 やりとりをした印象では本気でプログラムの経験は無く、 既存の入門サイトではちょっと分からないかな、 と思いました。
そんな人が無事ほぼ最後まで行っているので、この試みはかなり上手く行った、と言って良いと思っています。

難易度と分量的にも結構いっぱいいっぱいで、良く乗り切れたな、という位ギリギリな印象でした。 これ以上は中身は増やせないかなぁ、と。

扱っている内容

内容の話も簡単に。 このシリーズはもともとの目的がツクールMVのプラグインを作ったりいじったりするのを目的としています。 逆にwebの事は一切考えてません。 WSHなどの用途で使うことなど、JSをスクリプトとして採用しているweb以外の用途は、ある程度視野に入れた内容にしています。

ツクールMVのプラグインは結構難しい。 例えばどこかのprototypeに入っている関数を一旦変数に取り出し、 別の関数を差し替えて元の関数をcallやapplyで呼びます。 thisも結構使う。 この辺の内容は既存のJavaScript入門ではうまくカバー出来ていません。

このシリーズはコンストラクタやprototypeチェーンの話はちゃんとはしていませんが、 thisの話は結構真面目にやっています。 また、関数はfunction expressionを中心に、ファーストクラスのエンティティとして最初から扱っています。 そういう訳でcallやapplyも完璧では無いにせよ、 初期の段階で必要な事はちゃんと解説出来ていると思っています。

また、オブジェクトリテラルをかなり頻繁に使っていくスタイルなので、 POJO的な感覚を自然に身につけられるように、と配慮しています。 初心者がハマりがちなクラスとインスタンスの違いなども、 しばらくオブジェクトリテラルの経験を積んだ後ならスムーズだろう、 という事で。

その代わり、普通の入門書では必ず出てくるループ、スコープ、データ型あたりはあまり真面目にやっていません。 この辺の内容の取捨選択は結構考え抜かれた内容になっているんじゃないか、と自分では思っています。

実際ちゃんとおまけまでたどり着いているくらいにはこなせる分量に収まっていながら、 最終的にはプラグインの基本的な構造は理解出来るようになっているようなので、 かなり素晴らしい成果なんじゃないか、と自分では思ってます。

内輪ネタが多い

内容が非常にそのmastodon.cloudという場所のネタが多くなっているので、 一般の人には分からない物もかなり多くなっています。 この辺は読み物としての面白さは挫折しない為には結構大切、と思った自分が、 対象とする人向けに最適化した結果です。 結果として一般の人がやるには不必要な難しさがあります。

ただ、将来誰か別のコミュニティ向けに同じような事をしたくなったら、 これをベースに手直しした物を作れば良いか、 とは思ってますし、一般の人向け版を作るのもそんなに大変じゃないとは思っています。

また、完全な素人じゃなければネタが分からなくても読んでいけるくらいには詳細な解説で進んでいくので、 プログラムを勉強してみたい、と思っている人には現時点でもそれなりに勧められる物にはなっているんじゃないかなぁ。

作って分かったプログラム学習の難しさ

作ってみて初めて分かった事としては、

  1. 配列とかオブジェクトリテラルのネストというのが意外と難しい
  2. 中学英語くらいを無意識に前提としがち

の二点です。

1に関して。我々プログラマは、想像以上に一般人よりもjsonのネストに慣れすぎている。 知らないサービスのwebのリクエストとか投げて返った結果から挙動を理解したり、 とかやりすぎな結果、普通の人には分からない事がすぐに分かってしまったりする。 なので無意識に難しい事をさらっと流したりしてしまって良くないなぁ、と思いました。

このシリーズでは完全な素人がやると第五回か第六回で確実に分からなくなると思います。

その対策として第6.1回、6.2回、6.3回の百本ノックを作りました。 これは我ながら素晴らしい出来と思っています。 実際この位やればだいたい感覚は掴めるっぽい。

2に関して。

例えばresultとかaddとかMessageとか、 この位なら別に英語って程じゃないだろう、 と自分などが考えてしまう事も、慣れていない人には立派な英語だった。

別に変数名とかなんて分からなくても問題無かろう、と思っていたが、 結構こういった所から無意識のうちにヒントをもらっている物だった、 と分からんと言われてから気づきました。

確かにフランス語の文とからなちょっとした長さでも気力を凄い消費するものです。 英語を慣れてない人なら、同じように多くの知力、気力を消費しているはずなのに、 そういう事は言われてみるまで気づきませんでした。

プログラムを知らない人向けにプログラムの入門を書く時に、 簡単な英語とか算数とかを無意識のうちに前提としがちだよなぁ。
でも、そういう事が分からない人こそプログラムを覚える効用は大きいので、 単に説明する側の意識が至らないだけでそういった道を閉ざしているのはもったいない話ですよねぇ。

まとめ

という訳で完全にプログラムの素人が、プラグイン書いたりWSHのスクリプト書いたり、と言った事を始められるようになるようなプログラムの入門教材を作った。 内輪ネタは多いが、既存の入門書で挫折したような人でも無事おまけまでたどり着け、結構な水準に到達出来る物になって我ながら素晴らしい。