結構前だが、Cursorが出てから、個人開発ではVSCodeではなくCursorを行うようになった。
アウトプット効率の上がり方は凄い。
かなりの割合cursorが出したコードを採用していて、
少し前はAIでコーディング機会が減るのは寂しさを感じるかもと思っていたが、
ちゃんと設計指示などは自分が考えて与えるし、意外にもプログラミングの楽しさはさほど失われないなと思った。
というかかなり爆速で開発できるので、早くものを作り上げられる楽しさが大きく、この生産性の上がり方はやはり革命的だと思った(特にCursorは提案が良ければそのままapplyできる機能とか選択部分をチャットに追加とか、IDEとの統合度が高くそれ故他のツール(VSCode + Copilotなど)よりも明らかに体感の生産性が高い。)
ちなみにモデルはClaude 3.5 Sonnetを使用していた。
ただし、思ったこともあった。
爆速で開発できるのはそうだが、開発が進んでくるとあまりコントロールできている感がなくなってきて少し気になってくる(爆速で開発できすぎて)。
細かい部分など(例えば同じような役割の関数のインタフェースが揃っていないとか)。
最近よく話題に上がるAIエージェントについても、同様かと思う。
あまりに速くアウトプットができるようになってくると、利用する人間側が追いつけなくなる。
確かにプロトタイピングなどの用途にはこの上ないほど相性が良い。
しかし実際の製品コードでは、AIを使ってアウトプット速度が上がっても、落ち着いて丁寧に作ることが重要だと感じた。
つまり、しっかり設計を人間のエンジニアがきちんと考え頭の中で方針を持ったうえで、あとは書くだけ状態でAIに生成させられるのがベストかなと。
=きれいな設計は担保しつつ、AIのコーディング速度の恩恵を受ける。もちろん設計自体もAIに考えてもらうのも良い。ただその場合も、人間がちゃんとレビューできる必要がある。
最近、以下のような主張をXで見かけた。
テストさえしっかり作れば、プロダクションコードの生成ではきちんとAIの出力を必ずしも理解しきらなくても良い、なぜなら仕様の正しさはテストで担保していて、修正の際はAIですぐに生成しなおせるから、というような趣旨のもの。
自分は、言いたいことはわからんでもないがそれは流石に違うだろうと思う。
そんなブラックボックスで良いわけがないし、ソフトウェア開発はそんな単純な話ではないはず。
生成AIのアウトプットをどう利用するかを決めるのは利用者だし、その利用結果の責任を取るのももちろん利用者。
エンジニアがきちんとプロダクションコードを理解できていなければ、
例えば問題が起きた時は一体どうやって解決していくのか。
性能改善を行いたいときはどうやってボトルネックを分析して解決していくのかなど。
それすらAIに聞きっぱなしできちんと理解しないままなんとかするのか。
色々と疑問は湧く。
AIの進化のスピードは確かに凄まじく、エンジニア不要論にまで繋げる言論も見られるけども、少なくとも今の段階で賛成はできない。
ソフトウェア開発の文脈において、(現時点では)AIはエンジニアを滅ぼすものではなくエンジニアが上手く活用していくもの。
上手くAIを扱えることはもはや必須スキル。
AIを道具としてきちんとコントロールしたうえで上手く活用していけるように、これからも頑張ろう。