プログラマーSEが効率的に新しい技術を学ぶ方法
IT技術は進歩が速く、次々と新しい技術が生み出されています。
そんな中、私たちITエンジニアは効率よく技術を学ぶ必要があります。
私がこれまでにやってよかった学習方法を紹介します。
Contents
効率的に新しい技術を学ぶための手順
私の場合、以下のような手順で技術を習得します。
- ゴール(その技術を使って何をするか?どんなことができる自分になるか?)を設定する
- 本やWebサイトを一気に読んで頭の中に全体像を作る
- 分かってる部分と分かってない部分を把握する
- サンプルを動かしてみる、サンプルのコードを読んでマネる
- 作りたいものを作ってみる
1.ゴールを設定する
目指すものを設定することは何事においても大切です。どこに向かうかを決めなければ、どこにもたどり着けないですからね。
- その技術を使って何をしたいか?
- どんなことができるようになりたいか?
- どんなものを作りたいか?
を考えます。
私が最近覚えた技術はUnityというゲーム開発技術です。Unityを始めようと思ったきっかけはソードアートオンラインというアニメを見たことでした。
アニメを見て、ゲームが作りたくなった
ソードアートオンラインはオンラインゲームを題材にしたアニメです。ゲームの中で出会いと別れ、喜び、悲しみがあり、まるで人生のようで、物語自体すごく面白くて感動的な内容でした。
この作品にはゲーム開発者が登場します。このゲーム開発者は「世界の種」というゲームシステムを開発しました。
「世界の種」はオンラインゲームの土台となるゲームエンジンで、データを入れ替えるだけで新たなゲームを生み出せるというものでした。
これを見た瞬間、「MMD版世界の種を作りたい!」と思ったんです。
MMDとはMikuMikuDanceの略で初音ミクなどのボーカロイドの3Dモデルを使ってかんたんにアニメーションを作れるソフトウェアです。
MMD版世界の種とは、MMDの3Dモデルを使ったオンラインゲームです。モンスターハンターのようなオンラインゲーム上でMMDモデルを動かしてみたいと思ったんです。
当時の私はゲームプログラミングの経験・知識は全くありませんでした。しかし、このアニメを見た瞬間、ゴールが設定されたんです。
そこで、まずはかんたんなゲームを作ってみようとHTML5とJavaScriptでゲームを作りました。HTML5やJavaScriptはWebエンジニアの私には、なじみのあるものなので取組みやすかったんです。
目的が決まると、実現方法が見えてくる
HTML5で2つゲームを作ったらゲーム開発に対する苦手意識が薄れて、もっと本格的なゲームを作ってみたいと思いました。
MMDのような3Dモデルを使ったゲームを作る方法を探していたらUnityを見つけました。
UnityはHTML5 + JavaScriptに比べると覚えることが多く敷居が高い技術ですが、やっていく内に自分のものにできました。
Unityを使ってかんたんなゲームを2つ作ってみたら、もっとレベルの高いゲームを作れるようになりたいと思うようになりました。
仕事でゲーム開発したら、もっとレベルの高いゲームを作れるようになるんじゃないかと考え、Unityを使ったゲーム開発の仕事を探しました。
その結果、私は今Unityを使ったゲーム開発の仕事をしています。
ゴールを設定した当初は、ゲームプログラミングの経験・知識が全くなかったにも関わらず、仕事でゲーム開発できるレベルになれたんです!
ゲームエンジニアになることが目的であったわけではありません。アニメを見て浮かんだゴール「MMD版世界の種を作る」を目指した結果、自然と職業がゲームエンジニアになっただけなんです。
認知科学者の苫米地英人博士は「ゴールを達成するためにはゴールへの臨場感を高めることが重要だ」とおっしゃっています。
私の場合、ソードアートオンラインの物語にのめり込んだことで、その世界観に強い臨場感を感じることによって、自分のゴールである「MMD版世界の種を作る」への臨場感が高まったのだと思います。
ゴールへと続く道が次々と見えてくる
ソードアートオンラインを見て「MMD版世界の種」を作るというゴールを設定 そのためにはゲーム開発技術を学ぶ必要がある
↓
自分にとってなじみのあるHTML5、JavaScriptでゲームを作ってみる
↓
Unityを使えば3Dゲームを比較的かんたんに開発できそう
↓
UnityでMMDモデルを扱うMMD4Unity、MMD4Mecanimを発見
↓
Unityでオンラインゲームをかんたんに作れる技術PhotonCloudを発見
↓
MMDモデルとPhotonCloudを使ったオンラインゲームが完成!
こんな風に、やるべきことが次々と見てきたんです。
2. 本やWebサイトを一気に読んで頭の中に全体像を作る
ゴールを設定したら、次にやるべきことはゴールを達成するのに必要な知識を仕入れることです。 本やWebサイトを読むといいでしょう。
この時、重要なことは速く読むことです。分からない所があってもとりあえず最後まで読んでしまいましょう。最後まで読むことで全体像(ゲシュタルト)ができ上がります。
以下のようなメリットもあります。
- 速く読んだ方が時間が節約できる。
- 最後まで読まないとゲシュタルトができ上がらないので、早く読んだ方がゲシュタルトを早く作れる
また、本1冊の中には自分が知ってる部分が含まれている場合が多いので、知ってる部分をゆっくり読む必要はありません。
新たなプログラミング言語を学ぶ場合、一つのプログラミング言語をマスターした人にとって、新しい言語の大部分は知ってる言語と共通なので、違う部分の差分を学べばいいんです。
そうすれば、本1冊読むのにそれほど時間はかかりません。
3. 分かってる部分と分かってない部分を把握する
本を1冊読み、全体像をつかむと「この辺りは分かってて、この辺りは分かってないな…」というのがわかってきます。
- 分かってるものを使って何を作れるか?
- 分かってないものを理解するために何をすればいいか?
を考えると次にやるべきことが見えてきます。
4. サンプルを動かしてみる、サンプルのコードを読んでマネる
プログラミングの世界では「習うより慣れよ」という言葉があります。
一つ一つ人から教わるよりも動いてるプログラムを見た方がわかるという場面は多々あります。
サンプルコードを動かすことによって、
- その技術を使って、どんなことができるのか?
- どんなコードを書けば、それができるのか?
が分かります。 それらを見ていく内に、作りたいもののイメージや、作り方が具体的に浮かんできます。
5. 作りたいものを作ってみる
1で設定したゴールを達成するために動き始めます。
- 2で仕入れた知識
- 3で把握した自分の現状
- 4で生まれた具体的アイデア
を総動員して取り組みます。
基礎的な知識と具体的アイデアがあれば、自然とやるべきことが見えてきます。後は一つ一つ取り組んでいくだけです。
取り組んでいく中で分からないことにぶつかったら、その都度調べていけばいいだけです。技術ってそうやって使いながら覚えていくものなんです。
学びたい技術を学べる仕事をする
ここまで紹介した方法は主に、帰宅後や休日など個人の時間を使って学習する方法です。
この方法でも、学べることはたくさんありますし、ここで紹介した方法を使えば効率的に学ぶことができます。
しかし、私は学びたい技術を仕事で使うことも強くおすすめします。
個人で作りたいものを作って学ぶのと仕事で学べることには、それぞれ違ったことを学べるからです。
個人で何かを作ると、それらを作るために必要なこと一から十まで全て体験できます。ゲームの企画、開発、テスト、プロモーション、運用と多様です。しかし、それらは個人で作れるボリュームのもの、個人で発想できるものに限ります。
それに対して、会社のプロジェクトで仕事をする場合、一から十まで自分でやるのではなく、分業なので学べることは部分的ですが、担当する部分を突き詰めて取り組むことができるので、部分を深く学べます。それに、他人の仕事を見たり、教わることで、自分の限界も超えられます。
つまり、
- 個人開発では幅広い工程
- プロジェクトでは深い仕事
を体験できます。それぞれ相互に補完しあう関係なので、両方やるのが理想的です。
やりたいことをやるのが一番
私は今ゲーム開発のプロジェクトで仕事をしています。
私にとってゲーム開発の仕事は初めてであり、分からないことだらけです。毎日が勉強です。やりたくて自分で選んだ仕事なので仕事へ取り組む姿勢も以前とは全然違います。
以前の私は、惰性で業務システム開発の仕事をしていました。面白くない仕事だけど、「経験があり楽だから」という理由でやっていたんです。当然、学べることはほとんどなく、つまらない毎日でした。関心事は「残業せずに早く帰れるか」だけでした。なので、遅くまで仕事をしなければならない日はとても苦痛でした。
しかし今は違います。遅くまで働くのが好きになったわけではありませんが、今では不思議とそれほど辛くありません。それは自分で選んだ仕事だからです。
謙虚さ = 学びたい気持ち
また、今の職場には私よりもうんと若い人がたくさんいます。
私は彼らから毎日学んでいます。彼らの職歴は私よりもうんと短いですが、ゲーム開発の職歴は彼らの方が長いので、私よりも知識・経験があります。
だから、自分よりもうんと若く職歴の短い彼らからも学べることがたくさんあります。
謙虚さというのはこういうことなんだとわかりました。
学びたい気持ちがあるから、謙虚さが生まれるのだろうなと。
私は元々、年齢や職階の上下にこだわらない方ですが、以前の職場ではこのような気持ちになれませんでした。それどころか、職場に尊敬できる人などいなかったし、職場の人から学べることなどないと思っていました。
それ以前に学びたいこと自体がありませんでした。やりたくない仕事をするとそうなってしまうものです。
ですから、やりたい仕事にぜひトライして下さい!やってみると案外できるもんです!