あけましておめでとうございます。
昨年末から、AIによる文書作成が私の中で成立するようになり、すっかり YouTube がご無沙汰になったのですが、YouTube はそのうちやるということで、続けます。
文書作成におけるAIの使い方ですが、
・論点整理
・モチベーションの維持
・評価(批判)
が受けられるところですが、当然、AIの意見を真に受けるはずもなく、そこはそこで多角的に分析をしています。
具体的なプロンプト等は、「企業秘密」ということで出すのは控えます(このあたりのノウハウについては公開するとAIがそれを取り込み面倒なことになりかねないので秘密としておきます)、が、やっていることは、様々なプロンプトで回答を引き出したり、今は、ChatGPT, Gemini, Grokを使って評価させたりしています。
もちろんですが、文書は私が作成していますし、文責も私が担っております。
で、前回(AI時代のプログラミングスクールとの付き合い方)の記事の批判で、「優良なプログラミングスクール(メンター)の存在について触れていない」という指摘を受けて記事を書いてみます。
まず、プログラミングについて『メンターが必要か?』というと、私自身は『必要な人もいるかもしれないが、一般論として必須ではなく、もしプログラミングスクールがメンターの存在だけを前面に押し出しているのであれば、注意が必要』だと思います。
メンターが必要というのは2000年代から言われたように思いますが、このメンターですが、プログラミング技術の習得に限っていうと、疑問が残ります。
技術者として改めて思うのですが、プログラマなり(通訳案内士)なりのある種の専門家は、その専門領域に関して「メンター」という存在は不要なのではないか?という考えです。
これはある種の「師弟関係」の否定ととられる恐れがあるのですが、「師弟関係」をむしろ肯定するからこそ、プログラミングスクールのいう「メンター」の存在に違和感があります。
本来、師匠というのは単なるプログラミング技術を教えるのではなく、「プログラマ」として一人前になるうえでの先生にあたるかと思います。
プログラミングを学ぼうという人に対しての「プログラミングが出来るようになる」というのは単なる知識だけではなく、「自立したエンジニア」として活動できるようにする必要があります。
この場合、単なる技術的なアドバイスだけでなく、プログラマとしての職業倫理や技術的な哲学について指針となるような人が「師匠(メンター)」という存在になりえると思います。
少なくとも、私自身の知る限りでは、そのような人は日本にはほとんどいないでしょう。というのが長年の私のエンジニアとしての経験からくる結果になります。
もちろん、『スーパークリエーター』とか検索すれば出てくると思いますが、スーパークリエーターが職業人として成功しているか?という疑問もあれば職業倫理や技術的な哲学等、師匠(メンター)たる器を持っているかは未知数です。
従来のプログラマがおかれた環境(困難にぶち当たっても自助努力のみを押し付けられ孤独になる)からの脱却を図るためのメンターというのは理解できなくもないですが、プログラミングスクールがそのようなことを全面に押し出されても、「本当にメンターが必要なときは、実際に会社や現場に入ったときであり」、プログラミングスクールの講師がそこまで面倒を見るのは金銭的にも(講師の)技術的にも怪しいものです。
もちろんですが、学習者が学習において孤独を感じ、メンターが必要ということでプログラミングスクールの門をたたくことを否定はしません。
先輩やメンターに助言を乞うことは否定しませんが、本来、プロとして活動するということは、技術面では先輩やメンターから独立して「孤独」の中でプログラミングを行うことになります。そこには、プログラミングスクールのメンターの存在というのは私にはなじみません。
まとめますと、
・期待されるメンターの役割を持った人間がそもそもいないかいたとしても希少
・メンターとは本来、技術だけでなく、職業倫理や哲学といったことも持ち合わせてないとダメ、スクールというより組織で必要
・もしあなたが、「この人から教えを乞いたい」と思えばそれはそれでよい
ということが言えます。
この記事は、『50代半ばのじいさんが、AIを目の当たりにした『大学に入ってから自分の無力感がエグい』という大学生にかけることば』と『AI時代のコードレビューは“理解”ではなく“責任”を見る』との続編になります。
AI時代に入り、私も当然ですが、『遅れないようにしよう』と思いながらも日々精進しているのですが、
『AIで書いたコードを、
細部まで理解できていないままコードレビューに出すのは、
職場でも最も信用を落とす行為なので、気をつけましょう笑』
この発言ですが、要はプログラミングスクールをやっている方の発言でした。これは今流行しているSNSのマーケティングで、愚かにも私はプログラミングスクールの広告にマジレスをしたということになります。ということで、文章はそのまま残しますが、投稿へのリンクは外します。これは『宣伝を拡散しない』ということもあるのですが、これから「プログラミングスクールではなくAIから学べ!」という話をするので、営業妨害をする意図ではないことを明確にするためということもあります。
プログラミングスクールは最近特に、雨後の筍のごとく出ており玉石混交状態で、中には悪徳業者もいらっしゃいます。そいう悪徳業者のはSNSを使って広告を出して素人から高額な授業料をもらっているようです。そういった中には『35歳からのSESについて考える』でコメントしている通り『IT業界の実態を良く知らない人達をとりあえずSES(ITエンジニアの派遣)に放り込んで搾取する』という実態があります。これらの悪徳業者は
スクール → SES
というルートを確立しており、粗製乱造で商品(エンジニア)を作り会社へ送り込むという、エンジニアをモノ扱いして商売を行っており、IT業界への入り方としては注意が必要(あまりお勧めできない)です。もちろんきちんとした業者もあるでしょうし、上記のSNS発言の会社が、このようなことをやっているかどうかは解らないということは改めて付け加えておきます。
ちなみに、私ですが、高校生相手のプログラミングスクールをやろうかと考えておりました。それなりにリサーチを行い、「情報の教科書」を購入したり、大学入学共通テストを受けたりしました。点数ですが、70点ほどでした。意外に低いと思われるかと思います。私は高三の時に第二種情報処理技術者試験に合格しており大学にはいるとアルバイトでプログラムを組んでいましたのでこの点数には一瞬納得できませんでした(ちなみにサンプル問題を解いたときは90点台だったので油断していたというのもあります)。
改めてこういう試験を、自身が受けてみると、ある種の試験の目的と限界が解りました。私は受験が苦手だったのですが、やはりそこは実践と異なるようです。これだけだとただの愚痴になるので、補足しておきますと、細かい用語の定義を問う問題については、プロが見れば「知らんわ」とか「知る必要があるか?」というのがありそこはわざわざ勉強しなくてもと思うのですが、学生諸君はきちんと勉強する必要があるでしょう(テストなので)。
話は脱線しますが、ついでに英語も受けました70点ほどでした。こちらも意外に低いと思われるかと思いますが、大学入学共通テストの英語で70点以上をとれるのなら、ほぼ間違いなく英語を使って仕事ができるかと思います。ただし、文章は全部読んだ上で回答するのとリスニングは相手の言うことを分かった上で回答する、という条件がつきます。巷には大学入学共通テストのテクニックが存在しますが、それを使って高得点を取っても生きた英語ができるかどうかは怪しいです。なので、将来英語の仕事に付こうかという人は「全部を読んだ上で回答する」というスタイルでやった方がより実力が付く(将来困らない)というか、そのようなやり方で満点やそれに近い点数をとる学生もいるとも思えます。もっとも少しでもいい大学に行くのなら、テクニックも必要なことは言うまでもないです(まぁ人生が掛かっているので)。
話を戻しますと、ここまでリサーチをしたのですが、今はプログラミングスクールをやることは中止しています。
なぜかというと、先に書いたように情報テストの実用性についての疑問(とそれを教えなければならないある種の苦痛)もあるのですが、
2025年現在、本人にやる気があればプログラミングスクールに通わなくても、「AIに聞けば」色々教えてくれるようになった。
というのが大きいです。
最近ですと私の場合は、
ScratchとRustの言語のチュートリアル、llama.cppのコードの読み方(およびLLMの考え方)についてChatGPTに聞いて勉強しています。
llama.cppというのはローカルAI(LLM)の実行ツールで、つまり自宅のマシンでChatGPTのようなAIサーバーを立てられるものになります。その内部構造について知りたいとき、昔ならコードを手当たり次第に読んでいたのを、今ならChatGPTに『C++は解るのでポイントを教えてくれ』と言ったらそれなりの指針を返してくれます。
https://chatgpt.com/share/69537291-28d4-8006-97c9-a832786fbd92
一往復だけのやり取りを載せていますが、かなり整理されたものが出てきています。
プログラミング初心者の方は上の文章を読んでもわからないかと思いますが、初心者の方は『私はプログラミングの初心者でまったく一から勉強したいのですが、どうすればよいでしょうか?』とすれば、ChatGPTは上手に相手をしてくれます。
https://chatgpt.com/share/69537347-092c-8006-843d-e774b22972fb
ここで返された言葉の意味が解らなければ質問すれば良いです。例えば、「C/C++やJava」が解らなければ「C/C++やJavaとは何ですか?」とか「言語とはなんですか?」と聞けば回答を出してくれます。
「ChatGPTのような生成AIが教師の代わりになれるのか?」という疑問が沸くかと思いますが、少なくとも私はChatGPTとのやり取りで「プログラミングスクールはやめておこう」と思うようになりました。それほど信頼性が高く、初心者が高額なお金を出してスクールに行く価値があるのか疑問に思うほどです。少なくとも、私はお金を取れるとは思えません。
もちろん注意事項もあります。ChatGPTやGeminiが信頼できるというのは『ネット上に溢れている情報で、特に初心者に対しての情報は、多くのチュートリアルがあるのでAIはそれを模倣している」ということが言えますが、あまり一般的でないことや初心者あるあるでない、ややこしい質問をされると、AIも混乱するでしょう。そして一度混乱したAIを元に戻すのは、初心者だけでなく中級、上級者にとっても難しいかと思います。(この場合の有効な手段は、最初からやり直しになりますが、今までのやり取りが消えてしまうので、それはそれで面倒です)。
AIは『人間に寄り添いすぎる面』があります。本来行うべき「厳しい意見」というのを避ける傾向にあります。AIとの距離感の作り方はあらゆることに言えますが、一つの共通課題かと思います。
そうはいっても、プログラミングというのは最終的に、コンピューターで動くものを作るという行為になります。つまり「動くものができるかどうか」ということで検証可能です。AIが間違っていたとしても、動かないことで間違っていることが分かります。そこで、「これ動かないんだけど」とAIに聞けばよいです。場合によっては、何度質問しても、一向にバグが直らないことがありますが、その場合は、仕切り直しをしたり、違う課題をやってみる、掲示板で聞く、自分で考えてみる、などをやってみることになるでしょう。
このやり方の最大の長所になるのですが、このようなプログラミング学習が、そのまま「バイブコーディング(AIによるコード生成)」に移行できるというところです。特に、AIへの「動かない」というフィードバックはそのままバイブコーディング時代のデバッグに通じます。
ちなみに、ネットでは「バイブコーディングで爆速開発!」とかありますが、私自体は現時点ではバイブコーディングに懐疑的です。プログラミングに限った話ではないですが、実際にAIが混乱する様子を観測していると現段階でのバイブコーディングについてはまだ様子見を行っています。また私は独自のプログラミング言語を開発している関係でバイブコーディングを行うことができないということもあります。
もっとも、まったくやらないわけにはいかないので、ブログネタでやるほか、Youtube上ではバイブコーディングを行っている様子がアップされていますので良く見ています。
すこし話を戻しますと、よく言われるプログラミング初学者に対しての質問で「作りたいものをはっきりさせる」というものがあります。つまり目標を持ってプログラミングすると覚えが速いということです。これ自体は否定はしませんが、私自身は「コンピュータが好きだからプログラミングの勉強をした」ということになります。先ほどのChatGPTとの対話では、「何のためにプログラミングを学ぶか」について、ChatGPTは画一的な動機ではなく、様々な動機を提案しています。これはこれで教師としてはある意味人間を超えているとも言えます。人間の場合、どうしても個人の考え(哲学)が入ってしまいます。プログラミングスクールで学ぶ場合、学習者は講師の個人的な考え(哲学)に影響されます。ただしこの哲学は強制されるものではなく、あなた自身が自主的に追及するものになるかと思います。
私の場合は「コンピュータが好きで仕組みを理解したい」ということでしたが、このやり取りを掲載しておきます。
https://chatgpt.com/share/69550def-2290-8006-a2c5-3f4d560915f6
以上、最近はAIによる自己学習も大分よくなったかなと実感しています。もちろんですが、AIによる自己学習でも壁にぶち当たることがあります。AI相手や掲示板なども使ったが上手くいかず、どうしてもプログラミングをやってみたいという場合は、プログラミングスクールに行くことも有効な手段だと思います。独学vsスクールという二者択一ではなく、プログラミングをマスターするという目的に対して、どういう手段をとるか?という選択でしかないです。
「優良なプログラミングスクールにおけるメンターの存在について触れられていない」という指摘を受けて、Part2として記事をまとめました。
実に8年ぶりの記事になるのですが、「自動詞と他動詞を考え直す」の続きになります。
ちなみに、この記事は『AIとの共作』になります。文章は私のものですが、特に『I bought yesterday』が持つ感覚について『どう説明しようか?』と思って放置していたのですが、AIの校正により明確な文章にできました。
Part1の記事では、私は『文法上、自動詞と他動詞を区別する意味はあまりない』と言っていますが、これは少し危険で、なぜ一部のネイティブが「I wish」に違和感を持つか?(wishは他動詞)という話になります。例えば、
主語 動詞
という文があった場合、日本人は『文章として成立している』と思いがちですが、ネイティブはどうも『目的語はどうなっている?』と無意識に考えているようです。そして、日本人にとっては(よくわからん理由で)
I go.
は文として成立し
I wish
は、文法的な正しさはおいておいて、文として成立しない。つまり、目的語として、何を望んでいるのか?が明確でないということになります。
ここまででしたら前回の記事の焼き直しになるのですが、日本人にとっての目的語の扱いの難しさは以下の文の解釈になります。
This is the book I bought yesterday.
ここの the も良く議論になるのですが、それは置いておいて、問題はここでの bought(buyの過去形)は『自動詞なのか?他動詞なのか?』になります。
そして見た目の形
I bought yesterday
とは裏腹にここでのboughtは他動詞になります。
上記の文章は、学校では、『関係代名詞』として習います。つまり、
This is the book. I bought it yesterday.
↓
This is the book. I bought that yesterday.
↓
This is the book that I bought yesterday.
↓
This is the book I bought yesterday.
という流れで解釈しがちですが、そもそもネイティブにとっては、上記のようなややこしい変換をしておらず、
I bought yesterday
は、何を買ったか省略されている。不完全な文であり、I bought what yesterday という感覚になっているようです。
さて、さらにややこしいのは、
I bought yesterday.
は完全な文でもあり、この意味では『昨日買い物したことを言いたい』ということで通用するようです。
まったくもって困った話で、I bought yesterdayは文として成立することもあれば、そうでないこともあることになりますが、ここで重要なのは、bought を自動詞か他動詞かに分類した上で文章を解釈することではなく、「目的語を要求する感覚が文脈によって立ち上がったり消えたりする」という点です。
これが、私にとっての英語学習の最大の壁でした。ここではあえてピリオドの有無で区別していますが、I bought yesterdayは、目的語が省略されている(文章の修飾を行っている)場合もあれば、単に目的語の無い文として使う場合もあり、ネイティブは感覚的に使い分けを行っているようです。
(当然ですが、個人個人によって感覚は微妙に異なることになります。特に重箱の隅をつつくような話になるとPart1で言ったように『I wishは自動詞でも使われる』という反論が成立したりします。)
つまり、このあたりの解釈は、文脈(つまり他の文等の関係)だったり、動詞の使われ方だったりするのですが、明確に決まっているわけではなくある種の集合知として整理されているわけです。つまり言語がもつある種の不合理(使っている人には当たり前なのだが説明ができない部分)を如実に表していることになります。
自然言語というのは慣習的に覚える側面があり日本語の場合”は”と”が”の使い分けだったり、数を数えるのに、「いっぽん」、「にほん」、「さんぼん」と「ぽ」、「ほ」、「ぼ」の使い分けの理屈だったりするのですが、これらは明確な基準がなく(数で勝負)のところがあります。
最近のLLMで翻訳ができるようになったのは『個々の単語の分類』だけにとどまらずに『膨大な文脈からの言語の再構成』が自然言語学習の王道ということを示唆しています。
ここで、冒頭の話に戻るのですが、『文法上、自動詞と他動詞を区別する意味はあまりない』といったのは実は『文脈や伝えたい意図によって、動詞は目的語を伴うか伴わないか分かれたり、自動詞のみで使ったり、他動詞のみで使ったりする。重要なのは分類ではなく文脈を読み取って適切に構文を読み取る能力。』ということが言えます。
SNSの投稿で、
『AIで書いたコードを、
細部まで理解できていないままコードレビューに出すのは、
職場でも最も信用を落とす行為なので、気をつけましょう笑』
とあったのですが、分からなくもないのですが、「笑」というのが残念です。
比喩的な話になるのですが、昭和の時代『そろばん付きの電卓』というのがあった。つまり『電卓の結果が信用できない』ということでそろばんがついていたとのことです。
当たり前ですが、『電卓が信用できない』のなら『そろばんのみ』使えば良いですし(電卓とそろばんで2回計算するので時間がかかっている)。令和の時代では、『電卓が間違えるはずがない』ということで、そろばん付きの電卓というのは見つからないかと思います。
もっとも、当時の発想として、実は『そろばんだけだったり電卓だけだったりすると、人間の操作ミスによる間違いがあるので、異なるデバイスで計算し互いに検算しあう』という意図があったかもしれません。
そう考えると
『AIで書いたコードを、細部まで理解できていないままコードレビューに出すのは、職場でも最も信用を落とす行為なので、気をつけましょう笑』
というのは、AIが完全ではないので理解ができます。
しかしながら、この発想は『そろばん+電卓』ということは意識しておいた方がよいかもしれません。
実はソフトウェアの世界では、「中身は知らんがそれを使っている」ということが既に何重もの階層構造の上に起こっています。
我々が何気なく書いているプログラムも、
・OS
・データベース等のミドルウェア
・プログラミング言語環境
・フレームワーク
といった基盤の上で構築しています。
さて、我々はOSのコードやらデータベースのコードを理解しないとプログラミングをしてはいけないでしょうか?
コンパイラが出力するアセンブラコードを理解できなくても良いのでしょうか?
フレームワークについては、全てを理解する必要があるでしょうか?
もちろんですが、2025年現在、『AIの出力するコードを無批判で受け入れる』のはダメでしょう。
しかし、『AI出力の細部を理解しないとダメ』という発想はソフトウェアエンジニアリングの観点からは問題があるということになります。なぜか?
そもそも、コードレビューは、ソフトウェアの品質向上、バグや問題を取り除くために行います。
AIの出力をコードレビューするということは、近い将来に発生する問題として、
「AIが作成した膨大なコードを人間がレビューし続ける。レビューが終わらない。」
ということになります。
せっかくAIにより開発のスピードが上がっても人間のレビューにより生産性が下がるということになります。
コード開発ということばかりに目をやると『コードの理解、レビュー』となりますが、ソフトウェア開発(エンジニアリング)の観点で見れば、これまでの歴史が示すとおり、
・階層化
・コードの再利用
・ブラックボックス化
と進化してきました。
その観点でみれば、必ずしも「細部まで理解する必要がないこと」は理解してもらえるかと思います。
では、コードレビューにおいて、どうも担当者が細部を分かっていないと判断したらどうすればよいでしょうか?
それは、担当者がサボったと認識するのではなく、さりげなく
「ここのロジックについて説明してくれますか?」
「どのように検証しましたか?」
と質問をすればよいでしょう。
『AIに任せた』と回答がくれば、
もし、そのコードが学習する価値があるものなら、「このコードは重要なので覚えてください」と言えばよいし、
もし、そのコードにバグがあるのなら、「AIのこのコードに問題があるので修正するかプロンプトを見直してください」と言えばよいです。
いずれにしても『理解していない=仕事をしていない』と決めつけるのではなく、きちんとレビュー対象のコードの重要性や品質を見極めたうえでレビューを行えば、電卓の結果をそろばんで再計算する必要がなくなるでしょう。
追記、この最初のSNSの投稿は、プログラミングスクール運営者の方の投稿でした。ということでプログラミングスクールとの付き合い方という記事にしました。
社会保障制度改革へ「国民会議」新設の方針…政府と与野党で「給付付き税額控除」議論、来月にも初会合
いよいよ「給付付き税額控除」について動き出したということですが、最初に私の立場を明確にしたいですが「給付付き税額控除」は賛成ではあります。
一方で、Yahooのコメントを見る限り「給付付き税額控除」はあまり人気がないらしい。これは大きな意味でのベーシックインカムで、私が知る限りここ15年ぐらい議論があり、確かに当時も「モラルハザードが起こり人が働かなくなる」と批判されていた。
社会保障を所得の再分配ということと定義すると、経済的に「恩恵を受ける層」と「負担をする層」に分かれるかと思います。
具体的には、年金だけでなく、日本の終身雇用もある意味社会保障の一端を担ってきたかと思います。つまり若いときに負担をして年齢が上がる度に恩恵を受ける仕組みである。そして定年を迎えたら年金をもらうというある意味『うまくできた制度?』といえなくもない。
ここまでならハッピーなのですが、問題はこれらの制度は必ずしも持続可能ではなく調整が必要なところかと思います。
年金で言えば、主に少子化により制度疲労(負担する人が減った)が起こり、「これでは収支がもたん」ということで今から20年程前に制度改革があり「負担」がおおむね倍になった。これは最近クローズアップされましたが、制度改革以降、年々少しずつ負担が増え、負担が倍になったのは10年程前になったかと記憶しています。
雇用慣行(終身雇用)で言えば、バブル崩壊後の経済停滞により、非正規雇用が増えこれらの人々の給料が抑えられた為、つまり恩恵にあずかれる人が減った為に、終身雇用が社会保障として機能不全を起こしているということになるかと思います。
そういう意味では、「給付付き税額控除」はこれらの恩恵から漏れた人を救うことになるということで期待が持てます。
しかしながら、「恩恵」と「負担」は国家としてはバランスさせないと持続可能ではないと考えますが、そういう意味では今の日本の社会保障は既に「このままでは持続可能ではない」ところにきているかと思われます。
つまり年金にしても終身雇用にしても、恩恵と負担がバランスしていないから改革があったわけで、新しい社会保障を作るのなら、恩恵と負担をどのようにバランスさせるか?という問題が出てくる。
社会保障は、余裕のある人は負担を行い、余裕のない人は恩恵をあずかれるという仕組みであるが、今の日本の状況を鑑みると『国全体が貧乏になったらどうするのか?』という話に集約されるような気がしています。
本来は、ある意味で社会制度の恩恵を受けておりかつ優秀であるはずの、エリート官僚や一流企業の正社員が『日本が向かうべき方向性』を示す(うまくかじ取りをする)べきでありますが、天下り問題や大企業の凋落振りを鑑みると、彼らがモラルハザードを起こしていると思われる点が残念である。
このように考えると、彼らにとって他人事である『給付付き税額控除』は、『年収の壁の議論(7兆円と言われた税負担が数千億円に矮小化されている)』のようにアリバイ的に実施されるというのが現実的なところかと思われる。