Java のプログラミングでつまづいたこと(初学者のとき)

satoru-takeuchi.hatenablog.com mizchi.hatenablog.com

このあたりを読んで自分も書いてみようと思った、ので書きます。これらの記事がバズってからずいぶん経ってしまったけれど……。けっこうな文量になりそうだったので、まずは Java の初学者のときにつまづいたことを書こうと思います。

whoami

2014 年に大学を卒業し、そこからソフトウェア開発業に携わって 6年目になります。小中高とプログラミング経験はなく、大学は文系学部卒だったので、初めてプログラミングを本格的に学んだのは、新卒で入る会社の入社前研修のときです。

プログラミング学びはじめの頃は、Oracle を中心とした SQL・データベースの学習、 Java の学習。その後、OJT によるプロジェクト参画 (Spring Framework などを使用)をしていました。

初学者のころにつまづいたこと

とにかく用語がわからない

インスタンス」「プロセス」など、当時はどれもあまり聞いたことのない言葉。最初はまったくイメージが湧かず、調べてもなかなかしっくり来ませんでした。いまとなってはもうすっかりお馴染みなんですけどね。

なんとか検索して調べて、卑近な例でたとえを挙げてくれているようなサイトを見つけて、イメージを掴んでいきました。たとえば以下のようなサイトですね。

Oracle Database | 技術ブログ| レック・テクノロジー・コンサルティング株式会社

いま見ると、正直「なんじゃこりゃ」という感じなのですが、右も左もわからない当時の自分は、ノートやペンのたとえに大変助けられました。

自分の学習していることが何に役立つかイメージできない

Java を学びたてのころ、簡単な条件分岐や標準入出力の仕方などを習って、コンソール上で動くプログラムを書いていたのですが、黒地の画面に白の文字で「Hello World」などと表示されることにどれだけの意味があり、この先の仕事の何に結びついて、どう役立つのか、がなかなかイメージできませんでした。

なんとなくですが、こういう思いをしている初学者の人って多いんじゃないでしょうか。

いま思えば、実際に現場で仕事をしている先輩に、「この勉強が現場でどう役立つんですか?」と質問してみたら良かったのかもしれません。もし、いまの私が当時の自分に教えるなら、「サーバやデータベースがどのように関わって、日頃自分たちの使っているサイトが表示されているか」というようなところを説明して、その中で Java (サーバ側プログラム) のやっていることを教えるかな、と思います。

「クラスの継承」や「インターフェースの実装」がまるきり理解できない

これは衝撃すぎて忘れもしないのですが、当時使っていた参考書には class Car class SuperCar extends Car という例が出ていました。正直、まったく意味がわかりません。「スーパーカー」が「車」を「継承」??? 「継承」というのはどういう意味だろうか。技術の継承、などならわかるけれど、「車の継承」とは。

どうにもわからないので、他の参考文献をあたってみると、今度は「いるかクラス」「いぬクラス」「哺乳類インターフェース」などと書いてある。「いるかといぬが哺乳類なのは知っているけれど、それのいったい何がプログラムに関係あるの???」という感じ。

いま思うと、処理に関係するようなたとえが出てこなかったせいで、理解がなかなか進まなかったのだと思います。ソフトウェア開発歴 6年になっても「哺乳類インターフェース」なんて作ったことないもん。

その後、研修の補講で「Java でポーカーのゲームを作る」という課題があり、先輩エンジニアが良いお手本のソースコードを見せてくれたおかげで、「なるほどこういう意義があるのか!」という気づきを得ました。

実際のところ題材は何でも良かったのですが、プログラミングにどう活きるか、を誰か早く教えてくれたら良かったのに、といまも思います。

どうやって克服したか

仲間の存在が大きかった

私の場合、会社の新人研修でプログラミングを学んでいたので、同じくらいの学習レベルから学習を進めた同期の存在 (だいたい 20人くらい居た) 、また、そんな私たちに親身になって教えてくれた研修講師や先輩の存在が、何より大きかったと思います。

「戻り値と引数ってどっちがどっち?」「オブジェクトとかマジで意味わかんねー」「研修ダルいわ〜」など (?!) 、わからないことを「わからない」と素直に言い、教えてもらえる環境があったことで、しっかりと地力を育むことができたと感じています。

会社以外でも、 Twitter のフォロワーの方にはかなりお世話になっていました。 Oracle Master Bronze 11g の勉強で苦しんでいたときには、 Platinium 資格持ちのフォロワーさんが教えてくれたこともありました (恐れ多い) 。私自身エンジニアとしての実力ははまだまだなのですが、いろいろな方に助けていただいてここまで来たのだな〜という感じがします。


そんなところです。なにか学びはじめの人の励みになればと思います。

また気が向いたら、最近学んでいる TypeScript 編を書きます(また学びはじめて数ヶ月ですが、これもなんだかんだで書くことがたくさんある)。