初心者がコードリーディングを効率的に行うコツを紹介します




こんにちは、ケイタです。

AIや機械学習というワードが世間で話題となり、プログラミングの勉強を最近始めた方も多いのでは無いでしょうか?

いまはプログラミングの本やオンライン授業が充実し、誰でも簡単にプログラミングを勉強することが出来るようになりました。しかし、それらを利用してコードを「書く」練習はできたとしても、「読む」練習はあまりできないのではないでしょうか。

エンジニアの現場では、コードを「書く力」と同じくらい「コードを読む力」も重要です。

何故ならば、他の人が書いたプログラムを改善したり、バグを取り除いたりする作業がほとんどだからです。(プログラムのアウトプットを変えずにプログラム内部だけ変えることを「リファクタリング」、バグを取り除くことを「デバッグ」と呼んだりします)

僕も初めてコードリーディングを行ったときは、何をどう読めば良いのかわからずかなり時間をかけてしまいましたが、自分の中で気がついたコツがあるので紹介したいと思います。

ゴール(何をしたいのか)を明確にする

当たり前ですが、そもそも何が実現できれば良いのかをしっかりと確認しておくことが大切です。

例えば、「あるユーザー定義関数を改善して計算速度を上げたい」「集計のアルゴリズムが間違っていたので修正したい」などです。

このゴールが明確になっていないと、本来はやらなくていいことに手を付けてしまったり、何をやって良いのかわからないということにつながります。

目的になっている箇所を先に読む

本を読むときは、最初から読み進めていきますが、これをコードリーディングでも行うと、読み終わるまでに時間がかかりすぎるというデメリットがあります。

簡単なプログラムであれば上から順番に読み進めても良いのですが、何千行・何万行もあるプログラムなど大規模なプログラムになると、読むだけで大変な時間がかかってしまいます。

例えばユーザー定義関数を改良したいのであれば、その関数を先に読んだあと、関数に登場する変数がどのように定義されているかを調べていくのが効率的に読むコツです。

これを行うためにも、一つ前で紹介した「ゴールを明確にする」ということが大切になってきます。

関数や変数の名前から意味を推測する

通常、関数名や変数名は、何を意味しているのかが明確に分かるようにつけられています。例えば、function convert_int_to_string(number)などを見れば、int型からstr型に変換をする関数かな?と予想することが出来ます。

if文やfor文のスコープ(範囲)に気をつける

if文やfor文など入れ子構造を持つものは、どこからどこまでがスコープとなっているのか見落としがちです。

そこで、○○行目のforが何行目から何行目まで続いているのか、といったことをメモすることをオススメします。

コードを読むときはエディターで開くかと思いますが、カッコ「{}や[]など」を選択したときに、対になっているものがどこにあるか分かるようなエディターを使いましょう。

ちなみに僕はAtomというエディターを使っています。

大まかなロジックの流れを作成者に確認する

先に目的の箇所を読むのが良いと言いましたが、プログラムは流れなので目的以外の場所を理解しなければいけないこともあります。

そういうときは、まずどのようなロジックでプログラムが書かれているのかを作成者に確認し、定性的に理解することがコードリーディングの速度を上げることにつながります。

基本的なコードリーデイングの流れとしては「目的の箇所を読む→プログラム全体の大まかなロジックをつかむ→目的の箇所から、わからない変数や関数を遡って読んでいく」というものが一番はやいと思いました。

コードリーディングのまとめ

ここまで、以下のポイントを紹介してきました。

・ゴール(何をしたいのか)を明確にする
・目的になっている箇所を先に読む
・関数や変数の名前から意味を推測する
・if文やfor文のスコープ(範囲)に気をつける
・大まかなロジックの流れを作成者に確認する

今後、コードリーディングを進めていく上で気がついたことがあれば随時更新していきます。