プログラミングの勉強方法に関する議論はまだ続く

オブジェクト指向云々の話 - Qu記(仮)

id:quolcにハラハラしながら様子を見られていたid:qnighyです。

さすがid:quolcは文章をまとめる才能があるなあ。このページを読むと一発で状況がわかる。僕が昨日勢いで書いた文章とは違うね。

さて、quolcがまとめた通り、今の議論はプログラミングの勉強方法について実践か勉強か、というような内容なわけだけれども、実はそもそも僕はそんなこと言いたいんじゃなくって、id:tazantデザインパターンの勉強したいからC++のよさそうなライブラリとか教えてみたいなこと言われて、OOP勉強するならほんとJava言語いいよすげーよJava!とJavaにラブコールを送ってただけなんですね。これがtazantに聞いてもらえなくて拗ねたid:qnighyがなんだかむしゃくしゃして思ったことを思うがままに喋ったのが始まりなわけですね。

そんでもって、何が悪いって、勢いで喋ったから「僕の場合は」ということの念押しを思いっきり忘れてたし、本当は「実際僕も実践だけじゃ良くないとは思ってるけどつい。」みたいなことをちゃんと言ったんだけど文章に埋もれちゃったのが問題なんだけど、もうそんなことはどうでもよくなってきた。

quolcの言ってる「実践だけでは、明らかに非効率である」というのは正しい。quolcは同じソフトの再構築を三回やったって言ってるけど、自分だって4回も5回も書き直しをした。

でも、絶対に実践は必要だ。実践は、直感をもたらすけど、もう一つ大事なものをもたらすと思う。つまり、なぜデザインパターンが必要かという根拠だ。

また、本に書かれていない「デザインパターン」もいっぱいある。例えばSwingアプリケーションを作ってて、イベント処理のためにずっと無名内部クラスを作ってたけど、コードが読みにくいからフレームクラスに直接リスナを実装させたらコードがすっきりした、というような具体的で細かい事例が本に書いてあるのを見たことがない。そういうのは、やはり実践しないと見につかないと思う。

と、昨日の反省を踏まえず勢いで書いたが、正直そんなことは問題じゃない気がしてきた。

もちろん、大まかな結論としては、やっぱりどっちも大切なんだ。だけど、もっと重要なことがある。

つまりは、結局のところ、「何のためにプログラミングしてるの?」って話に帰結すると思う。すごく根本的な気がするけど。

プログラミングをする理由っていうのは、いろいろな理由があるし、誰しも複合的に持ってると思う。例えば

  • プログラミングを仕事にしているから。
  • プログラミングが楽しいから。
    • みんなでプログラミングするのが楽しいから。というのもあるかも
  • プログラミングの能力が自分のアイデンティティーだから。
  • プログラミングの成果をコミットすることが自分のアイデンティティーだから。
  • 自分がプログラミングをすることが、自分の持っている何らかの理想(オープンソース思想とかいろいろ)から考えて適切だと思うから。

こんなのが考えられるだろうか。

プログラミングが楽しい、というのは、プログラミングをしている多くの人が思っているだろう。仮に今やっているプログラミングが楽しくなくても、プログラミングが楽しいと思う何かがあったからプログラミングをやってる人がほとんどだと僕は思う。

仕事にしている人は、仕事で使うスキルを磨かなければいけないだろうから、その仕事の分野を本で勉強するだろうし、マニュアル通りにする能力ってのがやっぱり大事になるから、本とかで勉強をするほうが多くなるのかなと思う。仕事したことないからわからないけど。

プログラミングの能力や、成果のコミットが自分のアイデンティティーだ、という理由はもっともだし、自分もその思いを強く持ってるけど、この理由について考えると、すごく悲しい気分になる。この理由は、すごく後ろ向きだと思う。追われてると思う。もちろん僕もアイデンティティーとしてのプログラミングというのをすごく感じているけど、それが大きいうちは何かだめな気がする。
とにかく、アイデンティティーとしてのプログラミングは、何らかの成果を残さないといけない。そのためには、ものを作るか、大会とかで成果を上げるのが一番だろう。ものを作るなら、勉強するより実践だろうし、大会で成果を上げるなら専門に勉強したほうがいいだろう。

そして、趣味としてのプログラミング。できたときの達成感によるものと、組んで悩んでるときのものを作っている感とかそういうのが好きなのと、両方だろう。僕は作ったプログラムはほとんど作りかけで放置してしまっているので、きっとプログラミングで悩むことが好きなんだろう。
プログラミングが好きなら、やっぱり僕はプログラムを書くべきだと思う。

ここで他の人の言葉を借りる。id:amachangのプロフィールページには、こうある。

ただただ、がむしゃらにソフト開発をしていたい。

http://d.hatena.ne.jp/amachang/about

僕は、この言葉が大好きだ。幸せな学生のうちに、ただただ、がむしゃらに、プログラミングをするのもいいと思う。*1

*1:もちろん本での勉強も大事だけど。