はてなキーワード: pythonとは
これさ
愚かな人間の都合など完全無視、LLMのための高効率プログラミング言語「Sui」(粋)
https://forest.watch.impress.co.jp/docs/serial/yajiuma/2069573.html
別にいいんだけど、どうにもブクマカ含めて、しっくり来る批判できてないんだよな
それが気になってしょうがない
俺ごときが言ってもアレだから、Gemini3.0先生に頼んだよ(一時チャット、Pro 3.0 思考モード)
ユーザーが提供した情報と、一般的なLLMの技術特性に基づき、プログラミング言語「Sui」についての冷静かつ客観的な評価をまとめます。
感想: 一言で言えば、**「思想実験としては極めて面白いが、実用性とLLMの学習原理を無視した『早すぎた最適化』」**です。
作者の「人間ではなくLLMを主客にする」という視点の転換は、アーティスト的・哲学的な問題提起としては鋭いですが、現在のLLM(Transformerアーキテクチャ)の動作原理を工学的に捉えると、メリットよりもデメリットが上回る可能性が高いです。
メリット:
・トークン効率の改善: Python等と比較して記述が圧倒的に短くなるため、出力速度の向上と課金コストの削減(トークン節約)は確実に達成できます。
・構文エラーの激減: 括弧やインデントの複雑なルールを排除しているため、「閉じ忘れ」などの単純なSyntax Errorは減るでしょう。
・コンテキストウィンドウの節約: 長いプログラムでもコンテキスト(メモリ)を圧迫しにくくなります。
・学習データとの不一致: LLMは「大量の人間用コード(Pythonなど)」を学習して賢くなっています。未知の言語「Sui」を書かせるには、Few-shot(プロンプトでの例示)に頼るしかありませんが、これではLLM本来の推論能力やコーディング能力(事前学習の重み)を活かせません。
・ブラックボックス化: 生成されたコードがバグっていた場合、人間が読んで直すことが不可能です。「LLMに直させる」にしても、LLM自身がSuiのロジックを深く理解していないため、無限ループ(幻覚の連鎖)に陥るリスクが高いです。
・CoT(Chain of Thought)の阻害: 最近の研究では、LLMは「冗長な思考過程」を出力することで論理的整合性を保つことがわかっています。極限まで圧縮された記号列は、LLMの「考える余地」を奪い、論理破綻を招く可能性があります。
正しいと思う所(Agree)
理由: 人間にとっての「読みやすさ(可読性)」は、機械にとって単なるトークンの無駄遣いです。if x > 10: よりも ? x 10 の方が情報密度が高いのは事実です。
理由: TransformerのAttentionメカニズムにとって、遠く離れた ( と ) の対応関係を維持するのは計算コストが高く、ミスの原因になりやすいです。ネストを排除する方向性は機械的処理として正しいです。
正しくないと思う所(Disagree)
・「可読性を排除しても良い」:
理由: ソフトウェア開発においてコーディングは「書く」時間より「読む・直す」時間の方が長いです。AI生成コードであっても、最終責任は人間が負う現状では、人間が検証不可能なコードは「危険なバイナリ」と同義であり、プロダクトには採用できません。
理由: 前述の通り、現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然な言語」とは、実は「人間にとって自然な言語(英語やPython)」そのものです。Suiは「計算機にとっては最適」ですが、「現在のLLMにとっては異言語」です。
パース(解析)は容易になりますが、LLMは「前の行の文脈」を読んで次の行を出力するため、行を独立させすぎると文脈の連続性が失われ、複雑なアルゴリズムの構成力が落ちる可能性があります。
LLMが最も苦手とする「深いネスト構造の維持」を回避する策として有効です。アセンブリ言語に近いフラットな構造は生成難易度を下げます。
これが最大の問題点です。LLMは変数名(user_id, total_price など)に含まれる「意味」を使って推論を行っています(Semantic Grounding)。すべてを記号化すると、LLMは変数の役割を見失い、論理的なバグを埋め込みやすくなります。
トークン効率は最強ですが、1文字の違いで意味が激変するため、LLMの確率的な「ゆらぎ」による1文字ミスが致命的なバグになります。冗長さはエラー訂正の役割も果たしています。
goto 文の多用はスパゲッティコードを生みます。LLMにとっても、構造化プログラミング(if/forブロック)の方が、「ここからここまでがループ」というチャンク(塊)として認識しやすいため、一概にジャンプ命令が良いとは言えません。
>現在のLLMは「人間語の確率分布」を学習したモデルです。「LLMにとって自然な言語」とは、実は「人間にとって自然な言語(英語やPython)」そのものです。
ここ!マジで覚えてね
LLMはこれまでの機械よりも人間に近いと思ってほしい、人が苦手なことはAIも苦手
機械は論理的でロジックに強くて〜っていうのはAIには通用しない
ついでに、「LLM用プログラミング言語」の潮流について
「LLMのための言語」という文脈は、大きく2つのトレンドに分かれます。Suiは後者に属しますが、主流は前者です。
・DSPy, Guidance, Microsoft Guidance:
・プロンプトエンジニアリングを構造化し、LLMの出力を型(JSONなど)に強制したり、思考プロセスを制御するためのフレームワーク。
・SGLang:
・これらは「人間がLLMを操るための言語」であり、実用化が進んでいます。
・Gorilla LLMなどの試み: API呼び出しに特化したファインチューニングなどがありますが、独自の「新言語」を作らせるよりも、既存の Python や JSON を正しく出力させる方向(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
・思想的に正しいと思う所、正しくないと思う所を理由込みでまとめてください
・最近のLLM用プログラミング言語についてもまとめてください
・そもそもLLM用プログラミング言語という目標自体の評価をしてください
(省略)
Qiita の文化変質は、技術系コミュニティ全般で起きている知的インフレの縮図みたいなものなんだよね。昔は
みたいに基盤技術を自前で握りつぶした記事が純粋に評価されていた。なぜなら、それを書ける人がそもそも少なく専門性で差別化できていたから。
昔は「Pythonで形態素解析器自作」なんて、アルゴリズム・CS基礎・実装力が揃ってないと無理だった。
難しいことをやってそうに見える記事を、凡人でも量産できるという環境が生まれた。
Qiita を読む層が「実装力を鍛えたいエンジニア → とりあえず AI 触りたいライト層」に変わった。
「再現性のないLLMコピペ」「AIツール使ってみた」みたいなのが評価される。
本気の記事は長く、コードが多く、前提知識も重い。そして PV が伸びない。
つまりQiita のインセンティブ構造と、高度技術記事のインセンティブ構造がズレた。
理由は明確で、読む側がそれを理解できないので評価する母集団がいない。
昔はユーザ層が技術ガチ勢寄りだったので、少数でも濃い支持があった。
今はライト層が母集団なので、希少な高度記事が埋もれるのは自然。
Qiita がライト層に最適化した結果、本気の人たちは別の場所へ移動した。
自分がAIイラストを描くようになったのは、一昨年くらいからだ。
Stable Diffusionを使って、LoRAを追加して、ControlNetも入れて、MidjourneyやNovelAIも試した。
出力されるイラストを見る都度アートだと思っていたし、創造だと信じていた。
でもある日、ふと気づいた。
これ、突き詰めたら全部データじゃね?
じゃあ数字で絵って描けるんじゃね?
思ったら試したくなるタイプなんだ。
使ったのは HxD。
画像を開くと――
そこに出てくるのは、色でも形でも影でもなく、
とか、
でも調べると全部意味がある。
89 50 4E 47 → PNGのヘッダ
IEND → 終端
一個ずつ追っていくと、
全部、0と1の変換でしかない。
そこで、自分で書き換えてみた。
目の色を変えてみたい
すると、青い目がボルドーっぽい赤に変わった。
線画を太らせたい
コードだけでいく。
線が、太った。
ペンを使って描いたわけじゃない。
ブラシで塗ったわけでもない。
影を深くする
これだけで影が落ちる。
画像って「絵」じゃない。
それに
・ガンマ補正をかける
・ベクトル変換をする。
“色を塗っている”んじゃない。
そう気づいた瞬間から、絵を描くのが楽しくなった。
だって、ペンを握ってるんじゃなくて数学を握ってる感覚なんだ。
最近は好きな音楽をFFT解析して、その周波数スペクトルを画素に変換して、色を割り当てて絵を生成することもある。
だから今日も、ディスプレイの前でコードを走らせながら微笑んでる。
絵は美しい。
そしてそれよりも、数字は美しい。
Pythonちょっと勉強してたし、将来はAIエンジニアとしてバリバリ活躍するんだって思ってた。
入社したのは普通のソフトウェア開発会社で、同僚はみんな優しい。
でも…みんなこう言うんだ。
……まあ信じたよ。当初はね。
で、ある日の昼休み。
同僚の一人がふと見せてきたん。
そこにあったのが、Flutterで作ったマルチプラットフォームアプリ。
バックエンドはFirebase Authentication + Firestore。
UIの状態管理はRiverpod。画面遷移制御はGoRouter。
「あーでもこれ遊びで作ってるだけだからw」
しかもスクリーンショット見たらCI/CDがGitHub Actionsで回ってんの。
別の同僚もほぼ同じ。
「休日は何してんの?」って聞いたら「普段ゲームばっかで何もしてないわw」とか言うわけ。
でも昼休憩にそいつモニターを見たらタブに開いてたのがStackOverflowとかRFC 6455だった。
冗談で勉強してんの?って聞いたら「趣味ですw」とか言うわけ。正直引いた。
更に驚いたのが勉強会の存在で、あいつらの「休日何もしてない」は嘘だってことが分かった。。
俺が「休日は何もしてないんでしょ?」って聞くと
「してないしてない、何も〜。あ、でもLT会と、Go言語の勉強会は毎週参加してるかなw」
とか普通に言ってくる。
は??何もしてないって言うのに土曜も日曜も、誰かの書いた技術書読んでんの?
もうこれさ……完全に別の生き物じゃん。
それはそう。1/5とかは、これくらいかなという目分量にすぎない。
本来はローカルのpythonでこの閾値を変えて比較検討したり、
利上げ局面では extreme greedでショートするみたいなこともしたかったが、
儲け損ねている所を治したりと、
VOO QQQ SPXL TQQQ SOXLについてそれぞれ求めてください。
トータルリターン 年平均リターン 最大ドローダウンを計算します。
fear-greed indexがFearになったら 1/5購入してください。
fear-greed indexがExtreme Fearになったら、 さらに 3/5購入してください
fear-greed indexがExtreme Fearで9以下になったら、 さらに 5/5 つまり残り資金の全額購入してください
fear-greed indexがGreedになったら 1/5売却してください
fear-greed indexがExtreme Greedになったら 全売却してください
ただし、FRBが利上げをしているフェーズでは購入してはいけません。
ティッカー,取引回数,総保有期間(日),累積リターン (%),勝率 (%),最大ドローダウン (%)
VOO,34,"1,248",185.2%,68%,-12.5%
QQQ,34,"1,248",312.4%,68%,-18.7%
SPXL,34,"1,248",456.8%,68%,-32.1%
TQQQ,34,"1,248",678.9%,68%,-45.3%
SOXL,34,"1,248",892.1%,68%,-56.8%
ポートフォリオ (均等),34,"1,248",505.1%,68%,-29.2%
SOXLが10年で892.1%と最も好成績だった。ただし最大ドローダウン-56.8%と超でかい。
最大ドローダウンの-56%は胃に穴が空きそうだが、10年で約9倍というのは素晴らしい。
ここに円安がプラスされるので、さらに1.5倍はいってるだろうね。
この手法の面白ポイントはフェアグリ投資法の弱点であるベアマーケットを避けるために、FRBが利上げしている局面を避けることである。
ただ、ローカルで検証可能なpythonを作らせようとしたらなんかうまくいかなかったので、信憑性は今のところ謎。
https://grok.com/share/c2hhcmQtNQ_16d98d8f-b31e-445b-88de-e826dad64538
utf8の文字コードで構成されたバイナリーファイルがある。このファイルの改行の数を数えよ。改行はCRのみとする。このファイルにはCR が必ず含まれており、CRで分割すればマルチスレッドで処理できる。
size_t count_cr_in_file(const std::string& path) {
std::ifstream fs(path, std::ios::binary);
size_t size = fs.tellg();
fs.seekg(0);
const size_t thread_count = std::thread::hardware_concurrency();
const size_t chunk_size = size / thread_count;
std::vector<std::future<size_t>> futures;
for (size_t t = 0; t < thread_count; t++) {
size_t start = t * chunk_size;
size_t end = (t == thread_count - 1 ? size : (t + 1) * chunk_size);
futures.push_back(std::async(std::launch::async, [start, end, &path]() {
std::ifstream fs(path, std::ios::binary);
fs.seekg(start);
size_t count = 0;
for (size_t i = start; i < end; i++) {
char c;
if (c == '\r') count++;
}
return count;
}));
}
size_t total = 0;
for (auto& f : futures) total += f.get();
return total;
}
import mmap
mm = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
return mm.count(b'\r')
c#で書けと指示したところ、
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
{
public static long CountCRInFile(string path)
{
using var mmf = MemoryMappedFile.CreateFromFile(path, FileMode.Open, null);
using var accessor = mmf.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read);
long fileSize = accessor.Capacity;
int processorCount = Environment.ProcessorCount;
long chunkSize = fileSize / processorCount;
long total = 0;
object lockObj = new object();
Parallel.For(0, processorCount, i =>
{
long start = i * chunkSize;
long end = (i == processorCount - 1) ? fileSize : (i + 1) * chunkSize;
long localCount = 0;
byte b;
for (long pos = start; pos < end; pos++)
{
if (b == 0x0D) // CR
localCount++;
}
lock (lockObj)
{
total += localCount;
}
});
return total;
}
static void Main(string[] args)
{
long count = CountCRInFile(path);
Console.WriteLine($"CR count = {count}");
}
}
というコードが出てきた。
実際はcrlf,lfもあり得るんだが、そこは考慮しなくてもよく、そう考えるとaiはすごいとしか言いようがない。
流石にそれはねーわ…😟
大学→大学院→なぜか芸能会関連→ソ〇ーの重役面接通過したのにバカな俺は断ってしまって→某ゲーム機ゲーム開発→某企業研究所→精神疾患でここから完全に人生が迷走
だったし、この10年で一貫して公私ともに取り組んでいたのはリアルタイム3DCG関連、OpenGL、Direct3D、ゲームやCAD、流体シミュレーションなど周辺技術なので、
結婚するにしても、まず収入ないと駄目だろ、そのためには何か専門分野を持たないと、と流石にバカな俺でも思うわけで…😟
あと、
いやいやいやいや…😟
いや、俺、伸び悩んでるなあ、みたいなことは何度もあったけど、受験勉強はスポーツと同じ、努力で突破口が開きやすい
でも、恋愛や結婚は努力が実ることはほぼない、ないと思った方がいい、理不尽極まりないのが人間のコミュニケーション
俺は正しい通信プロトコルを心掛けてるのに、相手が正常に応答してくれない、なぜなんだぜ???
見合いがどうとかは置いておくとして、基本、運の要素が強いもの、例えばギャンブルやパチンコもそうだけど、
理系人間は、努力が成立しなそう、予測が完全に不可能、観測し続けたデータから予測できな過ぎて全てが無駄に思えてしまう、
みたいな、all or nothing思考に陥りやすい、というか、理系というより俺が陥りやすい、だから努力を継続できない
ウシジマくんのニートくんがパチンコをやりながら、俺は小出しに、人生を賭けている、とか言ってた気がするんだけど、
まあ、パチンコとか一般的なギャンブルの勝率にそもそも問題があるものの、確率的なことで勝利するには賭け続けないといけない、当たり前だよね
だけど、受験も運の要素があるけど、例えば、出題傾向がある、そこから来年の問題を予想できる、努力するほど回答速度が速くなる、
受験はスポーツと同じだと思ってるんで、じゃあ、スポーツと恋愛が同じか?ってことだよね、俺は同じだとは思わないよ…😟
短い期間、自分にも彼女がいたことが何度かあったけど、ほとんどは女性の方から勝手に告白されて、受け身で付き合い始めて、
女性の方から、なんか勘違いだったわ…、みたいなことを遠回しに言われて、なんかこっちもちょっとムカッとして、じゃあもういいです、みたいな感じで終わる…😟
絵も音楽もやればやるほど上達を実感できる、
身体がまともだった頃は、水泳、スキー、自転車、ボクシング、色々やってたけど、どれも努力が実るんだよ…😟
でも、恋愛は無理、
恋愛成就を目指して、朝から素振りの告白100回!とかありえないから…😟
追記:
理系人間というか、俺が、高校で言うところの確率統計が苦手、嫌い、なのと関係がある気がしてきた
線形代数、微積、話がズレるけど物理、特に古典力学、有機化学は好きだった
英語が駄目なんだけど、これはできないと社会に出てから仕事にならんだろ、と中高から思ってたし、
実際、社会に出てプログラムを書くようになれば、ドキュメントは英語、3DCGは線形代数、微積、古典力学が完全に活きる、
というか、高校レベルでは足りないので、学部、院での追加の知識、
個人的にゲームセンターで稼働しているゲームを後ろから観察してアルゴリズムを考える、
それを家に戻って実装してみて、また考えるとか、そういう経験が活きてくる
あー、だから俺はデータサイエンスよりのことが苦手なんだろう…😟
もっとも、データサイエンティストという職業が持ち上げられるようになり、自分も重い腰を上げて勉強するようになり、
それなりの成果を収めたりもした、けど、まあ、苦手意識は変わらないなあ…😟
PythonのJupyter Notebookみたいなの、今は色々な種類があるじゃないですか
例えば、Pythonでループ書いて、例えば、粒子が重力と風の影響を受けます、みたいなコードを書きがちというか、
そもそも、メガデモみたいなのとか、ああいうのが好きなんだよね…😟
恋愛は理系的には確率、統計なんじゃないの?という意見なら、正解だと思う
だから、恋愛、結婚は理系的じゃない、という言い方は間違ってるな、と自分でも思った
あー、単に俺の苦手教科だったから、じゃねーの、なんなのこれ…😟
プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン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回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。
彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴニハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。
かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。
あれだ、算数の文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。
こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。
もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。
今すぐプログラミングをやめろ
ほぉ。まるで「ライブラリの移植なんて余裕っすよ」と言わんばかりの口ぶりだな。お前、自己放尿レベルで気持ちよくなってるが、現実を何も理解してねぇぞ。
いいか。「同じ機能を移植するだけ」って発想がそもそも低能の証拠だ。Pythonの強みは言語としての表面構文じゃなく、生態系として積み重なった最適化と実績だ。
NumPyやPandas、Scikit-learn、PyTorch、全部C/C++やFortranの実装をPythonバインディングで何層もラップしてる。
しかもメモリ管理、スレッドセーフティ、BLAS最適化、GPUオフロード、それらを組み合わせたときの挙動の安定性まで含めてライブラリって呼ぶんだよ。
「決まったインターフェースで移植するだけ」とか言ってる時点で、頭の中で想定してるライブラリが、せいぜい数千行のユーティリティレベルだろう。
企業が内部で作るって?そりゃ車輪の再発明だよ。しかも、Pythonが10年かけて磨き上げたアルゴリズムや最適化を、数ヶ月の業務開発で再現できるとでも?寝言は夜だけにしろ。
あと、「いまどきの言語ならそんな大変じゃない」って、まるでNode.jsがCythonやNumbaのようなネイティブ統合の層を持ってるかのように錯覚してるのが痛い。
V8のJITで高速化できるのはせいぜいスクリプトレベルの話。数値演算、メモリアクセス、スレッド制御を最適化できる数学的基盤の厚みがまるで違うんだよ。
Nodeで同じことをやろうとしたら、JSからC++アドオン叩いて、型変換のコストで死ぬだけ。
つまり、「移植できるだろ」って発言は、Pythonの生態系を単なるコード群だと思ってる愚か者の自己放尿なんだよ。
それは「パルスジェットなら自作できるだろ」と言ってる鉄クズコレクターと同レベル。動くかもしれんが、効率も精度も再現性も自己放尿レベル。
Node.js厨が「Pythonのライブラリは移植できる」とか言うのは、「俺でもベートーベンの交響曲ぐらい耳コピできる」と言ってる音感ゼロの自己放尿芸だ。
AIにとっては、Pythonのような中間表現を生成させる方が得意であると考えられます。
中間表現(Pythonなど): 人間が理解しやすいように設計されており、抽象度が高いです。AIは、より少ないトークンで複雑なロジックを表現でき、学習データも豊富にあるため、意味的な整合性やロジックの正確性を保ちやすいです。
機械語: 抽象度が非常に低い(CPUの命令レベル)です。特定のCPUアーキテクチャに依存し、メモリ管理やレジスタ割り当てといった低レベルの詳細をすべて正しく処理する必要があります。これはAIにとって学習が複雑で、小さなミスがプログラム全体の破損につながりやすくなります。
中間表現: 比較的長いコンテキストを保持しやすく、デバッグやエラーの特定も高レベルで行えます。
機械語: 必要な命令数が多くなりがちで、AIが長大なバイナリシーケンスを生成する際に、コンテキストウィンドウ内に必要な情報すべてを保持しきることが難しくなる可能性があります。また、中間表現と比べて意味的な構造が薄いため、AIがバグのないコードを生成するのが格段に困難になります。
中間表現: Pythonのような高級言語は、特定のハードウェアに依存しないため、移植性が高いです。
機械語: 特定のアーキテクチャ(例: x86, ARM)に完全に依存するため、AIが異なる環境向けにコードを生成する場合、それぞれのアーキテクチャごとに学習と生成を行う必要があり、汎用性が低くなります。
現在のAI(特に大規模言語モデル)の能力は、人間が扱う高レベルの抽象的な概念やロジックの理解に優れているため、その能力を最大限に活かせる中間表現の生成の方が得意です。
機械語の生成は、極めて精密で低レベルな制御が要求されるため、AIにとってはるかに難易度が高いタスクとなります。
AIが中間表現を生成した場合でも、その後の処理(コンパイルやJITコンパイル)によって最適化され、最終的な機械語が生成されます。
これは従来のコンパイラ設計と同じアプローチであり、AIは「何をすべきか」という高レベルの指示に集中し、コンパイラが「どのように効率的に実行するか」という低レベルの処理を担当する、役割分担の面でも合理的です。
去年の春、僕は東京の小さなWeb制作会社でフロントエンドエンジニアとして働いていた。
入社して3年目、ようやく後輩もできて、上司にも「次のリーダー候補だな」なんて言われていた。
でも、あれはChatGPTのAPIを社内に導入した直後のことだった。
## ある日、突然の“置き換え”
昼休みに同僚のケンタがノートPCを見せてきた。画面には、僕が午前中に組んでいたUIとほとんど同じデザインが、一瞬で生成されていた。
その時はまだ笑っていられた。
でも1か月後、上司に呼ばれた会議室で「業務の自動化に伴って、再配置を検討している」と告げられた。
再配置なんて言葉は、聞こえは柔らかいけど実質リストラの前触れだ。
## 抜け殻になった1か月
失業保険の申請に行ったハローワークの待合室で、隣に座っていた女性も言っていた。
> 「AIにシナリオ作られて、私のライターの仕事なくなっちゃって。」
その時、初めて気づいた。僕だけじゃない。
一日中スマホで求人を見ても、「AIスキル必須」「Python経験者歓迎」の文字が並ぶ。
皮肉な話だと思った。
## それでも、学び直す決意
「手打ちのコードなんてもう時代遅れか」と思いながらも、画面の端に表示された自分の名前を見て、なぜか涙が出た。
“人間が作る”ということの価値を、もう一度取り戻したいと思った。
AIに勝とうなんて思っていない。
LINEオープンチャット「はてなブックマーカー」の1週間分の要約を、さらにAIを使用し、試験的にまとめまています。
---
---
---
---
---
---
---
---
---
---
---
---
---
---
---
この1週間は、**AIと人間社会の関係性を中心テーマとして、多方面の話題が「技術の急激な進化に人間はどう適応するのか」という問いに収束している**のが特徴的だった。AIは投資・ギャンブル予測から日常の雑談生成まで影響を及ぼし、その便利さと不安が共存している。
同時に、**生活実感(寒さ、子育て、健康不安、ペット)**といった「人間の身体性と感情」に根ざした話題が強く現れ、テクノロジーと人間の温度差が浮き彫りとなった。
食・趣味・ユーモアによる緩和的な会話が全体を支え、「情報社会の混沌を笑いながら受け入れる知恵」がコミュニティ全体に見られた週であった。
https://anond.hatelabo.jp/20240722084249