おれんじりりぃぶろぐ

きっと何者にもなれないエンジニアのブログ

『リーダブルコード』を読み終えての感想 〜アンドロイドはコードを書ける夢をみるのか?〜

リーダブルコードを読んでの読書感想文です。

Amazon.jp : リーダブルコード―より良いコードを書くためのシンプルで実践的なテクニック (オライリー・ジャパン)

概要 〜Hello Readable World !〜

この本は大きく分けて4部の構成でリーダブルで美しいコードを書くための手法やテクニックについて書かれています。

第1部は変数や関数名の付け方やコメントの付け方など、私のような経験のない者でもすぐに実行できそうな「表面上の改善」です。

第2部が「ループとロジックの単純化」です。ロジックというからには小難しいプログラミングの話になってしまうのかと思いましたが、そんなことはなく三項演算子やdo while, go to文、グローバル変数はロジックが複雑になるから使わないようにしましょうといった話でした。ただ使うなと押し付けるのではなく使わないほうがよい理由がはっきりと書かれているので自然と受け入れることができます。また簡単な名前で式を説明することでコードを文書化する(説明変数)手法が紹介されていてなるほどと納得する考え方でした。そして、変数を複雑化させないために変数の数はできるだけ増やさないほうがよいという考え方は、ハッとする気づきだった。当たり前のことではあるが当たり前のことを体系化し意識することがとても重要なのだと感じました。

第3部が「コードの再構成」です。何も考えなしに実装を進めると大抵コードは肥大化していってしまう。それを考えもなしに分割し、どの関数がどの関数を呼び出しているかの依存関係が分からなくなり、ローカル変数名とグローバル変数名が衝突し、完全に袋小路に嵌り込む(;´Д`)
そして、この第3部では、そんなこともあろうかと救世主ばりに解決策を提示してくれます。具体的には、汎用部分の切り出し方、1度に一つのタスクを関数などのまとまりにする、関数ロジックを3行ほどで簡単に説明できるようにするといった手法が紹介されています。

第4部はテストコードのリーダブル手法とそれまでに紹介されたノウハウを活かした具体的な実装をテーマとして取り上げた実践的な内容です。

実践 〜ひと目で尋常でないコードだと見抜いたよ〜

かねてより自分のコードには漠然とした汚さを感じていました。しかし、なぜ自分のコードが汚いと感じるかが理解できませんでした。
それではここで私の汚コードを振り返って見ましょう。 以下にリーダブルコードを読んで気づいた直近に私の書いたJSコードの汚さの原因を挙げてみました。

  • 何も考えずに変数や関数に抽象的な名前をつけている。1つのプログラム内でキャメルケースやスネークケースが入り乱れていて、名前の付け方を何も考えていないことがよく分かる(´・_・`)

  • グローバル変数を考えなしに使っていて、変数が行方不明に陥っている(゚ロ゚;)

  • 目を凝らさないとどんな機能を持った関数なのかよく分からない
  • 似たような機能を持つ関数が乱立している
  • 3重ループのようなネストの深い文があり、配列のどこにアクセスしているのかがよく分からなくなっている

リーダブルコードを読んだことによって、モヤモヤしていた不快感を具体的に気づき見抜くことが出来ました。少し進歩です。
では、次に解決策を挙げてみましょう。

  • できるだけローカル変数を利用し、スコープを小さく保つ
  • 関数名を熟考し具体的につける。シソーラスを活用する
  • 駆動開発をする前にプログラムの流れを書き出し、機能別に必要な関数を挙げていく
  • 自分の考えをコメントとして残す
  • 行数が増えてもネストは浅くし、目に優しくする

たぶんこれだけでは完璧なコードになったわけではないでしょう。すぐにこの本に書かれていること全てを実行するのは不可能だし、その必要もないと思います。大切なのは綺麗なコードを書くことを常に頭に置き、習慣化していくことです。紹介されているテクニックから必要だと思うものを使っていけば少しづつではあっても綺麗なコードになっていくのではないかと思います。

まとめ 〜やればわかる!!やらなければ一生わからん!!〜

シンプルで分かりやすく、理解しやすいコードは「美しいコード」です。美しいコードはメンテや拡張、リファクタリングがしやすい。実際にそのような完成された美しいコードを見てしまうと、このコードは熟練したセンスや勘のような自分にはないものを持っている人にしか書けないんだと思い込み、美しいことは理解できるけど真似出来るわけないと落ち込んでしまっていましたorz

しかし、この『リーダブルコード』では職人芸のような完成されたコードも実は1つ1つはそれほど複雑ではない手法や小さいテクニックの積み重ねによるロジカルな集合体であることを具体例を交えて紐解いてくれています。1つ1つは小さく真似できますが、多くの考えを組み込むことで職人技のようなそう簡単には真似できない美しいコードが出来上がっていることを教えてくれています。そして自然と美しいコードを書けそうな気分にさせてくれます。

ただ、気分になっているだけでは何の意味もありません。実際にリーダブルなコードを書けるようにならなければいけません。そうしなければ役立たずとマサカリを投げられ死ぬだけですorz たどたどしくとも実践していくことこそ大切です。はじめは引き出しや要領がない分、よく考え悩まなければいけない時間が多く大変です。しかしその考え抜く時間を少しづつ積み重ねることが経験を積むということであり、それがセンスや勘と呼ばれる本質的な理解へとつながっていくのではないかと思います。

SF映画『バック・トゥ・ザ・フューチャー2』では主人公たちが劇中で30年後の未来へ行くシーンがあり、先日その未来2015年10月21日が実際にやってきました。どれくらい映画の世界観が現実のものになっているかが話題になっていました。今から30年後に思いを馳せると自分が寝ている間にコードが完成している夢のような世界が待っているかもしれません。しかし、何年経とうと「悩み」「考え」「最適化」していくというサイクルは要領のよい人工知能やアンドロイドには真似出来ない気がします。アンドロイドには書けないリーダブルな美しいコードを30年後の自分が書いていることを夢見て、今後のコードを積み重ねていきたいと思います。