見出し画像

SQLが書けるようになるまでの勉強方法と見える新しい世界

こんにちは!EventHubでカスタマーサポートの立ち上げをしている諸岡(もろおか)です🧞‍♂️

今日のテーマは「SQLを書けるようになるまでの勉強方法と見える新しい世界」です。

まだまだ初心者ですが、最近SQLを使って欲しいデータをダッシュボード化し、全社員が誰でも・いつでもプロダクトの利用状況/利用実績のデータにアクセスできるような基盤を整備してみました。

データ活用についてはまだ分析をし始めた段階なので高度な考察が書けませんが、これからSQLを勉強してみようと思う人や、興味のある人、過去に挫折してしまった人等に向けて、どうやって勉強したか?についてまとめてみました。

お恥ずかしながらSQLなんぞものは1年前まで知らなかったのですが、そんな奴でも本気出せば1ヶ月、私くらいののんびりペースなら6ヶ月で扉が開けますので、是非ご参考になればと思っています!

なぜ勉強しようと思ったのか?

人間はどのような環境下においても*内発的動機目標を達成する重要な要因であり、非常に大事だと思っています。
何年も教育業界に携わっていた経験から、内発的動機を元に学ぶ学生は外発的動機を元に学ぶ学生よりも成績が伸びたのを見てきたからです。

*内発的動機
内面に沸き起こった興味・関心や意欲に動機づけられている状態のこと
外発的動機
評価や賞罰、報酬あるいは賞賛などの自分以外の要素によって起こるやる気のこと

私の場合は、一緒に働いていた同僚がきっかけでした。同じチームでCSMとして働いていた同僚が、ITリテラシーが高いのなんの。プロダクト上では取れないデータをサクサクとRedash<>SQLを書いて取り、クライアントのプロダクト活用データを抽出していました。

「どういうロジックでこれを抽出しているのだろう?」という疑問と、「自分も作ってみたい」という興味で勉強することに決めました。

まさに内発的動機で動いた事例であり楽しんで出来たので、勉強する前に「なぜこれを勉強するのか?」という動機を探ることから始めるのをおすすめします🙆‍♀️

どのような方法で勉強したか

私は教育畑出身の職業柄、ラーニングピラミッドの信者です。新しいことを学ぶ時、常にこのピラミッドに沿って行っています。ピラミッドの上から下に向かうステージ通りに進むことで、確実に知識が定着するからです。

それでは、ラーニングピラミッドに沿って勉強していきましょう🕺

①Youtubeを見る (講義)

まずSQLって何?というところから始める私みたいな方は、YouTubeを見ましょう。私はストレッチをしながら薄暗い部屋の中、夜な夜なYoutubeのある動画を3回見ました。
3回見た…と言っても、人間は1日にして内容の75%を忘れてしまう生き物なので3週間後にまた再生し、また75%忘れるので3週間後にまた見る、というペースです。忘れた頃にまた見る、というのが記憶の定着に一番効果的なので、敢えて3週間空けました。そしてコン詰めると嫌になる自分の性格を分かっていたのでスローペース🙋‍♀️

ラーニングピラミッド×忘却曲線の組み合わせが重要    参考文献

この「動画を見る」という作業は、ラーニングピラミッドで言う最初の「講義」の部分にあたります。

👇この動画は、初心者向けに図を用いながら分かりやすく説明してくれているのでおすすめです!お世話になりました。


②本を読む(読書)

YouTubeを見た事で分かりきった気分になるので、そのまま「余裕じゃん!」という気分で本屋に行きます。難しい言語を使う本を読むと意欲が削がれてしまうので、やる気を維持してくれる分かりやすいカラーの本を見つけました。これを、Kindleで購入。ブルーライト効果なのかKindleだと眠くならないので電子書籍を愛用しています。

この本は、タイトルの通り本当に「いちばんやさしい」と思うのでおすすめです。

休日1日使って読み切りました。ただ、本当に理解しているかは怪しいので、2回読みました。

この作業は、ラーニングピラミッドで言う「読書」の部分にあたります。YouTubeを見終わった後よりも更に理解が深まっているはずです。

③他者が書いたSQLを読む(実演を見る)

次は、エンジニアが書いたSQLをひたすら見ます
難しいものから始めると挫折するので、簡単なデータを抽出しているものから選び、一つ一つ解読していきます。
ラーニングピラミッドで言う「実演を見る」の部分にあたりますが、ここでぶち当たる壁は「データ構造の理解」です🤷‍♀️

SQLの構文が頭に入っていたとしても、プロダクトのデータ構造を理解していないと実際の環境で他者が書いたQueryの理解が進みません。この壁にぶち当たるとは知りませんでしたが、ここが1番大きな壁だったように思います。

私の場合は、このデータ構造を2段階で理解しました。

①自分でデータをスプレッドシートに書き出してみる
②優しい同僚さんに聞いてみる

社内でRedashを使っていたため、Redash上に見えているテーブルとカラムを全てスプレッドシートに書き出しました。
そうすると、どのテーブルがどのカラムと繋がっているのかというのが見えてきます。この作業は面倒に思えますが、自分自身の力で見つけるということが一番記憶への定着が深いので、他者に教えてもらうよりも有効だと思います。

👇以下は例ですが、このように書き出すとテーブルBテーブルCカラム13で繋ぐ(カラム13でLEFT JOINする)ことが出来るということが分かります。

👆このように一覧にして可視化するとデータ構造が見えて来ます

自力で理解を進めても分からない点があるので、その時は②優しい同僚さんに聞いてみるのをおすすめします!私の場合、同僚がとても優しく教えてくれたのでデータ構造を理解することができ、データ構造を理解したことで他者が書いたQueryを理解することができました。


④Notionにまとめる(議論)

次に、ラーニングピラミッドで言う「議論(グループ討論)」のステージに行きます。このステージは、これまでInputだったステージからOutputのステージに変わります。人間はInputだけでは応用/転用したOutputが出来ないので、このOutputのステージを踏むことが非常に大切です。

一人でSQLを勉強している訳ですから、学習者や先生と議論する訳にも行きません。そこで私が選んだ方法は、Notionにまとめるという方法です。

Notionにまとめておけば忘れた時に何度でも確認ができますし、いつか社内の人の役に立つかもしれません。

1つ1つ理解していきながら自分の頭の中で議論し、自分なりにまとめて行きます。この作業をしなくても実践に行ける天才もいますが、私はSlow Learnerなのでこの過程をスキップすることはできませんでした。

受験勉強してるみたいで楽しい。

②の手順で読んだ本とエンジニアが書いたQueryを参考にしながら、自分なりに重要ポイントだけまとめて行きます。紙とペンを使ってまとめる方が記憶の定着が深まりますが、試験勉強ではないのでここはNotionで。デジタルでもOutputすることの効力は大きいです!

⑤書いてみる(自ら体験する)

いよいよ、ラーニングピラミッドで言う「自ら体験する」ステージに突入です。

ただし、急に本番環境で書くというのは難しいので、まず初めにトレーニングができるSQL BoltというWebサイトを利用して簡単なSQLから練習して行きました。

👇以下のように、質問内容に合わせてサンプルデータからQueryを書き、実行します。間違っている場合は次に進めません。分からない場合はヒントをもらうことができるので、ゲーム感覚で楽しめます。

質問1は、各Filmからタイトルだけを抽出してください、というもの。

私が利用したのは上記Webサイトですが、同僚が以下のWebサイト「Progate」もおすすめだと言っており、私的にはどちらもおすすめです。好きな方を選んでください。

👇Progateは日本語ですし、説明も分かりやすくカラーで表示されているので楽しめるかもしれません!

Progateは他の言語も学べるよ。

上記のようなトレーニングサイトである程度書けるようになったら、いよいよ本番環境でトライです😊 (このトレーニングサイトは、私は1時間弱で終わらせました。最初のInputのステージできちんと学べていれば、意外とすぐに終わらせることができます。)

成功体験を重ねることで楽しく技術が習得できるので、いきなり難しいものにトライせず、まずは簡単なQueryから始めましょう!




慣れて来ると、「こういうデータを取ってみよう」とか「ああいうデータはどうやって取るのかな?」と自然と疑問が湧いてきます。その疑問を解消するために、集中してSQLを書くのみです!
私はお酒🍺を飲みながら書きました。お酒が好きな人は良いつまみになります。

ただ、一番習得するのに良いのは、実際に人から頼まれてデータを出すことです。私はこれが一番効きました。「出さない」という選択肢が無いからです。自分で書いてみても出来ない場合は、人に聞きながら出そうと最後まで努力するので、その過程の繰り返しが技術の理解/定着に1番繋がると思っています。


技術を習得して見えた世界

まず初めに良かったと思うのは、プロダクトのデータ構造を知ることができたこと。どのようなデータが取れて/どのようなデータが取れないのか、このデータは取れないからプロダクト上に無いのか/取れるけど出していないのかというような内容が明確に理解することができました。もし社内にデータアナリストがいるのであれば難しい分析ができなくとも、アナリストとの共通言語となります。もしあなたが習得した人なのであれば、分からない人との架け橋にもなります。プロダクト(表に出ているもの)について知っているだけでなく、データ構造(中身)まで理解できたというのはプロダクトを理解する上でとても重要なことなのだということを体感しました。

次に良かったと思うのは、全社員が誰でも・いつでもプロダクトの利用状況/利用実績のデータにアクセスできるような基盤を作ることができたこと。Redashで欲しいデータを抽出>スプレッドシートにデータを連携>スプレッドシートのデータをもとにGoogle Data Portalで誰でも簡単に検索ができるようにしました。
そうすることで、担当しているクライアントのプロダクト活用状況をSQLが書けなくてもいつでも誰でもアクセスすることが可能です。せっかく貴重なデータがあるのですから、データを元にクライアントを成功に導きたいですよね。高度なことが出来なくとも、垂れ流し状態だったデータをまずは使える状況にできた、というのは一歩前進です。

現在、各機能をどれだけの顧客/どのようなセグメントの顧客が活用しているのかという活用状況や、活用状況と継続率の相関関係などを分析し始めています。この分析が出来るのも、基盤を整えるStepがあったからだと思っています。

最後に良かったと思うのは、他者に貢献できるスキルを身につけることができたということ。これまでは「このデータが欲しい」と言われても指を加えて黙ってみてることしか出来ない、もしくは誰かにすがる、あるいは非常にアナログな方法で抽出することしか出来ませんでした。また、バグが発生した時に、そのバグがどの範囲のクライアントに影響しているかというデータの調査に時間がかかっていました。SQLが書けるようになったことで、常に最新のデータを/効率的に抽出できるので、単純に人に喜ばれる機会が増えました。純粋に嬉しいです。頑張って勉強して良かったと思えます。ここが実は一番重要です。

まだまだ私の知らない高度な世界があると感じるので、こういう領域の魔術師がいたらなぁ…という場面が多くありますが、今組織にあるリソース(人材・スキル)で前に進まなければいけないのですから、これはスタートアップならではの刺激とも言えます。

もし、そのような環境に置かれているのであれば、自分にとっても事業にとっても価値のあることだと思うので、是非取り組んでみてください🌻


結局独学はできるの?

結論、独学は無理でした。

出来る限り自分の力で学び、どうしても分からなくて前に進めない時は同僚に聞く。極限まで悩み抜いて聞いた質問の答えは、考えずに聞いた答えよりも脳の奥深くまで入って行きます。一生忘れない価値となります。

協力してくれる人がいなかったら挫折していたので、何度もぶつかった壁を乗り越えるために持ち上げてくれた方々に感謝です。

エンジニアの神が舞い降りた瞬間。

勉強しようと思ったきっかけとなった同僚に感謝すると共に、貴重な時間を割いてSQL勉強会を開いてくださったエンジニアの方々、データ基盤を一緒に作成してくださったProductチームの方々へ声をにして感謝を伝えたいです。
習得したSkillを無駄にせず、更に向上してブンブン活用していきたいと思います!もちろん、ビジネスチームへの技術の継承も重要だと思うので、流行りのデータドリブンな組織にするためにも、時が来たら学んだことを継承していこうとも思います。(ラーニングピラミッドで言う最終段階「他者に教える」ことで知識が自分の物になる)

まだまだ私もSQLの扉を開いた段階なので、これから沢山学んで行こうと思います💪

👇InspireされたNote


最後に

天才や理解の早い人は簡単だと思うかもしれませんが、私のように本当に0の初心者から学ぶ方に向けて、モチベーションになればと思い初心者さん向けに勉強方法を執筆しました✏️!(高度な事を勉強しようと期待していた方へはごめんなさい….🙏) 

SQLに興味がある人、これから勉強しようと思っている人、途中で諦めた人が1人でもこれを読んで行動に移すことができますように!


終わり。


Twitterやっているので、ぜひフォローしてください🙆‍♀️

この記事が気に入ったらサポートをしてみませんか?