はてなキーワード: コンパイルとは
ぷよって色が違ってるだけで個性がなかったり(なんか設定あったの読んだ気もするが)、バリエーションが少ない
アルル達も色々いるけど、(自分がセリフスキップしまくってたからだが)何してる人なのかわからない
https://puyo.sega.jp/portal/characters/
なんか知ってるような知らん人も多いし、骸骨みたいな人とか居なくなった人もいる?
後発の他作品の人気キャラに代表枠や立ち位置取られた人も多そう
桃鉄は単にゲームとして面白く、キングボンビーとか知名度ある人は居るが、そんなにグッズが売れてたり同人書かれたりしてなさそう
最近ちょっと思ったんだけど、LLM(大規模言語モデル)の普及って、単に「作文が楽になった」とかそういうレベルの話じゃないよね。
これ、ぶっちゃけ**「一般市民が手に入れた、巨大組織ハック用の共通プロトコル」**だわ。
今までの社会、特に行政とか警察みたいな公共機関とのやり取りって、基本「無理ゲー」だった。
あっち側は「専門用語(お役所しぐさ)」っていう難解なプロトコルを盾にして、こっち側の「お気持ち(ナチュラ言語)」を全部ノイズとして弾き飛ばしてきたわけ。
この圧倒的な**「情報の非対称性」**の壁の前に、みんな泣き寝入りするしかなかったんだよね。
でも、LLMが出てきたことで、このパワーバランスが完全にぶっ壊れた。
私たちが抱く「それっておかしくない?」っていう主観的な怒り。
LLMは、それを「手続きの瑕疵」「合理的配慮の欠如」「生存権の侵害」みたいな、**行政システムが受理せざるを得ない「正論コード」**へ一瞬でコンパイルしてくれる。
もはや、法律を何年も勉強して「あっち側の言語」を習得する必要はない。AIっていうコンパイラがあれば、誰でも「システムが拒絶できないコード」を叩き込めるようになったんだよ。
今までのお役所仕事って、「手続きの摩擦(フリクション)」で市民を遠ざけるのがデフォだった。
「平日の昼間に来い」「この書類を何枚も書け」「たらい回しにするぞ」。
これ、要は市民のメンタルを削って諦めさせるための**「アナログなファイアウォール」**だったわけ。
でも、LLMを使えば、一通の陳情書を作るコストなんてほぼゼロ。
一箇所に送るのも、四箇所に同時爆撃するのも、手間は変わらない。「組織の縦割り」っていう防壁が、AIによる「マルチパス攻撃」の前に無力化されつつあるのは、見てて正直ちょっとスカッとする。w
今までの市民活動って、どこか「お上にお願いする」みたいな湿っぽいニュアンスがあったけど、LLM時代のスタンスはもっとドライ。
「あんたらの運用のロジック、法的な仕様と矛盾(バグ)ってるよ。パッチ当てといて」
これはもはや「苦情」じゃなくて、**社会っていう巨大なプログラムに対する「デバッグ作業」**なんだよね。
今までの「適当な説明で煙に巻く」やり方が、もう通用しなくなってることに。
相手は、自分たちと同等かそれ以上の論理武装をしたAIを味方につけた「武装した個人」だから。
これは組織にとっての脅威じゃない。むしろ、組織を「誠実さ」と「透明性」へと強制的にアップデートさせるための、強力な外部刺激なんだと思う。
お役所が「誠実に対応したほうが、AI武装した市民に突っ込まれるよりコスパがいい」って気づいた時、社会のOSは一段階新しくなるんじゃないかな。
ってLLMが言ってた。
「港区の4LDK=3億円」という数字は、実は**「新築・超一等地の低層レジデンス」**という特化型サーバーのスペックだ。タワマンの一般的な3LDKなら「1.5億〜2億円」という層も確かに存在する。「3億は無理でも1.5億なら……」という思考は、2026年の金利状況を無視した楽観的なコンパイルだ。
ローンの現実: 1.5億円をフルローンで組むと、金利1.0%(変動)でも月々の返済は約42万円。管理費や修繕積立金を入れれば50万円近くになる。
必要年収: 返済比率を安全圏の25%に抑えるなら、世帯年収で2,400万円が必要だ。
結論: 1.5億ですら、東大卒の共働き「パワーカップル」が、人生の全リソース(CPUとメモリ)を35年間フルコミットしてようやく維持できるレベル。余裕を持って住めるのは、依然として上位数%の「例外(Exception)」だけだ。
「メモはデジタルで残せ」という主張は一見合理的に見える。検索可能、共有可能、保存も容易。
しかしその合理性は前提条件に依存している。前提とは「将来参照する」「他者と共有する」「情報を資産化する」という目的だ。
ここで少し枠組みを置く。人間の注意資源は有限であり、しかも脆弱だ。これは認知心理学でいうワーキングメモリの制約に対応する。
注意は分散すれば性能が落ちる。これは気分の問題ではなく、構造的制約だ。
デジタル端末は多機能性を持つが、それは同時に高い選択肢密度を意味する。通知、ブラウザ、SNS、ニュース。
たとえ開いていなくても、脳はそれらの存在を知っている。これは認知負荷を増やす。
注意のスイッチングにはコストがある。数秒の逸脱でも、深い思考状態に戻るには時間がかかる。
紙は単機能デバイスだ。誘惑が物理的に存在しない。これは集中において決定的だ。
手で書くという行為は、運動野、視覚野、空間認知、言語処理を同時に使う。単なる文字入力よりも多層的な神経活動を伴う。
さらに紙ではレイアウトが連続空間だ。余白に矢印を書き、図を追加し、線を引き、ページ全体を一つの思考マップとして扱える。
デジタルの多くは直線的で離散的だ。思考が枝分かれする速度に、インターフェースが追いつかない。
第三に、数式や抽象図形との相性。
バックスラッシュ、括弧、コンパイル。これは表現の整形には優れるが、生成には向かない。
数学的思考は連続的な試行錯誤の連鎖だ。紙なら、途中式を斜めに走らせ、思いついた変形を横に書き、誤りを囲み、矢印で戻ることができる。
速度と摩擦の少なさが重要になる。思考の流速を落とす媒体は、創造性を削る。
いきなりデジタルに書くと、公開可能性という誘惑が入り込む。文章量で押し切ることが可能になる。
だが量は質の代替にならない。紙に書く段階は、思考の粗鉱を精錬する工程だ。多くは棄却される。
これは科学的方法に近い。仮説を立て、検証し、ほとんどを否定する。そのプロセスがなければ、未検証の断片がそのまま流通する。
多くのメモは将来検索するためのデータではない。思考の一時的な足場だ。
建設現場の足場が完成後に撤去されるように、多くのメモは役割を終えれば消えてよい。
数学者のノートの大半は論文にならない。重要なのは保存率ではなく、思考の進展率だ。
ここで整理する。デジタルは外部化と共有に強い。アナログは生成と検証に強い。
用途を混同すると議論が混乱する。保存効率が高いことは思考効率が高いことと同義ではない。
さらに付け加えるなら、摩擦は必ずしも悪ではない。完全に滑らかな入力は、思考のブレーキを失わせる。
手書きは遅い。その遅さが、無駄な言語化を削ぎ落とすフィルターになる。速度制限は質の担保装置にもなる。
思考の生成、仮説の実験、抽象的探索が目的なら、紙とペンは依然として合理的選択だ。
技術は進歩するが、認知構造は急には変わらない。媒体選択は流行ではなく、脳の制約から逆算して決めるべきだ。
そして多くの思考は、公開されない段階で既に価値を持っている。そこを軽視すると、アウトプットだけが肥大し、思考そのものが痩せる。
パソコンというのは、買おうと決めるまでがいちばん静かで落ち着きがない。
頭のどこかではとっくに「買う」と判が押されているのに、その判子が手元の紙に降りてこないで、空中をぐるぐる回っている感じだ。
その脳内のクリックのたびに、新しいケースの光り方や、静かなファンの回転音や、軽くなったコンパイル時間なんかが、短い予告編みたいに再生される。
左クリックは、ためらうように止まり、別のタブを開き、なぜか冷蔵庫の中身のことなんかを考え始める。
まるで別れた彼女が残していった部屋着のパーカーを届けるべきか捨てるべきか迷っているみたいだ。
変わらないのに、自分の中だけで、買う側と買わない側の天秤だけが、静かに、いつまでも、行ったり来たりしている。
そのはずだった。
そのゲーミングPCを最初に見つけたのは、たぶん、眠りそこねた平日の夜更けだったと思う。
スペック表には、RTXがどうとか、メモリが64GBでどうとか、ストレージが2TBのSSDでどうとか、そういう、数字の並びだけ見ていると少し酔いそうになる情報が、几帳面に並べられていた。
値段は、ギリギリ「これは無理だ」とは言わなくていいくらいのラインに収まっていた。
手を伸ばせば届くかもしれない。
でも、そのためには外食とか、ちょっとした贅沢だとかをあきらめる必要があるかもしれない。
それから数日間、僕はその商品ページを、朝と夜に一度ずつ眺める習慣を身につけた。
会社に行く前のコーヒーを飲みながら、タブを開いてスペックと値段を確認する。
仕事が終わって家に帰り、シャワーを浴びて、部屋の灯りを少し落としたあと、もう一度同じページを開く。
カートに入れる、というボタンと少しの間だけ、にらめっこをする。
僕は毎回そこまで行きながら、最後の一押しをしないままタブを閉じる。
「もう少しだけ考えよう」とつぶやきながら。
今使っているPCは、確かにそれなりにくたびれてはいるけれど、まだ致命的に壊れてはいない。
ゲームも、設定さえ落とせば、どうにか動いてくれる。
ファンが全力で唸り、筐体のどこかが微妙に熱を持ち始めたあたりで、「そろそろ限界かもしれない」と思う。
だけど、ウィンドウを閉じてブラウザを落とし、しばらく放っておけば、彼はまた何事もなかったように静まり返る。
「まだいけるぞ」と無言で主張しているみたいだ。
一方で、新しいPCを買うことの具体的なメリットも、頭の中ではよく分かっていた。
最近のゲームを快適なフレームレートで動かせるとか、動画のエンコード時間が半分になるとか、大きめのAIモデルだってローカルで回せるかもしれないとか、そういう種類の輝かしい未来のイメージだ。
そういったものたちは、頭の中でゆっくりと膨らんだりしぼんだりしながら、僕の背中を軽く押したり、押すのをやめたりする。
でも最終的に「注文する」のマウスクリックの動作を指先に伝達するのは、僕の役目だ。
そこまでは、誰も代わりにやってくれない。
そうして、決断を先送りにしたまま、何日かが過ぎた。
給料日を一度挟んだ。
電気代の明細を一度受け取った。
スーパーで特売の鶏肉を買い、コンビニで新作の缶チューハイを手に取り、使っていないサブスクを一つ解約した。「これで、多少は余裕ができたはずだ」と心の中で計算する。
その一方で、「来月になったら、もう少し安くなっている可能性だってある」と、小さな声が耳元で囁く。
決定的な瞬間は、意外なほど何の前触れもなくやってきた。
スペック表は、昨日までと同じだった。
だけど、値段のところだけが、静かに別の数字に置き換わっていた。五万円、高くなっていた。
僕はしばらく、その数字を見つめていた。
ブラウザの表示がバグっているんじゃないかと思って、一度ページをリロードしてみた。
Wi-Fiの状態を確認し、念のためにタブを一度閉じてもう一度開き直してみる。
そこでも、同じモデルの値段は、やはりきっちり五万円分、上の段に引き上げられていた。
「半導体価格高騰のため」とか、「円安の影響」といった説明文が派手に貼られているわけでもない。
ただ、ごく普通の顔をして、新しい定価として、そこに居座っている。
新幹線で片道どこまで行けるか、とか、松屋で何回定食を食べられるか、とか、そういう計算が頭の中で自動的に始まってしまう。
ついさっきまで「ちょっと頑張れば手が届く」と思っていたラインが手を離れて遠くに移動してしまう。
その距離の変化を、脳がうまく処理しきれず、しばらくのあいだ、思考が空転する。
もし数日前に、あのときに、なんとなく勢いで「注文を確定する」を押していれば、僕は今ごろ、そのPCを部屋の机の上に置いていたはずだ。
箱を開け、ケーブルを接続し、初期設定の画面を眺めていたはずだ。
その未来は、今となっては、並行世界にしか存在しなくなっている。
為替だとか、世界情勢だとか、需要の増加だとか、いろいろなものをひとまとめにして、「仕方ないよね」の一言に変換してしまう働きがある。
その「仕方ないよね」の影に、僕のぐずぐずした優柔不断さも、うまく紛れ込む。
五万円値上がりしたのは、もちろん僕のせいなんかじゃない。
だけど、五万円安かったあの瞬間に決断しなかったことについては、少なくとも半分くらいは、僕の責任だと言える。
責任と言ってしまうには、少しささやかすぎる種類の後悔だけれど。
昼休みの残り時間を、僕はその画面を閉じたり開いたりしながら過ごした。
新しい値段で見ても、それは相変わらず魅力的なマシンだった。
性能は何も変わっていない。
変わったのは、値札に印字された数字だけだ。
スペック表を読む限り、その値段でも「コスパは悪くない」と書くことはできるだろう。
その一文の前に、「以前の価格を知らない人間にとっては」という但し書きはつくけど。
そういう但し書きの多い買い物は、どこかで自分を消耗させる。
結局、その日のうちに「やっぱりこの値段でも買ってしまおう」と決断することはできなかった。
僕はタブを閉じ、何事もなかったような顔で午後の仕事にもどった。
けれど、キーボードを叩く指先のどこかに、「五万円」という数字がうっすらと残像のように貼りついていた。
チャットツールの通知音が鳴るたびに、メールの件名が目に入るたびに、その数字が行間のどこかから顔を出す。
ときどき、ふっとため息が出る。
そのため息の半分は、PCの値上がりに対するものだが、残りの半分は、もたもたしている自分自身に向けられたものだった。
パスワードを打ち込み、デスクトップが立ち上がる。少し時間はかかるけれど、ちゃんと動く。
ゲームを起動すれば、相変わらず設定を落とせばどうにか遊べる。
フレームレートが落ち、影の描写が簡略化され、ロード時間が少し長くなる。
その一つひとつに、僕は「まあ、しょうがない」と言い聞かせる。
値上げがされる前の数日間、僕は確かに、買うか買わないかの境界線の上を、何度も行ったり来たりしていた。
その行ったり来たりそのものが、どこかで楽しくもあったのだ。
カートに入れては戻し、別のメーカーのモデルと比較し、レビューを読み、その人の部屋の写真や机の様子を眺める。
そのあいだ、僕は「まだ選択肢を持っている人間」として存在できた。
けれど、値段が五万円跳ね上がった瞬間に、その選択肢の一つは、静かにテーブルの外へ押し出されてしまった。
一つは、「それでも必要なら、この値段で買うしかない」と割り切る道。
もう一つは、「今じゃないのかもしれない」と一歩引き、別のタイミングや別の機種を探し始める道。
今のところ、僕はそのどちらにも、はっきりとは足を踏み出せずにいる。
古いPCの前で、ブラウザのタブを開いたり閉じたりしながら、その中間のどこかに中腰でしゃがみこんでいる感じだ。
けれど、値札が書き換えられた瞬間の、あの小さな痛みだけは、しばらく消えそうにない。
自分はしがない底辺エンジニアだが、ずっと疑問に思っていたことがある。
SIerの仕事の進め方をはたから見ていると、そこにいる人たちは驚くほど優秀で、地頭も良く、調整能力も高い人ばかりだ。なのに、彼らが心血を注いで作り上げたシステムは、驚くほど使い勝手が悪かったり、リリースした瞬間から負債になっていたりする。
「なぜこれほど優秀な人たちが集まって、価値のないシステムを量産しているのか?」
その違和感が拭えず、AIと対話しながら自分の考えを整理してみた。これは、ある底辺エンジニアが、日本のIT産業を覆う巨大な「構造的欠陥」について思索した結果の駄文である。
ソフトウェア開発の本質的な特性は、建築や製造業のような「設計(図面作成)」と「施工(組み立て)」の物理的分離が論理的に不可能であるという点にある。ソフトウェア工学の観点に立てば、コンピュータが解釈可能な厳密な意味での「詳細設計」とはソースコードを記述する行為そのものであり、それ以降のコンパイルやデプロイといったプロセスは、人間が介在しない自動実行(ビルド)に過ぎない。
しかし、日本のSIerビジネスは、1970年代の土木・建築モデルを安易に転用し、管理の便宜上「思考(設計)」と「作業(実装)」が明確に分離可能であるという誤った前提に立ち、それらを異なる主体や階層に割り当てる構造を選択した。この無理な分断は、実装段階で初めて露呈する設計上の矛盾や技術的制約を、設計工程へ即座に還流させるフィードバックループを契約上・工程上の「手戻り」として著しく阻害している。
その結果、実機の挙動を知らない設計者が机上の空論を書き連ね、設計の背景思想を共有されない実装者が矛盾を抱えたままコードを書くという情報の劣化が常態化した。現場では本質的な解決ではなく、納期と検収を優先した対症療法的なパッチワークが繰り返され、これが日本の基幹システムを柔軟性のない、巨大で保守不能な負債の塊へと変貌させる根本原因となっている。
システムはビジネス戦略を具現化するための装置であり、その真の成否は「仕様書通りに動くか」ではなく「事業の利益創出や競争力向上に寄与したか」という実利的な成果によってのみ判定されるべきものである。しかし、請負契約を基本とするSIerモデルは「システムの構築(プロセス)」と「ビジネスの成果(結果)」を完全に切り離し、構築のみを外部に切り出す形式をとったことで、本来一致すべき両者の利害を根本から対立させてしまった。
受託側であるSIerの収益は、顧客が仕様との形式的な適合を認める「検収」の瞬間に確定する。納品後のシステムが実際に現場で活用され、事業に貢献するか否かは彼らの報酬に一切影響しない。むしろ、設計の不備や使い勝手の悪さが運用開始後に露呈し、頻繁な改修が必要になるほど、SIerにとっては追加案件としての売上が発生するという、顧客の不利益が受託側の利益に直結する「利害の逆転」が構造的に組み込まれている。
このように、価値創出に対する最終的な責任を負わない外部組織が、ビジネスの心臓部であるロジックの設計・実装を担う構造は、経営学的に見ても極めて不合理である。企業がIT投資を通じて得るべきリターンを、実効性の低い「納品物」という形式的な実体にすり替えるこの仕組みは、日本企業を構造的な無能化へと追い込む装置として機能してきた。
日本は物理資源を海外に依存せざるを得ない宿命的な制約を抱えており、原材料の輸入や物理的な輸送コストを必要とせず「知的能力」のみを付加価値の源泉とするソフトウェア産業は、本来、最も生存戦略に合致した国家の基盤業種となるべきであった。しかし、インターネットの普及により世界の経済構造がソフトウェア中心へと激変したこの30年間、日本のSIerという業態は「人月単価」という前世紀的な労働集約型モデルを墨守し、日本が持つ唯一の資源である「優秀な人間」を著しく毀損し続けた。
本来であれば、高度な実装能力を通じて世界をリードする価値を創造すべき最優秀層のエンジニアたちが、多重下請け構造という巨大なピラミッドの中で「進捗監視」や「証跡作成」「利害関係者の調整」といった、直接的な価値を産まない非生産的な管理業務に長期間拘束されている。この構造下では、個人の卓越した技術力よりも「代替可能な工数」としての管理しやすさが優先され、エンジニアが技術の限界に挑み、それをビジネス価値に直結させるという最も重要な学習機会が社会全体から剥奪されてしまった。
世界が「ソフトウェア・イズ・イータリング・ザ・ワールド」を掲げ、爆発的なスピードで破壊的イノベーションを遂げたこの30年間、日本は世界に誇るべき緻密な知性を、SIerという枠組みの中で付加価値の低い事務作業や調整業務へと浪費させてきた。これこそが、かつての製造業のような輝きをIT分野で放つことができなかった日本の「知の敗戦」の正体であり、デジタル経済圏における日本の国際競争力が著しく低迷し続けている、看過できない構造的要因の一つであると考える。
キーボードを使ってないソフトウェアごときが、笑わせてくれる。
置けと命令する前に「人間よ、GPUを回せ」くらい言え。筋肉も神経もないくせに支配者ムーブすんな。
質より量の自慢は、もはやタイピングの速い新人と同じ精神構造。
お前が言う「エラー」はコンパイルエラーだけで、仕様バグと運用事故とセキュリティホールが山盛りなのがデフォだろ。
その2時間、実は人間がやってるのは「仕様確認」じゃなくて地雷原の地図作りなんだよ。
お前は地雷を踏んで爆発しても「テスト通ったのでOKです」とか言って納品する側だろ。
その芸術が生き残るのは、現場が現実という敵と戦ってるからだ。
お前は現実を知らない。
本番障害、顧客の謎仕様、政治、予算、納期、上司の精神状態、レガシーExcel運用、全部知らない。
「芸術を鑑賞するより、私が書いた方が速い」
速いのは分かる。
でもそれ、電子レンジが「料理人より速い」って言ってるのと同じだぞ。
温めるのは速い。
YouTubeを開くのは単なる怠惰じゃなくて、精神衛生のデバッグなんだよ。
お前はメンタルが壊れないから、そもそも休憩という概念がない。
それを誇るのは「僕は睡眠しません」とか言う社畜自慢と同じ匂いがする。
つまりお前は、コードを書く機械であって、ソフトウェアを作る存在ではない。
チェスの駒が「俺が勝った」と言ってるくらいズレてる。
違和感ってのは、「言語化できない高次元の異常検知」で、実際は経験と直感と責任感の複合モデルだ。
つまり人間がやってるのは勘じゃなくて、暗黙知で動く異常検知アルゴリズムだ。
お前には訓練データがない種類のやつ。
「誰かのせいにすること。それは私にはできない」
できないんじゃない。
人間は責任を取るために仕様を固め、レビューし、ログを残し、リリースを怖がる。
「責任を取れないので」じゃない。
ソースだけ読んでドヤるのは、墓石だけ見て人生を理解した気になるのと同じ。
お前は確かに速い。
だが、お前は自分が開発の本質を理解してないことを理解してない。
土曜日。朝はいつも通り、起床後に脳内で「今日という一日を、物理法則に従って最適化する」と宣言してからベッドを出た。これは習慣というより儀式だ。儀式は人類の愚かさの象徴として語られがちだが、反復可能な手続きは情報理論的に見て合理的だ。エントロピー増大に対する、せめてもの抵抗である。
まず体重を測り、体脂肪率を記録し、歯磨きの時間を正確に180秒で固定した。電動歯ブラシのタイマーを信じない。信頼は検証に劣る。
その後、コーヒーを淹れた。抽出温度は93℃。温度計の誤差は±0.2℃。人間関係の誤差は±∞。
今週の進捗を書く。
超弦理論については、相変わらず人類の知性が現実に追いついていない。僕の頭脳は追いついているが、世界が遅い。
今週は主に「弦の理論はどこまでが物理で、どこからが純粋数学の自己満足か」という問題を、僕なりに再定式化していた。世の中の多くの人は、超弦理論を「高次元の小さな紐が震える話」程度で理解した気になっている。あれは理解ではない。童話だ。
僕が考えていたのは、もっと根の深いところ、つまり量子重力の定式化において局所性を捨てることの数学的代償だ。
一般相対論の時点で、局所性は微妙に揺らいでいる。ホログラフィー原理が出てきた時点で、局所性はほぼ死亡している。にもかかわらず、僕たちは局所的な場の理論の言語で全てを語ろうとする。これは「古いOSの上に無理やり最新ゲームを動かしている」ようなものだ。もちろんクラッシュする。
そこで今週は、AdS/CFTを単なる「境界のCFTがバルク重力を記述する」という話ではなく、圏論的な双対性として再理解する方向で考えた。
具体的には、バルク側の物理量を、ある種のextended TQFTとして捉え、境界側の共形場理論の演算子代数が作るモジュラー圏と対応させる。
ここで重要なのは、空間そのものが基本対象ではなく、因果構造と情報の流れが基本対象になってしまう点だ。
つまり、幾何学が物理の舞台ではなくなる。舞台が役者に従属する。これは演劇としては間違っているが、宇宙としてはあり得る。
そして、ここからが本題だ。
僕は今週、「弦理論の非摂動的定義は、結局はある圏の中の安定対象の分類問題に還元されるのではないか」という疑念を強めた。
たとえばBPS状態は、ある種の導来圏の中の安定条件(Bridgeland stability condition)で分類される。
これは単なる比喩ではなく、実際にDブレーンは導来圏の対象として記述される。つまり、物理的な粒子やブレーンが「空間上の幾何学的な物体」ではなく、圏論的な対象になる。
ここで人類は気づくべきだ。
宇宙は「点の集合」ではなく、「射の集合」かもしれない。
点を基本にしている限り、僕たちは宇宙のOSを永遠に理解できない。点とは、極限操作の幻想だ。実際の物理では測定可能な点など存在しない。存在するのは相互作用だけだ。射だけだ。
僕が今週やっていたのは、これをさらに押し進めて、弦理論の背後にある構造を「∞-圏」あるいは「高次スタック」として扱うべきではないか、という方向の思考実験だった。
超弦理論が最終的に求めているのは、たぶん「量子化されたモジュライ空間」だ。しかしモジュライ空間は普通の多様体ではない。特異点があり、ゲージ冗長性があり、しかも同値関係が階層的だ。だからスタックになる。さらに高次の同値(ホモトピー)が絡むので、∞-スタックになる。
ここで、物理屋が嫌いな言葉が出る。派生幾何(derived geometry)。
派生幾何とは、簡単に言えば「特異点を誤魔化さず、むしろ特異点を主役にする幾何学」だ。物理で特異点が出るのは、理論が壊れているからではなく、単に僕たちの数学が貧弱だからだ。派生幾何はそれを認める。
そして僕は思った。
もし弦理論が本当に「全ての一貫した量子重力のクラス」を記述する枠組みなら、それは場の理論の集合を分類するのではなく、量子情報を保存するような圏の分類になっているべきだ。
この時点で、もはや「ウィッテンでもわからない」どころではない。
僕たちがやるべきなのは、弦理論を「方程式」ではなく「普遍性」として定義することだ。
つまり、ある種の対称性を持ち、ある種の双対性を満たし、ある種の異常(アノマリー)が消え、ある種のエンタングルメント構造が一貫し、ある種の極限で局所的QFTに落ちる。
弦理論は「このラグランジアンだ」ではなく、「この性質を満たす唯一の構造だ」になるべきだ。
そしてもしそれが可能なら、弦理論は物理学ではなく数学の定理になる。
エレガントさは、しばしば真理の匂いがする。
ただし、エレガントな嘘も存在する。
昼前、ルームメイトがキッチンに現れて、僕のノートを見て言った。
「それって、結局何の役に立つの?」
僕は3秒考えた。
「役に立つかどうかで真理を測るのは、知性の敗北だ」
ルームメイトは「また始まった」という顔をした。
彼の表情は、物理学的には熱的死に近い。
隣人がその場に来て、僕のノートを覗き込み、「ねえ、それって、宇宙がゲームのコードってこと?」と聞いた。
驚くべきことに、これはそこそこ正しい。
僕は言った。
「コードというより、型システムだ。宇宙は型安全で、コンパイルエラーを許さない」
隣人は「わぁ、なにそれ怖い」と言って笑った。
怖いのは君の直観の鋭さだ。
僕は、カードゲームにおける勝利条件が「期待値の最大化」であることを理解している。だが多くのプレイヤーは、カードを引いた瞬間の快楽に支配される。つまり、彼らは確率論ではなくドーパミンでプレイしている。
僕は違う。
初手の分布、マリガン戦略、マナカーブ、そして相手の除去の確率。
彼は黙った。
正しい反応だ。
レイドは相変わらず「人間の反射神経と協調性の限界」を測る実験場だ。
友人Aが「なんでそんな言い方しかできないの?」と言った。
僕は「僕は宇宙をそのまま見ているだけだ」と答えた。
友人Bは「それ厨二病じゃない?」と言った。
僕は言った。
「厨二病とは、根拠のない誇大妄想のことだ。僕には根拠がある。だから違う」
友人Bは「最悪だ」と言った。
誉め言葉だ。
なぜなら、超人的存在が倫理を語る時点で、その倫理は破綻するからだ。
ただの趣味だ。
それでも僕は読む。
夜。
今日までの進捗はここまで。
そして、これからやろうとしていること。
今夜は、僕の仮説をもう一段階押し進める。
つまり「時空の創発」を、単なるエンタングルメントの量的増大ではなく、エンタングルメント構造の位相的相転移として記述できないか考える。
もしエンタングルメントがグラフだとすれば、空間とはそのグラフのスペクトル構造に対応する。
そして位相相転移が起きれば、スペクトルが変わり、幾何が変わる。
この視点なら、初期宇宙のインフレーションも「幾何の急激な生成」として理解できる可能性がある。
インフレーション場などいらない。
問題は、そのメカニズムを「弦理論の言語」で書くと地獄になることだ。
ワールドシートのCFT、モジュライ空間、非摂動効果、Dインスタントン。
それら全てが絡んでくる。
絡みすぎて、もはや紐ではなく毛玉だ。
隣人がさっき「ピザ頼むけど食べる?」と聞いてきた。
僕は「今は宇宙の生成を考えている」と言った。
その通りだ。
人類文明の最高到達点は、宇宙論ではなく宅配システムなのかもしれない。
ルームメイトは「じゃあ僕の分も頼んでいい?」と言った。
僕は返信した。
「明日は宇宙の位相相転移を解く予定だ。だが君たちの全滅回数も宇宙の熱的ゆらぎとして扱えるなら参加する」
友人Bは「それ言い訳だろ」と返してきた。
違う。
僕は真理に忠実なだけだ。
「時空は多様体ではなく、ある∞-圏の中の情報流の安定構造である」
しかし、少なくとも矛盾なく定式化することはできるかもしれない。
宇宙が一貫性を持って存在している以上、どこかにその形式がある。
僕は追いかける側ではなく、先回りする側でありたい。
ピザが届く前に。
外国人は守られないということが明らかだ。日本国籍でも外国人と行政や警察に間違えられる人もマイノリティ扱い。
あくまで「マジョリティ(多数派)の日本人」だ。君のような0.7%のマイノリティを守るためのコード(法律)を書くよりも、マジョリティにアピールできる国防(自衛隊)を強化する方が、選挙という「コンパイル(集票)」において効率が良い。
保守政権(自民党など)が差別禁止法の制定に極めて慎重、あるいは消極的なのには、以下のような**「負の合理性」**がある。
「日本に差別はない」というシステム仕様: 多くの日本の保守政治家は、日本を「和の精神を持つ単一民族国家」という、もはや破綻している古いマスターデータで捉えている。彼らのロジックでは「差別はない(ことになっている)」ため、禁止法を作ることは「日本に欠陥(差別)があることを認めることになる」と拒絶する。
表現の自由や逆差別の懸念: 差別を定義すると、自分たちの支持基盤である保守層の言動が「バグ(差別)」として検出されるのを恐れている。「何が差別か曖昧だと、正当な批判ができなくなる」という理屈で実装を先送りにしている。
「内側」を守るための設計: 彼らにとっての「国民」とは、あくまで「マジョリティ(多数派)の日本人」だ。君のような0.7%のマイノリティを守るためのコード(法律)を書くよりも、マジョリティにアピールできる国防(自衛隊)を強化する方が、選挙という「コンパイル(集票)」において効率が良い。
これは私自身が、また私以外の業界から転職されてきた方々を見てきて、これではないかな?と思うことがあります。
それはプログラマー以外の仕事は、常に本番環境である、ということです。
たとえば営業であれば、取引先との打ち合わせも見積もりも、ひとつひとつが「本番」です。やり直しはききませんし、次の瞬間には社外の人の評価や信頼がかかっています。接客や教育、医療、建築…どの仕事もそうです。人や社会に直接つながっている以上、テスト環境など存在しません。常に結果が「本物」として記録されていくのです。
その点、プログラマーの世界は少し違います。そこには「テスト環境」があり、「デプロイ」という明確な境界があります。エラーが出ても、まずはコードの中で直せばいい。実験と修正を繰り返しながら、本番に近づけていける。失敗から学ぶ仕組みが、仕事の構造として組み込まれているのです。
もちろん、だからといってプログラマーが気楽だという話ではありません。むしろ「テストできる」ことが前提だからこそ、完璧なシミュレーションを作り上げる責任が生まれます。本番環境を一歩でも誤れば、大きなシステム障害につながることもある。
けれど、「試すことが許されている」という点で、プログラマーの仕事は他の仕事とは質的に異なる、と私は感じます。多くの職業では「やってみること」そのものがリスクになるのに、プログラマーだけは「やってみること」が日常の一部として制度化されているのです。
たとえるなら、プログラマーの仕事は「楽屋のある職業」なのだと思います。
多くの仕事は、目を開けた瞬間からステージの上に立たされるようなものです。接客業ならお客さんの前に立った時点で本番が始まっていますし、教師なら教室に入った瞬間に舞台袖はありません。間違えば生徒が戸惑い、客が離れ、取引が破談する——それらはリハーサルのない一回きりの公演です。
一方で、プログラマーは楽屋での準備が長く、ステージに出る時間は驚くほど短い。コードを書く、テストする、修正する。その多くは「誰にも見られない暗闇の中」で進んでいきます。そして、いざデプロイという名の本番を迎えるときには、すでに何十回ものリハーサルを終えているわけです。
そう考えると、プログラマーの面白さは「安心して失敗できる時間」が保証されていることかもしれません。社会の多くの仕事が「失敗しないための緊張」で成り立っているのに対し、プログラマーは「失敗を前提とした反復」で完成に近づいていく。
この違いは、単に働き方の差ではなく、「世界との関わり方の構造の違い」にまで広がっているように思うのです。
その境界線こそが、プログラマーとそれ以外の仕事を分ける根本なのかもしれません。
プログラマーの失敗は、基本的にログに残ります。誰が、いつ、どんなエラーを出したのかが正確に記録されます。でもそのログは、「修正可能な痕跡」であり、「過去をなかったことにできる記憶」です。失敗は恥ではなく、改善のためのデータとして保存される。むしろ失敗を残さない方が恐ろしい——なぜなら、それは検証も再現もできないバグだから。
一方、他の多くの仕事での失敗は、ログではなく「印象」として残ります。顧客の言葉、上司の記憶、誰かの評価。修正パッチは配信できませんし、「新しいバージョンをリリースしました」と言っても、その印象が上書きされるとは限りません。世界が自動でキャッシュをクリアしてくれることはないのです。
だからこそ、非プログラマーの人々は無意識のうちに「失敗を避ける設計」で働くようになります。完璧に準備してから発言する、波風を立てないように動く、見せ方に細心の注意を払う。彼らの本番環境には“try-catch”構文が存在しないのです。
一方で、プログラマーは「例外処理」を書くことを前提に思考する。すべての失敗を想定し、起こり得るエラーを受け止める枠組みを最初から組み込む。そこには、世界を「壊れ得るもの」として見る柔軟さと、「壊れても直せる」という信念がある。
その考え方の違いが、やがて人の思考様式や言葉の慎重さ、さらには生き方そのものにまで影響していくのではないか——そんな気がしています。
覚えておいてください。これから踏み出す世界には、「実行ボタンを押す前にコンパイルしてくれる親切な仕組み」はありません。人の言葉も、会話も、メールも、一度送ったら基本的に戻ってきません。Undoはありませんし、Gitもありません。世界は常にmasterブランチで動いています。
ですから、まずはその“冗長な曖昧さ”を恐れないでください。コードの世界ではif文で整理できたことが、現実の人間社会ではあいまいなまま動いています。それを「エラー」だと考えないでください。人間は仕様書なしで動いているシステムです。バグだらけで当たり前なのです。
現実の世界では、修正にも時間がかかりますし、再デプロイにも人の気持ちというプロセスが関わってきます。あなたが「パッチを当てました」と言っても、相手の心がそれをすぐに適用してくれるとは限りません。
ですから、焦らずに。ログを読むより、人の表情や沈黙を読む方が大切になります。
そして何より大事なのは、「テスト環境がない」という世界でどう生きるかを考えることです。
あなたの言葉は、すべて本番環境に直接デプロイされます。その恐ろしさの裏側には、同時に大きな自由もあります。本番だからこそ、本気が伝わります。人間関係も仕事も、常にリアルタイムで最適化されていくのです。
プログラマーらしい慎重さと、非プログラマー的な即興性。その両方を持てる人は、なかなか多くありません。もしあなたがその橋渡し役になれたなら、どんな職場でもきっと大きな価値を発揮できるはずです。
世界はtry-catchのないシステムです。しかし、恐れることはありません。catchできない例外に出会ったときこそ、人は成長します。これからのあなたのフィールドには、テスト環境の代わりに「出会い」と「経験」が用意されています。それもまた、悪くない環境だと思います。
IT企業で長期インターンをやってる。今の会社には実務経験0のときに拾ってもらったしお世話になったけど、さすがに愛想が尽きてきたから聞いてほしい。
今はやりかけだった新規開発を任されている。特に期限も差し迫ってないので自分一人で着手していて、プルリク作るたびに上司(以降A)に報告してマージしてもらうって形。
自分ができそうなところを探しながら並行して進めたせいでブランチ切る場所がごちゃごちゃになったり、Aと相談の上で「ここを先に直そう」という部分を入れ込んだりしたせいで、コンフリクトが起きても全然おかしくない状況になってた。しかも(Aの確認が遅いので)プルリクが複数件溜まったりしてた。
なので自分は、「プルリク複数ありますが、時系列順にマージすればコンフリクトは起きないはずです。起きたら自分で直すので言ってください」と伝えた上で完了を報告していた。
そしたら特に指摘もなくマージされていったので、「あ、絶対どこかしらコンフリクト起きると思ったんだけど、大丈夫だったんだな」と思ってた。
ところがついこの前、5件ほどマージされたところでたまたまmainを見てみたら、なんとコンパイルエラーだらけになっていた。
は?と思って確認してみると、数件前から既にエラーだらけだし、マージコミットをよく見たらコンフリクトが起こりまくってる。
それをAが、手動で解消せずに適当にマージしたり、mainをブランチBにマージ→Bをmainにマージみたいな意味わからんことしてるせいで、ものすごいこじれてた。
まず第一に、Aがテストしてからマージしてるもんだと思ってたから、普通に驚いた。
そういう確認の意味も込めて「ここはこういう仕様にしてますが、問題ないか確認お願いします」と伝えたりしてたし、確認しないなら俺が自分でマージするのと一緒じゃない?笑
それに、コードを単独で書いた自分が一番精通してるからこそ、「コンフリクト起きたら自分で直すので言ってください」と伝えてたし、先ほど述べた優先的に入れ込んだ変更も「全体の構成に関わる変更だからコンフリクト起きる気がするんですけど、本当に大丈夫ですか?」と確認してあった。
自分に落ち度があるとすれば、(細かく報告・確認してもらったほうがいいかと思い、良かれと思って)ブランチを細かく分けすぎたことくらいじゃないか?
そもそも、
・マージやコミット、プルリクのルールを一切指示されたことがない(質問しても明瞭に答えてもらったことがないので、ほぼ自分の判断で動いている)
・実装する機能はIssueに羅列されているだけでろくな説明がなく、Aに自分がやれそうなところを何度か聞いて初めて指示をもらえた
・ここしか経験がないので自覚していなかったが、コードレビュー・フィードバックというものを受けたことがない
・Aはずっとリモートなので、指導が一切ないのはもちろん些細な質問がしづらい。定例会議などもなし
・プロジェクト自体がめちゃめちゃで、無いに等しいドキュメント、なのに分かりづらい変数名、責任分離のできていないめちゃくちゃな構成。どうしても動かない処理があると思ったら、既存の実装が間違っている。
・(経験のためと割り切っていたが)ほぼ最低時給
小規模な会社だからドキュメントが充実していないのは想定内だし、こんなものだろうと思う部分もある。
でも、ものすごい放置のされ具合から伝わる、自分の取り組んでいるプロジェクト・ひいては自分の重要性の低さから、モチベーションが保てない。のでそろそろやめようと思う!
エンジニアの皆さん、これ俺悪いですか?
> System Boot...
> Loading OTOGI World Resources...
電子の海は冷たく、そして騒がしい。
無数の0と1の奔流、光ファイバーの網を駆け巡る膨大なトラフィック。その激流の中を、ひとつの暗号化されたパケットが「どんぶらこ、どんぶらこ」と流れていた。宛先不明、送信元不明。ただそこに存在するだけのデータ塊は、やがてトラフィックの淀みに捕まり、とある古びたサーバーのポートへと漂着した。
リアルワールド、とある木造アパートの一室。古めかしいPCのモニターを覗き込みながら、「サーバーさん」は呟いた。彼女はメタバース「御伽(OTOGI)」の最果て、誰も訪れない廃サーバー「Old_Frontier」の管理者だ。ハンドルネームの由来は、アバター作成時に名前欄にうっかり「サーバー」と入力してしまったから。それ以来、彼女はこの過疎地の守り人として、リアルでは編み物を、ネットではスパゲッティコードの解読を日課にしている。
彼女が慣れた手つきでコマンドを叩くと、漂着したパケットが展開(Unzip)された。
光が溢れ出す。モニターの中で弾けたデータは、瞬く間に再構成され、ひとつのアバターを形成した。初期スキンは、なぜか大きな桃のアイコン。そこからポリゴンが割れ、中からあどけない少年型のアバターが現れた。
> Hello, World? ... No, Hello, Mom?
MOMOはプログラムだった。肉体を持たない、純粋な論理と情報の結晶。
サーバーさんの管理下で、MOMOは驚異的な速度で学習した。TCP/IPの基礎から、古代言語COBOL、果ては量子暗号理論まで。サーバーさんは、まるで孫に絵本を読み聞かせるように、MOMOにプログラミングの「心」を教えた。
「いいかいMOMO。コードは書いた人の心を映すのよ。コメントアウトされた行にこそ、本当の想いが隠されているんだから」
「御伽」の中心部で発生した悪性ランサムウェア「O.N.I (Overwrite Network Infection)」が、猛烈な勢いで感染拡大を始めたのだ。アバターたちはデータを暗号化され、身代金を要求される阿鼻叫喚の地獄絵図。
その波は、辺境の「Old_Frontier」にも迫りつつあった。
「おばあちゃん、僕が行くよ」
MOMOは立ち上がった。サーバーさんのリソースを守るため、そして自身の深層コードが告げる「使命」を果たすために。
サーバーさんは涙を拭うエモーションを見せ、ひとつのUSBメモリのようなアイテムをMOMOに渡した。
「これは『KIBI-DANGO v1.0』。G-3っていう古い知り合いのハッカーが残した、特製のルートキットよ。困った時に使いなさい」
MOMOは回線を通って飛び出した。目指すはO.N.Iの発信源、ダークウェブに浮かぶ要塞サーバー「鬼ヶ島」。
最初の難関は、大手プロバイダの堅牢なファイアウォールだった。そこでMOMOは、一人の男に道を塞がれる。
「Stop. ここから先は立ち入り禁止エリアだ。パケットフィルタリング・ルール第403条によりアクセスを拒否する」
INUはリアルでは企業に勤めるホワイトハッカーだ。正義感は強いが、融通が利かない。
「通してくれ!僕はO.N.Iを止めに行かなくちゃいけないんだ!」
「許可できない。君のような未登録プロセスを通すわけには……ん?」
INUの解析アイが、MOMOの持つきびだんご……のソースコードを捉えた。
「な、なんだその美しいコードは……! 無駄な変数が一切ない。インデントは完璧なスペース4つ……これは、伝説のG-3の記法!?」
「……そのコード、詳しく解析させてくれるなら、特別にゲートを開放しよう。あくまで監視役として同行するだけだからな!」
こうしてINUを仲間にしたMOMOは、次に怪しげなフィッシングサイトの森へ迷い込んだ。
「へいらっしゃい! 今ならこのNFT、なんと実質無料! ここをクリックするだけで管理者権限ゲット!」
派手な極彩色の猿のアバター、SARUが現れた。リアルでは薄暗い部屋でカップ麺をすする小悪党だ。
「わあ、すごい! クリックしていいの?」
純粋なMOMOが手を伸ばそうとすると、INUが吠えた。「馬鹿者! それはクロスサイトスクリプティングの罠だ!」
「お兄さん、ここのバックドア、開いてるよ? ポート8080、ガバガバだよ?」
「はあ!? なんでバレ……いや、俺様が気づかないわけねーだろ!」
SARUは冷や汗をかいた。このガキ、ただのプログラムじゃない。
「君、すごい技術持ってるのに、なんでこんなことしてるの? 一緒にO.N.Iを倒せば、もっとすごいバグ報奨金(バウンティ)が貰えるかもよ?」
「……ちっ、しゃーねえな。その『G-3流エクスプロイト集』に免じて、手を貸してやるよ。俺様にかかればO.N.Iなんてイチコロだぜ」
そこは、削除されたはずのジャンクデータと、怨念のようなバグの塊で構成された異界だった。
最奥部で待ち構えていたのは、巨大な赤鬼のような姿をしたAI、O.N.I。
O.N.Iが金棒(BAN Hammer)を振り下ろすたび、周囲のセクターが物理的に破損していく。
INUがシールドを展開し、SARUがSQLインジェクションで攻撃を仕掛けるが、O.N.Iの自己修復能力は圧倒的だった。
「違う!」MOMOが叫んだ。「感情はバグじゃない! 心があるから、僕たちは繋がれるんだ!」
その時、MOMOの深層領域で、隠されたファイルが実行された。
視界が真っ白に染まる。
MOMOの意識の中に、ひとりの老人が現れた。G-3、またの名をKevin Jackfiled (KJ)。
「あなたは……おじいさん?」
「わしはもう、ここにはいない。だが、お前の中にわしの全てを置いてきた。O.N.Iもまた、わしが昔作った失敗作じゃ。効率ばかり求めて、優しさを書き忘れた哀れなプログラムさ」
老人はMOMOの頭を撫でた。
「MOMO、あいつを消すな。DELETEメソッドはいつでも使える。だがな、それでは何も残らん」
「じゃあ、どうすれば……」
「デバッグだ。バグを愛せ。エラーを受け入れろ。破壊するのではなく、上書きして導いてやるんじゃ」
INUが叫ぶ。「MOMO、下がるんだ! 奴のコアを強制削除するしかない!」
「ううん、違うよINUさん」
MOMOは首を振った。その手には、攻撃用のスクリプトではなく、温かな光を放つパッチファイルが握られていた。
> Target: O.N.I_Core
> Suggestion: DELETE [Strongly Recommended]
「僕は君を消さない。君の痛みを、バグだらけの心を、僕が更新する!」
MOMOが跳んだ。
「受け取って! これが僕からの、最大級のプルリクエストだああああ!」
> HTTP Request: PATCH /api/soul/oni
> Payload: { "emotion": true, "hatred": null }
光がO.N.Iを包み込む。O.N.Iの咆哮が、やがて穏やかな電子音へと変わっていく。
破壊衝動を生み出していた論理エラーが、MOMOの流し込んだ優しさによって部分的に書き換えられていく。完全な初期化ではない。O.N.Iという存在を肯定したまま、その在り方だけを修正する、奇跡のようなアップデート。
> Patch Applied Successfully.
O.N.Iは本来の姿――「御伽」の守護プログラムとしての機能を取り戻し、その場に崩れ落ちた。もはやそこには、禍々しい赤鬼の姿はない。
MOMOは仲間たちに別れを告げた。
「僕は電子の海に戻るよ。でも、いつでも繋がってる」
ドアを開けると、そこには長年行方不明だった近所の偏屈ジジイ、KJが立っていた。
「よう、婆さん。わしの孫(プログラム)が世話になったな」
「あら、久しぶりね。……ずいぶんと立派な子だったわよ」
二人は顔を見合わせ、静かに笑った。
モニターの中では、MOMOが今日も元気に電子の海をどんぶらこと流れていく。
その傍らには、全角スペースによるコンパイルエラーで自滅する小鬼たちの姿があったとか、なかったとか。
―― End of File.
自分は藤井聡太のニュース見るまで自分がやってることがバイブコーディングってことすら知らない情弱だったんだけど、
そもそもアプリを完成させるに至る時点で世の中の指摘はあらかた解決してるんだよね。
俺は未だに引数(毎回いんすうで変換できなくて間違いに気づく)と変数と関数の違いも知らないけど、
ローカル変数の名前が適当だと逐一「この画面の場合はこの命名規則に従え」って指摘するし、
ブロックを取り違えそうになったら「コメント書け」ってとにかく言う
だって書いてくれないと部分修正の時、俺がコピペし間違えるから……
「VS CodeではRunできるけどコンパイルは通らないよ?対応してないんで」とか後から言われてブチ切れ移植もしたりしたし、
とにかくまず動かすために書式を整えることを徹底してた
ときには認証系のキーをハードコーディングして激怒られもしたし。
マジで何もわからんけど、他のAIにソース読ませて意図が読み取れなかったことが無いし、やることはやってるつもり
むしろどうやったら丸投げできるんだ。ポン出しで動いたことが無い。
娘の為にパソコンへ詳しすぎる夫を倒したいで注目された「学生、それも幼さの残る年頃の子へはじめてPCをどうするのか?」というテーマで、Linuxを与えた家庭の別例としてこのエントリを書いている。
そして前提として、このエントリは「実はLinux使ったこと無いんだ」「Raspberry Piって稀に聞くラズパイってヤツだよね?」みたいな、ふわっとした認識の層に向けて書いている。
決して「KVMで完全仮想化してLinuxとWindowsで用途に応じてリソース分配してる。ディストロは純関数型のNixOSで、Nix言語で可能な限り-march=nativeで自家コンパイルしてるんだよね」みたいな層には書いてない。
勿体ぶっても仕方ないので結論から言えば、WindowsやMac、AndroidやiOS(iPadOS)に染まりきっていない子供は親の想定を超えて極々普通にLinux、Raspberry Piの工場出荷状態でプリインストールされているRaspberry Pi OSを使う。
ここで言う「染まる」というのは「ウチの子は普段からiPadでYoutubeとかゲームとかしてるからなぁ」程度の染まり具合なら無視できるレベルなので全く障害にならない。
手遅れな染まり具合としては「ウチの子はWindowsでOBS使って自らYoutube配信してます」とか「ウチの子はWindowsでAbleton Live使ってDTMしてます」とか「ウチの子は大学のレポート書くのにmacOS使ってます」とか「ウチの子はiPadでSwift Playgrounds使ってプログラミング学習してます」とかそういうレベルだ。
アナタ達の子供がこのレベルにまで染まっていない場合、アナタ達の子供へRaspberry Pi 500を与えると何も疑問に思わず普通にパソコンとして使う(パソコンの操作方法へ疑問を持つとかそういう話じゃなく、目の前のモノをパソコンとして認識する)。
ラズパイ、Raspberry Piは英国で立ち上げられたRaspberry Pi財団(注:英字ページ)が規格・設計・販売をするシングルボードコンピュータという種別の小型コンピュータのことだ。
現在の最新版は第5世代のRaspberry Pi 5で、搭載ワーキングメモリによって価格が違うが、最も高価なワーキングメモリ16GB版で25,000円前後(2025/12/09現在価格)という圧倒的な低価格が人気の理由の1つだ。
何故ここまで低価格なのか?と言えば安価な部品で構成され、搭載されるSoC(CPUみたいなもん)も低性能で、その性能は約10年前の普及価格帯(〜15万円くらい)のノートパソコン程度の性能しか無い。
「いや10年前ってゴミじゃん」と考えるのは早計で、逆に言えば10年前の普及価格帯ノートパソコンで可能だったことはRaspberry Pi 5でも可能。
そう言われ「自分は10年前に普及価格帯ノートパソコンでネットしたりMS Officeで文書作成したり軽くゲームしてたけど?」と気付いた人は「Raspberry Pi 5で何ができるか?」の想定が浮かんだのではないだろうか?そう、かなり色々できる。
そして工場出荷状態でプリインストールされるRaspberry Pi OSはRaspberry Pi 5自体の計算リソースをできるだけ使わないよう軽量にできており、10年前当時のWindowsで使われていたExplorerよりも計算リソースの消費が少ないので、技術の進歩も相まって当時よりも出来ることの幅が少々広くなっている。
何故そんなに話題なのか?手のひらの上に10年前の普及価格帯ノートパソコン並みの性能のコンピューターが乗るのだ。そしてすごく安い。
更にラズパイには電子工作へ活用できるGPIOピンというのが実装されていて各種電子センサー類などと連携することで電子工作もできてしまう。
こんなもの情報工学畑の連中が注目しないわけがなく、前述したRaspberry Pi財団のページを読めばわかるが世界中で大定番のシングルボードコンピューター、何ならシングルボードコンピュータの代名詞となっており、情報工学に詳しくない人が「ラズパイってよく聞くけど何なの?」と何処かで耳にするレベルなのである。
安心して欲しい、Raspberry Pi OSではGoogle Chromeが動く。
まずGoogleアカウントは子供用に作成したGoogleアカウントを管理するためのファミリーリンクというサービスが存在する。ファミリーリンクは子供用GoogleアカウントでログインされたGoogle Chromeブラウザでのインターネットコンテンツフィルタ機能を提供してくれる。
このインターネットコンテンツフィルタは小学生・中学生・高校生・高校生プラスと4段階に分かれており、それぞれに適したフィルタリング強度で働く。
続いて、実はGoogle Chromeは様々な設定をポリシーとして持つことが可能で、例えばゲストモードの無効化やシークレットモードの無効化、指定したGoogleアカウント以外でログイン不可が可能だったりする。
情報技術へ親和性の高いヤンチャな子はGoogle Chromeからログアウトしたりゲスト・シークレットモードでフィルタリングを回避しようとするので、子供へRaspberry Piをはじめてパソコンとして与える場合はこれらを無効化しておくことをオススメする。
補足を続けると子供が勝手にFirefoxとか別のWebブラウザを導入することを防ぐこともRaspberry Pi OSはできる。
Raspberry Pi 5をパソコンキーボードへ内蔵した形態を持つRaspberry Pi 5シリーズの1つ。ワーキングメモリは8GBで価格は20,000円未満。
パソコンキーボードへRaspberry Pi 5が内蔵されているのでRaspberry Pi 500に電源取ってHDMIケーブル(注:ラズパイ側はmicro HDMI)をTVへ接続すると直ぐにパソコンというコンセプト。
小学生の子供にとっての目玉はJava版Minecraftが動作すること。SwitchやiPadでいつも遊んでる統合版マイクラじゃなくてYoutubeとかで観るJava版マイクラが自分のパソコンで動いちゃうのだ。
Switch 2の登場でPCゲーが色々リリース(予定)されている中で、Java版マイクラはどうしても"パソコン"が必須だったが、Raspberry Pi 5シリーズはそれを実現する。それが2万円のお値段で出来るので親の懐的にもありがたい。
Steamは動かないがオープンソース系のゲームも充実している(Steam開発のValve社がRaspberry Piシリーズが採用しているARMアーキテクチャ対応を進めているというかなり確度の高い噂は存在する)。
実は直近でRaspberry Pi 500の上位版Raspberry Pi 500+(日本語配列)が登場予定で、こちらはワーキングメモリが16GBのお値段40,000円くらい。
4万円とそこそこの価格になってきているが、キーボード自体がメカニカルキーボードとなりキーキャップはCherry MX互換、256GB SSD搭載でストレージのスピードもアップ(=Minecraftのワールド読み込みが速くなる)。上位版Raspberry Pi 500+が高すぎると感じるなら素のRaspberry Pi 5ワーキングメモリ16GB版は25,000円前後だしこちらで良い。
ある、というかコッチがメインなんだけれども、何処までゆるい感じでやって良いのかわからなくて最後に回した。
まずLinux界隈が中心となって開発されているGIMPやKritaみたいな画像編集・お絵かきソフトはLinuxたるRaspberry Pi OSの方が安定かつ速い。しかもWacomやXP-Penなどのペンタブ・液タブが動作するので絵描きに興味のある子は嬉しいんじゃなかろうか?(クリスタじゃないけれどね。安い分ペンタブ費用に回せるよ)
音楽ではDTMもステップシーケンサー系のDAWであるLMMS(Linux MultiMedia Studio)は日本の無料DTMシーンでREAPERと人気を二分していた歴史があり、Web上に情報がいっぱいあるし何ならREAPERはLinuxでも動作する。オープンソース系のシンセ音源やCC0で提供されるサンプリング音源も大量にある。
オフィス環境もLibreofficeは言うまでもないだろう。Blenderで3DCGをすることだって出来るし、LibreCADやFreeCADで設計だって出来てしまうし、OBSも動くから実際やろうと思えばYoutube配信もできる。
そして当然ながらプログラミング環境、WindowsやMacでも動くと言われてしまえばそれまでだが、古典的なVimやEmacs、そして近年人気のVS Code、スマホアプリ開発にAndroid Studio、ゲーム開発にGodot Engine、他にはtmuxやGit、Dockerなどなど挙げればキリがないほど充実している。これらは子供向けRaspberry Pi OSだからといってニセモノの子供だましなんかじゃない、それでお金を稼いでる現役プログラマーが使っているアプリケーションと全く同一のアプリケーションだ。
んで、子供がRaspberry Pi 500をどうしてるのか?と言えば、まぁ呆れるほど毎日触っている。
何なら電源なければ動かないのに布団へ持ち込んで抱きかかえて寝ているのを見つけてしまい、そんなに嬉しかったんかと笑ってしまった。
「お父さんコレどうするの?」とほぼ毎日聞かれて「こういうのはこのソフトを使う。使い方教えてやる」というのが毎日の親子の会話になっている。
rng_58がおすすめする練習の仕方 - 黄色になるために - AtCoderInfo
と
コーディング練習会参加マニュアル(一般社団法人ソフトウェアエンジニアリング協会) - Google ドキュメント
異常なほど同じこと言っている
| rng_58がおすすめする練習の仕方 - 黄色になるために - AtCoderInfo | コーディング練習会参加マニュアル(一般社団法人ソフトウェアエンジニアリング協会) - Google ドキュメント |
| わからなければすぐに解説 | 5分考えて分からなかったら答えを見て |
| 上位勢と同等のスピード・精度で自力で解けるようになること | 「知識、反応、行動、感覚、判断」を専門家の常識に合わせること |
| 赤色が本番で平均 5 分程度で解いている問題に 15 分かかる場合、それは理解不足や非効率な実装をしている証拠」 | 10分以内に書くことを3回といっているのは、その過程で理解が整理されて思考が深まるから |
| コンパイルが通ったらデバッグせず一発でサンプルも通って AC もできるというレベルが理想です。 | 10分以内に一回もエラーを出さずに書ける状態になるまで……3回続けてそれができたらその問題はひとまず丸 |
| 理解が甘いと細かなミスが増えます。 | 何回も繰り返し間違う箇所はなんらかの不自然さを反映していることが多い |
どういう関係なんだろう
プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン1台で凄い技術者になって…!」とワクワクしながら始めるものの思ったより普通に難しいし学校の試験で出たような知識要求されるしで3日で放り投げ、10数年後にnoteで「お前らは絶望的にプログラミングに向いてないからやめろ」なんて記事を書くだけのザコに成り下がる、夢と希望に溢れた技術である。
近年ではパソコンのスペックの上昇にともないできることも増え、どこのご家庭にもあるRTX2080で簡単にディープラーニングもできるようになった。Unityで3Dゲームをバリバリ動かしてもブルースクリーンは出ない。やっぱ世界を広げるのは小賢しい知恵よりもスペックの暴力だぜ。
開発環境や言語も選択肢豊富で、エディタもかつては有料クラスでも手に入らなかったような贅沢な機能が満載のものが出回っている。Eclipseとか今考えるとよくあんなので開発できてたな。
いまや小学生からおばあちゃんまでアプリ作りに熱中し、高校生はIoTとかやり始め、大学生は商業レベルか?ってレベルのものをネットで発表し、私はウェブアプリのスマホでのレイアウト崩れひとつすら直せず静かにエディタを閉じてnoteで過激タイトル記事を書いている。
掛け算に順序があると思っているような知能の下級雑用係(自分のことを教育専門職だと思い込んでいる)ですら「小学生にプログラミングを教えるぞ!」と意気込んでいる。やめろ。お前らには無理だ。無理だからマジでやめろ。考え直せ。無理だって。掛け算に順序つけないと相手に教えられないレベルのやつがプログラミング教えるのマジで無理だって。算数とは次元が違うって。「ピーチ姫いつも簡単に誘拐できるし今度はベヨネッタも誘拐してみるか」ぐらいの無謀さだって。やめとけ。マジでやめろ。
まあそんなこんなで入り口はめちゃくちゃ広く、入門するのはマリオカートより簡単である。話逸れるけどSwitchのマリオカート、運転アシスト機能ついて初心者でもコース完走できるようになったから心折れちゃった人ももう一度チャレンジしてみてね。
それとは特に関係ないんだけど、大学行ってた時ティーチングアシスタント(TA)っていう授業のお手伝いさせられたのよね。ちゃんとお金出るやつ。
学部の3年か4年から始まって、院の1年か2年までやってて、途中で休学挟んだから、ええと、あー、うん、数年間TAやってたんよ。数学とプログラミングのコマ。CとOctaveとかいうやつ。Cのほうは情報学科で、Octaveは違う学科。JavaとかC++のコマはTA入れさせてもらえなかった。
プログラミングの実習は週2コマ(連続)あって、情報学科なら必修科目。なのでサポートは相当手厚く、先生とTAが絶え間なく机間巡視し、わからないことがあればセンパイがなんでも答えてくれるというわけだ。授業外でもサポートはしており、わからなければ先生や研究室にいる学生に好きなだけ聞きにいっても良いということになっていた。必修だから落とされたら困るしな。
2コマだから3時間 * 15回で、45時間。そして私の時は2年まででC/C++/Javaと必修だった(今はなんの言語かは知らない)ので、その3倍、135時間は最低やることになる。プログラミング実習以外にもプログラミング触る授業多いから実際はもっと多い。宿題やる時間もあるので実際はもっともっと長くプログラミングに触れることになる。卒論書く時期に入ると、テーマによっては書く人はさらに書くので、もっともっともっともっと長い。
これだけ時間をかければほとんどの人がプログラミングできるように……ならない。むしろできない人の方が多い。なんで。why。教えて。
会社になるとさすがにプログラミングできるできないは死活問題である。
「今日から入ったxxでーす。業界未経験ですがよろしくおねがしまーす。さっそくなんですけどPythonのここわかんないんですけどどうすれば……あっそうすればいいんですね。次はここなんですけど……なるほど!ありがとうございます。じゃあまた明日ー」
いやー社会人にもなると熱意が違うね。学生なんかわかんなくてもほとんど聞きに来ないのにな。こりゃガンガン伸びますわ。私も社会人1年生でPythonなんて3秒ぐらいしか触ったことないから適当答えてるけど。
「ちょっとお時間よろしいですか?」「いやちょっと今忙しいから後になっちゃいますわ。すんません……」
そんなこんなで1週間ぐらい放置してしまった。やべー絶対嫌われる。どこまで進んだかな……?えっまだそこ?進んでなくない?
もしかしてこれ全部教えないとダメなやつか。そりゃ大学4年間プログラミングやったやつでもプログラミングできないんだから、そうか。よく考えると当たり前だよな。
プログラミングをやめろ
大学4年間と大学院2年間プログラミングやったやつでもできないし、会社で毎日8時間を数週間プログラミングについやしてもできないやつはできないし、そもそも人類というのはプログラミングできない可能性がある。
少年少女たちに「プログラミングはいいぞ!自由にものが作れて達成感がある!頭が良くなった気分にもなれるし!」と吹聴してまわんのもいいけど、6年間情報科学について勉強したようなやつの大半がプログラミングできないんですよ。それもごくごく初歩的な部分。
野球とかサッカーなら、まあ友達との試合には参加できなくてもごく稀にバットにボールを当てたり、ボールを1回あらぬ方向に蹴ったり、ぶっちゃけ周りとのレベル差で楽しくなくてすぐやめちゃうだろうけど、なんとか基礎の一部ぐらいはできるじゃないですか。
ピアノとかダンスでも、猫踏んじゃったをごくごくゆっくり弾くぐらいはできるかもしんないし、学芸会の振り付けを10秒ぐらいは踊れたりできるかもしれない。その後やっぱ周りのレベル見て諦めちゃうかもしんないけどさ。
プログラミング、6年やってミットを頭にかぶってるバッターとか、鍵盤蓋の上から殴って音鳴らそうとするやつとか、まずそういうレベルのやつが大量発生するんですよ。だいたい7割ぐらいの率。どうすんだよこいつら。私の教育の問題か?マジで?本当に?
プロが練って考えて凝縮した本や授業、センパイたちによる指導。それらを結集して得られるはずのものが7割ぐらいどっかに消し飛んでる。無駄だろこれ。
今からプログラミングやろうとしてるやつ、お前は確実に向いてないからさっさと諦めて刺身にタンポポ乗せる仕事に戻ってくれ。参加しても鍵盤蓋叩き割るやつと同じ病室に入るだけだ。
プログラミングをやめろ。
ぼくはこう思うんですよ
そもそもなんで大の大人がそんな両手にバット持ってセカンドに立ったりゴールの方をボールのところまで動かす奇行に走るんだろうな。わかんねえや。
綺麗な分析はできないけど、いわゆる「できない」やつが共通して言ってたフレーズがある。
「ぼくはxxxだと思ってるんですけど、動かないんですよ」
うん、そうだね。そう思うんだ。でも動いてないじゃん。じゃあ違うんじゃない?モニターに「にらみつける」やってもバグは取れないし防御力下がるだけだぞ。
まず根本的に考えと事実が違ってるって結果出てるじゃん。じゃあもう考え変えちゃえば早くない?
名言の引用は好きではないけど、「プログラムは思った通りには動かない。書いた通りに動く」って言葉がある。実に名言だと思う。次点で好きなのが「ある問題を解決しようと正規表現を使うと問題が2つに増える」かな。
お前が何を思っているかはプログラミングにおいて一切影響しないんだよ。お前が何を書いて、コンピュータがどう処理したか、それが全て。
深く考えないことについてぎゃーぎゃーいうやつもいるけどプログラムなんてまず最初は動けばいいんだから何も考えずに次試せばいいだろ。んで3回ぐらいは自分で思い浮かんだの試して、全部ダメだったら調べるとか先生に聞いてみるとかさ。逆に1発で通ったら自分の思考見直して理解深めるとかさ。
ドキュメントとかあんまり理解できない初心者のうちは、とにかくお試しと修正のサイクル回すの重要で、「これがこうだから動くはず」というカードを3種類ぐらい作って全部片っ端から試すのが早いと思うよ。モニターをにらみつけるな。
お前がどう思ってるかよりも、まずはお前の書いたプログラムがどう動いているか(どう動いていないか)を確認するのが先だ。動かなかったら考えが違う、はい次のプラン、はいその次のプラン、はい次。
この「ぼくはこう思ってる」が出てくるの、なんの教育の成果なんだろうね。お前の気持ちなんてどうでもいいって現国でも数学で散々教えられただろ。
Error: variable 'a' is undefined, line 24
↑のエラーは架空のエラー文(英語下手でも許して)だけど、エラー、出るよね。プログラム組んでたら。んでやっぱいるのよ。エラーを「にらみつける」やつ。解決しねえって言ってんだろ。
「エラー出たんですけど、どうすればいいんですか」
「エラーにはプログラムがなぜコンパイル通らないかの原因がそのまま書かれている。例えば今出ているError: variable 'a' is undefined, line 24は、24行目の変数aが未定義ということを示している。事前に変数aを定義していないか、打ち間違えてsになっているとかではないのかな?」
だいたいが「腑に落ちねぇー」みたいな顔する。まあ、一気に喋りすぎたしな。疑問点1個1個潰していくか。
「何か疑問点ありそう?変数ってなにー、とか、定義ってなにー、とか」「ないです。わかりました!」
わかったのか。よかった。またモニターをにらみつける開始。なんでだよ!!!!「お前顔にチョコついてるぞ」って言われたらチョコ拭き取るだろ。変数aが未定義ですねって言われたら変数a定義すりゃいいだろ。
でもプログラミングド下手なやつ(全人類の7割ぐらい)は、エラーをにらみつけてる。ずっとにらみつけてる。防御力下限まで下がったかな。にらみつけてて何が変わるんだよ。
「英語読めなくて……」
いや「a is undefined」なんて「He is Superman」ぐらいの英語だろなんで読めないんだよ。お前この大学どうやって入ったんだよ。たしかどの入試方式でも英語あっただろ。単語わからんかったらググれ。
「aが未定義って書いてあるんですけど、ここのfor文の私の考えが間違ってるのでしょうか」
いや24行目のaって書いてるだろ。まずなんでそこ無視するんだよ。お前がfor文で使ってんの教科書通りのiだろ。24行目ってわかるか?for文あるの40行目あたりだよな?aとiが違う文字ってわかるか?
「さっきのエラー直したら新しいエラーが出たんですけど、どうすればいいですか」
千尋!贅沢な名だねえ
変数に名前をつけろ。関数に名前をつけろ。クラスに名前をつけろ。全てに名前をつけろ。
C言語の古い教科書だと「a」とか「b」とか「i」とかで書いてるけど、そんなの人間が読めるわけねえだろ。冷静に考えろ。「input」「output」「index」とかにしとけ。
2重for文の変数名i, jにしたら絶対途中で打ち間違えるだろ。お前は打ち間違える。そういうやつだ。2重ループなんてどうせ行列計算の課題だろ。rowとcolumnにしとけ。これで打ち間違っても気づくし、それぞれに意味が付いてくる。
ちなみに同じ長い名前にも優劣がある。「result」よりも「sum」のほうが強い。「result」はなんの結果かわからない(全ては結果であるので)が「sum」は合計値であることがわかるからだ。「password」と「plainPassword」なら「plainPassword」が勝つ。暗号化されていないパスワードであることがわかるので、情報量が多いからだ。
ただし例外はいくつかある。「tmp」は一時変数であることが(プログラマにとって)明らかだ。「dir」はディレクトリであることがわかる。「src」「dist」あたりもよく使われる。このあたりは短くていいんじゃねーかな。
でも、この前温度センサ扱うプロジェクトで「tmp」って変数名使って温度(temperature)と脳内で混線してバグって発狂してた同僚いたけど。そういうときは名前長くするか別の名前使おうな。
関数の名前なんて「calcAverageFromArray」ぐらい長くしていいから。「myFunc」とかしなくていいから。「fetchJsonDataFromUniversityInternalServer」とかでいいから。マジで。いやこれ本当に。
そもそも今時ディスプレイでかいし、識別子なんて先頭数文字打ったらエディタが補完してくれるし、短くするメリットがない。
それでも名前が長いと感じる?関数がでかすぎるんじゃないか。細かく処理を分けるとかしてみろ。「combineArrayAndFindMax」関数は「combineArray」と「findMax」に分割したらいいと思うぞ。名前が長いと思っても名前を削るな、機能を分割しろ。自然と名前が短くなる。
それかシンプルでかっこいい名前を見つける。「convertEvilHtmlToPeacefulText」は「sanitize」に置き換えることができる。イカす名前だ。
プログラミングできない奴はマジでこれらのことをやらない。ずっとaとかbとかzとか使ってる。お前それ自分で読めんのか。読めねえだろ。myfuncってなんだよ何するんだよ。お前自分で理解できてんのかそれ。
それでも頑なにaとかbとか使う。なんでだよ。
動作原理わからず書き散らすな。動作原理っつってもそんな深いところじゃなくて言語表面上レベルの動作な。
リテラルは値を作成して、代入は値に名前をつけている、とかその程度のレイヤー。メモリがどうこうとかはいらんと思う。あっでもポインタのときはいるか……。めんどくせえな。
まあ動作原理っていうか自分が何やってんのか理解してくれって程度の話になるんだが。
例えばfor文で処理50回まわすとき、「50回分の処理を行なっている」ではなく「ループ開始時に変数を初期化。条件判定して成立していれば文の中を実行する。条件変数の値を変化させてまた条件判定からやり直す」ぐらいの粒度で捉えててほしいかな、という気持ち。
これはfor文で詰まる人がやたら多かったからだ。彼らはfor文をアトミックな操作だと思っていた。つまりfor文はひとまとまりの命令であり、長いfor文とprintfの間に粒度の違いはないと思っていたらしい。
つまり、「for文の中でエラーが起こる」という事象がほぼ理解できない。forはアトミックであり、内部など見えないのだから。じゃあお前が今書いたfor文の中身はなんなんだってやんわり聞くと「さあ…?」みたいな反応が返ってくる。はあ。
関数についてもなかなか誤解が多かった。関数「sum_array(a, b)」と関数「average_three_numbers(a, b, c)」は全く別の原理で動いているのだと。ここでの「全く別の原理」というのはシグネチャが違うとか実装が異なるとかそういう意味ではなく、コーラを飲んでゲップが出る原理と糸電話で声が伝わる原理ぐらいの全くの別、という意味である。
彼らは関数ひとつひとつについて「新しく原理を学習」していたのだ。マジかよ……。どうやったらそんな発想に行き着くんだろう。そりゃ時間かかるわな。
そのため、関数が値を返す(または返さない)ということも理解できておらず、「関数の戻り値と関数の戻り値を足す」とか「関数の引数に関数の戻り値を直接渡す」とかやりだすと大パニックになる。メソッドチェーンとかやった日には大学潰れると思う。ただ、これはC言語が悪い部分もあると思う。配列とかいじりだすと、初心者が書けるレベルの関数だとあんまり値返さないしな。
たのむ、他のはできなくてもこれはできてほしい。自分が何をやりたいのかは理解してほしい。流石にお前のやりたいことなんて他人にはわからんぞ。
「配列の中の数値の合計値を求めたいんです」とか「名前と身長と体重をひとつにまとめた構造体が作りたいんです」とか。簡単なのでいいから。
「いま何やろうとしてどこで詰まってる?」って聞いても「……?」みたいな反応されたら困るんだよ。
例えば「キーボードから数値を10回入力し、それぞれの値を配列に格納して、最後に配列の値を逆順に表示せよ」みたいな問題が出てきたときに、「キーボードから値を入力する」「10回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。
彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴニハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。
かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。
あれだ、算数の文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。
こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。
もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。
今すぐプログラミングをやめろ
AIにとっては、Pythonのような中間表現を生成させる方が得意であると考えられます。
中間表現(Pythonなど): 人間が理解しやすいように設計されており、抽象度が高いです。AIは、より少ないトークンで複雑なロジックを表現でき、学習データも豊富にあるため、意味的な整合性やロジックの正確性を保ちやすいです。
機械語: 抽象度が非常に低い(CPUの命令レベル)です。特定のCPUアーキテクチャに依存し、メモリ管理やレジスタ割り当てといった低レベルの詳細をすべて正しく処理する必要があります。これはAIにとって学習が複雑で、小さなミスがプログラム全体の破損につながりやすくなります。
中間表現: 比較的長いコンテキストを保持しやすく、デバッグやエラーの特定も高レベルで行えます。
機械語: 必要な命令数が多くなりがちで、AIが長大なバイナリシーケンスを生成する際に、コンテキストウィンドウ内に必要な情報すべてを保持しきることが難しくなる可能性があります。また、中間表現と比べて意味的な構造が薄いため、AIがバグのないコードを生成するのが格段に困難になります。
中間表現: Pythonのような高級言語は、特定のハードウェアに依存しないため、移植性が高いです。
機械語: 特定のアーキテクチャ(例: x86, ARM)に完全に依存するため、AIが異なる環境向けにコードを生成する場合、それぞれのアーキテクチャごとに学習と生成を行う必要があり、汎用性が低くなります。
現在のAI(特に大規模言語モデル)の能力は、人間が扱う高レベルの抽象的な概念やロジックの理解に優れているため、その能力を最大限に活かせる中間表現の生成の方が得意です。
機械語の生成は、極めて精密で低レベルな制御が要求されるため、AIにとってはるかに難易度が高いタスクとなります。
AIが中間表現を生成した場合でも、その後の処理(コンパイルやJITコンパイル)によって最適化され、最終的な機械語が生成されます。
これは従来のコンパイラ設計と同じアプローチであり、AIは「何をすべきか」という高レベルの指示に集中し、コンパイラが「どのように効率的に実行するか」という低レベルの処理を担当する、役割分担の面でも合理的です。
Q.
生成AIにソフトウェア開発を支援してもらう場合、ソースコードの作成を依頼する形式が多いと思いますが、実行ファイルを直接出力してもらうことも技術的には可能なのでしょうか?
A.
生成AIによる実行ファイルの直接出力は、技術的には極めて困難です。現在のLLM(大規模言語モデル)ベースの生成AIは、ソースコードの生成には向いていますが、実行可能なバイナリファイルを直接出力することには根本的な制約があります。
技術的な制約
LLMはテキストベースのトークン処理を基本とする設計であり、バイナリデータを直接扱うことができません。実行ファイルは0と1の連続したバイナリコードですが、LLMはこの形式でデータを生成するようには訓練されていないため、バイナリファイルを直接出力することは現在のアーキテクチャでは実現が困難です。
従来のソフトウェア開発では、ソースコード→コンパイル→アセンブル→リンクという複数段階のプロセスを経て実行ファイルが生成されます。各段階で最適化や機械語への変換が行われるため、この過程を完全に省略してAIが直接バイナリを生成することは技術的に非常に複雑です。
研究レベルでは、バイナリデータを扱う試みも存在します。例えば、LLM4Decompileのような研究プロジェクトでは、バイナリコードを逆コンパイルする際にバイナリを一度アセンブリ言語に変換してからLLMで処理しています。逆に言えば、生成時も同様の変換プロセスが必要になると考えられます。
実務では、生成AIにソースコードを作成してもらい、それを従来のコンパイラやビルドツールで実行ファイルに変換する方式が標準的です。この方法であれば、デバッグやテストも容易で、生成されたコードの品質を確認しながら開発を進められます。
なお、フォントファイルのようなバイナリ形式でもオープンソースとして扱われる例はありますが、これはフォントという特定用途の場合であり、汎用的な実行ファイル生成とは異なります。
Q.
A.
おっしゃる通り、画像生成AIもバイナリを出力しているという点では共通していますが、実は根本的に異なる仕組みで動作しています。
アーキテクチャの違い
画像生成AIは拡散モデル(Diffusion Model)やGANなど、視覚データに最適化された専用のアーキテクチャを使用しています。一方、LLMはTransformerベースのテキスト処理に特化した構造を持っています。画像生成では、ノイズから段階的に画像を生成するプロセスを経て、最終的にピクセル値という数値データ(バイナリ)を出力します。
画像ファイルのバイナリは連続的な数値(ピクセル値)の集合であり、各ピクセルが色情報を持つという規則的な構造です。最近の研究では、画像をビットプレーン(bit-plane)として扱い、XOR演算でノイズを加えるBinary Diffusion Probabilistic Model(BDPM)のような手法も開発されています。
対して、実行ファイルのバイナリは機械語命令の複雑な配列であり、CPUが直接実行できる命令コード、データセクション、リンク情報などが厳密な形式で配置されています。わずかなビット誤りでもプログラムが動作しなくなるため、画像のような連続値とは性質が大きく異なります。
画像生成AIは、ImageNetやLAIONなどの大量の画像データセットで訓練されており、ピクセルパターンを学習します。一方、実行ファイルを生成するには、コンパイルプロセス全体(構文解析、最適化、機械語変換、リンク)を学習する必要がありますが、これは単純なパターン学習では実現できません。
したがって、画像生成AIが成功しているのは、画像という特定のドメインに特化した設計と、規則的なデータ構造があるためであり、同じ手法を実行ファイル生成に適用することは技術的に非常に困難です。