![見出し画像](https://assets.st-note.com/production/uploads/images/142116679/rectangle_large_type_2_f90cf7a253b7b5680d6d6978c648d2e7.jpeg?width=1200)
プログラマの仕事の本質がChatGPTで変わったのかも知れない
初心者が猛烈にPythonを学んでいて1週間目に感じたこと。2, 3日前からChatGPTやCopilotを使い始めて感じた衝撃を、忘れないうちにメモしておく。
……、勢いでダダダ~と書いたら驚異の6,000文字越えでして😱
プログラマの本質が変わったと思った
私はプログラム初心者ではなくて、過去にC++を使っていた時期があり、ここ数年では3DCGスカルプトツールのZbrush専用のマイナー言語Zscriptを使って商用プラグインも作ったりしていた。なので超絶ド素人ではない。だがPythonに関しては初心者なので、いったん頭をフルリセットして「初心者目線で」色々と考えてみた。
その結果、どうやらプログラミングに対するプログラマの存在価値が、ChatGPTやCoplitなどのAIによって、だいぶ働き方、つまりはプログラマの存在意義や仕事に期待される内容が変わった気がするのだ。
といっても協業で開発する大規模なソフト開発の話ではなくて、あくまでも個人で個人向けソフトを作る場合の話。
【昔】8割の関数を知り尽くしてからが本番
つまりは「何ができるか、どんな便利関数ががあるか」を知ってから、ようやくソフト全体のコーディングの指針が立つ。論理設計がいくら完璧でも、「それをできる関数がない」となればその関数を自作&動作検証&堅牢性の確認からスタートするので、超絶進度が落ちる。
なのでたいていはその言語の関数のリファレンスをざっと読んで、何ができて何ができないのかを知ってからでないと身動きが取れない。それ故にプロのプログラマを雇ったり使ったりするわけだ。
関数や言語そのものの特徴を知り尽くしたプログラマほど雇い主から見れば便利に使える。なのでプロの職業として成立する。
【今】望む結果が得られるかをChatGPTに聞く
だが時代が変わった。ChatGPTやCopilotなど、人が人に聞くように話し言葉で質問するとAIが的確に答えてくれる。なのでその言語に関する知識がゼロでも、とりあえず聞いてみれば答えが返ってくる。
(ただし今のテーマはプログラミング言語限定ね、時事ネタや田舎の地域イベントなどの質問ではない、念のため。)
私:「これこれこういうことがしたい。
サンプルのソースコードを教えて。」
ChatGPT先生:「分かりました。(以下、サンプルコードとその解説)」
ChatGPTは8割どころかほぼ完璧にPythonの仕様を理解している。また世界中の優れたコードを学習しているので、使い古された技術、いわゆる枯れたコードについても教えてくれる。プログラミングで「枯れたコード」はすなわち「安定していて堅牢でバグの可能性が極めて低い、使いやすい関数」を意味する。組み込み関数がまさにそれで、自作関数でも世界中のプログラマに使われていれば枯れている。
過去の蓄積がなくても「今と未来」を作っていける時代へ
今までそういう枯れたコードをどれだけ持っているかがプログラマの重要な資産だったと思う。いわゆる「経験こそが財産」ね。だが今はChatGPTに聞けばポンポン答えてくれる。未経験者と経験者の差とは何か?おそらくはプログラマとしての知的資産の価値は、過去と比べてだいぶ暴落したのではないか?、多分。
何せPython素人の私でもChatGPT経由で枯れたコードがどんどん手に入るのだから、私は論理設計やGUIなどの「人にとって便利な、使いやすいソフトか否かを考えることだけ」にほとんど注力できるわけだ。コードと実装はChatGPT経由でつぎはぎ+少しのコード修正でも問題ないわけで。
正の整数しか受け付けない入力インターフェース
どんな言語でもあるあるな話だが、初心者コースが進んでくると、
コンソールに質問文を出す
ユーザーがキーボードから「何か」を入力しEnter
それに対して処理する
結果を出力する
こういうカリキュラムがほとんどだと思う。問題は②で、例えば正の整数しか入力を予定していないソースコードで「abc」や「-1.23」などを入力することもできてしまう。当然エラーが発生するので、実際のソフトでは必須のるエラー処理、ここは中級コースからの出番だろう。これは一般的なソフトでは必須の実装だ。
だが初心者カリキュラムではそこまで解説しない。初心者大混乱だからだ。
まともなソフトは8割がエラー処理
だが現実問題、まともなソフトは8割がこういったエラー処理で埋まる。ユーザーは開発者が想定しない「とんでもない使い方」をするものなのだ(体験済み)。なのであらゆる入力部にエラー処理を施す必要がある。それこそがソフトの堅牢性に繋がる。
だがそういう地味な実装、メインの処理内容とまったく関わらない、だるい実装作業だ。個人開発ではこれをやっているうちに「あれ?私は一体何を開発しようとしているのか?」というゲシュタルト崩壊をよく起こす。挙げ句の果てにはそのエラー処理実装のバグが本筋に悪影響を及ぼしたりして、アルファ版では正常動作、ベータ完成間近でバグだらけでスパゲッティ、ということもある。体験済み😭
なお自分専用のソフトならばほとんどエラー処理しない。問題になるのは「見ず知らずの他人に使わせるとき」なのだ。
ChatGPT先生は「秒で」教えてくれる
さて戻ってきて本題。「正の整数しか受け付けない入力の仕組み」、これはおそらくメチャクチャ枯れた制限システムだと思う。探せばすぐに出てきそうだ。だがだるい。Google検索したとしても、だるい。
そこでChatGPTに聞いてみた……、のだが、途中でタイピングミスでEnterキーを押してしまった。inputで、アガガッ!
Pythonで正の整数以外をinputde
だがしかし!
![](https://assets.st-note.com/img/1716873009128-tIdRY8oCVu.png?width=1200)
コピペするとこんな具合。
Pythonでユーザー入力を受け取り、正の整数以外の入力を拒否するには、以下のようなコードを使うことができます。このコードは、ユーザーが正の整数を入力するまで繰り返し入力を求めます。
def get_positive_integer():
while True:
user_input = input("正の整数を入力してください: ")
if user_input.isdigit() and int(user_input) > 0:
return int(user_input)
else:
print("無効な入力です。正の整数を入力してください。")
# 関数を呼び出して正の整数を取得
positive_integer = get_positive_integer()
print(f"入力された正の整数は {positive_integer} です。")
コードの説明
while True:
無限ループを開始し、ユーザーが正しい入力をするまで繰り返し続けます。
試してみたら確かに正の整数以外、無限にやり直しになった。そうそう、これが欲しかったんだよ。このサンプルがあればこの場合の入力値制限の実装はすぐに終わる。ユーザーは別の事に頭と時間を使える。やったね。
正解は一つじゃない
プログラムの世界ではあるあるな話だが、個性の数だけ実装コードが存在する。なので上記も答えの一つでしかない。もっと効率的だったり、可読性が高かったり、拡張性が高いコードも世の中にはあるだろう。だが気を付けて欲しいのは、ユーザーが欲しているコードは「正の整数しか受け付けない入力制限システム」であれば何でもいいわけだ。重箱の隅を突いたトリッキーなコードではないのだ。王道でいいのだ。
またChatGPTも完璧ではないし、それを使うユーザーのレベルが低ければ、組み合わせても必ずしも高度なものになるとは限らない。だがしかし!
経験者ほど「思い出補正」に注意
だがここでも注意したいのは、過去の経験が十分ある人であればあるほど、その経験にあぐらをかいてAIの力を軽く見てはいけないという点。もちろん過去の自らの努力でつかみ取ってきた「財産となる経験値」これは揺らがない。ただしその客観的な価値は、他人から見ればいとも簡単に揺らぐという事実、これだけは忘れてはいけない。いわゆる「思い出補正」だ。経験者の当人に取ってみれば色んな感慨深い経験であったかも知れないが、時が経って、しかも他人から見たとき、その価値は如何に?という話ね。
むしろ経験者ほど「AIの実力の程を知ってやろう!」くらいの勢いでAIを利用してみたほうがいい。結局は誰が使っても「AIは便利ね!」に辿り着く。
プログラマはコーディング作業からコンビネーション作業へ
サンプルソースコードをChatGPTが秒で紹介してくれるのであれば、プログラマはコーディング作業からかなり解放される。むしろ「アルゴリズムのアイディア」と「それを実現させるためのサンプルソースコードを組み合わせること」が主な作業になるのではないか?
そして重要なことはその作業において「過去の膨大なバックグラウンド知識は必須ではなくなった」という点。もちろん「あと数時間で納品せよ!」という修羅場の場合は経験がモノを言うだろうが、そういう場合を除いてのんびり開発する場合、「知らないことにぶつかるたびにChatGPTやGoogleで乗り越えればいい」のだ。
【昔】自分が見知っていることを組み合わせて問題を解決する=ソフトを実現させる(知らないものは実現不可能)
【今】アイディアを作って、実現可能性を1つずつChatGPTに聞いて「できそうかどうかを判断する」
「どう実装するかChatGPTに聞く」
「アイディアを組み合わせて動くか試す」完成!
要するにソフトウェア開発のハードルがグンと下がった
ChatGPTなどのAIがプログラミング言語の学習や実装に対して十分実用レベルになった。そうなるとパラダイムシフトが起こる、というかもう起こっているのか?私がようやく気付いただけかも知れない。
例えば料理で「自分で作れない旨いものは、お金を出して買えばいい。」のが当たり前のように、プログラミングでも「自分で作れない・知らないコードはChatGPTに聞いて教えてもらえばいい。」が実用的になった。ってことは、
人間の先輩社員や教師は必ずしも必要ない。
これが重要な示唆だったりする。面倒な人間関係もないし、何度聞いても嫌みを言わず、丁寧に答えてくれるし、掘り下げた関連の質問にもどこまでも付き合ってくれる。「忙しいからまた今度」がない。
(ただしChatGPT 4o 無料版は3時間に40回以上質問するとすねるらしいw)
実は英語学習にもAIが最適?
私が中学、高校で疑問に思った部分、結局社会人になっても解決しなくても生きてこられたわけだが、たまにまたその疑問にぶつかることがある。そんなときにChatGPTに聞いてみたら秒で答えてくれた。スッキリ!長年の疑問が解決😍
また自分の英作文の不自然なところを聞いてもきちんと答えてくれる。追加で出てきた疑問もぶつけてもスパッと答えてくれる。しかも無料。
そしてそもそも、時間の問題だ。ほぼリアルタイムでAIが音声を翻訳してくれる時代。翻訳コンニャクが、もう数年で実用レベルになるだろう。だから今から英語ペラペラを目指すよりも、言語としての構文やイディオムの知識を押さえることにとどめて、細部の言い回しや表現はAIに任せていいと思う。教養として英語の素養を生涯学習の教材として少しずつ身に付ければそれで実用上問題ない時代になる。
Pythonも英語もそうだが、文法すら全く分からない状態ではさすがにいけない。重箱の隅を突くような細部はいったんおいといて、全体的な重要な骨子だけを押さえる必要はあるってことね。あとは趣味や教養として少しずつ増強すればいいだけだろう、という意味。
メジャーな言語ほどますます強くなる
このAIの台頭とPythonの組み合わせはかなり強いと思う。AIにとっての学習リソースが多い言語ほど、AIの回答精度が上がるはずだからだ。この点でいえばPythonはAIを活用して学習する上でかなりメリットがある言語だと思う。
自然言語としても英語はメジャーなのでAIでの学習に支障はないだろう。今学生である人にとっては、学校の教師の指導内容だけではなくてChatGPTやGoogle検索の結果を交えて、一番自分にとって有利な情報を取捨選択して学んだ方がいいと思う。私もまた20年以上前までは「ちゃらんぽらんな学生」だったわけでw そして教師もまた人の子。皆が皆AI並に優秀とは限らない😖だから教師や私の発言もまた、絶対に正しいとは限らない。ってか無理w とくに昨今の教師の職場環境はとてつもなく大変らしいので、学生諸君は「自分が学ぶべき物を自分で考えて取捨選択」したほうがいいだろう。それができるだけの情報がある。リアルタイムでWebに繋がっているのだから。
ネットがなかった時代は図書館くらいしかなかったが、今は違う。時代が違う。
そこにAIが入ってきた今の時代。AIを駆使して自分に有利な人生を構築したほうがいい。使えるものはどんどん利用しよう。AIは文句を言わない。こき使ってもOKだ。(ただしChatGPTは無料版では3時間に40回(略
【結論】ChatGPTを使ってない人は早く試そう
ChatGPTはスマホ版もあるが、実力をフルで発揮させるならばPCのデスクトップ版だろう。無料でアカウントを作れるのでさっさと試そう。
あるいはWindowsの人はマイクロソフトアカウントを作っているはずだからもっと簡単に使い出せる。Copilotで検索。CopilotもChatGPT 4.0らしい。しかもChatGPTと違って3時間にN回縛りがなく、(今のところ)1日に300回まで質問できるのでChatGPTと併用して使い分けてみよう。
というわけでChatGPT、熱いです。Python学習では活用しまくりです。
ついでに英語で謎の言い回し(文法的に解釈不可能な場合)の解説も質問するとしっくりきます。「そういう言い回しが歴史的に多いです」という結論になれば暗記するしかないので、ロジカルに解釈する時間と挑戦が無駄になるので、そういうことが分かるだけでもスッキリします。
(暗記するかしないかの判断を今日すればそれでおしまいなので。暗記するかどうかはまた別問題で、今は判断を下すだけでスッキリできる。それだけでも十分価値がある。)
今回の創作活動は約1時間30分(累積 約3,817時間)
(1074回目のnote更新)
筆者はAmazonアソシエイト・プログラムに参加しています。(AmazonアソシエイトとはAmazon.co.jpの商品を宣伝し所定の条件を満たすことで紹介料をAmazon様から頂けるという大変ありがたい仕組みのこと。)
以下のリンクを経由してAmazonでお買物をするとその購入額の1~3%ほどのお小遣いが私に寄付されます。誰が何を買ったという情報は私には通知されませんのでご安心下さい😊 以下のリンクを経由して頂ければ紹介商品以外のご購入でもOKですよ~。
読んでくれてありがとう。気長にマイペースに書いてます。この出会いに感謝😊