イベントレポート「Javaプログラミングをスッキリ学ぶための10のコツ」

2015年4月21日(火)
奥野大児

プログラミング言語の習得は簡単ではない。そして学習のとっかかりを間違えると、上達に時間がかかったり、上達する前に諦めてしまいがちだ。入門者がつまずく原因の多くは、学ぶ人の環境や教える側の力量にあると考えられる。そんな入門者が陥りやすい壁や落とし穴、教える側が身に付けて置くべくスキルや考え方について、解決のヒントが得られそうな講演が、先日開催されたのでレポートしたい。

2015年2月某日、インプレスの人気Java教本「スッキリわかるJava入門 第2版」「スッキリわかるJava入門 実践編 第2版」の発売を記念し、東京都千代田区のインプレスにあるインプレスグループセミナールームで出版記念セミナーが行われた。

『スッキリわかるJava入門 第2版』『同 実践編 第2版』出版記念セミナー
「Javaプログラミングをスッキリ学ぶための10のコツ」

と題されたこのセミナーは、著者の中山 清喬氏(株式会社フレアリンク代表取締役)とJavaのエキスパートである日本オラクルの岡田 大輔氏(日本オラクル株式会社 オラクルユニバーシティ ビジネス推進部)により、対談形式で行われた。

中山氏岡田氏

上(左):中山氏、下(右):岡田氏

この春からJavaエンジニア、指導するエンジニアにとって、「いかに学ぶか」「いかに教えるか」のポイントを、中山氏と岡田氏の学習経験・指導経験を基に10のコツに分けて語られた。順番に紹介していきたい。

コツ

第1部 学びのデザイン

コツ1~コツ4は「学びのデザイン」と題され、Java初心者が学ぶ過程において立ちふさがる壁について語られた。

コツ1:学習を始める前の壁を知る

まず中山氏が 「“プログラミングは理系が行うもの”という考え方の人はいつの世にもいます。一般の方がそう思っていても問題はないですが、これからプログラミングを学習しようとする方がそう思ってしまうと学ぶ前から余計な壁を作ってしまうことになります。そもそもプログラミングが特に理系に有利なものだということはありません」 と切り出した。

続いて岡田氏も「文系だから不利、ということはほとんどないと思います」と語る。

漠然と、プログラミングはロジック(いわば計算式)の塊で、それを扱うのは理系の仕事だというイメージを持っている方も多いだろうが、その不安をセミナーの冒頭で2名の登壇者が打ち消した。

Javaのようなオブジェクト指向の言語は「概念系」と言われており、複雑で長いロジックを大量に書かなければいけないという言語ではない。理系だから取り組みやすいということはなく、理系の人でも文系の人と同じく難しい部分は難しく感じるはずで、理系も文系もスタートラインは同じといってよいだろう。自分が文系だからといって、いらずらに苦手意識を増幅させる必要はないのだ。

コツ2:学習開始直後の壁を知る

学習を始めようと準備している段階でぶつかる壁もある。たとえば開発環境の構築がうまくいかない、エラーが出て動かないなどだ。ここで両氏はコツ1の応用で「好循環」への舵取りについてアドバイスをする。

まず開発現場でよく使われている、ソフトウェアの開発環境の一種「Eclipse」を紹介。こういった“統合開発環境”を利用することによって、さまざまな手間を省くことが出来、素早く実践的な学習を開始することができるというのだ。

岡田氏はほかに「NetBeans」「IntelliJ」なども紹介する。たとえば「NetBeans」であれば、日本語化を含め、オフィシャルサイトから一回のダウンロード・インストールで開発環境を構築できるので、導入で戸惑うことなく「とりあえず勉強してみるか」と、すぐにプログラミングに取りかかれるという、ツール利用のメリットを強調した。

企業研修などでは環境が指定されていて、上記のツールが使えないケースもあるが、復習の際などに身の丈にあったツールを積極的に利用して、まずは学習以前の壁を楽に突破するとよいだろう。

エラーが出て動かないことに関しては、長期的な学習には向かないものの、最初はコードを“写経”して動かすことを勧めた。写経、つまり研修テキストや入門書に掲載されているプログラムを一字一句違えずに写し取って実行してみることだが、そればかり行っていると応用が利かなくなってしまう。それでも初期段階では

  • 自分で少し変えてみる。変わった結果を確認する
  • エラーが発生したらなぜ発生したかを考えてみる

を少しずつ繰り返すことで成長することが可能だと言う。

コツ3:学習中の壁を知る

たとえば、Java入門書を購入して「1日に1章」読むと目標を定めて進める学習方法がある。しかし、本の章立は学習のテンポを考慮して分けられているのではなく、似た要素をまとめて覚えられるように分けられているに過ぎないので、「1日1章」と自分に課しても、つまずいて遅れていくに従い、目標を達成できないことに嫌気がさして、挫折してしまうことも少なくない。

難しいと感じる感覚には個人差があり、自身専用に作られたテキストではなく、一般に広く売られている参考書で、「1日1章」(一日何ページも同じ)と課す学習計画はあまり推奨できない。とはいえ、気の向くままに読み進める余裕がない人にとっては、ある種のノルマを設定しながらペースを作って学習していかないと、なかなか読み終わらずに、これもまた挫折に結び付く。

参考までに計画の立て方を紹介する。仮に1日1時間学習に使えるとしたら、何日か読み進めたページ数から、一日の平均進行速度を割り出し、それを残りページ数で割って学習計画を立てる。その際平均の割り出しは1章で行うのではなく、2章で割り出すとよいだろう。ほとんどの入門書は、1章だとイントロ的な内容で、プログラミングの実践的な学習に入っていないことが多く、後の章のペースとかなりギャップが出来てしまうためだ。

また学習計画を立てる際は、自動車教習でいうところの「追加の技能教習10時限分付き」といったような予備日を用意し、ある程度遅れが発生することを計算にいれて、「難所」と感じたら学習ペースを落とし、じっくり重点的にその部分取り組むといった柔軟な対応が良いだろう。

また、難しいと感じる原因を理解しておけば対応も取りやすい。中山氏は根本的な原因を以下の3つに分類した。

  • 複雑
  • 混乱しやすい
  • 教えにくい

複雑なもの、たとえばクラスパスについてはゆっくり、繰り返し教えていくしかない。混乱しやすい、たとえばクラスとインスタンスにおいての型の名前と変数名が似てしまうと「混乱の元」になることを知る。目で見てすぐ分かるような整理を行うことが対策のひとつだ。

そして導き手が教えにくい部分は、もちろん学び手が難しいと感じる部分だ。のちのコツで述べられることだが、難所の突破は導き手のスキルも重要になってくる。

コツ4-1:実践開始後の壁を知る

Javaを研修で学んだあと、現場の部隊に加わってJavaの開発を始めると戸惑うことがある。

「研修で覚えたJavaが現場で使っているJavaと違う」 といった経験は、研修を修了して現場に入ったエンジニアの多くが感じることだろう。これに関しては中山氏は「そのうち慣れます」と不安視しないことを強調した。

現場のJavaは、研修で学んだJavaよりもレガシーな書き方をしているケースがある。それはやむを得ないことであり、失望することでもない。新人研修は、過去のしがらみがないため最新の技術を教えるが、安定した運用を重視している現場などでは古い技術のままということもよくある話しだ。それでも、最初から最新の技術を使える若手が現場に入っていくことで組織の活性化も図れるわけで、そのギャップが悪いということではない。古きも取り入れて自分の糧にしていくような柔軟な思考が望ましい。

現場で求められることはプログラミング言語だけではない。プロジェクトマネジメントなど、システム開発に必要な知識は山ほどある。現場独自の文化や不文律もあるため、戸惑うのは当たり前で、それを受け入れながら焦らず少しずつ貢献していけばよいだろう。

コツ4-2:Javaって大丈夫?

バージョンアップが停滞した時期があったからか、Javaに斜陽な印象を覚える向きもある。それに対して岡田氏は、統計データを元に「実際はJavaは長きに渡り活発に使われ続けていまして、入門用チュートリアルの検索数も依然多いですし、新しく言語を始めている人にも注目されていて、根強い人気を誇っています」と説明する。

一方、中山氏は、客観的な視点でJavaを含めて、いくつかの言語を紹介した。

現代の発達したITの世界では、様々な複雑化した案件が飛び込んでくる。バッチ処理、Webシステム、科学計算、スマホアプリ、基盤制御……。そのような状況に対して、活用できるプログラミング言語が一つでは戦えない。

「自分であれば、『この技術で仕事をしたい』というより、要件に応えられる武器(=プログラム言語)を複数そろえておきたい」 と中山氏は語る。

ただし、多ければ多いほうがいいということではなく、あまり手広く言語を学びすぎても、使わない武器が出来てしまいえばその武器は錆びて学んだ意味がなくなることもあるとも言う。中山氏自身は

  • Java(+Play/JEE)
  • Ruby(+Rails)
  • JavaScript(+jQuery/Ext)
  • TeX(プログラミング言語ではないが業務上多用)

をベースとし、必要に応じてbashやPHP・Pythonを扱いつつも主力を上記4言語としている。

言語

その上で「一人の人が持てる武器の数に制約があることを考えると、主力となる言語カードがほしいところです。なかでもJavaはバッチを作れ、Webアプリも作れ、サーバサイド・クライアントサイドも行け、スマホアプリも作れる便利なカードではないでしょうか」と語りJavaの優位性を説いた。

連載バックナンバー

運用監視イベント

AppDynamics、2回目のユーザーカンファレンスで垣間見えた理想と現実

2015/12/15
アプリモニタリングのAppDynamics、2回目となるカンファレンスを開催。
開発ツールイベント

EMC、スケールアウトストレージの元祖、IsilonのエントリーモデルにSDSを追加

2015/11/30
EMC、スケールアウトストレージのIsilonのエントリーモデルにSDSを投入。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています