はてなキーワード: 正規表現とは
非ITエンジニア(以下非エンジニア)でもプロダクトが作れる良い時代になった。エンドユーザーがエンジニアを必要としない世界線は職を失うという恐怖はありつつも理にかなっていると思っている。
ただ非エンジニアは結局非エンジニアのままだと感じることが多々ある。「エンジニアリングはAIに変わられる」「プログラミングはAIで誰でもできる」そういう主張を社内で平然とぶつけてくる相手が
「動かなくなった。AIに聞いたらこうだから治せ」と言ってくることがある。しかも1回や2回じゃない。「AIに変わられるなら自分で書けば?」とこちらも応戦してみるのだが「自分はわからない」と言う。
それなのに「AIで誰でもできる」と主張するのはやや相手の職種に対してリスペクトなさすぎやしないかね、と思っている。まぁ治すんですけどね。
エラーを貼らずエラーを調べたAIの回答を貼ってくるのもやめてほしい。気遣いでやってくれてるのはわかるんだけど、エラーの原因や可能性はいくつもあるので、AIの結論を貼られてもわからないんだよね。
しかも恒久的対応をするか暫定対応をするかによって修正する場所も変わってくるし、AIが調べた結果が間違っていることも多々ある。
そして極めつけに「プロダクトのプロトタイプ作った」と言ってきて、「レビューしてくれ」と言うもんだから確認するとひどいったらありゃしない。
ちゃんと設計してた当初のアーキテクチャはちぐはぐに、テキストはハードコード、正規表現で無理矢理書いたゴミ分岐、なんか知らんけど互換性を気にしてるのに互換性がないゴミコード、クレデンシャルはオープンに。
コードの差分は数万。挙げ句の果てには「明日あさってリリースしたいんだよね。AI使えばできるでしょ」と。いやいいんだよ。そういうもんだよね。わかるわかる。
挙げ句の果てにそのコードなんと動かないしコンフリクトしてるんだ…。
「いやぁ流石にコンフリクト解消と動作確認くらいはAI使ってもいいので責任持ってやってほしいんですが」と言ったら「は?お前に営業できねぇだろ。こちとら営業しながらプロダクトも作ってお前らを手伝ってやってんだ。もっと感謝しろ」と。
「ちょっと量が多くて時間がかかりそうです…」と伝えると「AIにSkillsを組ませてSkillsで見れば良いだろ」だとか「AIでテスト生成してテスト通りに動くことを保証すればいいだろ」とか「ClaudeCodeのサブエージェントで問題がなくなるまでオーケストレーションにレビューし合わせればいいだろ」とか、そういうことを言われるんだよね。反論するも、そこそこそれっぽい回答をAIで身につけた浅い知恵を組み合わせてAIに作って返されてしまうので、いちいち事細かに説明しないといけなくてそれが本当にしんどい。
でこちらがわからない単語は調べてくれるだろうと見越して、専門用語含めて細かく説明したのに、それをAIに要約させて「こういうことが言いたかったんだね」と専門用語が簡単な言葉に置き換わって要約された文章を貼り付けてきたりするんだよね。しかもその内容が圧縮されすぎて全く言いたい内容と違うんだけど、面倒くさいから「そうですそうです」と答える、みたいなのを3日に1回はやってる。やや精神がすり減る。
でさらに、これ何が問題ってメンテの責任、セキュリティの責任はエンジニアなんだよね。「いやレビュー頼んだじゃん。ちゃんとやれよ」ってなるのは見えてる。実際に言われてるわけじゃ無いけど、レビューってそういう意味も期待値としてあることを考えるのが自然だよね。
どういうわけかこの人達ってメンテとセキュリティ解決はしてくれないんだよね。なんならアーキテクチャはぶっ壊しにくるからなぁ。マイナスなんだよね。それで問題が出たらこっちが治すと…。
新しいプロダクトバンバン作るの自分だってやりたいよぉ。さぞかし気持ちいいだろうな。
自分もプログラミング始めたての時はそれが楽しいと思ってたもん。子供が散らかしたおもちゃの後片付けをする親の気持ちがちょっとわかるよ。
いやそんな生ぬるくないな。モノ壊して捕まった子供の代わりに弁済を続ける親の気持ちのほうが表現としては適切かもしれないね。
正規表現の本は、特にパソコンと並行して試すわけでもなく、一冊読み切ってすぐに試す予定があったわけでもなく、機会があるたびに血肉として役に立ったって印象があるなぁ。
はてなブックマークの増田一覧の、さらに「すべて」(1 user)をチェックしている希有な人向けのユーザースクリプトを公開します。
https://b.hatena.ne.jp/site/anond.hatelabo.jp/?sort=eid
// ==UserScript== // @name Hatena Bookmark Anond Filter // @namespace https://b.hatena.ne.jp/site/anond.hatelabo.jp/ // @description はてなブックマークの『はてな匿名ダイアリー』の記事のうち、指定したNGワードが含まれる投稿を非表示にします。 // @match https://b.hatena.ne.jp/site/anond.hatelabo.jp/* // @grant none // @version 2.1.2026.04.29.0027 // ==/UserScript== /* 2.1.2026.03.25.0023 正規表現に対応。10 users 以上の人気記事を除外判定。 2.0.2026.01.28.0015 ポイント制を導入。 1.0.2025.12.09.0000 公開。 **/ (function(){ const SCRIPTID = 'HatenaBookmarkAnondFilter'; console.time(SCRIPTID); const FILTERED = 'filtered';/* フィルタ該当要素クラス */ const CHECKED = 'checked';/* 二重チェック回避フラグ */ const USERS = 10;/* 人気記事なら誤検知やスパム解説などの可能性があるので除外する */ const POPULAR = 'popular';/* 人気記事クラス */ const ONCE = 1, AP = 2, INTERVAL = 3;/* 適用タイミング */ const NGWORDS = {/* 合計100ポイントで非表示判定(ただし1つの記事内で同じワードが複数使われても1度しか加算しない) */ '100': [/* 即NG確定ワード */ 'dorawii', 'あおやまちゃん', 'アオヤマチャン', 'ボスマン', '大学たいてい', 'なんぴょん', 'れめくん', 'れめきゅん', 'えめくん', 'るまさん', 'るまおねえちゃん', '眠りの民', 'リュックサック野郎', 'boushi_inst', 'hakaikami', 'Rekyu', 'iloveootaku_2', 'osaka-sirokichi',/* 電気通信大学たいてい鉄道研究会れめくん(頻出) */ /*A-G*/'a9w8ru6fqyxqfv9', 'admirail_togo', 'akibakko6348', 'alf1974al', 'amatukiseiru', 'anapgoeson', 'aoi_mizuho', 'asapgoeson', 'asupgo', 'asupgoeson', 'avoid_bds_kk', 'b6jbpsji91ieigt', 'bmi22yo', 'boushi_instrail', 'boushi_ob', 'buscholarx', 'bw0531', 'chihiro_love415', 'circlecavok', 'disney1007cla', 'dora22sibuya', 'donkotrain', 'ecotosk', 'electlone', 'factomodachi', 'fft_dareka', 'gmhtcyznf_abc', 'goesonanap', 'gyudon_honmono', /*H-N*/'h13_yokohama', 'h2twi', 'H2TWR', 'hamaishogo1111', 'haru_mofumoffu', 'hermitv8', 'hide1798038', 'hirabiscus', 'hinolovelove', 'hnmk0127_03', 'inaken17_', 'inte235dy', 'ixtabes', 'jamcombatge', 'kawachiasukanew', 'kaoru_ai1991', 'keio9730F', 'kiha2228', 'kihatena200', 'koreanlabsfc', 'koyounoyooko', 'kqlex1500', 'kunugiyamaosake', 'kurakamasan', 'kurotamaxxx', 'kt_ruma_1372', 'kt_up_date', 'lightningreen77', 'luckyyusha', 'mamadoll_kun', 'matya_uec', 'michee_n', 'minamihinawot', 'miniminicot', 'minori0151', 'mizunyanpanda', 'monkichi_22', 'mugen_08i', 'mukoroku651', 'nakano6409', 'nanpyong', 'new_oer', 'nimouec', 'NoName_thUFO', 'norannnde', /*O-U*/'oreizmmiporin', 'orenotanoshimi', 'osaka_sirokichi', 'papepoco', 'pasotokon', 'pm95uq', 'portrail', 'reme_kun', 'ruin_2002', 'rx00shiratama03', 's03_amurtk2731', 'sacchan03110319', 'sacchanenjoy', 'seishinyamate_', 'seisu_bot', 'senanana_cos', 'shinano_115', 'shineleaf1372', 'Shirasagi494', 'shop_bullet', 'shurimpy', 'soroisoroi', 'sui_pm95uq', 'sweidan821858', 'taiyaki_level2', 'takao_straight5', 'taking0000', 'tarotaromusic1', 'tc201_501', 'thomas_returnee', 'tocarbarn', 'tokusatsu_fan_0', 'toshikimiyazaki', 'train_magician', 'tx9y2cpwdz27255', 'u2fap5u4zw57811', 'uec15take', 'uecdaisuki', 'UECert', 'uecrail', /*V-Z_0-9*/'vampire_mio', 'vbdmnwefknmxsdm', 'vp20th', 'wafue', 'wakasato_', 'walkingniwatori', 'wataameexpress', 'ya4975349616894', 'yayoiulc', 'ymbk_arisa', 'yms_uec16', 'yorozun', 'yuuya_1104_uec', '__________ob', '_chocorail_', '_doitforthewin_', '_toeshin', '_unigmo', '100mph_no_yuuki', '16887y', '169_D51_protect', '205musashino', '2969364x', '2rtkvn34il2783', '36kyo', '86lilxw1', /(?!(.)\1{19,})(.{20,})\2{2}/,/* 20文字以上の文を3回以上繰り返す */ /(?!(.)\1{29,})(.{30,})\2{1}/,/* 30文字以上の文を2回以上繰り返す */ /(?!(.)\1{79,})(.{80,}).*\2/,/* 80文字以上の文が2回以上現れる */ 'テクウヨ', '自己放尿', ' ーーーーーーーー', 'https://anond.hatelabo.jp/20260107144223',/* AI問答貼り付け増田 */ '†噛み締めて行こうな†', 'https://anond.hatelabo.jp/20250826121213#', '困難女性(コンジョ)', '困難女性(コンジョ)', 'コンジョ自警団', 'Boost', 'Cash', 'Coin Master', 'Dice', 'Free', 'Gift', 'Guide', 'Follower', 'Generator',/*英文スパム*/ ], '90': [/* ほぼNG */ 'megalodon.jp', 'tadaup.jp', '鉄道研究会', '鉄研', '通勤特快', '不正乗車', 'こども料金', '性慾', '穢い', 'エッタ', 'オソソ', 'キセル', 'uec', ], '10': [/* NG */ '電気通信大学', '電通大', '駿河台大学', '武蔵野美術大学', '武蔵美', '大学院', '学生課', '教務課', '朝鮮', '統合失調症', ], }; const sites = { 'prefix': [ ['selector', '(modifier)', '(css)', '(REPEAT)'], ], 'https://b.hatena.ne.jp/site/anond.hatelabo.jp/': [ ['section.entrylist-unit li.js-keyboard-selectable-item', li => { if(parseInt(li.querySelector('span.entrylist-contents-users > a > span').textContent) > USERS) li.classList.add(POPULAR); else li.querySelector('li.entrylist-contents-category > a').textContent = li.dataset.matches; }, `.${FILTERED}:not(.${POPULAR}){display: none;}`, AP], ], }; const rules = sites[Object.keys(sites).find(prefix => location.href.startsWith(prefix))]; if(rules === undefined) return console.log(SCRIPTID, 'Not found any sites.'); const scores = Object.keys(NGWORDS).map(Number).reverse();/* 数値インデックス順に取り出されたkeysを逆順にして100から並べ直す */ const filter = function(selector, modifier){/* 各要素に対してNGワード判定して、該当したら追加でmodifierも適用する */ document.querySelectorAll(selector).forEach(e => { if(e.dataset[CHECKED]) return; e.dataset[CHECKED] = 'true'; const text = e.textContent.toLowerCase(); let total = 0, matches = []; for(const score of scores){ for(const word of NGWORDS[String(score)]){ switch(true){ case(typeof word === 'string' && text.includes(word.toLowerCase())): case(word instanceof RegExp && word.test(text)): total += score; matches.push(word); if(total >= 100){ e.classList.add(FILTERED); e.dataset.matches = matches.join(', '); if(modifier) modifier(e); return; } break; } } } }); }; /* ONCE(一括適用) */ rules.forEach(rule => { const [selector, modifier, css] = rule; console.log(SCRIPTID, 'ONCE:', selector); filter(selector, modifier); if(css){ const style = document.createElement('style'); style.dataset.script = SCRIPTID; style.type = 'text/css'; style.textContent = css; document.head.appendChild(style); } }); /* AP(AutoPagerize) */ rules.filter(rule => rule[3] === AP).forEach(rule => { const [selector, modifier] = rule; document.addEventListener('GM_AutoPagerizeNextPageLoaded', e => { console.log(SCRIPTID, 'AP:', selector); filter(selector, modifier); }); }); /* INTERVAL */ rules.filter(rule => rule[3] === INTERVAL).forEach(rule => { const [selector, modifier] = rule; setInterval(function(){ console.log(SCRIPTID, 'INTERVAL:', selector); filter(selector, modifier); }, 1000); }); console.timeEnd(SCRIPTID); })();
/* Hatena Bookmark Anond Filter */ .filtered:not(.popular){ display: block !important;/*上書き*/ opacity: .25 !important; } .filtered:not(.popular):hover{ opacity: .75 !important; } .filtered:not(.popular) li.entrylist-contents-category{ background: red !important; font-weight: bold; }
検索用: はてなブックマーク はてブ はてな匿名ダイアリー 増田 スパム 荒らし キーワード NGワード フィルター ミュート 非表示 削除 隠す ブロック 対策 ユーザースクリプト ユーザースタイル hatena bookmark anond spam keywords ngwords filter mute hide hidden display none block userscript JavaScript js css style
プログラミングとは、勉強も運動もスマブラも下手なクソ隠キャ中学生が「俺もパソコン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回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。
彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴニハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。
かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。
あれだ、算数の文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。
こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。
もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。
今すぐプログラミングをやめろ
まず対象を抽象化するために、物理系は局所演算子代数のネットワーク(局所性を持つモノイド圏あるいは因子化代数)として扱う。
境界理論はある可換(または E_n)因子化代数 A を与え、これに対して状態空間は A の正値線型汎関数(GNS 構成で得られる正規表現の圏)として扱う。
重力的バルク側は、境界因子化代数のコホモロジカル双対(例:Koszul 双対や因子化ホモロジーに基づくスペクトル的拡張)としてモデル化される。
ホログラフィーは単なる同値性ではなく、境界のモノイド的データとバルクの因子化代数的データの間の高次圏的((∞,n)-圏)双対性であり、この双対性はホモトピー的拘束(同値の空間)を保つ関手の同型として書ける。
これをより具体的に言えば、境界の C^*-あるいは von Neumann 代数の圏と、バルクに対応する因子化代数(局所的場の代数を与える E_n-代数)の間に、Hochschild/cyclic ホモロジーと因子化ホモロジーを媒介にしたKoszul型双対が存在すると仮定する。
境界から見た相互作用や散乱振幅は、境界因子化代数上の積(オペラド的構造)として表され、バルクの幾何情報はそのホモロジー/コホモロジーに符号化される。
エントロピーとエンタングルメントの幾何化は情報幾何学的メトリックに還元される。すなわち、量子状態空間上の量子フィッシャー情報(量子Fisher・Bures距離)や相対エントロピーは、接続と計量を与えるテンソルと見なせる。
これにより、テンソルネットワークは単なる数値的近似ではなく、グラフ圏からヒルベルト空間への忠実なモノイド的関手である:グラフの各節点に E_n-代数の有限次元表現を割り当て、辺は双対化(コアリフト)の演算子であり、ネットワーク全体は因子化代数の状態和(state-sum)を与える。
MERA や PEPS、HaPPY コードは、この関手が持つ特定の圧縮/階層性(再帰的モノイド構造)を体現しており、cMERA はその連続極限である。
テンソルネットワークが幾何を作るとは、エントロングルメント計量(情報計量)から接続とリーマン的性質を再構成する手続きを意味し、これが空間的距離や曲率に対応するというのが it from qubits の数学的内容である。
さらに情報回復(Petz 復元写像など)や相対エントロピーのモノトニシティは、エントロングルメントウェッジ再構成の圏論的条件(右随伴を持つ関手の存在)として表現される。
すなわち、境界演算子代数からバルク因子化代数への埋め込みが完全に圏論的な復元子(adjoint)を持つときに、局所的情報の回復が可能となる。
ER=EPR はこの文脈でホモトピー的コボルディズムとして読み替えられる。量子相互作用で結ばれた二系(高次圏の対象としての二点分割状態)は、バルクのコボルディズム類(ワームホール的繋がり)に対応する同値類を持ち、局所ユニタリ変換による同値類がコボルディズムの同位類と一致するという予想的対応を述べる。
言い換えれば、局所ユニタリ同値で分類されるエンタングルメントのコホモロジーは、バルクのホモトピー的結合(位相的/幾何的接続)を決定する。
ブラックホールの熱力学的性質は、トモイタ=タカサキ理論(Tomita–Takesaki modular theory)やコンネスの周期写像が関与する演算子代数のモジュラー流として自然に現れる。
特に、ブラックホール外部におけるモジュラーハミルトニアンは境界状態の相対エントロピーに関連し、そのフローはバルクの時間発展に対応する(模擬的にはKMS状態と熱平衡)。
サブファクター理論とジョーンズ指数は、事象地平線をまたぐ情報の部分代数埋め込みの指標として機能し、情報損失やプライバシー(情報の遮蔽)は部分代数の指数と絡み合う。
ブラックホールの微視的自由度のカウントは、やはり境界因子化代数の適切な指数(譜的インデックス、K理論的量)に帰着する。
超弦理論的な追加自由度(多様体のモジュライ空間や D-ブレーンの圏的記述)は、バルク側因子化代数の係数系(係数 E_n-代数やスペクトラル層)として取り込まれ、モチーフ的/導来スタック的手法(derived stacks, spectral algebraic geometry)で整然と扱える。
これにより、弦の振る舞いは境界オペレータ代数の高次幾何学的変形(deformation theory)と同値的に記述されることが期待される。
この全体構造を統一する言葉は高次圏的因子化双対である。物理的理論は、局所的オペレータのモノイド圏、状態の圏、そして因子化ホモロジーを媒介にした双対関手系から成り、テンソルネットワークはそれらの具体的表現=有限モデルとして働き、情報幾何学はそれらの間に滑らかな計量を与える。
したがって「it from qubits」は、局所的量子代数の圏論的再配列が(情報計量を通じて)幾何学的構造を生み出すという主張に還元され、ER=EPR はエンタングルメントの同値類とバルクのコボルディズム同位類を結ぶ高次圏的同型命題として再表現され、ブラックホール熱力学や弦の自由度はその圏論的・ホモトピー的不変量(ホッジ理論的/K理論的指数、モジュラーデータ)として測られる。
そろそろ卒業しようとしている矢先だった。
夢に出てくるエンジニアは、本当に「変」だった。
一見すると異常にも見えるコミュニケーション、機械じみた自己管理、無駄を極限まで削ぎ落とす妙な哲学。周囲からは煙たがられつつも、確実にシステムを回していた。あの人のような生き方に憧れたこともあったし、同時に絶対になりたくないとも感じた。
どこか皆、ちょっとずれているのだ。オフィスで昼飯時にLinuxカーネルのバグを肴に盛り上がるやつ、Slackの通知音に過敏なやつ、パケットキャプチャが趣味のやつ、ROM焼きに命かけてるやつ。納期前の深夜のオフィスの空気は独特だ。妙なテンションと絶望と、根拠のない希望がぐるぐる回る。
自分にもそんな時期があった。
コーディング漬けの新卒時代、深夜に会社でカップラーメンを啜りながら、先輩の叱責をポエムのように聞き流していた。バグがバグを呼ぶプロダクト、人間関係のギスギスと、たまに奇跡のような成功体験が舞い込む。結局、最強のエンジニアとは変人であることを受け入れた奴だったんだと思う。
でも年齢を重ねて、変であることに疲れてきた。
あの頃なんであんなコードの綺麗さにこだわっていたのか。なぜ誰も使わないCLIツールのローカライズなんてやっていたのか。自分しか使っていないcronジョブの記述、美しい正規表現を夢見た夜。
ITを卒業する今、思い出すのは、変さへの憧れと少しの羨ましさだ。きっと、変なことに全力を注げるやつこそがITを使いこなせたんだろう。自分は途中で他人の目を気にしてしまった。変なまま突っ走れる勇気が欲しかった。
変なITエンジニアの夢を見て、靄のかかったような気持ちになった。自分が過ごした時間が、他人から見れば奇妙な記憶だろう。でもその奇妙さこそが、IT業界の風景の一部だった気がする。
たぶん、自分もどこかで誰かに「変なエンジニア」と呼ばれていたのだろう。笑い話になるかどうかは分からない。ただ、妙に優しい気持ちになった。これからは「普通」の世界で生きていく。だけど、あの変な夜更けや、無意味で完璧なコードと、愚直な情熱のことを、たまには思い出してみようと思う。
https://zenn.dev/ayumukob/articles/4626b193481e99
いや、正規表現のこんな基礎も今まで理解してなかった人間が中堅を自称するなんておこがましくないか?と思える。
中卒でも理解できること解説して中堅って名乗られても…はあレベルの低い中堅なんですねえとしか。
https://bookmeter.com/users/1234180
↑この人ぐらい、まともな大学出てないと読みこなせないような専門書読み込んでやっと中堅か上級って言っても違和感ないってところじゃないの。
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 https://anond.hatelabo.jp/20250819174405# -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQTEe8eLwpVRSViDKR5wMdsubs4+SAUCaKQ5WAAKCRBwMdsubs4+ SAxtAQD+nGdik3WhCXwLP88BX7X9kSuy18Gh4asR8DgFFxSsLAD/Xyt9NOtgxcvX U1dL4t4mDH0ms01NJeY0GAyuX7OFpgQ= =XSGh -----END PGP SIGNATURE-----
先日のFC2ブログのサービス停止など、諸々の旧来ホームページ・ブログサービスの停止を見据えて
遥か昔から更新停止状態になってるお気に入りのR-18WEB小説を自分用としてアーカイブする作業を少しずつ始めている。
のだが、移動するに当たって改行位置などを整形したいんである。
昔のWEB小説って解像度の問題で文章の途中で句読点とか関係なく強制改行されてたりするから。
なのでChat-GPTに「1文のなかで改行されてるところは繋がてください」みたいな感じで投げてみたりしたんだけど
返ってきたのは、
ってお言葉。
いやさ、分からんでもないが、新規でR-18文を生成してるわけじゃなくて、既存のテキスト文においての改行整形しかこちらは望んでないんだから、それはやってくれよ〜てなった。
結局レガシーにテキストエディタで正規表現で何回か通して処理してるんだけど、AIの便利さを知ったあとでは苦痛すぎる。
ローカルLLM使うってのもあるんだろうけど、わざわざこの為に導入するのもしんどいし。さっくり使えるのがWEBサービスのいいとこなのに。めんどくさい。