現状のチームでの役割
今は自分たちのチームで定期的に回ってくるタスクを私が担当しています。その中で自分の至らない点というのを強く認識したので、そこから考えられる自分の足りない点と伸ばせる視点についてまとめていこうと思います。今もらったお題というのが私のいるチームでは定期的に流れてくるもので、とあるデータからこちらの求めるデータを抽出するようなSQLを書くというものでした。この中で初手はどういうSQLを書いていいか、求められているSQLというのが理解していなかったので、先輩に40分ほど時間をいただいてデータのざっとした概要であったり、どういったものを抽出しなければいけないのかというところについてレクチャーを受けました。そのレクチャーを元に自分なりにSQLを書いてレビューをもらうという中で、自分の考え方が方向性は合っているが、明らかに悪手をついているというものでした。
具体的に言うと
- データの全体像を理解しておらず
- 複雑なSQLを書いていた。具体例としては、
NOT =
でまとめればシンプルかつ全ての条件を網羅できるのに、合致する条件を全部羅列しようとしていた。
この時点で悪手だというのはよくわかりますよね。自分がデータを全て理解していないと、合致する条件の全ての羅列はできないし、それが何を表しているのかは、全員がデータを理解していないと厳しいです。一方で、NOT =
でうまくまとめれば、この条件以外は全てということになりますので、ある意味で「ダメですよ」という条件さえ理解していれば、あとの要件を全て満たすことができます。なぜこの当たり前のNOT =
が自分の中で選択肢として出てこなかったかっていうのは、初手で思いついてしまったのが条件の羅列だったからという点があると思います。この時になぜ切り替えることができなかったのか、視点を切り替えることができなかったのかというのは、一事が万事つながっていくんだろうなというふうに思いました。
思いつかなかった理由を大きく分けて2つある気がしていて、一つは単純に私がデータについて理解をしていなかったというところで、もう一つは実は私がSQLについて書き方を理解していなかったというところ。大きく分けるとこの2点だと思います。特にデータ理解については大きなポイントだと思っていて、これがないとそもそも手元にどんなデータがあるのかを理解できていないので、適切なコードを書けるかと言われるとそうではない気がします。さらに、今回LLMの力も借りてこのSQL自体は書いているので、私の理解がやや古いものをLLMに突っ込むと、それはさらにわけのわからないLLMの解体スキルが出てきてしまうと感じています。
自分のデータ理解とツールの使い方の間違ったところが、今回の結果に凝縮されたように思います。
データ理解について
正直データ理解については、こうやってタスクを進める中で自分の誤解とかを元に学ぶっていう手法が一つと、あと単純にちゃんと自分でデータを見ておくということがあると思います。ただ、データを見ておくといっても、そんなデータを理解するための時間を業務中に取れるわけもないので、業務時間外のタイミングで確認するのがいいのかなと思っています。その点でいうと幸い、見込み残業を何十時間か今の給料ではいただいているので、ある意味多少の残業をしたとしても給与の範囲内っちゃ範囲内なので、ある意味対価に見合った仕事をしていると考えれば、残業というかきちんと対価に報いようという行動というふうにも見えます。
さらに、結局のところでデータ理解をしないと、この後のタスクでも多分詰まるところが多々ありそうなので、このブログを書いている朝の就業前の時間とかを使って、データを理解しようかなと思っています。この時の手法としてどういうふうなものがあるかなというのを考えていて、各テーブルに対してLIMIT 5
くらいでちょっと一旦全てSELECT
して持ってきて、どんなデータがあるかっていう肌感を掴むっていうのが一つとしてあるかなと思っています。
場合によってはその情報を自分もちゃんと理解するのに使うし、どこかに溜めておいてLLMに投げて、自分が書いたコードを一旦「こういうデータが今データソースなんですけど、大丈夫そうですかね?」っていう確認をするのも。LLMにも二重チェックをしてもらうチェック機構として利用する例を使うようにして。
されたコードをそのまま使うっていうのではなく、最初のレビュアとして使うっていう方法が知識の定着を考えると適切なのかなという風に感じました。
まとめ
このタスクと別のタスクでも LLM に力を借りてやっています。自分の全く知らない領域だったので、その補助として使っている状況です。ただ、その中でも LLM にやらせるとむしろ手間がかかる部分と、自分がやった方が早い部分というのは明確になってきたなというふうには思います。
これは本当にごくごく一部だけを切り替えればいいやっていう問題に関しては、自分がやった方が早いですし、全体像をざっと出してほしい。
一部を置換して、置換プラス何か他のことを機械的に変えなきゃいけない場合には、自分で手書きするよりも LLM に任せた方が早いように思います。その一方で、再現性のあるコーディングができるかと言われるとやはり疑問符がつくので、再現性を担保しなきゃいけないようなタスクとかに関しては、LLM をあくまでレビュアーとして使う方法の方が正しい使い方なのかなという気はしています。自分の能力も伸ばせるし、LLM で時短にもなると。
結局のところ、LLM に指示を出す際に自分がデータをどの程度理解しているか、どんな手法を知っているかという例示できるものがどのくらい精度の良いものかによって、LLM が生成する行動や考えも変わってきます。結局のところ、自分の知識量を増やしていかないと現状ではうまくいかないなというふうに思いました。もちろん、今後性能が上がっていってより良くなる可能性はあるんですが、自分の知識をつけておくこと自体は悪いことではないと思っています。
まずは LLM と自分の能力の使い分け。ある時には LLM が SQL やコーディングをする。一方で、ある時にはコーディングをちゃんと自分が全て 0 と 1 でやって。第一のレビュアーとして LLM を使う。この使い分けをきちんと明確にしていくことが、今後の正しい LLM の使い方だと思いました。
コメント