勉強しているのに良いコードが書けない
言語自体を学ぶのであれば、自分にあってそうな本を本屋で探して1買ってきて、読みながら実際に動かしてみたりすればよいし、ちょっとよいコードが書きたくなったら、みなさんが勧めているリーダブルコードなどを読めばいいでしょう。
ただそのようなことをしていてもあるレベル以上のコードが書けるようにはならないのですが、その理由を究明していきたいと思います。
日本語もプログラムもただの言語
日本語の読み書きは日本人であれば全員義務教育で学びます。
日本語を学んだ人が全員分かりやすくて面白い話をするかというとそんなことはなくて、壊滅的に話がつまらない人や何言ってるか分からない人も存在します。
『人に物事をうまく伝えられていないこと』に気づいていない方が大半、危機意識を持って書籍を読む方が少し、分かりやすくて面白い話をする方が数%といったとこでしょうか。2
この点についてたくさん良書が出ていますが、説明の方法の本を読んでも次の日から説明が上手くなることはめったにないと思います。
例)
同様にプログラム言語を学ぶだけでは人間やコンピュータにとって分かりやすくて面白いプログラムは書けません。
意識の高いオブジェクト指向やデザインパターンを学んでも次の日から優れたオブジェクト指向やデザインパターンを取り入れたコードが書けることもめったにないと思います。
例)
これらの書籍やウェブサイトは分かりやすく書いてくれていると思いますが、なぜこの様なことが起きるのでしょう?
そうだ、コードリーディングをしよう
書籍には「こうするとよい」というルールが書かれていると思います。ただし、実際のよい(悪い)例はあまり載っていないと思います。
書面には書ききれないし、あまり沢山載せてしまうと退屈になったり、ルールを伝えるという本質から外れてしまうからだと思います。
一方で、ググってコピペをした経験がある方は分かると思いますが、ウェブ上には自分一人では考えつきもしないコードがたくさん存在しています。それらのコードをきちんと理解すれば、少し修正して自分のプロジェクトに適用できることも知っていると思います。
小さな課題だけではなく大きな設計についても同様です。ウェブ上の他人は自分には考えつきもしないコードを書いています。
良い設計のプログラム、悪い設計のプログラム、大きなプログラム、小さなプログラムをたくさん読むことで、自分の中にものさしができます。3
面白くて分かりやすいも、何言ってるか分からないも相対的な評価です。なるべく長くて正確なものさしを自分の中に持たなければ自分のプログラムが分かりやすいのかを公平に判断できないし、自分の読めないコードは全てクソコードと判断してしまうかもしれません。
コードリーディングを行うことで、書籍にあるルールを自分の知識として使いこなせるようにする力があるのではないでしょうか?
まとめ
課題に対して、自分で考えてプログラムを書いて解決するのは達成感もあり訓練にもなるのですが、時間をかけて自分で考えられるプログラムを書くことしかできません。人間は0から生み出すよりも、1や5をカイゼンしていく方が得意にできています。
たくさんのコードを読んで、良いところを吸収しましょう。悪いところは、なぜその様なコードが生まれたか考えて、同じ様なコードを書かないように気をつけるようにするといいでしょう。
まるで国語の問題の様ですが書いた人の思考も読み取りましょう。 それができるようになるとコードを読む速さが飛躍的に上がります。
オブジェクト指向もデザインパターンもとにかく使ってみないと覚えられないので、最初は無駄に複雑なコードを書きがちです。 大量のコードを書いていくうちに無駄が削ぎ落とされていきますが、書くだけで習得するのはかなり難易度が高いです。
良い設計のプログラム、悪い設計のプログラム、大きなプログラム、小さなプログラムをたくさん読んで、自分の中のものさしを拡張しましょう。
本稿は新人プログラマ応援 - みんなで新人を育てよう!イベント向けの記事になります。他にもいくつか投稿していますのでよろしければどうぞ。