ソースコードを効率よく読解しようと思うなら、絶対とも言えるほどに必要となる前提知識があります。
ほとんどのプログラミング言語の入門書は、基本的な文法の説明が中心になりますが、開発プロジェクトのソースコードを読めるようになるには、基本文法だけでなく、知っておくべき知識があるんだと。
そんな当たり前のことも知らずに泣いていた過去の自分。
もし初歩的なことで苦しんでいる人がいるなら、この記事が参考になればなと思います。
記事の対象者
この記事は、以下のような人でソースコード読解に迫られたんだけど、どこからなにを勉強すればいいのかわからないという初心者人向けの記事になります。
- なぜか知識もないのにIT業界に入ってしまった人
- なぜか研修後に一人でいきなり現場に放り込まれている人
- 周りにどんな勉強をすればいいのか教えてくれる人がいない人
- プログラミングの入門書しか読んだことがない人
- オブジェクト指向プログラミングを使用している人
完全に個人的な体験から、「早くから知っておけばよかった」と「これを知らずにソース読解しようとしていたとか無謀だったよ」と思った知識を紹介します。
どの知識も完璧に理解する必要はなく、ただなんとなく知っているというだけでだいぶ違うと思います。
(紹介している本の内容については、Amazonのレビューを読めばどんな本なのかがよりわかると思います)
オブジェクト指向プログラミングについての知識
まず、オブジェクト指向プログラミング(言語)とはどんな存在なのか。これを大前提として知っておいた方がよいです。
オブジェクト指向でプログラミングされたソースコードを読もうとするなら、オブジェクト指向の思想や特徴を知っておいた方がいいのはなんとなく想像できるのではないでしょうか。
オブジェクト指向プログラミング全般的な概要を知るなら、下の本がオススメです。
この本は、オブジェクト指向というプログラミングが、どういった歴史背景で生まれたのか、なぜ必要とされたのか、どういった特徴があるのか、初心者にもわかるように整理して書かれています。読むのは難しくない本です。
私は「スッキリわかるJava入門」という入門書でオブジェクト指向プログラミング言語に初めて触れたのですが、この本には、以下のような記述がありました。
オブジェクト指向の定義:ソフトウェアを開発するときに用いる部品化の考え方のこと。
オブジェクト指向の本質:現実世界の登場人物とそのふるまいを、コンピュータ内の仮想世界で再現する。
私は、この本を読んだばかりのことは「現実世界をそのまま映しだすプログラミング手法なんだ、すごい。わかりやすい」というように意識が向いてました。
けれど、開発現場に入って、プロジェクトのソースコードを読もうとしてもさっぱり意味がわかりませんでした。
ソースコードを見ても、ちっとも現実世界の映し姿を感じられませんでした。
「なんで現実世界をマネする考え方のプログラミング言語なのに自分にはわからないんだろう? 素直に現実世界を思い浮かべてソースコードを読んでいるんだけど……」なんてアホなことを考えて、悩んでいました。
「スッキリわかるJava入門」という本はわかりやすい本で、プログラミングに触れたこともない人にもイメージしやすいように、理解しやすいようにと工夫されているオススメの本なのですが、私はオブジェクト指向については上手くイメージができませんでした。
そんな私にとって、「オブジェクト指向でなぜつくるのか」は、救いの本でした。
まず、なぜオブジェクト指向を理解できずに混乱する人が多くいるのかの理由も書かれており、また、オブジェクト指向がプログラミング部品化の考え方から出発して、ソフトウェアを開発するときに現実世界を分類整理する方法に広がっていっていったということもきちんと書かれています。
まさにオブジェクト指向について混乱していた私は、この本を読むことでオブジェクト指向について「ああ、そういうことだったのか」と納得感を得られました。感動しました。
(入門書たる「スッキリわかるJava入門」について書かれていたことは、こういうことを言っていたのだなと理解が深まりスッキリしました)
オブジェクト指向プログラミングに関わっている人で、
私と似たようなことを思って悩んでいる初心者には、絶対に読んでおくべき本じゃないかと思うくらいにオススメです。まさに基礎知識です。
設計(デザインパターン)、実装についての知識
オブジェクト指向について大まかにイメージを掴めたら、次はオブジェクト指向プログラミングによって、どうやってプログラムは設計されて実装されるのか。
その意識を少し高めておいた方がソースコード読解のときに苦しくなくなります。
ここでいう設計とは、プロジェクト全体の広い範囲に及ぶものではなく、数クラス程度を結び合わせて考えられるレベルのものです。(デザインパターンとは、ある状況にはこういう設計をすれば上手くいくという設計パターンのことです)
下の本がオススメです。
(ちなみに、私は少ししか読んで理解できていないですが…)
Java言語の人には、もう一冊の本もオススメしておきます。
Java言語における23個のデザインパターンの実装方法について、それぞれがどのように実装されているのかわかりやすく書かれている本です。
この本は、Javaの開発者で上述の本には重たすぎるという人で個々のデザインパターンについて実装してみたいという人にはオススメかなと思います。
(オブジェクト指向言語というくくりでは同じでも、実装の記述方法やベストプラクティスはプログラミング言語によってけっこう違いがあったりするので、実装についての勉強は、それぞれのプログラミング言語で書かれた本で勉強してください)
こういったデザインパターンについての本を読むことで、オブジェクト指向プログラミングにおいて、 オブジェクト(クラス)同士の結びつきによって、機能が実装、構築されていくんだというデザインパターン(≒設計、設計パターン)、考え方や例を学べます。
私はプロジェクトのソースコードを闇雲にとにかく読解しようとして泣きたくなった経験がありますが……
これらの本を読むことによって、「設計(≒抽象的)」「実装(≒具体的)」という視点を持ってソースコードを読むという意識が芽生えました。
そうすると、ソースコードを一行一行読むという読み方だけではなく、一歩離れて、ソースコードを機能ごとに読む、クラスの機能を意識する、クラス間の関係性を意識して読むなど、ソースコードへの追い方の意識が変わりました。
上記で紹介したような本を読んでおくと、「構造化プログラミング」と呼ばれるようなスタイルのトップダウン式に処理を機能分割して組み立てられたソースコードと、「オブジェクト指向プログラミング」スタイルの情報隠蔽によってクラス分割して組み立てられたソースコードでは、コード読解のときの意識の向け方を少し変えた方がやりやすいなといったことが感じられるようになります。
「このソースコードはどういう概念、仕様から実装されているのだろう? クラス間の協調動作において、どのあたりの役割を担当しているのかな?」なんてことを考えながら読むようにすることで、理解度や楽しさが上がると思います。
設計書についての知識
設計という視点を持ってソースコードを読解しようと考えるようになったとき、私は設計書という存在があることを気づきました。
イヤ、存在していることは知っていたのですが、なにが書いてあるのかわからなかったし、どう役に立つのかわからなかったので、きちんと読もうという気持ちがなかったんです。
でも、「設計」と「実装」についてのことを知ってしまえば、設計書がソースコード読解にとって、いかにありがたく興味深い存在なのかわかるようになるので、目を通すようになりました。
そうなると、プログラミングの設計書は、UMLという記述ルールで書かれているのでUMLに関しての最低限の知識が必要です。
クラス図、シーケンス図、ER図は読めるようになると、設計書のありがたみがわかるかなと思います。
ただ、上記で紹介した本にも少し説明がありますし、UMLは必要になった時々に、インターネットで調べればやっていけるかなと思います。
まとめ
右も左もわからなくて、どこから手を付ければソースコードを読めるようになるのかわからないという方は、オブジェクト指向、設計と実装、設計書の読み方の3つの知識を、まずは学ぶようにすればいいと思います。
意味のわからない呪文のようだったソースコードが、意味のあるソースコードに見えるようになってくると思います。
今、自分が見てる一行のソースコードは、ただ一行として存在しているのではなく、(オブジェクト指向、設計によって考えられた)他のソースコードと関係し合うことによって意味のあるソースコードとして存在しているのだと。
そして、現実世界のなんらかの作業を担当してくれているんだという認識ができてくると思います。たぶん。