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

悪態のプログラマ

とある職業プログラマの悪態を綴る。
入門書が書かないプログラミングのための知識、会社の研修が教えないシステム開発業界の裏話は、新人プログラマや、これからプログラマを目指す人たちへのメッセージでもある。

少し前になるが、はてな匿名ダイアリーで「プログラミングを始めようとして何度も挫折した」という人の投稿を読んだ(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 タイトルに偽りあり