2009-07-28

素人がプログラミングで挫折する8つのポイント

素人だけどプログラミングとかやってみたいPJで書いたブログをこちらにも掲載
世の中には、"プログラミングができる人"と"プログラミングができない人"、この2パターンの人間がいることは紛れもない事実です。

2ヶ月前に「素人だけどプログラミングとかやってみたい。」というプロジェクトを発足させてしまったことは自分の中でも青天の霹靂であり、それはいつもの「プログラミングとかやってみたいんだけど、一緒にどう?」とかいう"適当な発言"に、思いのほか賛同者が食いついてきたために引くに引けない状態になってしまったことが事の発端でした。

まさか自分が、"プログラミング"をやることになるとは思ってもいなかったものの、いざプロジェクトでやると決めた以上はキチンと成果を出したいものです。しかし、いまこうしてパソコンの前でブログを書いているということは、とどのつまりがいまプログラミングはしていないということになります。

プログラミング学習からの現実逃避。世の中にはたくさんの楽しいことが溢れている中、いまこの瞬間に"プログラミング学習"を選択しなければならないという葛藤。

素人が、プログラミングを学習する過程で気づいたことは、最初の計画や思惑通りに物事が進むケースがほとんどないということでした。たいていが何かしらの壁に突き当たります。ちょっとした"想定外"が連発します。プログラマーの熟練者ならどうってことないことだと思うのですが、教科書通りのことしか知らない素人が、ひとりで問題を解決するのにはどうしても時間がかかります。解決のためのアプローチが思い浮かばず、フリーズすること多し…。そして、それが結果として書籍の誤植などといった本人には非がないものだったとしても、プログラミングを学習することを諦めるに十分な出来事だったりするのです。

そこで今回は、素人がプログラミングを学習するにあたって挫折するポイントを列挙し、それをどのように解決していったらいいかを自分なりにまとめて書いていこうと思います。

【素人がプログラミングで挫折する8つのポイント 】
その1:何を作るのかが決まっていないプログラミング学習で陥りやすいこととして、プログラミングを学習することが"主"の目的になってしまうことです。あくまでも、プログラミングを利用して"何"を作るのかが重要で、最終的に何を作りたいのか目標を明確にすることが大切です。裏を返すと、何も作る予定がない場合は、いまプログラミングを学習しなくても良いのだと思います。

その2:プログラミング言語は難解であるという思い込み
書店に行くと、多くの種類のプログラミング言語の本が並んでいます。また、そのそれぞれの本の分厚さが半端ない。これらが要因で「プログラミング学習は難解である」という思い込みが生まれている傾向があります。しかし、日本語や英語といった自然言語の学習に比べると、人工言語であるプログラミング言語はいたってシンプルな法則により成り立っています。つまり、英語の文法を学ぶよりは、プログラミング言語の文法のほうが学びやすいのです。また、C言語やPerl、Rubyといった様々な言語がありますが、東北弁と大阪弁と博多弁のような違いくらいに最初は考えておいていいと思います。コンピューターに指示を伝えるときの言い回しが違うだけです。

その3:すべての基礎の上に応用があるという誤解
「はじめての○○言語」や「○○言語入門」といった分厚い書籍を最初のページから順番に学習していく必要はありません。作りたいと思っているものにとって、必要な箇所を必要なだけ学んでいくというスタンスで書籍と向き合うことが大切です。短期間で、効率的な学習を追求していくと、遅延評価勉強法に行き着くことになります。もちろん、この学習法には学習過程で試行錯誤することによるレベルアップができないという欠点もありますが、素人にとって試行錯誤ほど苦痛はないでしょう。試行錯誤して自身のレベルを上げていくのは、次のフェーズ、ある程度プログラミングにハマってからでいいと思います。

その4:プログラミング作業は孤独である
プログラミングを記述する作業はハッキリいって孤独です。しかし、独学で黙々と学習するよりも、途中段階の作品でも披露できる場所を作ったほうがプログラミング学習の過程を楽しめます。学んでいる内容、動き始めたばかりのプログラミングなど、自分が学習してきたことを公開して、まわりの人の反応を見ることは学習を進めるにあたり重要な要素だと思います。ぜひ巻き込める仲間がいたら、一緒に学んでくれる人、教えてくれる人を巻き込んでみてください。

その5:仕事ではないので締め切りがない
いつまでに何をするのかを明確にしない取り組みは、どうしてもダラダラと学習を進めがちになります。それでもまだプログラミング学習が進んでいればマシですが、自然にプログラミング学習からフェードアウトしていくこともしばしば。素人プログラマーなので、1ヶ月先にどんなことをするのかの予定を組むのも厳しいとは思いますが、週初めに今週はどこまで学習するかということを大雑把に決定し、それを受けて今日はどこまで進めるかの目標設定をすると効率があがります。

その6:"Hello,World"を出力しても、特になにも喜べない
プログラミングの入門書によくある最初の学習内容"Hello,world"を見ても何も感動しません。普段、様々なWebサイトを閲覧している現在だからこそ、なおさらこの学習内容から得られる成果には幻滅です。ほとんどの書籍が、いまだに"Hello,World"から始まっているのは、編集者の怠慢…、もしくは編集者自身がプログラミングを知らないからではないかと想像します。初心者だからこそ、簡単なプログラミングで、まずは嬉しくなるような成果が必要なのではないでしょうか?というわけで、まずはプログラミングに慣れる意味合いで、Javascriptでちょっとしたゲームを作ることオススメします。おそらく初日(2時間くらい)で、ちょっとしたゲームが作れるハズなので。成果が見える形でプログラミング学習を進めていくにこしたことはありません。
参照:初心者のためのJavaScript講座 、 JavaScript入門&サンプル集

その7:記載されている情報が必ずしも正しいものとは限らない
プログラミングの厄介なところは、たった一文字の記述ミスでも動作しないことです。外国人が"てにをは"を間違って日本語で話しかけてきても、前後の文脈で理解することができますが、コンピューターは前後の文脈で理解してくれる柔軟性を持ち合わせていません。初心者にとって特に厄介なのは、サンプルソース通りにプログラミングを記述しても動かない場合。何度も何度もチェックして、記述を訂正していくという作業は大変な時間を要します。また、書籍は書籍で誤植が多いので、サンプルを正しく打ち込んでも動作しないことがしばしば。まずはプログラミングを動作させることよりも、プログラミングの概念を理解することに重きを置いて、先に先に進めたほうが初期の学習段階ではいいような気がします。

その8:世の中は楽しい誘惑に溢れている
世の中は楽しい誘惑に溢れているということは、これはもう紛れもない事実です。これらの誘惑とどう向き合っていくか、あらかじめスタンスを決めておかないことには、都度都度の対応でいずれ誘惑に負けてしまうことになりかねません。ちなみに自分の場合はドラクエⅨがそうでした。プログラミング学習が習慣化していたものの、一旦ドラクエⅨで休暇に入ったために、ドラクエⅨをクリア後もなかなか元の学習生活に戻れていない状態が続いています。今となって思うことは、下記の3本柱を心に刻んでおくべきでした。

・明確なゴールを設定する
・スケジュールを立て習慣化する
・一度できた習慣はゴールに到達するまで崩さない
習慣化させるにはやる気も根気も必要ですが、崩れるのは一瞬です。また、一度崩れた習慣を元に戻すには再度心を奮い立たせないといけません。それでも新たな誘惑に襲われそうになったときには、下記を判断基準に加えたらいいかと思います。
・少し先の"自分"にとって、有益であるほうを選択する


というわけで、一通りまとめ上げてみましたが、これらを心にとどめて、あとは自分でやっていくしかありません。プログラミングを身につけるには一朝一夕ではいきませんが、プログラミングにチャレンジしてみてくだし。それでは、頑張ります!


          ▼素人でも簡単に学べるプログラミング本▼