「作りたいものがあるからプログラミングを学ぶ」と言う言説

24:名無しさん@涙目です。(内モンゴル自治区):2011/08/24(水) 01:53:21.34 ID:hNWJ4bKQO
プログラミングを学ぶ→何を作りたいか決める=間違い
作りたいもの決める→プログラミング学ぶ=正解

簡単にプログラミングが学べるサイトが登場 試しに使ったけどマジで簡単でワロタwww : 暇人\(^o^)/速報 - ライブドアブログ

プログラミング初学者以前の人達(「これからプログラミングを学びたい」と言っている人達)に対するアドバイスとしてよく目にするものの一つに「何か実現したい事があるからプログラミングを学ぶ、と言うスタンスの方が良い(「プログラミング」は手段と言うスタンス)」と言うものがあります。プログラミングに限らず、何らかの目的をはっきりさせた上で、必要となる手段を学んでいくと言うスタンスの方がモチベーションを維持しやすく長続きすると言う傾向は確かにあると感じます。

一方で、「作りたいものがあるからプログラミングを勉強しよう」と思ったが途中で挫折してしまったと言う事例も数多く聞きます。このケースで挫折する理由の一つとして、「目的を実現するためには、初学者から見ると、知識・技術の習得に途方もない時間を要するため」と言うものがあります。

例えば、プログラミングの初学者が最初に設定しやすい課題の一つに「テキストエディタの作成」がありますが、テキストエディタは想像以上に様々な状況を考えて実装しなければならないので、初学者の課題としては非常に荷が重いものとなります。また、「ゲームが作りたい」と言う目標もプログラミングを学びたいと思う動機の一つとしてはよくあるものだと思いますが、これに至ってはプログラミング以外にも必要な技術が多すぎて、まぁ 90% 位の人は途中で挫折するだろうと思います。

プログラミングに関する知識がない状態で「作りたいもの」を決める場合、長続きするかどうかはその「作りたいもの」の難易度にも依存します。そして、何も知らない状態で「作ってみたい」と思うものは得てして、実現するのが非常に難しいものであったりします。その結果、最初の段階で得られる結果(Hello, world! の出力とか)と実現したいものとのギャップが大きすぎて絶望し、プログラミングを学習する事を諦めると言う道を辿る事になります。

GUI とは関係ない部分でのプログラミングに価値を見出せるか

プログラミングの学習を躓かせる要因の一つに「GUI」があります。GUI のプログラミングは何と言うか独特の難しさがあり、初学者がいきなり始めるにはややハードルが高いと言う印象があります。C#VB のように IDE の補助が手厚いようなプログラミング言語であれば何となく作成していく事はできるでしょうが、それでもちょっと複雑なものを作ろうとした途端に要求される知識がいきなり多くなったりします。

一方で、コンソールベースのプログラムは、最終的には実装するのがかなり大変なものであっても、簡単な部分から入力と出力を確認しながら段階的に作っていくと言う事が GUI と比べると比較的やりやすい(ユーザからの入力を限定しやすい)と言う性質があります。そのため、初学者への課題としては、コンソールプログラムの方が向いていると言えます。

プログラミングが長続きするかどうかの指標の一つとして、「自分がプログラムした通りに動いて出力された結果を見て感動できるか」と言うものがあります。コンソール画面に「Hello, world!」と表示されたときに、「おぉ!」と感動できるか「ふぅん」と言った感じで何も感じないかで、その人が長続きするかどうかが何となく分かったりもします(さすがに Hello, world! では感動する人はそんなにいませんが)。その意味では、コンソールベースの「ちょっとした」手続きを記述したプログラムを実行して、その結果に価値を見出せるかどうかは大切かなと思います。

Web ブラウザベースのプログラミング

近年、Web が流行するにつれて、初学者が最初に勉強するのは Web プログラミング (HTML + CSS + JavaScript + Perl/Ruby/Python/PHP) が良いと言われるようになりました。個人的にも、これからプログラミングを始める人はまず何らかの Web ページ (Web サービス) を作ってみると言うのは良い選択肢の一つだろうと思います。

Web プログラミングの良い点は、最も労力を要する要素の一つである「画面への描画」に関して、かなりの部分で Web ブラウザの補助を受けられるからと言うものがあります。基本的に画面への描画は Web ブラウザに任せるので表現できる事の制約は通常の GUI プログラミングよりもきつめですが、その代わり、最低限の記述で「それなりに」画面に表示してくれます。それに加えて、現在では既存の各種 Web サービスが API を通じて様々な情報を提供してくれるので、そう言った情報を利用する事でそれらしい Web サービスが作れたりします。出来上がったもに対する「感動」が長続きするのに不可欠と言う観点から見ても、この点はプラスに働くだろうと思います。

プログラミングは、「最終的な成果(アプリケーション)」まで持っていくのは結構大変なので、特に最初のうちは、自分の学習過程の結果がなかなか目に見えずモチベーションを維持し辛いと言う問題点があります。私自身は、CLX C++ Libraries 辺りを作っているうちにライブラリ脳になってしまったので割と細かい単位で結果が出せてモチベーションを保ちやすかったのですが、なかなかそうは行かない場合も多いだろうと思います。そう言った中で、プログラミングを長続きさせるためには、最終結果までの過程の間に細かな単位で結果を出していけるような「段階的な課題の設定能力」が問われたりもします。