ChatGPT時代にはすべてのエンジニアがフルスタックになる

ChatGPTのおかげで非エンジニアでもコードが書けるようになるということを多くの人が言ってますが、すでにエンジニアである人にあてはめると、ChatGPTのおかげで専門分野以外のコードでも書けるようになるということで、つまりすべてのエンジニアがフルスタックになるってことじゃないかと思います。

ChatGPTにコードを書いてもらうと毎回びっくりする

いや、ちょっとJavaで袋文字の描画ってどうやるんだったかなーと思ってChatGPTに問い合わせたら、ほぼ完全なコードをリテイク1回で生成したんですね。
こいういうコードが出きました。createGlyphVectorとか知らんわ!

// 文字の縁取り
g2d.setColor(Color.BLACK);
g2d.setStroke(new BasicStroke(5)); // 縁取りの太さを調整
g2d.draw(font.createGlyphVector(g2d.getFontRenderContext(), "あ")
        .getOutline(50, 50));
// 文字本体
g2d.setColor(Color.WHITE);
g2d.drawString("あ", 50, 50);

いや知ってたけど忘れてたしぐぐってたどり着くのに時間がかかる。
実際にChatGPTが出してきたコードは「文字の縁取り」と「文字本体」が逆だったので袋文字になってなかったけど、入れ替えるだけで動きました。

全体コードはこちら。クラス名やコメント含めて上記修正以外はそのままです。パッケージ名はIntelliJ IDEAが入れてる。
https://gist.github.com/kishida/8f396b53382693be9559281c68f3fef7

で、これ使ってグラフィックエディタ的にできると面白かろうとChatGPTにライブラリを問い合わせて、JGraphXを教えてくれたので使い方を聞くとこんなのを作ってくれました。

JGraphXは更新とまってますが、ここに。
https://github.com/jgraph/jgraphx

これは完全にChatGPTが生成したコードそのままです。JavaScript版も作ってもらっておいてます。
https://gist.github.com/kishida/14b2041a25a0ae64260899b64374dc95

で、画像アップロードできるようにしてもらったのがこれ。
一回では動くコードを出してくれなかったけど、「動かないんだけど」と指摘しているうちに正しく動くコードを出してくれました。

オブジェクトの移動ができなくなってしまって、これはChatGPTには対処できなかったのだけど、いろいろと問題の可能性を教えてもらって、問題対処のヒントを得ることもできました。

コードこれです。
https://gist.github.com/kishida/c4ff37ea57f133bce66fe897fdfe7deb

ChatGPTがあればフロントエンドとバックエンドなどの壁を超えるのが容易

Swingのドラッグドロップは割とめんどくさくて、そういえばこんなコードだったというのは知ってるけど自分で書けないですね。
さらに未知だったライブラリJGraphXと組み合わせるとなると、結構な調べものや試行錯誤が必要だったはずです。

やりたいことがあれば、フレームワークなど詳しく知らなくてもChatGPTでだいたいのコードを書いてもらうということができています。

新しくなにかを作りはじめるとき、たとえよく知らない言語やフレームワークであっても、想像以上に早く始めれることを実感としてつかんでおく必要があるように思っています。

そうすると、「フロントエンドエンジニア」だとか「サーバーサイドエンジニア」だとかも、結構簡単に乗り越えれてしまいますね。
コマンドラインでサーバーをいじるのも、コマンドは全部おしえてもらえます。
細かい部分は難しいじゃないかというのもありますが、結局一番面倒なのは基本コンポーネントを構築するブートストラップの部分で、必要なライブラリが出そろってしまえばアプリケーションロジックを書くのはどのプラットフォームでもそんなに変わらないんじゃないでしょうか。
みんなフルスタックエンジニアです。

となると、専門領域をどう作っていくかという問題にもなります。

インターネットが広まってGoogle検索が使えるようになるまでは、専門領域というのは蔵書によって決まりました。本で知識をえて、作業中に本を調べるしかないので、手元に本があるというのが大切でした。一瞬CD-ROMでリファレンスを見るようになったけど、入れ替えがめんどうだったりソフトが不便だったりで、本が一番手軽だったりしましたね。

ネットが広まってからは、検索でわかるので本が不要になったとはいえ、ノウハウのようなものは大事です。ただ、言語やライブラリを習得するのはかなり楽になっています。プログラミングを始めるときにはまとまったプログラミング入門書が必要ですが、プログラムが組めるようになって他の言語を使うというときには本は不要で公式ドキュメントで確認すれば十分ということが多くなります。
けれども、ひとまとまりのコードを書くにはある程度の練習や試行錯誤が必要で、よく知らない言語やフレームワークを使うのは躊躇しがちでした。

でもいまやChatGPTに聞けばこちらの出した要件に従ったGetting Startedなコードを生成してくれます。
使うべきライブラリを検索で探すのは結構めんどくさいものですが、それもChatGPTが教えてくれます。ライブラリがわかったらサンプルコードは生成してくれます。

どう差別化するか。とくにChatGPTと

知識での囲い込みがほんとに難しくなった感じです。
となると、どうやって差別化をするかというのが大事になると思います。人対人だけではなく人対ChatGPTという面でも。
そうなると、なにが実現できてなにが難しいのか、そういったメタ知識が重要になります。
すでに根拠が出そろっているものに関してはChatGPTがだいたい推論してくれます。なので、まだ根拠が出そろってない事柄について仮説を立てるということも重要です。

そのためにはここで書いたように、原理原則を知る、最新情報を知る、専門情報を得ておく、という基本が改めて大切になるのだと思います。
ChatGPTに負けないために大切なこと - きしだのHatena

プログラムやアプリケーションの構成は考えてくれないので、設計力や構成力のようなものは大事になります。

そうするとコンピュータやソフトウェアにどういう性質があってどういう限界があるか、ということを予測できることも大事ですね。そのためにはやはり基礎が。
プログラミング言語の入門が終わったら何の勉強をすればいいの? - きしだのHatena

「論理と計算のしくみ」を読もう

ということで、いつもどおり、「大事なのは基礎」ということになりますね。
では1冊だけ、となると、把握しておくべきなのは「論理と計算のしくみ」ということになるかと思います。
ChatGPTに問いかけるにしても、論理の整った問いかけをすることがとても大切です。いままで検索力が割と大事という話になっていましたが、ChatGPTへの質問では質問力が大切です。そうするとやはり、問題がなにか、なにをしたいのかを論理的に言語化することが重要になります。
また、コンピュータを使ううえで、計算というものがそもそもなんなのかということを知っておくことも大切です。

ということでみんな「論理と計算のしくみ」を読もう。プログラミング言語を作れるようにもなる。