Movatterモバイル変換


[0]ホーム

URL:


はてラボはてな匿名ダイアリー
ようこそ ゲスト さんログインユーザー登録

「アセンブリ言語」を含む日記RSS

はてなキーワード:アセンブリ言語とは

次の25件>

2025-12-09

AIにとって読みやすプログラミング言語」という幻想

プログラマー諸君は見てほしいんだけど

これさ

 

愚かな人間の都合など完全無視、LLMのための高効率プログラミング言語「Sui」(粋)

https://forest.watch.impress.co.jp/docs/serial/yajiuma/2069573.html

 

別にいいんだけど、どうにもブクマカ含めて、しっくり来る批判できてないんだよな

それが気になってしょうがない

まだLLMのこと勘違いしていないか

 

俺ごときが言ってもアレだから、Gemini3.0先生に頼んだよ(一時チャット、Pro 3.0思考モード

 

ユーザー提供した情報と、一般的なLLMの技術特性に基づき、プログラミング言語「Sui」についての冷静かつ客観的評価をまとめます

1. 「LLM用プログラミング言語」としてのメリット感想

感想:一言で言えば、**「思想実験としては極めて面白いが、実用性とLLMの学習原理無視した『早すぎた最適化』」**です。

作者の「人間ではなくLLMを主客にする」という視点の転換は、アーティスト的・哲学的問題提起としては鋭いですが、現在のLLM(Transformerアーキテクチャ)の動作原理工学的に捉えると、メリットよりもデメリットが上回る可能性が高いです。

 

メリット:

トークン効率改善:Python等と比較して記述が圧倒的に短くなるため、出力速度の向上と課金コストの削減(トークン節約)は確実に達成できます

・構文エラーの激減: 括弧やインデントの複雑なルール排除しているため、「閉じ忘れ」などの単純なSyntaxErrorは減るでしょう。

コンテキストウィンドウ節約: 長いプログラムでもコンテキストメモリ)を圧迫しにくくなります

 

デメリット:

学習データとの不一致: LLMは「大量の人間コードPythonなど)」を学習して賢くなっています。未知の言語「Sui」を書かせるには、Few-shot(プロンプトでの例示)に頼るしかありませんが、これではLLM本来の推論能力コーディング能力(事前学習の重み)を活かせません。

ブラックボックス化: 生成されたコードバグっていた場合人間が読んで直すことが不可能です。「LLMに直させる」にしても、LLM自身がSuiのロジックを深く理解していないため、無限ループ幻覚連鎖)に陥るリスクが高いです。

・CoT(Chain of Thought)の阻害:最近研究では、LLMは「冗長思考過程」を出力することで論理的整合性を保つことがわかっています。極限まで圧縮された記号列は、LLMの「考える余地」を奪い、論理破綻を招く可能性があります

 

2.思想的に正しい所・正しくない所(理由込み)

忖度なしに判定します。

 

正しいと思う所(Agree)

・「高級言語はLLMにとって冗長である」:

 理由:人間にとっての「読みやすさ(可読性)」は、機械にとって単なるトークン無駄遣いです。if x>10: よりも ? x10 の方が情報密度が高いのは事実です。

・「括弧の長距離依存問題」:

 理由: TransformerのAttentionメカニズムにとって、遠く離れた ( と ) の対応関係を維持するのは計算コストが高く、ミスの原因になりやすいです。ネスト排除する方向性機械的処理として正しいです。

 

正しくないと思う所(Disagree)

・「可読性を排除しても良い」:

 理由:ソフトウェア開発においてコーディングは「書く」時間より「読む・直す」時間の方が長いです。AI生成コードであっても、最終責任人間が負う現状では、人間検証不可能コードは「危険バイナリ」と同義であり、プロダクトには採用できません。

・「LLMに最適化された言語を書かせるべき」:

 理由: 前述の通り、現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然言語」とは、実は「人間にとって自然言語英語Python)」そのものです。Suiは「計算機にとっては最適」ですが、「現在のLLMにとっては異言語」です。

 

3. 「5つの設計原則」の正当性評価

作者が掲げる設計原則についての技術評価です。

 

1行1命令(行単位独立性) 評価: △

パース(解析)は容易になりますが、LLMは「前の行の文脈」を読んで次の行を出力するため、行を独立させすぎると文脈連続性が失われ、複雑なアルゴリズム構成力が落ちる可能性があります

 

括弧は{}のみ(ネスト排除) 評価: ◯

LLMが最も苦手とする「深いネスト構造の維持」を回避する策として有効です。アセンブリ言語に近いフラット構造は生成難易度を下げます

 

変数は連番 (v0, v1...) 評価: ✕

これが最大の問題点です。LLMは変数名(user_id, total_price など)に含まれる「意味」を使って推論を行っています(Semantic Grounding)。すべてを記号化すると、LLMは変数役割を見失い、論理的バグを埋め込みやすくなります

 

命令は1文字 評価: ◯(ただし諸刃の剣

トークン効率は最強ですが、1文字の違いで意味が激変するため、LLMの確率的な「ゆらぎ」による1文字ミスが致命的なバグになります冗長さはエラー訂正の役割果たしてます

 

明示的な制御フロー(ラベルジャンプ) 評価: △

goto 文の多用はスパゲッティコードを生みます。LLMにとっても、構造プログラミング(if/forブロック)の方が、「ここからここまでがループ」というチャンク(塊)として認識やすいため、一概にジャンプ命令が良いとは言えません。

 

現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然言語」とは、実は「人間にとって自然言語英語Python)」そのものです。

 

ここ!マジで覚えてね

LLMはこれまでの機械よりも人間に近いと思ってほしい、人が苦手なことはAIも苦手

機械論理的ロジックに強くて〜っていうのはAIには通用しない

 

ついでに、「LLM用プログラミング言語」の潮流について

「LLMのための言語」という文脈は、大きく2つのトレンドに分かれます。Suiは後者に属しますが、主流は前者です。

1.LLMを「制御するため」の言語(主流)

 ・DSPy, Guidance,Microsoft Guidance:

  ・プロンプトエンジニアリング構造化し、LLMの出力を型(JSONなど)に強制したり、思考プロセスを制御するためのフレームワーク

 ・SGLang:

  ・LLMの推論を高速化・並列化するための言語

 ・これらは「人間がLLMを操るための言語」であり、実用化が進んでいます

 

2.LLMに「書かせるため」の言語(Suiのカテゴリ

 ・現状:ほとんど実験段階です。

 ・Gorilla LLMなどの試み:API呼び出しに特化したファインチューニングなどがありますが、独自の「新言語」を作らせるよりも、既存PythonJSON を正しく出力させる方向(Constrained Decoding)が業界の標準解です。

 ・擬似コード:論文レベルでは、Pythonの代わりに中間的な擬似コードを出力させ、それをコンパイラで処理する手法研究されていますが、Suiほど極端な記号化は稀です。

 

後者については

 

目標設定のピントが少しずれています

現状の最適解:現在のLLMを使う限り、「LLM用言語」の最適解はPython です。なぜなら、世界中GitHubコード学習しており、LLMが「最も流暢に話せる言葉」だからです。無理にSuiを話させるのは、日本人エスペラント語で詩を書かせるようなもので、パフォーマンスは落ちます

 

最後総評

 

総評: Suiは、「既存のLLM(GPT-4など)に書かせる言語」としては失敗する可能性が高いですが、「未来AIネイティブコード生成のあり方」を示唆するアート作品としては高く評価できます。作者の「愚かな人間に合わせるな」というパンク精神は、エンジニアリングの枠を超えた鋭い批評性を持っています

 

アート作品だそうです

 

お前らは安易オレオレ言語作るんじゃないぞ、作るにしてもAIに聞きなよ?

聞く時は忖度させるんじゃないぞ?

この作者もAIに乗せられたのかもしれんし

 

______

 

プロンプト

 

以下が「LLM用プログラミング言語」としてメリットがありそうか、感想を教えて下さい。

https://forest.watch.impress.co.jp/docs/serial/yajiuma/2069573.html

https://github.com/TakatoHonda/sui-lang

 

忖度配慮はせず冷静にお願いしま

思想的に正しいと思う所、正しくないと思う所を理由込みでまとめてください

・「5つの設計原則」の考え方は正しい?

最近のLLM用プログラミング言語についてもまとめてください

そもそもLLM用プログラミング言語という目標自体評価をしてください

 

なお、以下はSNSでの作者の投稿です

(省略)

Permalink |記事への反応(0) | 14:27

このエントリーをはてなブックマークに追加ツイートシェア

2025-11-18

anond:20251118195706

エアプだろお前?

今はコンパイラ進化してるからCでもC++でも普通に書いたほうがアセンブリ言語を直に書くよりもよっぽど高速なんだよ

Permalink |記事への反応(0) | 20:00

このエントリーをはてなブックマークに追加ツイートシェア

2025-11-06

勉強になった

Q.

生成AIソフトウェア開発を支援してもらう場合ソースコード作成を依頼する形式が多いと思いますが、実行ファイルを直接出力してもらうことも技術的には可能なのでしょうか?

A.

生成AIによる実行ファイルの直接出力は、技術的には極めて困難です。現在のLLM(大規模言語モデルベースの生成AIは、ソースコードの生成には向いていますが、実行可能バイナリファイルを直接出力することには根本的な制約があります。​

技術的な制約

LLMはテキストベーストークン処理を基本とする設計であり、バイナリデータを直接扱うことができません。実行ファイルは0と1の連続したバイナリコードですが、LLMはこの形式データを生成するようには訓練されていないため、バイナリファイルを直接出力することは現在アーキテクチャでは実現が困難です。​

従来のソフトウェア開発では、ソースコードコンパイルアセンブルリンクという複数段階のプロセスを経て実行ファイルが生成されます。各段階で最適化機械語への変換が行われるため、この過程を完全に省略してAIが直接バイナリを生成することは技術的に非常に複雑です。​

理論的な可能

研究レベルでは、バイナリデータを扱う試みも存在します。例えば、LLM4Decompileのような研究プロジェクトでは、バイナリコードを逆コンパイルする際にバイナリを一度アセンブリ言語に変換してからLLMで処理しています。逆に言えば、生成時も同様の変換プロセス必要になると考えられます。​

現実的アプローチ

実務では、生成AIソースコード作成してもらい、それを従来のコンパイラビルドツールで実行ファイルに変換する方式標準的です。この方法であれば、デバッグテストも容易で、生成されたコード品質確認しながら開発を進められます。​

なお、フォントファイルのようなバイナリ形式でもオープンソースとして扱われる例はありますが、これはフォントという特定用途場合であり、汎用的な実行ファイル生成とは異なります

Q.

画像生成もバイナリを生成しているわけで、同じようなことができるのではと思ったのですが、そこはぜんぜん違うのですね

A.

おっしゃる通り、画像生成AIバイナリを出力しているという点では共通していますが、実は根本的に異なる仕組みで動作しています。​

アーキテクチャの違い

画像生成AI拡散モデル(DiffusionModel)やGANなど、視覚データ最適化された専用のアーキテクチャ使用しています。一方、LLMはTransformerベーステキスト処理に特化した構造を持っています画像生成では、ノイズから段階的に画像を生成するプロセスを経て、最終的にピクセル値という数値データバイナリ)を出力します。​

データ表現性質

画像ファイルバイナリ連続的な数値(ピクセル値)の集合であり、各ピクセル色情報を持つという規則的な構造です。最近研究では、画像ビットプレーンbit-plane)として扱い、XOR演算ノイズを加えるBinary Diffusion ProbabilisticModel(BDPM)のような手法も開発されています。​

対して、実行ファイルバイナリ機械語命令の複雑な配列であり、CPUが直接実行できる命令コードデータセクション、リンク情報などが厳密な形式で配置されていますわずかなビット誤りでもプログラム動作しなくなるため、画像のような連続値とは性質が大きく異なります。​

学習データの違い

画像生成AIは、ImageNetやLAIONなどの大量の画像データセットで訓練されており、ピクセルパターン学習します。一方、実行ファイルを生成するには、コンパイルプロセス全体(構文解析最適化機械語変換、リンク)を学習する必要がありますが、これは単純なパターン学習では実現できません。​

したがって、画像生成AI成功しているのは、画像という特定ドメインに特化した設計と、規則的なデータ構造があるためであり、同じ手法を実行ファイル生成に適用することは技術的に非常に困難です。

Permalink |記事への反応(0) | 15:50

このエントリーをはてなブックマークに追加ツイートシェア

2025-10-13

アセンブリ言語使ってた時、C言語なんて遅くて使えねーと思っていた。

その後、C言語使い始めた時には、アセンブリ言語で消耗してるのは時間のムダだと思うようになった。

今、各種プログラミング言語からAIを使う時代になり、AIが出力するコードなど信頼できねえと思う頃から

その後、AIを使わずプログラミングするのは時間のムダだと思うようになるのだろう。

Permalink |記事への反応(0) | 06:45

このエントリーをはてなブックマークに追加ツイートシェア

2025-10-07

anond:20251007210900

自動プログラミングという言葉1960年代あたりに流行ったらしいね中田育男さんの本で読んだことがある。そう、FORTRANコンパイラとかが出てきた頃の話かな。「もうマシン語アセンブリ言語)でプログラミングしなくてもいい」とか

Permalink |記事への反応(0) | 21:14

このエントリーをはてなブックマークに追加ツイートシェア

2025-06-28

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1.手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2.テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3.宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1.フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1.トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2.エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single PageApplication)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「Permalink |記事への反応(0) | 17:09

このエントリーをはてなブックマークに追加ツイートシェア

LLMはエンジニア仕事を奪うのか?否、仕事抽象度を「Why」の次元

序文コード蒸発する時代と、それでも残る「Why」という名の問い

2025年私たちソフトウェア開発の歴史的な転換点に立っている。大規模言語モデル(LLM)の進化は、GitHub Copilotのようなコード補完ツールに始まり、今や「何を作りたいか」を自然言語で伝えるだけで、アプリケーションの雛形が数分で生成される時代現実のものとしつつある。この光景を目の当たりにした多くのプログラマが、漠然とした、しかし確かな不安を抱いているだろう。「私たち仕事は、いずれAIに奪われるのではないか」と。

この問いに対する私の答えは、半分はYesであり、もう半分はNoだ。より正確に言えば、プログラマ仕事本質が、歴史上かつてないレベル抽象化され、その役割が再定義されるのだ。私たちは、コードを「書く」作業から解放される一方で、これまで以上に高度な思考要求されることになる。

本稿では、プログラミング歴史を「How(いかに作るか)」から「What(何を作るか)」への移行として捉え直し、LLMがこの流れをいかに加速させるかを論じる。そして、その先にある、AIには決して代替できない、人間ならではの競争優位性、すなわちWhy(なぜ作るのか)」を定義し、記述する能力重要性について深く考察していく。これは、単なる未来予測ではない。今を生きるすべてのソフトウェアエンジニアにとっての、生存戦略提示である

第1章:プログラミング歴史的変遷 ― HowからWhatへの長い道のり

LLMの登場を特異点として捉える前に、我々が立っている場所を正確に知る必要がある。ソフトウェア開発の歴史は、常に「抽象化」との戦いであった。そしてその歴史は、プログラマの関心が「How」から「What」へと徐々に移り変わっていくプロセスとして描くことができる。

1-1.手続き時代:Howを記述することに終始した黎明期

コンピュータ黎明期プログラミングとは、計算機理解できる命令(How)を、一行一行、丹念に記述する作業のものであった。アセンブリ言語や初期のFORTRANCOBOLといった言語は、ハードウェアの制約を強く受けており、プログラマメモリ管理プロセッサ動作といった、極めて物理層に近いレベルでの「How」を意識する必要があった。

この時代テストもまた、「How」に強く束縛されていた。書かれた手続きが、意図した通りに順番に実行されるか、特定入力に対して期待された計算結果を返すか。テストの関心事は、あくまで「手続きの正しさ」の検証にあった。ビジネスロジック実装の詳細が密結合し、コード特定の処理手順を記述した、硬直的な塊となっていた。

1-2.テスト駆動した振る舞いへの注目:Whatへの小さな一歩

風向きが変わり始めたのは、ソフトウェアの規模が拡大し、その複雑性が人間認知能力を超え始めた頃だ。1990年代後半から2000年代にかけて提唱されたエクストリーム・プログラミングXP)の中で、テスト駆動開発(TDD)という考え方が登場する。

TDD本質は、単なるテスト手法改善ではない。それは、プログラミングパラダイム根底から覆す思想だった。TDDは、「まずテストを書く」ことを強制することで、プログラマ意識を「これから実装するコード(How)」から「そのコードが満たすべき振る舞い(What)」へと強制的に転換させたのだ。

テストはもはや、書かれたコードの後追いで正しさを検証する作業ではない。それは、これから作られるべきソフトウェアの「仕様書」であり、「振る舞いの宣言」となった。例えば、「ユーザーログインボタンクリックしたら、ダッシュボード画面に遷移する」というテストコードは、具体的な実装方法(`onClick`イベントハンドラの中で`window.location.href`を書き換える、など)には一切言及しない。それはただ、達成されるべき「What」を記述しているだけだ。

この思想は、ビヘイビア駆動開発(BDD)へと発展し、`Given-When-Then`といった、より自然言語に近い形式ソフトウェアの振る舞いを記述するスタイルを生み出した。プログラマだけでなく、プロダクトマネージャービジネスアナリストといった非技術者をも巻き込み、「What」を共通言語として定義する試みが本格化したのである

1-3.宣言プログラミングの台頭とフレームワーク役割

TDD/BDDによってプログラマ意識が「What」に向かい始めると、コードのものもまた、宣言的なスタイルへと進化していく。この変化を劇的に加速させたのが、モダンフレームワーク存在だ。

Reactを例に考えてみよう。Reactが登場する前、フロントエンド開発はjQuery代表されるように、DOMを直接操作する命令的なコード(How)の連続だった。「このボタンクリックされたら、この要素のテキストを書き換え、あちらの要素を非表示にする」といった具合だ。

しかし、Reactは「UIとは、ある状態state)に対する純粋写像である」という宣言的なモデル提示した。プログラマがやるべきことは、UI状態(`state`)と、その状態がどのように見えるか(JSXによるコンポーネント)を宣言することだけだ。状態が変更された際に、DOMをどのように効率的更新するかという面倒な「How」の部分は、Reactの仮想DOM差分検出アルゴリズムがすべて隠蔽してくれる。プログラマは「What(UIのあるべき姿)」を記述するだけでよくなったのだ。

この「WhatからHowへの変換」は、様々な領域で見られる。

これらのフレームワークツールは、いわば特定の制約下における、WhatからHowへの高性能な変換器」として機能してきた。プログラマは、フレームワークが課す「お作法」や「制約」を受け入れることで、退屈で間違いの多い「How」の記述から解放され、より本質的な「What」の定義に集中できるようになった。我々が「生産性が高い」と感じる開発体験は、この優れた変換器の恩恵に他ならない。

現状は、この歴史的変遷の延長線上にある。プログラマ仕事は、手続き記述する職人から、振る舞いを定義し、それを実現するための最適な「変換器(フレームワーク)」を選択・設定するアーキテクトへと、その重心を移してきたのだ。

第2章:LLMがもたらす究極のパラダイムシフト ― 汎用変換器の誕生

フレームワークがもたらした「WhatからHowへ」の潮流は、LLMの登場によって、未曾有のスケールで加速されようとしている。フレームワークが「特定領域に特化した変換器」であったのに対し、LLMは「あらゆる領域対応可能な、究極の汎用変換器」としてのポテンシャルを秘めているからだ。

2-1.フレームワークの制約を超えて

前章で述べたように、ReactやTerraformといったフレームワークは、その恩恵と引き換えに、私たち特定の「制約」を課してきた。Reactを使うならコンポーネントベース思考し、状態管理作法に従う必要がある。Terraformを使うなら、そのエコシステムとHCLの流儀を受け入れなければならない。これらの制約は、WhatからHowへの変換を自動化するための「レール」であり、私たちはそのレールの上を走ることで効率を得てきた。

しかし、LLMはこの前提を覆す。LLMは、特定フレームワーク言語知識を事前に学習しているが、その利用において絶対的な制約を課すわけではない。私たちは、より自由形式で「What」を伝えることができる。

例えば、こうだ。

ユーザー認証機能付きのシンプルブログアプリを作ってほしい。フロントエンドはReactとTypeScriptUIコンポーネントはMUIを使う。バックエンドNode.jsExpressで、データベースPostgreSQLユーザーGoogleアカウントログインでき、新しい記事作成編集、削除できる。記事にはマークダウン記法が使えて、画像アップロードできるようにしてほしい。

この要求(What)は、特定フレームワーク流儀に則ったものではない。複数技術スタックを横断し、機能要求自然言語で並べただけのものであるしかし、現在のLLM、特にGPT-4oやそれに類するモデルは、このレベル要求からディレクトリ構造設定ファイルAPIエンドポイントフロントエンドコンポーネントに至るまで、驚くほど具体的なコード(How)を生成することができる。

これは、フレームワークが担ってきた「WhatからHowへの変換」が、特定のレールから解き放たれ、より広範で柔軟な領域へと拡張されたことを意味する。これまで自動化が難しかった、あるいは特定フレームワーク存在しなかったニッチ領域や、複数技術を組み合わせる複雑なシステム構築においても、AIによる宣言プログラミング恩恵を受けられる時代が始まろうとしているのだ。

2-2. 「What」の解像度がすべてを決める世界

LLMという汎用変換器の登場により、プログラマ生産性は、いかに質の高いWhatをLLMに伝えられるか」に直結するようになる。これは、俗に「プロンプトエンジニアリング」と呼ばれるスキルだが、その本質は、ソフトウェア開発における「要求定義」そのものである

質の高い「What」とは何か。それは、曖昧性がなく、網羅的で、矛盾のない要求である

これらは、優秀なソフトウェアエンジニアが、プロダクトマネージャーデザイナーとの対話を通じて、日常的に行ってきた思考プロセスのものではないだろうか。LLMの登場は、この思考プロセスを、より明確に、よりテキストベースで「記述」する能力を求める。私たちの頭の中にあった暗黙的な仕様が、LLMへの入力プロンプト)という形で、明示的に言語化されることを要求するのだ。

やがて、ほとんどのプログラミング作業は、この「Whatの記述」に収束していくだろう。TDDテストコードという形式で「What」を記述したように、私たち自然言語や、より構造化された要求記述言語を用いて、AIに対して「What」を宣言することになる。コード(How)は、その宣言から自動生成される中間生成物に過ぎなくなる。まさに、コード蒸発していく未来である

第3章:それでもAIには決められない ― 「Why」の不在という致命的な欠陥

「What」を伝えれば「How」が手に入る。この魔法のような世界の到来を前に、私たちは一つの重大な問いに直面する。それは、「そのWhatからHowへの変換は、本当に一意に決まるのか?」という問いだ。

答えは、明確にNoである

ある「What(要求)」を実現するための「How(実装)」は、無数に存在する。そして、どの「How」を選択すべきかを決定するためには、単純な機能要求(What)だけでは情報が全く足りない。そこには、必ずWhy(なぜそう作るのか)」という、背景、文脈、そしてトレードオフ考慮必要不可欠となる。

3-1.トレードオフの海に溺れるLLM

簡単な例を考えてみよう。「1億件のユーザーデータを格納し、ユーザーIDで高速に検索できるシステム」という「What」をLLMに与えたとする。LLMは、どのような「How」を提案するだろうか。

これらの選択肢は、どれも「What」を満たしている。しかし、その特性は全く異なる。案Aは多くのエンジニアにとって馴染み深く開発が容易だが、10億、100億件へのスケールは難しいかもしれない。案Bはスケール性に優れるが、厳密なトランザクション管理は苦手だ。案Cは高速だが、運用コストシステムの複雑性が増す。案Dは安価だが、検索速度は他に劣る。

LLMは、これらの選択肢をリストアップすることはできるだろう。しかし、このプロジェクトにとって最適な選択肢はどれかを、自信を持って決定することはできない。なぜなら、その決定には、LLMが与えられていない「Why」の情報必要からだ。

これらの「Why」こそが、無数に存在する「How」の中から、ただ一つの「正解」を選び出すための羅針盤なのである。そしてこの「Why」は、ビジネス目標組織文化ユーザーの期待、技術的な制約といった、極めて人間的で、文脈依存的な情報の中にしか存在しない。

3-2.エンジニアが暗黙的に行ってきた「Why」に基づく意思決定

ここで重要なのはこれまでもエンジニアは、この「Why」に基づく意思決定を、意識的あるいは無意識的に行ってきたという事実だ。

私たち技術選定を行うとき、単に「流行っているから」という理由だけでReactを選ぶわけではない。「SPA(Single PageApplication)にすることでユーザー体験を向上させたい(Why)」、「コンポーネント指向の開発によって長期的な保守性を確保したい(Why)」、「Reactエンジニア採用市場が活発だからWhy)」といった、様々な「Permalink |記事への反応(0) | 17:09

このエントリーをはてなブックマークに追加ツイートシェア

2025-06-14

FCファミコン時代の大作RPG特にドラゴンクエストIVDQ4)のようなタイトルは、当時のハードウェア制約下でも非常に大規模なプログラムとなっています

一般的に、FCカートリッジの容量は数十KBから512KB程度が上限で、DQ4は最大クラスの1メガビットROM(128KB)を採用しています

この容量にはプログラムコードだけでなく、グラフィックサウンドマップデータなども含まれるため、純粋プログラムアセンブリコード)のみの行数や文字数公表されていませんが、推定することは可能です。

参考:FC大作RPGコード規模

参考事例

まとめ

この規模感が、全挙動の解析や文書化が膨大な労力となる理由の一つです。

仮に1日300行のアセンブリコードを書いたとしても、数万行規模のFC大作RPGでは何ヶ月、場合によっては1年以上の開発期間が必要になります

しかも、実際の現場では「書く」だけでなく、バグ修正デバッグ仕様変更への対応最適化など、膨大な「やり直し」や「手直し」も日常茶飯事でした。

先人たちのエピソード

会社に泊まりこみで作業し、眠くなれば床に転がって寝て、起きたらそのままパソコンの前に座るという状況だった。...自分たちが仕込んだストーリープログラムデータ)が、『そのとおりになっているか』を延々と繰り返して確認するというデバッグ作業は、一定の期間を超えるとほんとうに精神的に拷問化するほどキツいのだ。」

このように、若さ情熱、そして「絶対に完成させる」という強い意志で膨大な作業を乗り切っていたことが、当時の開発者たちの共通したエピソードです。

今のような分業や自動化がない時代、一人ひとりの集中力根性プロジェクトの成否を左右していたと言えます

Permalink |記事への反応(0) | 09:58

このエントリーをはてなブックマークに追加ツイートシェア

2025-05-18

anond:20250518101137

CPUとの間で交わされるドキュメントであるコード

機械語アセンブリ言語プログラミング言語

人間が扱いやす言語に変遷してきたわけだからプログラミング言語の先にAIを用いた自然言語がある気がする

Permalink |記事への反応(0) | 10:17

このエントリーをはてなブックマークに追加ツイートシェア

2025-03-25

母がアセンブラ出身なので母国語アセンブリ言語です。

父はパンチカード出身なので、穴を開けて会話をします。

Permalink |記事への反応(0) | 11:38

このエントリーをはてなブックマークに追加ツイートシェア

2024-10-04

なんだこれ?ああアセンブリ言語か…

ファインディング・ニーモニック

Permalink |記事への反応(0) | 17:31

このエントリーをはてなブックマークに追加ツイートシェア

2024-09-07

anond:20240907151257

アセンブリ言語C言語ときで低級とかwwww」

機械語「まじ、それなwwww」

Permalink |記事への反応(0) | 15:17

このエントリーをはてなブックマークに追加ツイートシェア

2024-08-21

ITつまんなくなった論は歴史証人になった気分がして良い

ミシンができて天職機械に置き換わってしまった職人の嘆きをリアルタイムで聴いている感覚

といった感じで「歴史証人になった気分がして良い」と言ったものの正直別に珍しいことではないんだけどね

人類は昔からそうやって機械化できることをどんどん機械化して楽できるようにして、それにより生まれゆとりを新たな価値創出に費やしてきたのだから

誰かのせいで仕事をつまらなくさせられたと思っているそこのあなただって誰かの仕事をつまらなくさせた側の人なんですよ

あなたが書いたプログラムだってまともなCPUがない時代は回路設計者がえいこらえいこら論理回路を一つ一つブロックのように組み合わせて実装していた

ただの電卓作るのに死ぬほど時間をかけて回路組んで、トランジスタレベルからめちゃくちゃ設計して、それが開発だ!楽しいんだ!って言っていたのかもしれない

その人にとってはアセンブリ言語ホニャララと書くだけで計算結果が出てきてしまう世の中つまらねぇと思っていたかもしれない

更に行ってしまえばアセンブリ言語ホニャララとかける人にとってC言語もそういう存在かもしれない

それが世の中の常であり、進歩なんだよ

と書いてて途中で気付いたが、ITにだけその進歩が辛い側面はあるのかもしれない

ミシンが普及して職人が服を作らなくても良くなっても、腕の良い職人が作る服には工芸品の"味"という価値が残ったと思う

人間国宝かになれちゃうヤツね

他にも自動車が生まれても趣味としての乗馬は残ったし進歩により旧世代遺物になったとしても何かしらの価値が残ることが今までは多かったはず

一方、ITAIが発達し品質も高く速度も出るようなコードが書けるようになったら手書きコードに何の価値もなくなってしま

誰かすげー奴がすげーライブラリ無償提供しちまったら同じ機能実装する価値がなくなってしま

コードコードにより生まれプロダクトには嗜好性が無い

手書きコードからまれプロダクトに手書き特有の"味"は生まれない

そう考えるとコード職人たちには彼ら特有の誰も共感できない虚しさがあるのかもなと思ってしまった

anond:20240728023355

Permalink |記事への反応(1) | 18:00

このエントリーをはてなブックマークに追加ツイートシェア

anond:20240821120154

アセンブリ言語って低レベルじゃん

Permalink |記事への反応(0) | 12:04

このエントリーをはてなブックマークに追加ツイートシェア

2024-07-30

anond:20240730211455

低級言語って言うからアセンブリ言語でも組めるのかと思ったら違った

Permalink |記事への反応(0) | 21:20

このエントリーをはてなブックマークに追加ツイートシェア

2024-04-29

anond:20240429003939

レベルすぎって、アセンブリ言語とか機械語入力とかを想像したけど違うのか

Permalink |記事への反応(0) | 18:16

このエントリーをはてなブックマークに追加ツイートシェア

2023-11-18

anond:20231118031259

今までだって機械語からアセンブリ言語、高等言語っていう風に自動化が進んできたんだから

それがプロンプトっていうさらヒューマンフレンドリープリプロセッサに変わるだけなんだよなぁ

Permalink |記事への反応(0) | 03:16

このエントリーをはてなブックマークに追加ツイートシェア

2023-04-01

ブロードウェイブギウギ

ブロードウェイブギウギニューヨーク近代美術館所蔵のピートモンドリアン絵画であるperlpython、あるいはberlin metrecqueに代表されるクリエイティブ・コモンズ(bsd)に従って開示されるライセンスに従ったオープンソフトウェア製作され、i386アセンブリ言語で実行される。ファイルサイズは128mbで、wikipediaのアイウエオ順に並べた。アイウエオ順に各記事を示す。はじめにアイウエオ順から表示するには、タグi386」のついた記事を探して(特にブログが多い)、そこから記事を探し出す必要がある。

AnondAI作成

Permalink |記事への反応(0) | 21:57

このエントリーをはてなブックマークに追加ツイートシェア

2023-03-10

anond:20230310135246

アセンブラコードもかけるそうだ

Q:アセンブラコードって記述できますか?

A:はい、私はアセンブリ言語コード記述することができますアセンブリ言語は、コンピュータプロセッサ理解できる低水準の機械語命令に直接対応するプログラム言語であり、CPU命令セットアーキテクチャ依存するため、異なるCPUアーキテクチャに対して異なるコード必要です。

以下は、x86アーキテクチャ向けの単純なアセンブリ言語の例です。これは、メモリ特定場所にある2つの数値を加算して、結果をレジスタに格納するプログラムです。

sql

Copy code

section .data

num1dd10 ; Define num1as adoubleword (32-bit integer) andsetits initialvalue to10

num2dd20 ; Define num2as adoubleword andsetits initialvalue to20

section .text

global _start ; Declare the entrypoint for the program

_start:

mov eax, [num1] ;Move thevalue of num1 into the eax register

add eax, [num2] ;Add thevalue of num2 to the eax register

mov [result], eax ;Move thevalue in eax to the memory location "result"

section .data

resultdd 0 ; Define resultas adoubleword andsetits initialvalue to 0

このプログラムは、num1の値をeaxレジスタに移動し、num2の値をeaxレジスタに加算し、最後にeaxレジスタの値をresultメモリドレスに保存します。

Permalink |記事への反応(0) | 13:56

このエントリーをはてなブックマークに追加ツイートシェア

ChatGPTが駆逐するのは弱小プログラマーだけだと思う

ここ最近、ChatGPTのプロンプトをひたすら書きまくってるのだが分かってきたことがある

恐らく近い将来ChatGPTによって大半のプログラマーは職を失うことになるだろうし

残されたプログラマーもソースコードを書くのでは無くてプロンプトを書くことの方が増えるだろう

アセンブリ言語を書いてる人はほぼ死滅しているしCやC++ですら書いてる人は少ない

同様にプロンプトを書く人(プロンプター)が重宝されるようになるのだろう(もちろん例外的分野は存在する)

ただ、残念ながらプログラマーや非プログラマーがプロンプターになれるかというとそうではない

プロンプトを書く時に必要なのは純粋プログラマーが必要とされている能力の部分だから

その言語を知ってるだとかライブラリを知っているといった知識的な能力ではなくて

要件定義能力論理演算集合論みたいな知識だったりオブジェクト指向関数的な考え方だけが純粋必要になる

例えば割とダメダメプログラマーは条件が100個あった時に普通にIF文を100個書く

こういうプログラマーはプロンプトを作ることができないし、仮に書いたとしてもまともに動かない

ちゃんとしたプログラマーは条件100個を整理してまず2つの場合に分けてそれぞれで3つに分け・・・みたいなことをする

場合によっては要件定義を鑑みて必要無い条件を削除する(もちろん確認の上で)

そういった整理整頓が出来る人じゃないとプロンプトを書くことは不可能なので

例えばPythonの書き方を知っているだけのプログラマーとかコピペで生きてきたプログラマーは死滅すると思う

彼らはプロンプトを書けないし、書くために学習しようとしてもベースとなっているものが無いのでそこから覚え直すしかない

なのでプログラマーの上位層はプロンプターとして生き残るが下位層は死滅するし、残念ながらプロンプター教室というのもちょっと想像が付かないしたぶん不可能だと思う

Permalink |記事への反応(1) | 13:40

このエントリーをはてなブックマークに追加ツイートシェア

2022-06-27

anond:20220626151746

昔のソースコードが見つかったら晒してあげるけど、ソースコードをどこに上げて欲しいの? ここに貼り付けろってこと?

アセンブリ言語BASICPascalだけど、いいんか?

Permalink |記事への反応(0) | 22:09

このエントリーをはてなブックマークに追加ツイートシェア

2022-05-27

anond:20220527014248

機械語だけでは難しかたことがアセンブリ言語でできるとしても、より応用的なことが沢山出来るようになるだけで、仕事自体は減らない

AIで様々なことができるようにモジュール化されたとすると、より応用的なことが誰にでもできるようになって新しい仕事が生まれしま

そうすると現代視点で「難しい」と思われている仕事簡単になっても、新たな難しい仕事は生まれてる可能性はある

Permalink |記事への反応(1) | 01:48

このエントリーをはてなブックマークに追加ツイートシェア

2022-05-21

anond:20220521082738

人にも読めるソースアセンブリ言語に変換してくれるCが出来た。

  ・・・ そこはC言語よりだいぶ前の話だろ。C言語以前にコンパイラはいろいろあったぞFORTRANとかCOBOLとかPL/1とかALGOLとか。

C言語の売りは、構造化とシンプルさ(高級アセンブリ言語などともあだ名された)だと思うぞ。

Permalink |記事への反応(0) | 23:52

このエントリーをはてなブックマークに追加ツイートシェア

anond:20220521082738

さすがにマシン語は使わないけど、アセンブリ言語は使います過去のものにしないでください

Permalink |記事への反応(0) | 16:48

このエントリーをはてなブックマークに追加ツイートシェア

2022-04-15

プログラミングだけ教えるのは難しい

例えばJavaScriptリストコピーするとき

const newList = list.slice();

って書かないとダメだよ、と教えるのは簡単

しかし、

「なんでconst newList = listじゃダメなんですか?」

と聞かれると非常に困る。

例えばconst a = 123と入っているときに、bにコピーたかったらconst b=aで良い。

プリミティブと配列の違いとして覚えてもらう、という方法もあるけれど

じゃぁ文字列はどうなんですか?となると非常に困る。

JavaScriptだけを教えるならそれでも問題いかもしれないが、Pythonも一緒に教えるとかなるとカオスになる。

結局のところ、コンピュータの仕組みを理解してもらって、メモリアドレスとかポインタを知ってもらい

それからプリミティブや配列の話をしないと根本的には説明できない。

単純なプログラミング教育ってこの辺が破綻してると思っているので、結局はPC構造機械語アセンブリ言語C言語と順番に教える必要があると思っている。

Permalink |記事への反応(1) | 23:08

このエントリーをはてなブックマークに追加ツイートシェア

次の25件>
ログインユーザー登録
ようこそ ゲスト さん
Copyright (C) 2001-2025 hatena. All Rights Reserved.

[8]ページ先頭

©2009-2025 Movatter.jp