みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
私もアラフォーながらプログラミングはまだまだ駆け出しですから、皆さんがプログラミングを学習されているときに、どんな書籍を手に取られているか気になります。
そんな中、とにかくプログラマーというプログラマーが皆さんオススメしまくっている本がありまして、それは気になるわけです。
おそらくほとんどのプログラマーが読んでいるとても有名な本
可読性を上げるための方法論をまとめたこちらの本は、月イチで読み返してもいいぐらいだと思います。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)という本です。
本書はその名のとおり「読みやすいコード」を書くための実践的なテクニックを凝縮した本、私も読んでみましたので紹介したいと思います。
なぜ読みやすいコードが大切なのか
プログラマーの皆さんは周知の事実だと思いますが、読みやすいコードを書くことは仕事の効率化という面では超重要です。
本書にも
コードは他の人が最短時間で理解できるように書かなければいけない。
書いてあります。
チームで手分けして作業をしているとき、誰かがぐちゃぐちゃのコードを書いていたら、とっても迷惑なのは想像に容易いと思います。
一方で、主に一人で開発を進めている場合は自分さえわかれば良いという気もしますが、どう思われますか?
私も一人で開発をする場合が多いプログラマーの一人です。
本書はそんな甘えをこんな風に諭してくれます。
「他の人」というのは、自分のコードに見覚えのない6カ月後の「君自身」かもしれない。君のプロジェクトに途中から誰かが参加しないとも言い切れない。「使い捨てのコード」が他のプロジェクトで再利用される可能性だってある。
既に運用フェイズに入り稼働しているプログラムも何か不具合があればコードを調べなければいけませんし、業務フローに変更があればそれに合わせて調整をする必要があるかもしれません。
また、過去に作ったプログラムの一部を、新たなプロジェクトでも活用できる可能性もあります。
さらにさらに私の場合はそのプログラムの一部を改変してブログのネタに使わてもらうこともあります。
そう考えると、一度書いたコードは何度も使える大事な資産で、コードを読みやすく書くという行為はその資産を最大限に価値を高めておくことに他ならないわけですね。
初心者でもできる「リーダブルコード」テクニックBEST5
本書の冒頭で
本書では、C++・Python・JavaScript・Javaといったプログラミング言語を使っている。いずれも応用的な機能は使っていないので、言語のことをよく知らなくても難なく読み進められると思う
とあります。プログラミング初心者で全ページのすべてをちゃんと理解するのは難しい部分もあるのですが、そのほとんどは
- 変数や関数のネーミングの仕方
- コメントの付け方
- コードを書く順番
- 改行やタブの使い方
など、初心者でも十分にわかる内容なので、わかるところまで読むのが良いですね。
そしてまた学習を重ねて自分がある程度進歩したときに再度読み直す…というのを何度か繰り返すというのが、本書のベストの読み方だと思います。
今の時点で私が目からウロコを流したTIPSについてBEST5を紹介したいと思います。
「空虚な」単語は避けるべき
「get」という単語からは何も伝わってこない。このメソッドはページをどこから取ってくるのだろう?ローカルキャッシュから?データベースから?インターネットから?インターネットから取ってくるのであれば、FetchPage()やDownloadPaga()のほうが明確だ。
本書では名前に情報が詰め込まれていない単語を「空虚な」単語と呼んでいまして、それは避けるべきと伝えています。
いやね、「get」なんてアチコチで採用されているんですよ。
Dim colH1, colH2, colH3 As IHTMLElementCollection 'IHTMLエレメントコレクションを準備
Set colH1 = htmlDoc.getElementsByTagName("h1") 'HTMLドキュメント内のh1要素をコレクションとしてGet
Set colH2 = htmlDoc.getElementsByTagName("h2") 'HTMLドキュメント内のh2要素をコレクションとしてGet
Set colH3 = htmlDoc.getElementsByTagName("h3") 'HTMLドキュメント内のh3要素をコレクションとしてGet
ほらね。
取得する、という時は今まで何も考えずに「get」としていましたが、まずは他の単語で表せないかと考えるようになりました。
英単語のストックを増やしておかないとですね。
イテレータはi,jでなくても良い
for文やwhile文でカウント用変数としてi,jをよく使います。
この変数をループイテレータと言います。
慣例としてi,jを使うのでこれはこれで「ループイテレータなんだな」とわかりやすいので良いのですが
イテレータが複数あるときには、インデックスにもっと明確な名前をつけるといいだろう。i・j・kではなくて、説明的な名前(club_i・members_i・users_i)にするのだ。あるいは、もっと簡潔なもの(ci・mi・ui)でもいいだろう。
なるほどー!目からウロコです。
ちなみに、iという変数がIteratorという単語から来ているというのも本書を読んで気づきました…汗
ブール値にはis,has,can,shouldを使う
ブール値というのはtrue,falseのどちらかを取る値のことです。
ブール値の変数名は、頭にis・has・can・shouldなどをつけてわかりやすくすることが多い。例えば、SpaceLeft()という名前は数値を返すように聞こえる。ブール値を返したいのであれば、HasSpaceLeft()という名前にしたほうがいい。
変数の値や関数の戻り値が二択であることがわかるような名前にしろということですね。
縦の線をまっすぐに揃える
コードを書く場合、インデントはよく使いますが、それ以外の縦の列はそれほど気にしていませんでした。
例えば
With adoSt
.Charset = "UTF-8" 'Streamで扱う文字コートをutf-8に設定
.Open 'Streamをオープン
.LoadFromFile (strPath) 'ファイルからStreamにデータを読み込む
End With
これは読みづらいですよね。たとえコメントでも
With adoSt
.Charset = "UTF-8" 'Streamで扱う文字コートをutf-8に設定
.Open 'Streamをオープン
.LoadFromFile (strPath) 'ファイルからStreamにデータを読み込む
End With
このように揃えると見やすくなります。
コメントをタスク管理や例示として使う
コメントは自由に書けるのでその活用法は多岐に渡ります。
ブログにコードを記載する場合は、その命令を知らない人のために説明のコメントをつけています。
が、私のコメントの使用例なんてそんなものだったのです。
本書では様々なコメントの活用法が紹介されていまして、例えば
// TODO:もっと高速なアルゴリズムを使う
というように残タスクを記録したり
// 実例:Strip(“abba/a/ba”,”ab”)は”/a/”を返す
などのように入出力例の実例を記載したりという使い方もありますよね…うまく使うと未来の自分がすごく助かるのではないかと思います。
業務にも「リーダブルコード」を活用する
読み進めていくにあたり、本書の内容ってプログラムを書くのもそうなのですが、その他の業務、つまりプログラム以外の全てのドキュメントについても非常に参考になると感じました。
例えば、エクセル。
- ファイル名、シート名はその内容を適切に表しているか?
- どのシートが計算過程で、どのシートがアウトプットなのか?
- フォントの種類やサイズがバラバラで見づらい
など、「他人」が見やすいか?チームワークや未来の自分の仕事を考えるとその効率に大きな影響を与えるのは間違いありません。
エクセル以外にも、マニュアルを作るときも、プレゼン資料を作るときも、メールの文章を書くときも、テクニックとして使えますよね。
業務担当者でこれからプログラミングを勉強したいと思われている方などは、そういう視点で本書を勉強頂けると一石二鳥で学びになると思います。
まとめ
本書はわずか200ページそこそこなのですが、税抜2400円と、まあまあのお値段です。
しかしながら、よく考えて下さい。
本書でコードの可読性について勉強をした結果
- コーディングやテストがはかどるようになった
- 過去のコードの再利用がしやすくなった
- 運用フェイズでのメンテナンスがしやすくなった
- プログラムに限らずチームとの連携がスムーズになった
などのメリットを考えると、2400円なんて価格は簡単にペイしてしまいます。
初心者には少し難しい部分もありますが、わかる部分を読むだけでも全然違いますので、ぜひお手元において頂ければと。