見出し画像

【読書】「スッキリわかる Java入門」オブジェクト指向をRPGで理解する

この記事はプログラミング初心者向けの記事となります。

私が講師を務めるIT企業向けの新人研修では、Javaというプログラミング言語を教えます。

研修で使用する教材は会社のオリジナルの教材としてあるのですが、研修生が自主的に学習できるように、Javaの入門書を1人1冊渡しています。

それがこちら。「スッキリわかる Java入門」です。

第2版は以前読んだことがあるのですが、最近新しくなって第3版が出版されました。
研修生に配布するので、私も今一度復習の意味も込めて読み直してみました。

以前読んだときも分かりやすかった印象はありますが、改めて読んでもやはり分かりやすかったです。
2版と比べると、新しく追加された要素が多数あり、ボリューム満点の入門書となっています。(全体のページ数でいうと700ページを超えています。。)

本書では3人の登場人物がいて、それぞれが対話をしながら徐々にステップアップしていく構成になっていて、それが分かりやすさの1つのポイントになっています。
本書の魅力は何と言ってもオブジェクト指向の概念が分かりやすいことでしょう。
RPGを題材にしてオブジェクト指向を解説していくため、ゲームが好きでRPGをしたことがある人にとってはとてもなじみやすい入門書になっているのではないかと思います。

オブジェクト指向は、プログラミング初心者が躓きやすく、初心者にとっての一つの壁となっています。
私自身、新人だったころは、新人研修でJavaを学んだのですが、オブジェクト指向については深く理解できませんでした。
というのも、オブジェクト指向の使い方自体は、ただ構文を覚えてしまえばいいだけなので、何も難しくはなかったです。
ただ、オブジェクト指向を使うことで何のメリットがあるかはあまりピンと来なくて、実務で2年くらいプログラミングをやっているうちに、自然と理解が深まったような印象です。

オブジェクト指向を本当の意味で使いこなすには、デザインパターンなど、プログラミング言語の入門書ではあまり触れない分野まで踏み込む必要があるかと思いますが、Javaの概要と、オブジェクト指向の概念を理解するという意味では非常に分かりやすくて読みやすい本であると思います。

アルゴリズム力は別の本で鍛えよう

本書はとても分かりやすいので、今までも色んな研修生に読んでもらいました。
その中で一つ思った事があります。
本書は、Javaやオブジェクト指向の知識を得るにはとても分かりやすいが、アルゴリズム力を鍛えるには向いていないという事です。

アルゴリズム力というは、要は処理の流れを考える力のことです。
プログラミングスキルというのは、プログラミング言語の知識はもちろんのこと、処理の流れ(アルゴリズム、ロジックなどと呼ばれる)を考える力も非常に重要です。

プログラミングは、説明を聞いているときは理解している気になるものの、実際にプログラムを書こうとすると手が止まってしまう人は多いです。
これは、言語の知識を理解したとしても、処理の流れを考える力は別だから起きるのでしょう。

本書を読んで分かりやすいと言う研修生は多いものの、その後に課題を出してプログラムを書かせてみると思うようにいかない人が多い。
つまり、Javaの知識を身に付けるという点では非常に優れた本なのですが、この本だけで色々なプログラムが書けるようになるわけではなく、アルゴリズム力は別で鍛える必要があります。

これは、他の本やサイトなどでの演習問題を通じて、処理の流れを考える訓練をするのが一番でしょう。

RPGでオブジェクト指向を学ぶことの落とし穴

RPGを用いてオブジェクト指向の解説を行うのは、分かりやすさという点において非常に有効だと思います。
ただ、本書の内容を否定するわけではないのですが、私の経験上RPGを使ってオブジェクト指向を学ぶには、一つ欠点があります。

それは、実際にRPGを作ろうとすると、本書の様にうまいこといかないことです。

私が今まで教えてきた研修生の中で、研修最後の開発課題でRPGを作成した人たちがいます。
ブラウザで遊ぶWebアプリケーションで、ドラクエ風のRPGでした。
期間が短かったこともあり、機能は限定的でしたが、研修の課題としては非常に良い出来でした。

このRPGの開発を客観的に見ていて思ったのは、オブジェクト指向はRDBやフレームワークとの相性が悪いという事です。

オブジェクト指向とRDBの相性が悪いというのは昔から言われていること(インピーダンスミスマッチ)で、感覚的に理解していたことではあったのですが、RPGの創作過程を見ていてそのことを再認識しました。
本書ではRPGのキャラクターをオブジェクトをみなしてオブジェクト指向を説明しており、キャラクターの職業で継承関係を説明しています。
これは説明としてはとても分かりやすいし、オブジェクト指向の発想からしても理にかなった実装方法のように思うのですが、RDBを用いてデータを保存しようとすると、データをどう持たせるのかが正解なのかは非常に悩ましいところです。

また、研修の中ではJavaのフレームワーク(Spring Boot)を用いてWebアプリケーションを作成してもらったのですが、フレームワークを用いると、プログラム開発において制限事項が増えます。
一般にフレームワークを用いると開発スピードが上がることがメリットとして挙げられますが、その分制限事項が増えることがデメリットになります。

RPGでは、味方キャラクター、敵キャラクター、装備品、消費アイテム、魔法など、オブジェクトとして考えられそうな要素が多く出てくるので、オブジェクト指向を有効活用してプログラムを作るのは非常に相性が良さそうです。
しかしながら、フレームワークを使うと、クラスの作成において色々と制限事項が増えるので、自分でクラス設計してオブジェクト指向を活用することが難しくなってきます。

現在、実務でのプログラム開発はほぼフレームワークを使うことが必須だと言ってもいいでしょう。
だとすると、オブジェクト指向の本質を理解して使いこなすという場面は案外少ないのかもしれません。

ただ、フレームワークというのも人が作ったプログラムです。
その中ではオブジェクト指向の仕組みが多く使用されています。
結局のところ、オブジェクト指向について詳しく知らなくてもフレームワークの知識があれば開発ができます。
しかし、オブジェクト指向を知らない人はフレームワークの中の仕組みを知らないので、フレームワークそのものを作ったり拡張することが難しいです。
逆にオブジェクト指向を使いこなせる人であれば、フレームワークを作る側に回れる可能性もあります。

そう考えると、オブジェクト指向を理解しているか否かによって、技術レベルの差は2極化していくのかもしれません。

今後AIが発達していく中で、働く人々はAIを作る側・使いこなす側と、AIに使われる側で2極化していくという話がありますが、これはプログラミングの世界でも言えることなのかもしれません。

フレームワークを作る、あるいは仕組みを理解して使いこなす人と、何となくフレームワークのルールだけを覚えてフレームワークに使われながら開発をする人。
技術が進めば進むほど、レベルが高い人とレベルが低い人の2極化が進んでいくことでしょう。

まとめ

色々と話が逸れてしまった部分もありますが、最後は本書についてのまとめです。
・Javaの基礎知識を得るのにはおすすめ
・アルゴリズム力を鍛える目的にはおすすめしない
・オブジェクト指向を理解しなくてもプログラム開発はできる時代だが、知っていると知らないでは技術レベルに大きな差が出る
・レベルの低いプログラマーにならないためには、オブジェクト指向の理解が大事
・RPGの経験者で、オブジェクト指向を理解したい人にはおすすめ


この記事が参加している募集

推薦図書

サポートいただくとめちゃくちゃ喜びます。素敵なコンテンツを発信できるように使わせていただきます。