このコンテンツでは、エンジニアの能力を底上げする有効な手段の一つ、コードリーディングについて紹介します。
他のエンジニアが書いたコードを読むことによって、自身のスキル向上はもちろんのこと、プログラミングに対して新しい視点と新しいコーディングスタイルを学ぶことに役立ちます。
コードリーディングと言っても、他の人のコードってどこにあるんだろう?
いざコードリーディングを始めようとしても、正しい情報リソースの見つけ方を知らなければインターネット上に散布している有象無象を読むだけになってしまいます。
これはエンジニアごとの癖や目的とする成果物がバラバラになってしまうのであまりよろしくないことです。
体系的に1つのシステムと哲学に沿ってコーディングされているプログラムであれば、文脈への理解や目的が明確になっているため、まるで一冊の書籍を読むように読み進めることができます。
ここでは、その種類と方法を紹介します。
これは他人のコードから学ぶ最も効果的な方法の1つです。
同じ開発チームに所属しているエンジニアであれば、目的も同じな上、チーム内で書き方を統率しようとする力学も働くため、一貫性のあるコードリーディングが可能になります。
他人のコードを調べ、改善すべき点やバグについてフィードバックを提供し、その結果として、さまざまなプログラミング技法や実践方法についての洞察を得ることができます。職場だけでなく、オープンソースのプロジェクトへもコードレビューに参加できます。
GitHub、GitLab、Bitbucketのようなプラットフォーム上のオープンソースプロジェクトは、様々な開発者によって書かれたコードを調査する機会を提供します。
ソースコードを研究し、彼らがどのようにプログラムを構成したかを理解し、バグを修正したり機能を追加したりしてプロジェクトに貢献可能です。
AtCoder、LeetCode、そしてTopCoderのようなプラットフォームは、問題という形でコーディング課題を提供しています。
これらのプラットフォームの多くは、自分で問題を解決した後、他の人が提出した解決策を見ることもできるという特徴があります。これらの解決策を分析することで、同じ問題への異なるアプローチや解決方法についての洞察を得ることができます。
ペアプログラミングとは、2人のプログラマーが1つの環境で一緒に開発を進めるスタイルです。
ドライバーと呼ばれる1人がコードを書き、ナビゲーターと呼ばれるもう1人が入力されたコードの各行をレビューし、随時提案や修正を実施します。これは他のエンジニアから新しいテクニックやアプローチを学ぶのに非常に効果的な方法です。
覚えておいてほしいのは、他のエンジニアのコードを勉強するときはただ読むだけでなく、そのコードが何をしているのか、なぜエンジニアがそのようなコードを書いたのかを理解しようとすることです。
可能であればコーディングをした本人に直接質問し、学んだことを自分のコードに応用してみましょう。
GitHubは世界で最もコードがホスティングされているプラットフォームです。
独学のための良質なコードを見つけるにはGithub上で良いコードを見つけるためのテクニックを覚えておきましょう。
Githubのスターやフォークが多い例
スターやフォーク、コントリビューター(OSS開発参加者)の数が多いリポジトリを探しましょう。
この指標は、一般的に質の高いコードを持っている可能性が高く、人気のある活発なプロジェクトを示しています。GitHubの検索機能を使えば、自分の興味に基づいてリポジトリを探すことができます。
たとえば、Pythonの学習に興味があるなら、Python
で検索して星の多い順に並べ替え、自分が興味を持ちそうなリポジトリの内容を覗いてみると良いです。
良いリポジトリは定期的にメンテナンスされていることが多いです。
そのリポジトリのコミット履歴をチェックすることで、コードに定期的な更新や改善があるかどうかを確認できます。さらに、多くのオープン課題やクローズ課題があれば、ユーザーやコントリビューターのコミュニティが活発であるとわかります。
良いプロジェクトには、明確で包括的なドキュメントがあります。
ユーザーによって該当のコードをどのように使うのか、どのように構成されているのかを理解するのに役立つドキュメントが書かれていると活発なコミュニティを抱えるコードであるとわかります。
READMEだけでなく、wikiやREADMEからリンクされているドキュメントサイトに情報が豊富な場合もあります。
Pull Requestはプロジェクトの質を測る良い指標になりえます。
コードレビューが定期的に行われ、有意義なコメントやディスカッションが行われていれば、そのプロジェクトが高い水準のコード品質を維持している良い兆候です。
興味のある分野で多くの人から関心を得ているエンジニアを見つけた場合、GitHubで彼ら彼女らをフォローすれば質の高いリポジトリにたどり着ける可能性がグッと上がります。
彼ら彼女らがどんなプロジェクトにスターを付けているか見ることができるので、そこからたどっていくこともおすすめです。
Awesome Listsは、特定のトピックに関するリソースを集めたものでGitHubにたくさんあります。
有用なライブラリやツール、プロジェクトのリストが含まれており、自身が扱うプログラミング言語やツールのリポジトリは一読するだけの価値があります。
コードリーディングをしていると、他のエンジニアのコードが素晴らしいと感じることはよくある感情です。
多くの場合、以下のような要因に起因しています。
他人のコードが自分のコードより優れていると感じることは、あらゆるレベルのエンジニアに共通する経験であることを覚えておいてください。
この感情はあなたが新しいアイディアやテクニックに触れている証拠であり、学び成長する素晴らしい機会なのです。怖気づくのではなく、好奇心を持って、学ぶつもりでそのようなコードに接してください。
コードのコピペ(コピー&ペースト)は、緊急性のある状況では役に立つときもありますが、使いすぎたり、理解せずに頼ったりすると大きな弊害があります。
他人のコードをリファレンスとして使ったり、問題を解決するためにその一部をコピーしたりすることは、それがどのように機能するかを理解し、ライセンスや帰属の要件を尊重する限り何も悪いことではありません。
しかし、常に自分でコードを書くように心がけ、コピペに頼るのは最後の手段か、コードの重要でない部分だけにしましょう。長い目で見れば、より強力なスキルと、より質の高いコードにつながります。
先述した通り、コピペには中毒性があり、自身の成長の妨げになります。
ただし、どうしても理解できないが仕事として先に進まなければならない状況もあるでしょう。
たとえば、エンジニアの情報共有に多大な貢献を与えているQiitaやZennのようなプラットフォームのコードをコピペしたことがあるエンジニアは少なくないと思われます。日本人エンジニアが多く、文脈も比較的近いところで働くエンジニアによる情報共有は有用となることも多いでしょう。
こういったプラットフォームから「ただ受け取る」だけでなく、それを後学習として復習し、理解できるようになることで自分自身が情報提供者にもなれるのです。
自分が理解できなかったことは、他の誰かが現在理解できていない可能性が高いのです。そういった方の手助けができるようになれば、きっとあなたのエンジニアライフをより素敵なものへと彩る活動になります。
このコンテンツでは、コードリーディングへ入門したいエンジニアに情報と注意点をまとめましたが、結局のところ小手先のテクニックよりも努力あるのみです。
コードを書き続けるだけでなく、読み続けることも体力と集中力が必要になりますし、理解できないときに頭が混乱してしまうことも少なく有りません。
こればかりは明確な解決方法はなく、「理解できるまで読む(+調べる)」「理解できるまで書く」を実施することが大切になってきます。
当然効率よく学習できることが理想ではありますが、「考えた時間」の長さはそのまま自身のスキルにとって成長の礎となります。仕事から帰ってきて、温かい食事を取りシャワーを浴びたら、寝る前に1つだけでいいのでGithubリポジトリを覗いてみるところから始めてみてください。