(provisional)

データサイエンティストになるためのあれこれ

未経験から勉強を始めて90日後にはエンジニアになれた勉強法を振り返ってみる

僕が本格的にプログラミングの勉強を始めたのは今年(2018年)3月末からでして、しかもそのときに選んだのはVBAでした。

Progateも知らんかったし、他の言語(PythonとかRubyとか)も選択候補にはあったものの選ぶことはありませんでした。

で、なぜVBA?と疑問に思うかなーと思うんですが、それは

 

「目の前にニーズがあったから」

 

なんです。

 

そのときはバックオフィス(いわゆる事務)業務で客先に常駐していたんですが、エクセルで毎日やる業務が大量にあったんですね。

僕はエクセルが得意やし好きなので、全然イヤじゃなかったんですけど、周りにいる社員さんがちょっと苦労してたんです。

だから「僕が代わりにやりますよー」って感じで仕事をやってたんですけど、よく考えたらこれ、めっちゃ改善する余地あるな、ってことに気づいたんです。

そこで責任者の方に、

VBAでエクセル業務の改善をやってみたいんですけどいいですか?」

と相談してみたらすんなりOKもらいました。

まぁ追加でフィーをもらったわけではないので、そりゃやれるんならやってもらいたいですよね(笑)

 

で、やります、と自分から言ったはいいものの、エクセルは関数をある程度使いこなせるレベルなので、VBAなんて触ったことありません。

ましてや、僕は経済学部出身で仕事も営業とかコンサルとかやってたので、エンジニア経験・プログラミング経験なんて皆無です。

 

まさかその90日後にエンジニアとして別の案件に携わってるとは微塵もイメージできてませんでした。

 

で、何から始めたかというと、以下のような流れになります。めっちゃ遠回りのように見えて、結果的に最短ルートやったんかな、と振り返って実感してます。

 

1.まずニーズを知る。

2.自分が得意な勉強パターンを分析してみる。

3.「勉強法」を勉強してみる。

4.ひたすらアウトプットして使ってもらう。

5.足りないところを補う。

6.1.に戻って繰り返し。

 

 

 

1.まずニーズを知る。

プログラミングの勉強法を調べる際に、必ずと言って出てくるのが

「作りたいものを決めてから勉強しよう!目的を決めよう!」

ということです。

僕はこれを見て毎回、

「いや、別に作りたいものなんてないっす。」

って思ってたんですよねー。

なんか、

「世の中をこうしたい!このプロダクトでソーシャルな課題をソリューション!」

みたいなんがまったくない。

「あのベンチャーにエンジニアとしてジョインだ!」

みたいなんもまったくない。

 

ただただ、

「頭の中で思い描いたことをちゃちゃっと形にできるようになったらいいなー」

ぐらいのもんでした。

だから「こうありたい」はあるものの、「これを作りたい」はなかったんで、なかなか目的設定ができなかったんです。

 

で、これはいつまで経っても勉強を始められない、始めても続かない、ということはありたい姿になれない、という焦りから、

「自分が作りたいものがなかったら、周りに聞けばいっか」

という思考に切り替えました。

結果的に僕にはこっちの方が向いてることに気づいたのでめっちゃよかったです。

今でも特に作りたいツールはありませんが、お客さんに「こんなツール作れる?」と聞かれたら、未経験でも「できます、やります」と即答してます。

そして実際にやり始めるとめちゃくちゃ楽しいので結果的に形になる(納品レベルは満たしてる)という感じで進めてます。

 

なので、まず、やる。

作りたいものがあれば作ればいいし、なければ周りに聞いてみてください。

意外とニーズってその辺に転がってるんかも。

 

 

2.自分が得意な勉強パターンを分析してみる。

で、未経験のことに取り組むわけですから、アウトプットしようにもすぐ持ってる知識が枯渇するわけです。

「今までの経験を活かして…」

っていう仕事の仕方が難しいわけですよね。

なので、強制インプットが必要です。

 

人によっては得意な勉強方法ってものがあると僕は思っています。

大まかに分けると

・視覚重視タイプ

 文字や映像を見てインプットする、文字や絵を書いてアウトプットする

・聴覚重視タイプ

 音声を聞いてインプットする、話してアウトプットする

・体感覚重視タイプ

 実際に物に触れてインプットする、体で表現してアウトプットする

というインプット・アウトプットのタイプがあります。

 

インプットは視覚重視やけど、アウトプットは体感覚重視、ということがありえます。あと、ひとつだけではなくてインプットは視覚重視と聴覚重視で…ということもありえます。

なので、自分のインプット・アウトプットはどれが得意なのかな?と分析してみるといいでしょう。

 

ちなみに僕はインプットもアウトプットも視覚重視と聴覚重視だと思ってます。

なので実際にコードを書くよりも、まず本で全体像を把握してから、が定番の勉強方法です。ぶつぶつ言いながら誰かに教えるつもりでやる、というのも得意というか頭に残りやすいです。

 

 

3.「勉強法」を勉強してみる。

これはマジでオススメです。何でもそうですが、やり方ってもんがあります。地頭の良さとか天才性とかそういったものももちろんあるんですが、それすらもやり方がわからなかったら持ってるものを伸ばせません。

やり方に固執するのはあまり良くありませんが、全く知らないのはもっと良くないです。

なので、勉強法を勉強することから始めてみました。

プログラミングの勉強法ではなく、「大学受験」の勉強法、です。

あとは脳科学や心理学をベースにした勉強法もいっぱい見ました。

おもしろいことに、色んな表現方法や勉強法があるんですけど、集約するとそんなにパターンがなかったりするんですよね。

なので幅広くインプットしながらも、共通点=本質と解釈して、それを実践することにしました。

このあたりはまたまとめようかな、と思いますが、まずは本屋でパラパラと勉強法について触れてみるといいのではないでしょうか。

 

 

4.ひたすらアウトプットして使ってもらう。

VBAでツールを作るにあたって、僕が最初に買ったのはサンプルコードがたくさん載っている本でした。英語で言うと「単語」や「文法」で高得点を取りたいわけではなく、自分の意志を伝える「会話」をしたい、というのがあったので、構文ごとに勉強できる本ではなく、ひたすらサンプルコードがあるもの(会話例がたくさんある英語の本みたいなイメージ)を選びました。

 

そしてそれを最初から最後までまず写経(本に書かれているコードを実際に記入して動かしてみる)をやりました。

1周目はあんまり理解してないながらも、とりあえず動くので家で1人で「おー!」ってテンション上がりながらひたすらやってました(笑)

で、僕は1周やって完璧!みたいな天才ではないので、何周も繰り返しました。

そうすると「何がわからないかわからない」というところが、

「何がわからないかわかる」ようになり、

「わからないところをわかるにはどうしたらいいかがわかる」ようになり、

「完璧ではないがわかる」ようになります。

そしてついには「目的さえ決めてくれたらコードを書くことができる」というところまで行くようになります。

 

 

5.足りないところを補う。

自分がどんどんレベルアップしていることを実感しながらも、やっぱりできないところもどんどん出てくるわけです。本で調べてもなかなか解決しない。

そんなときは「ググる」力が試されます。プログラミングの勉強を始めてびっくりしたのは、

「プログラミングで疑問に思ったことは、ググる力があれば90%以上は解決する」

ということです。もしかしたら90%じゃなくて95%かな。いや、98%かな。知らんけど。

つまり、自分が疑問に思ったことって、既に誰かが疑問に思ってるわけです。そしてそれを解決してきたわけです。更にありがたいことに、それを次の人のためにWEBという広大なスペースに残してくれているわけです。これ、本当に奇跡に近いですよね。昔なら時間とお金をかけてやっと手に入れていたものが、下手したら10秒後に無料で手に入るわけですからね。魔法ですよ魔法。

 

でも、もっと意外なことがあるんですが、この「ググる」ということを全然しない人がいる、ということ。

これは僕にとっては理解できません。

わからんことあったら調べろよ!っていっつも思ってしまいます。

 

・いま何時?

・A駅からB駅まで何分?何円かかる?

・C地点からD地点って歩いてどれぐらい?

・そういえばこの単語の意味って何やっけ?

などなど…

 

それ、調べたらすぐ出てくるやん?何で聞くん?

 

もちろん、「この人に聞かないとわからない」という専門性が高いものであるのなら話は別です。

でも上記のような質問って、誰でも調べたらわかるでしょ?

要は「調べることがめんどくさい」と思ってるわけです。で、「何で調べへんの?」って聞いたら「調べるより聞いた方が速いから」とだいたいの人は答えます。

 

いやいや。それは考えが浅すぎる。

・調べるクセがないと、誰もいないときに問題と出会ったとき、解決する手段がない。

・相手の時間を奪っている。相手も調べないとわからないことであれば余計に時間を奪うことになる。

と、自分にとっても相手にとっても多くのロスが生まれるわけですよね。超短期的に考えたら聞けばいいかもしれんけど、その先のことを考えると自分で調べた方が圧倒的にいいです。特にエンジニアとしてやっていこうと思うのなら、この「ググる力」は必須です。

 

 

6.1.に戻って繰り返し。

 だいぶ情報を削りに削って書いてますが、それでも長くなりました。

詳細はまた追々書いていこうと思いますが、だいたいの流れはこんな感じです。あとはこれを繰り返すだけです。

ニーズがあって、自分の得意な方法や鉄板の勉強法でひたすらインプットとアウトプットを繰り返して、足りないところを補いながら形にしていく。

 

僕はこの方法で、2018年3月末にVBAを勉強しはじめ、7月からは新しい客先でプログラミング案件をいただくことができました。機械学習案件なのでPythonを使ったり、社内向けツールでVBAC#などを勉強しながら使ってます。新しいツールの作成について話が出たときは、迷わず手を挙げるようにしてます。

できるかどうかで言われたら、今はできません。

でもどうやったらできるようになるか、自分の中で道筋が見えるようになってきました。

なので未経験の分野でもどんどん飛び込めるようになってきたかな、という自信はあります。

 

あなたも「今の自分のレベルでは…」と尻込みするのではなく、

「まずやってみる」という気持ちで取り組んでみるといいんじゃないでしょうか。

 

ここまでは大きな流れを書いてみましたので、もう少し具体的にここが知りたい!ということがあればぜひ教えてくださいー!