コードリーディングの基礎は文法への理解から

コードリーディングには、さまざまな目的やシチュエーションがありますが、数行から数十行程度のコードを読み進めて処理内容を理解するという目的で行うケースが最も多いです。このように1行1行コードを理解していくためには、対象のプログラミング言語の文法をしっかりおさえておかなくてはいけません。文法への理解があいまいなままでは、いつまで経ってもコードリーディングに自信が持てないでしょう。

今回はコードリーディングのために文法を網羅的に学ぶことの重要性について説明していきます。

## 文法を網羅的に学ぶようにしよう
以前は「はじめての〇〇」「やさしいXXX」のような入門書を使ってプログラミングを学ぶ人がほとんどでしたが、最近はチュートリアル的な「作りながら学ぶ」というタイプの教材やスクールから始める人が多くなっています。Stack Overflowが毎年行っている調査[^1]でも、ネット上のリソースを使ってプログラミングを学ぶ傾向が強まっています。

従来の入門書は、英語学習になぞらえると英文法の教科書に相当するものであり、特定のプログラミング言語の文法を網羅的に学ぶための教材でした。これは初心者がプログラミング学習を続けていく上で必要な知識が一通り身につくというメリットがありましたが、一方でいざコードを書こうとすると何からやればいいか戸惑ってしまうというような実用面でのデメリットもありました。「作りながら学ぶ」系のチュートリアルは、そのような入門書の持つデメリットを解消してくれる存在として非常に有効な教材となっています。

しかし、前述したように最初から「作りながら学ぶ」系のチュートリアルでプログラミングを学ぶ人が多くなってきているため、**文法を網羅的に学ぶ機会がないままに実践の場へ飛び込んでいく**ケースが増えているようです。実用的なテクニックが備わっているため、一見すると即戦力とも言えるようなスタートが切れるかもしれませんが、その後に伸び悩みを感じてはいないでしょうか？その感覚は文法への理解力不足のせいかもしれません。**コードリーディングのような、文法への理解が求められる業務で苦戦していませんか？**

かくいう私も[Railsチュートリアル](https://railstutorial.jp/)を学んでプログラマとしてのスタートを切ったものの、なんとなく網羅的な知識が足りないと感じたため、改めてパーフェクトRubyやパーフェクトRuby on Railsのような書籍でRubyの文法を網羅的に学び直した経験があります。文法への理解が深まったことにより、コーディングでもコードリーディングでも行き詰まってしまうケースが減りました。

プログラミングを学ぶ方法や教材は多様になっており、どれから始めても良いのですが、**コードリーディングへの苦手意識がある方はぜひ文法を網羅的に学んでほしいです**。もしまとまった時間が取れないのなら、せめて業務中に必要になったときだけでも構わないので、公式ドキュメント等にあたって文法への理解を深め、コードリーディング力を身につけていって欲しいと思います。

## 文法を学ぶ・調べるためのドキュメント
基本的には各プログラミング言語の公式ドキュメントやそれに類するサイトを使うようにしましょう。場当たり的にググって、ヒットしたブログやStack OverflowのようなQ&Aサイトに頼っても文法的な知識は身につきますが、**コードリーディングを上達させるためには網羅的であることを目指すべき**です。断片的な情報ではなく、網羅的な情報源へアクセスする習慣をつけましょう。

参考として、Stack Overflowの2022年の調査[^2]における人気プログラミング言語の上位である、JavaScript、HTML/CSS、SQL、Python、TypeScriptの公式ドキュメントまたはそれに類するサイトを紹介します。コードリーディングを行っている際に文法的な不明点が出てきたら、これらのサイトを調べて疑問点を解決し、文法学習を進めていくようにしましょう。

### JavaScript
Mozillaが運営するMDNをおさえておけば必要十分でしょう。

- [JavaScript | MDN](https://developer.mozilla.org/ja/docs/Web/JavaScript)

JavaScriptの公式ドキュメントというわけではありませんが、Web開発系の方には定番であるMDNによるJavaScript総合案内的なページです。JavaScriptについて何か調べ物があるときは闇雲にググるより、ここをのぞいてみるほうが確実です。

- [JavaScript ガイド](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide)

同じくMDNのJavaScript入門者向けページです。

- [JavaScript リファレンス](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference)

コードリーディング時にピンポイントに文法的な内容を調べたいときは、このリファレンスを使いましょう。

### HTML/CSS
HTMLとCSSもMDNで調べれば問題ありません。サイトのレイアウト等のデザインも洗練されており、見やすいです。

- [HTML: HyperText Markup Language](https://developer.mozilla.org/ja/docs/Web/HTML)
- [CSS: カスケーディングスタイルシート](https://developer.mozilla.org/ja/docs/Web/CSS)

HTMLとCSSの総合案内的なページです。

- [HTML の学習: ガイドとチュートリアル](https://developer.mozilla.org/ja/docs/Learn/HTML)
- [CSS](https://developer.mozilla.org/ja/docs/Learn/CSS)

学習者向けの入門ガイドです。基本に立ち返りたいときや理解不足、知識不足を感じるときは、ここから調べ始めると良いです。

- [HTML リファレンス](https://developer.mozilla.org/ja/docs/Web/HTML/Reference)
- [CSS リファレンス](https://developer.mozilla.org/ja/docs/Web/CSS/Reference)

文法的な内容が網羅されているリファレンスページです。ここを読んでわからなければ、前述の総合案内か入門ガイドへ戻りましょう。文法の基本が押さえられているなら、調べ物はこれらのリファレンスのページでほぼ事足りるようになります。

### SQL
SQLは各データベースソフトウェアの公式サイトを見るのが良いです。

- [PostgreSQL 14.5文書 第2章 SQL言語](https://www.postgresql.jp/document/14/html/tutorial-sql.html)
- [SQL As Understood By SQLite](https://www.sqlite.org/lang.html)
- [MySQL 8.0 リファレンスマニュアル](https://dev.mysql.com/doc/refman/8.0/ja/)
- [第 13 章 SQL ステートメント](https://dev.mysql.com/doc/refman/8.0/ja/sql-statements.html)

比較的PostgreSQLやSQLiteのページが調べやすいと思います。残念ながらいずれも機械翻訳のサイトかオリジナル（英語）しかないので前述のMDNに比べると使いやすさの面ではやや不満があります。それでも網羅的に情報が集まっている点は非常に便利と言えます。

### Python
公式ドキュメントがあります。使っているバージョンにあわせることを忘れないようにして活用しましょう。

- [Our documentation](https://www.python.org/doc/)
- [Python 3.11.0b5 ドキュメント](https://docs.python.org/ja/3/)
- [Python 言語リファレンス](https://docs.python.org/ja/3/reference/index.html)
- [索引](https://docs.python.org/ja/3/genindex.html)

調べ物するには、リファレンスページよりも索引ページから入って、ページ内検索するのがいいかもしれません。

### TypeScript
- [TypeScript Documentation](https://www.typescriptlang.org/ja/docs/)

公式ドキュメントです。基本的に英語のみです。

- [TypeScript Deep Dive 日本語版](https://typescript-jp.gitbook.io/deep-dive/)

有志によって日本語化されている`TypeScript Deep Dive`のサイトです。公式が読みにくいなら、こちらがいいでしょう。

## 終わりに
コードリーディングへの苦手意識を克服し、円滑にコードを読み進められるようになるには、各プログラミング言語の文法を網羅的に理解しておくことが重要です。「作りながら学ぶ」タイプの教材を使ってプログラミングを学ぶ方が増えたことにより、文法を網羅的に勉強する機会を別途設ける必要が出てきています。入門書による網羅的な文法学習を行うか、日々の業務の中で公式ドキュメントにあたり、文法をきっちりとおさえていくことで補っていくと良いと思います。地道に文法の基礎を身につけて、コードリーディングを上達させていきましょう。

[^1]: https://survey.stackoverflow.co/2022/#learning-how-to-code
[^2]: https://survey.stackoverflow.co/2022/#technology-most-popular-technologies