SQL
新卒エンジニア
More than 1 year has passed since last update.

アイスタイル Advent Calendar 2017 9日目の記事です。

ある日、担当サービスに今年の新卒くんが入ってくることが決まりました。
何をさせたらいいのか・・・:rolling_eyes:
 
 

とりあえずSQLやろうか。

 
 
それから3か月の記録です。

前提

・テクノロジー本部のOJTの一環で、学習はしているらしい
・プログラミングとSQLのスキルは「触った程度」「SQLで複数テーブルの結合はしたことない」(本人談)

なぜまずSQLをやったのか

アイスタイルはデータの会社だから

クチコミをはじめ、膨大な情報を持っているのがウリです。
そんな膨大なデータの一つや二つ、ちょちょいと操れるようになってほしい。
なってくれ。

達成感を味わってほしかったから

達成感は自己肯定感をうみます。
でも本番で使える機能を作るのは達成感も大きいけれど時間もかかる。
社内のデータ抽出依頼ならば、DB理解すれば対応できるようになるし社内の人に感謝されて達成感を感じられそう。

というか何か機能作るにしてもSQLが書けないとデータ持ってこれない

そう。どっちみち避けても通れない。
 
 
よし、SQLやろう。

といった流れです。
※とはいえそれだけでシステム屋にはなれないので、プログラミングは並行してお勉強してもらってます。

どこから始めた?(SQL課題1)

社内のConfluenceに課題を作りました。こんな感じ。(STEP3まであります、JOINも集計関数も一通り)
sql1.png
(略)

なぜこんな問題?

  • まずは現状の理解度を測りたかった
  • サービスのテーブルはわかりにくい しょっぱなから監査列とか論理削除とかの説明がめんどくさい
  • ネット上にちょうどよさそうなのが落ちてなかったのでお手製した
  • まずはSQLを使わずとも全体を把握できるようにテーブルは2個だけ&フラグ等は使わない

どうだった?

全角スペースが入ってることに気づかないとか、エラーメッセージ読まないとか
そんなどういうミスをしたか全世界に公開するなんて()
さておき、
・解けないものは、「どう考えたのか説明させる」「解説する」「類似問題を追加出題する」
・ミスについては、「どうしたらミスがなくせるか案を出させる」
といった感じで進めました。
ちなみにミスについて新卒くんは「カンペ(チェックシート)を作る」を自分で考え、PCに貼っていました。

ちょっと応用とか(SQL課題2)

もう1こ課題を作りました。こんな感じ。
3個以上のテーブルを結合してみるとか、データ量を増やしてみるとか中間テーブルっぽいものを足してみるとか。
cf16a54fc441cedd80e035249d577cd0.png
(略)
8f8e696566411ac5603e9ec12eec137a.png
(略)

なぜこんな問題?

・課題1の結果を受けて、テーブルの結合が怪しいなと感じるのでそのあたりを重点的に。
・少しずつ複雑に、サービスのDBに近い抽出ができそうな構成にしたかったから。
・お酒なのは私がお酒が好きだから。(本人も酒好きだと言ってるし)
 好きなものの方が覚えがいいでしょう(という後付けの理由もある)。

どうだった?

複雑になるととんでもない結合条件を出してくる、課題1で直したはずのミス繰り返しが再発。
課題1のやり方に加えて
・間違えたものがあれば「問題を声に出そう」「問題読みながらSQL指さして、漏れている項目・条件を探す」
を追加しました。
ミスの繰り返しには自分の作ったカンペを見るように&カンペの内容を強化するように何度か強調。

実用にはまだ不安(毎日継続課題)

やり方を変えました。1問10分1本勝負。夕方出題、できなかったら翌朝やり直し、の繰り返し。
dcfb421c7607257baab39c05bc8be087.png

ルール

・当日15時までに、問題をコンフルに載せます。最大3問ですのでそのつもりで夕方のスケジュールを考えてくださいね。
・締め切りは当日18:30です。
・問題に載っている制限時間内で回答してください。
 できるだけ、18:30に終了になるよう開始してください。(制限時間10分なら18:20開始、等)
・終わったらSlackの分報にSQLをはってください。解けなかった場合もその旨を報告してください
 進捗確認をするときに、一緒に答え合わせします。
※他の勉強時間を圧迫しないため&習熟状況把握のため、時間を超えて解かないでください
・制限時間に間に合わなかった場合は、何がわからなかったのか話したうえで、
 SQLを全消去→翌朝同じ制限時間で解いてもらいます。
・翌朝も解けなかった場合は、いつかまた問題に出します。いつか。
・ググったり過去の回答見たりはご自由に
・(追加)インデントも採点対象になりました。SQL実行結果が合っていてもインデントがだめだと△です。

なぜこんな問題?

・課題1,2で一通りの句夜間数は使ってみた、けどSQLマスターしたね!とは言えなかった
・徐々にサービスのテーブル(開発環境DB)を使った課題に移行。(サービスのデータ構造理解も兼ねて)
・プログラミングもしてほしいし、一日中酒のこと考えさせるとかアル中の育成かというきがしてきた。

どうだった?

制限時間による焦りでまたミスが復活してしましました。
が、今後仕事で急ぎ抽出するときを想定するとある程度の焦りにも慣れてほしいところなので
毎日繰り返すことでミスを減らす方向で。(ここ1か月でだいぶケアレスミスはかなり減りました)

また、↑の画像の下部にもありますが、「敗因」として間違えたら何がいけなかったのか必ず振り返りをしてもらいました。
内省だいじです。

思わぬラッキー(良かったこと)

Slackの分報に回答してもらったことで、チーム外の人にも見てもらえた。
また、出題したい・回答側をやりたい等、多くの人を巻き込めた。

1対1では得られなかったアドバイスももらえたり、
応援の反応をもらえたり、
私がすぐ反応できなくても誰かが見てくれたり、
「うちの新卒はこんなことしてますよ!」「こんなことできるようになりましたよ!」という共有もできて一石四鳥。
皆で新卒くんを育ててるなーと感じられます。

全体を通して&今後

ここまで書きましたが、元々のスキルも成長具合もケースバイケースだと思います。
なのでこれが正しいとか教育としてどうとかってのはもちろんないですし、
今後、別の新卒が配属されても同じことはしないでしょう。

今回作ったSQL課題の親ページのタイトルは「新卒くんを立派なエンジニアにする会」です。
この新卒くん立派なエンジニアになってもらえたらいいなぁという気持ちだけです。

毎日課題はとりあえず年末まで続行予定ですが、
実はすでに1件、運用チームからの抽出依頼にこたえています。
もう実務もできるようになってきています。

並行している機能作ってみよう課題も、年内完成のようで今後が楽しみです。