やっぱり難しい?数学が苦手な私が1ヶ月Javaをやってみた感想
「プログラムを組むって理系向きだよ」と昔IT系の方に言われたことがあります。
私は、数学の「ファジーなところがない」部分が苦手な文系です。
そんな私がJavaを1か月やって、どんな感想を持ったか書き残しておきたいと思います。
1つの目標を達成するために選べるルートがたくさんある
文字の入力に使うScannerとBufferedReaderの使い分けがよくわからないというのが、学習を始めて2週間過ぎたころに思ったことでした。
両方とも入力された文字列や値を受け取るためのクラスですが、BufferedReaderは他のクラスと組み合わせる必要があるという点でScannerより使い勝手が悪いように思い、あまり使っていませんでした。
しかし処理速度はScannerを上回っているということで、多くのデータを扱うシステムに組み込むならこちらのほうが適しているということが分かりました。
同じ用途でも状況によって使い分けることができるのは便利ですが、同時に判断力が問われるところだと思います。
カプセル化とgetter/setterへの混乱
カプセル化の解説を読むと、「変更の必要がない、変更されては困る要素を保護する」役割があると書かれており、読んだ時点では納得しました。
しかし、getterとsetterの概念が出てくると、「カプセル化した中身が固定されたもの」に外部から干渉できてしまえるなら、入っている情報の処理がおかしくなりそう、と混乱しました。
カプセル化 = 中身は固定
と思い込んでいたことが原因です。
中身を見たり変えたりでき、かつ情報を適切に守ることがカプセル化なので、矛盾はありません。
この結論に至るまで時間がかかりました。
プログラムを実行するまでの流れは、打ち合わせに似ている
Javaにはオブジェクト指向という考え方がありますが、これは
ある動作ができると設定されたモノ
を部品として成立させるという考え方だと思っています。
「人間」なら「話す」「見る」など、プログラムの中で行ってほしい行動を言語化して設定したあと、実行するよう指示を出すことで「人間」を動かすことができます。
「人間」と
合図を出したらこう動いて
と事前に打ち合わせをするように、してほしいことをまとめてから自由なタイミングで動かせるところは、現実で誰かに指示を出すのと同じ感覚で行うことができました。
多態性はいまいちわからない
オブジェクト指向関連で、多態性についての現在の理解についても触れようと思います。
定義は
複数のクラスに共通する要素を取り上げて、同じものだとみなす。
だと思っています。
例えば、「日本舞踏家」は大きく分けてしまえば「人間」で、「バレエダンサー」も「人間」・・・というように見ます。そして同じ「踊れ」という命令にそれぞれのやり方で応えさせます。
異なるクラスのインスタンスに設定されたメソッドを、同じものとして扱うという理論なのですが、「抽象的に見る」意味がまだ理解できていません。
上記のような理屈はわかっていても、どういう場面で使うのかがわからなければ実際に利用できません。多態性を有効に使うすべを身に付けるのが今後の課題です。
総論:意外と「決まったルール」と受け入れられるものです
プログラミングになじみのないころは、単語と記号の連なりを意味のある言語として扱うなんて難しそう、と思っていました。
取り組んでみるとルールは多くても、複雑ではないと思えるところも多く、個人の感想としては、学習中の感覚は数学よりも語学よりかな?と思います。
この記事を読まれた方で数学に苦手意識があり、プログラムに興味がある方がいらっしゃれば、ぜひ挑戦されることをお勧めします。数学が苦手な人はこう思うのか、という参考程度でもこの記事がお役に立てれば幸いです。