僕は独学でプログラミングを始めて、自分で仕事を受けつつ経験を積み、今はIT企業でお世話になっています。
そんな僕がプログラミングを始めたきっかけは、
知り合いのお寺の住職さんでした。
住職さんは、実はバリバリの技術者で、
フロントエンド言語からバックエンド言語、ゲーム開発、アプリ開発、3D、動画制作まで幅広く出来る人でした。
でも、僕が「僕もゲーム開発をしてみたいです!」と言ったとき、
「いいねー!」と喜んでくれたものの、直接教えてくれるということはありませんでした。
でも、エンジニアとして働く中で、住職さんの”プログラミングの教え方”が、
本当に僕を成長させようと思ってしてくれていたんだと、最近になって分かってきました。
実際に、直接は言わないものの、あえて”教えない”ということを徹底しているということは、
行動や発言の節々から感じていました。
結論からいうと、
①自分で調べることが出来るようになりなさい
②システムの”本質”を学びなさい
②制作するものは、"早く"作ってしまいなさい
の3点です。
①自分で調べることが出来るようになりなさい
これには、本当に感謝しています!
「僕もゲームを作りたいです!」と言って「いいねー!」と喜んでくれた後、
2冊の技術書と使っていないPCを貸してくれました。
僕は帰宅後、早速PCに向かって見様見真似でコードを入力していきました。
でも、必ず勉強って詰まるんですね…。
本に書いてある通りにやっているのに、なぜか動かない。
エラーも英語だし、意味わからないし、心が折れます。
google翻訳を使ったり、テラテイル(エンジニア向けの知恵袋みたいなサイト)に質問してみたりして、何とか解決をしていきました。
長い時には、丸3日悩んだこともありました。
もちろん、どー---してもわからない時は、優しく教えてくれましたよ!
ただ、
「この場合は、非同期処理ってやり方があるよ!こうしたら動くと思うよ。詳しくは調べてみてね」
と結局はヒント止まり…((´;ω;`))
初心者には、そこからまた丸1日かかるんですねー--(笑)
その時は「もっとちゃんと教えてほしい!」と思っていましたが、今は違います。
エンジニアは、まずは自分で解決できないと仕事にならない。
と分かったからです。
先輩エンジニアさんも、分からないことがたくさんあるそうです。
クライアントさんからは、想定もしてなかった要望が来ます。
そんな時、先輩エンジニアさんは、みんなとにかくGoogle先生に聞きます。
調べて調べて調べまくります。
英語が読める人はほとんどいません。
翻訳しながら勉強していきます。
そんな先輩エンジニアさんに、安易に聞くことはご法度だと感じました。
まずは、調べる。
徹底的に調べる。
そして、徹底的に考える。
これが出来ないと、エンジニアとして絶対に成長は出来ないと思い知りました。
②システムの本質を知りなさい
実は、僕がWebゲームを勉強したい!と言ったとき、
住職さんは、
「Javascriptという言語で作れるよ」と教えてくれました。
そこから、僕は自分でもメルカリでJavascriptゲーム開発の本を買って、勉強していきました。
最初の最初に学んだもの、なんだと思います??
Node.js
これは、撃沈しました、、、、!(笑)
一発目からやるものではない。
でも、「挫折だけは避ける」と決めていたので、別の本を買いました。
そこには、普通?のJavascriptで書かれたゲームプログラムがあり、模写していきました。
で、衝撃なのが、
なんと今、直接Javascriptを書かなくてもゲームが作れるツールって多々あるんですね。
それを、住職さんは、
最後の最後に教えてくれたんです!!!((´;ω;`))
さすがに住職さんを責めたら、
「Javascriptベースのツールだから仕組みを知らなければ出来ない」
「もちろん、最初から教えてあげることも考えたけど、それはあなたのためにならない。
あとから必ずわかると思うよ」
と答えが返ってきました。
これにも、本当に感謝しています!
結局、システムの仕組み・プログラミングの基礎をすっ飛ばして、便利なツールを学ぶことは、
のちのちに自分が困るということが、今となって感じています。
エンジニアとして働くなら、
「システムの本質」を理解している人ほど強い人はいないと感じるはずです。
僕もまだまだ知らないことがたくさんありますが、
瞬間的にエラーやバグを解決できる人、クライアントさんからの要望にすぐ応えられる人というのは
基礎がしっかりしている方であるのは間違いないです!
便利なツールを使うのはOK!
でも、便利なツールだけしか使えないのは、ダメだよ。と教えてくれました。
③制作するものは"早く”作ってしまいなさい
「よし!!多くの人にやってもらえるゲームを作るぞ!!」
ゲーム開発の勉強に慣れてきた僕は、自分で簡単なゲームを作ってみようと意気込みました。
どんなイラストを使うか。
どんなルールにするか。
一生懸命考えました。
まずは、イラストを描いて、ひとつずつ愛情を込めて、丁寧に作っていきました。
自分でプログラミングしているゲームを見てほしくて、住職さんに途中経過を報告しました。
「お!いいねー!!」と喜んでくれたあと、
「でも、多くの人がやりがちなやり方だから、気を付けてね」と教えてくれました。
Webサービスやゲーム開発って、プログラミングが出来れば作れると思っていました。
結局、そのゲームは完成することはありませんでした。
まずは、早く全体を作ってしまいなさい。
これが3つ目の教えです。
ゲームの場合、丸でも四角でもいいから、
「ボタンを押したら動く」
「ポイントが加算される」
という全体的な動きををさっさと作って、そこから綺麗にしていくことが大切だ。ということです。
それから、丸をキャラクターに差し替えたり、四角を建物に差し替えたりして、ゲームは完成していきます。
プログラミングが出来ても、サービスは作れない。
途中で挫折するやり方をしてしまうからです。
Webサービスやゲームを「完成させる」ことは本当に大変なことだと思い知りました。
それは、技術的な話だけでなく、それだけ根気よく制作を「継続」出来るかという点で、
たいてい挫折するからです。
先に全体像を作るというやり方を、プロトタイプ思考というそうです。
プロトタイプ = 試作品
ですね。
実際、先輩エンジニアの皆さんは、このことを理解して、
プロトタイプから作っています。
最後に。これからプログラミングを始める方へ
僕もまだまだ底辺エンジニアなので、偉そうなことは言えません。
でも、上記の3点は真実です。
エンジニアとして、会社に入ってのお仕事も、フリーランスでお仕事する場合でも、
変わらないことなので、ぜひ参考にしてください。
今は、言語の勉強で精一杯だと思います。
僕も必死でした。
その過程の中で、
自分で調べて、システムのことをどんどん知って、最終的に自分で一つの作品(サービス)を作りあげることが出来れば、成長出来るエンジニアになれると思います。
エンジニアの仕事は、この3点の繰り返しで成り立っているといっても言い過ぎでないと感じています。
頑張ってください!
僕も頑張ります!