2007年06月12日(火)

プログラミングを始めようとして何度も挫折した人へ

テーマ:プログラマの心得

少し前になるが、はてな匿名ダイアリーで「プログラミングを始めようとして何度も挫折した」という人の投稿を読んだ(yasuhoの隠れ家さん経由)。色々な意味で考えさせられる話である。


才能以前なんだろうな。必死さが足りないって言われた。でも必死になるってどういう事なのか全然判らない。


元記事のトラックバックでも指摘されているが、この人は「プログラミングをしたい」とは思っているようだが、「プログラムを作りたい」と思っているようには見えない。例えば、「日常の単純作業を自動化するためのプログラムを作りたい」とか、「ゲームを作って友達に見せたい」とか、そういった動機がなければ、プログラミングは身につかないものだ(※1)。


「必死さが足りない」というのは、そういう「動機の薄さ」についての指摘だろう。しかし、「動機」は誰も与えてくれないし、本を読んでも書いていない。自分の中から出てくるものである(「面白いプログラムを作ろう」も参照)。



何がわからないのかもわからない。基礎の問題とか出して貰っても判らない。用語や文法みたいなレベルで既に躓くというか。なんというか、「言葉」って何で言葉って言うの?みたいな変な疑問ばかり湧いてきて進まないんだよね。


「用語や文法みたいなレベル」といった言葉が出てくるのは、勉強の進め方が間違っている証拠である。ちょうど受験が優先される日本の英語教育と同じだ。英語もプログラミングも、理論より実践が重要なのである。プログラミングを学ぶには、とにかく「実際にプログラムを作る」という経験を積むことが重要だ(「プログラミングは体で覚えろ」も参照)。


上達が早いプログラマは、事前に文法を学ぼうとはしない(家電などを使う場合に、慣れた人ほど「取説」を読まないのと同じである)。とりあえず自分が作りたいプログラムを作ろうとして、途中で分からないことが出てきたら、その都度調べる。このため、「何がわからないのかもわからない」などという状況はありえないのだ。そうこうしているうちに、自然と力がついてくる。



文法も、例えば1+1=2という式があったとして、なぜイコールがこの位置なのかとかくだらない事がずっと気になってしまいます。コロンが付いてたりとか括弧がどうだとか。


音楽家が作曲をする時に「ト音記号はなんでこんな変な形をしているのか」などということは考えないだろう。作曲には関係ないからだ。プログラマもプログラミング言語の「イコールの位置」や「コロン」や「括弧」に、意味を求めたりはしない。そういうことを考えるのは、プログラミング言語の研究者だとか、新しいプログラミング言語を開発しようとしている人の仕事であって、プログラマの仕事ではない。


プログラミング言語はプログラムを作るための道具にすぎない。つまり、プログラマを剣士に例えれば、プログラミング言語は刀である。言語の文法にこだわるのは、剣士になるために刀鍛冶の修行をするようなものだ。全く無関係ではないかもしれないが、進むべき方向を誤っている(※2)。それでも、どうしても刀の構造が気になるという人は、剣士ではなく刀工になるべきだ。



プログラマの仕事はプログラムを作ることである。それを見失ったまま、プログラミング言語をいくら勉強したところで、プログラマにはなれない。





※1
職業プログラマだと依頼されたものを作ることになるのだが、それでも、最初に勉強するときは自分の好きなものを作るべきだ(就職する前にプログラミングを経験すべきというのが私のいつもの主張である)。


※2
弘法筆を選ばずと言うが、有能なプログラマほど言語の違いにはこだわらないものだ(「Javaなんて知りません」も参照)。




新版 明解C言語 入門編
柴田望洋
ソフトバンククリエイティブ (2004/08/28)
売り上げランキング: 7708
おすすめ度の平均: 4.0
4 素人には厳しい ですが、 初心者には適した書籍かと思います
4 Cを学ぶならこれ!
5 K&Rのプログラミング言語Cの真の翻訳書?


なぜ、あなたはJavaでオブジェクト指向開発ができないのか―Javaの壁を克服する実践トレーニング
小森 裕介
技術評論社 (2004/12)
売り上げランキング: 14278
おすすめ度の平均: 5.0
5 オブジェクト指向の使用法を学べる
5 オブジェクト指向がなぜいいのか、どのように書いたらいいのか、単純明快に示してくれます
2 タイトルに偽りあり
AD
いいね!した人  |  コメント(18)  |  リブログ(0)

コメント

[コメントをする]

18 ■無題

上でも同じような人が居ましたけどなんに使うんだ?これってなっちゃうと次に講座とか無しでなんか作るときを想像しちゃうんですよね
「なんか動かないなぁどこが悪いんだ?」ってなったとき謎のパーツがちらほら…みたいな想像が…
分からないのがどんどん溜まってくってのが物凄く怖い まあこれは怖くないよーって言ってるんだろうけど

思えば自分の挫折原因って不安になってやりたくなくなると言う物凄い情けないものだったな…
これが出来るようになった!!嬉しい!!もっとやりたい!!が上手く循環すれば自分みたいな三日坊主は行けそう ここまで来ると運か根性の問題だ

17 ■RE: ト音記号

天さん、こんにちは。
このブログが何かの参考になれば幸いです。
私は、音楽家ではないので、ト音記号の例は想像ですが、納得いただけてよかったです。

16 ■ト音記号

はじめまして、とても面白い記事だったのでコメントさせて頂きました。

自分も音楽をやる人間で、最近プログラムを作りたいと思いPerlを学んでおります。その中で文法についての記事はおもしろく、特にト音記号の話は説得力がありました。たしかに、ト音記号がなぜあの形なのかという疑問は持った事はないですね(笑)ただ、開始点がト音からなのでそいう意味はあり、それ以上のことはおもわなかったです。

これからも面白い記事がんばってください。
失礼しました。

15 ■うーむ

牛肉のような豚肉さん、こんにちは。

やりたいことと適正が必ずしも一致しないのが悩ましいことです。それが一致したら天職と言えるでしょう。

もちろん、剣士と刀工、両方出来る人も居ますけどね・・・。

14 ■うーむ

何かがつんと頭をたたかれた感じ

>勉強の進め方が間違っている証拠である。
>どうしても刀の構造が気になるという人は、剣士ではなく刀工になるべきだ。

確かにおっしゃるとおりであるが
けど気になってしまうんですね。
そういう意味で向いてはいない
他のほとんどのこともうまくいかない
という事態になり続ける
while true

13 ■RE: プログラムって何なの?

Aileron さん、こんにちは。

できること(命令)が少ない言語のほうが、プログラムの「なんたるか」がよく理解できるでしょうね。

しかし、マシン語と OOP には大きな隔たりがあるので、「納得」に繋がるかどうかというと、難しい気がします。CPU に興味がもてる人なら、プログラマとしての素質はあるでしょうが、その逆は必ずしも成立するかどうか・・・。

私は、簡単なシェル系のスクリプト(Windows ならバッチファイル)や、アプリケーションのマクロなんかを書いてみるところから始めるといいと思いますね。もちろん、実用的なものの方ががいいです。

12 ■プログラムって何なの?

って疑問に思って先に進まないなら
戻ってみれば良いと思った。

それこそ、マシン語から。

ワンチップマイコンとかでさ。
CPUの駆動原理とか学びながら
BASIC辺りから時代をさかのぼって
最初から行った方が、構造化プログラミングとか
OOPとか関数型言語とか

そういった抽象化層以前のさ。

そいったので、直接触ってみる感じを
学んでから、序所に上に上っていった方が

納得が良くってのが増えるのかなぁ
なんて思った。

11 ■RE: 無題

ただいま修行中さん、こんにちは。
文法を勉強しない子供でも日本語は喋れますからね。文法を学ぶにせよ、ある程度、慣れてからでないと、元記事のように、何のことやら分からないでしょう。

10 ■RE: はじめまして

豆さん、こんにちは。
そのものズバリの本などがあると心強いかもしれませんが、やはり、自分が好きなものを作ったほうが、やる気も出ますし、ネット等で調べる力もついていいと思います。
JSPでも、表示以外の部分はなるべくクラスを使うようにすれば(つまり、ちゃんとしたMVCで作れば)、勉強になるでしょうし。

9 ■無題

はじめまして。
いつも楽しく拝見させていただいております。

>とりあえず自分が作りたいプログラムを作ろうとして、途中で分からないことが出てきたら、その都度調べる。このため、「何がわからないのかもわからない」などという状況はありえないのだ。そうこうしているうちに、自然と力がついてくる。

その通りだと思います。私も新しい言語を学ぶときには、とりあえず作ってみます。そこからネットで検索して分からないことを調べていくうちに自然とその言語の文法などを覚えていきます。

8 ■はじめまして

人気ブログランキングで『プログラマ・・・になりたいな』
日記を書いております、豆と申します。

とっても勉強になる為、時々拝見させていただいております。

今回の記事はとても参考になりました。
今は、SJC-Pを取得するために勉強中なのですが、「なかなか覚えられな~い!!」ということで
記事のとおり、何かを作ってみようと思いました。

本屋さんに行ってみると、『Javaで将棋をつくろう!!』が目に飛び込んできました。

「・・・興味ない。」ということで、もともとWebプログラミングをしたくて勉強しているのもあり、なぜかJSPを始めてしまいました。(汗)

でも、SJC-Pなんか習ってもいないのに、好きな事なのでとっても楽しいですし、頭に入りますw

出来上がったら是非みてくださいね。

くだらない長文で申し訳ないです(ーー゛)

これからも更新楽しみにしてま~す

7 ■RE: 無題

ぼたん雪さん、ありがとうございます。
以前にも「癒し系」と言われたことがありますが、悪態をついているだけなのに不思議です。たぶん、他人の悪態でも、内容に共感できる場合は、自分のストレス解消になるんでしょうね。

6 ■無題

一流の人は一流のことを、やはり書きますね!とても、癒されてます。納得する内容ばかりです。体調などの理由で仕事はもう、続けられない事態になってますけど、好きな世界でした。忙しい中、これからもどうか書き続けてください。ほんっとうに、いいたかったことばかりで、癒されます。ありがとうございます。

5 ■RE: 人はどうか分かりませんが・・・

dm200089 さん、こんにちは。

>ざっと目を通して、どこに何が書いてあるかを覚え・・・後は・・・目的に応じて必要な所を見るようにしています(礼)。

私も同じです。最初にパラパラめくってみて、この言語はなにが得意なのかとか、漠然ととららえておいて、あとは必要なときにピンポイントで調べるだけ。組み込みのライブラリやフレームワークも、実際に自分が使うのはほんの一部ですから、そのほうが効率的ですよね。

なので、入門書は買わないで、いきなりリファレンスを買うことが多いですね。

4 ■RE: 難しいですね

yasuho さん、こんにちは。
プログラミング自体を楽しいと感じられるようになれば本物ですが、最初は難しいでしょうね。一度でもプログラムを完成させて、「作る喜び」を感じられれば、続けられると思いますが。

3 ■人はどうか分かりませんが・・・

私の場合は、常に挫折の連続です。

 挫折しては気分転換・・・
 挫折しては気分転換・・・

の繰り返しです。

 挫折したら、休憩を体が求めている・・・と楽観的に考えればいいのでは・・・

 参考に・・・
 私は、プログラムの教科書は・・・ざっと目を通して、どこに何が書いてあるかを覚え・・・後は・・・目的に応じて必要な所を見るようにしています(礼)。

2 ■ご挨拶

はじめまして、突然のコメント失礼いたします。

「日本ブログ新聞」と申します。

よろしければ、当紙面に記事を掲載されませんか? ランキング形式ではございますが、少しでも、貴方様のブログへのアクセス増にお役に立てればと思います。

よろしければ、ご参加下さい。

サンプル http://www.japanblog.jp/ranking.php?mode=new

なお、このご案内が重複しておりました場合は、ご容赦下さい。

失礼いたします。m( _ _ )m

http://japanblog.jp/

1 ■難しいですね

本当のところは分かりませんが、興味があって意欲があるのに、本当に学び方が分からない、っていう人もいるんじゃないかと私は思うんですよね。ちょっとしたきっかけで今までつまらなく思えたことがすごく楽しいことだった。なんて感じてくれたら、とても嬉しいと思うのです。

コメント投稿

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。