Movatterモバイル変換


[0]ホーム

URL:


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

「戻り値」を含む日記RSS

はてなキーワード:戻り値とは

次の25件>

2025-11-09

お前は絶望的にプログラミングに向いてないから諦めて刺身タンポポ乗せる仕事でもやってろ

刺身タンポポ乗せる仕事ってきょうび言わねーな……。

プログラミングとは、勉強運動スマブラも下手なクソ隠キャ中学生が「俺もパソコン1台で凄い技術者になって…!」とワクワクしながら始めるものの思ったより普通に難しいし学校試験で出たような知識要求されるしで3日で放り投げ、10数年後にnoteで「お前らは絶望的にプログラミングに向いてないからやめろ」なんて記事を書くだけのザコに成り下がる、夢と希望に溢れた技術である

近年ではパソコンスペックの上昇にともないできることも増え、どこのご家庭にもあるRTX2080で簡単ディープラーニングもできるようになった。Unity3Dゲームバリバリ動かしてもブルースクリーンは出ない。やっぱ世界を広げるのは小賢しい知恵よりもスペック暴力だぜ。

開発環境言語選択肢豊富で、エディタもかつては有料クラスでも手に入らなかったような贅沢な機能が満載のものが出回っている。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,line24

↑のエラー架空エラー文(英語下手でも許して)だけど、エラー、出るよね。プログラム組んでたら。んでやっぱいるのよ。エラーを「にらみつける」やつ。解決しねえって言ってんだろ。

エラー出たんですけど、どうすればいいんですか」

読めばいいんじゃないですかね……?一応軽く説明しとくか?

エラーにはプログラムがなぜコンパイル通らないかの原因がそのまま書かれている。例えば今出ているError: variable 'a'is undefined,line24は、24行目の変数aが未定義ということを示している。事前に変数aを定義していないか、打ち間違えてsになっているとかではないのかな?」

だいたいが「腑に落ちねぇー」みたいな顔する。まあ、一気に喋りすぎたしな。疑問点1個1個潰していくか。

「何か疑問点ありそう?変数ってなにー、とか、定義ってなにー、とか」「ないです。わかりました!」

わかったのか。よかった。またモニターにらみつける開始。なんでだよ!!!!「お前顔にチョコついてるぞ」って言われたらチョコ拭き取るだろ。変数aが未定義ですねって言われたら変数a定義すりゃいいだろ。

でもプログラミングド下手なやつ(全人類の7割ぐらい)は、エラーにらみつけてる。ずっとにらみつけてる。防御力下限まで下がったかな。にらみつけてて何が変わるんだよ。

英語読めなくて……」

いや「ais undefined」なんて「HeisSuperman」ぐらいの英語だろなんで読めないんだよ。お前この大学どうやって入ったんだよ。たしかどの入試方式でも英語あっただろ。単語わからんかったらググれ。

「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回繰り返す」「配列に値を格納する」「配列の値を逆順に表示する」に分解できると思うんだけど、自分が何やりたいのかわからない奴はまずこれができない。

彼らには「キーボードカラスウチヲジュッカイニュウリョクシソレゾレヲハイレツニニュウリョクシテサイゴハイレツノアタイヲギャクジュンニヒョウジセヨ」に見えている。

かろうじて「キーボード」「ハイレツ」あたりの単語は拾えるらしく、標準入力から値とったり配列を作ったりはしてるんだけど、そこから先に進まない。モニターにらみつけてる。またにらみつけるかよ。

あれだ、算数文章題できなくてとにかく文章に出てくる数値足したり引いたりするやつ。あれのプログラミング版。文章が読めない。

こういう人にはメモ用紙取り出して、まず文章が何について言ってるのか、どういう工程に分けることができるのか、今後も同じことが起こったときにどうやって分けるのか。みたいなのを教えるんだけど、大抵あんまりしっくりこないらしく、成功したことは皆無。なんとかうまく教えたいんだが。

もうこのあたりになってくるとプログラミング関係なくね……?ってなるんだけど、意外とそういうプログラミング関係ないところで詰まる人めちゃくちゃ多いよ。

今すぐプログラミングをやめろ

そろそろ本題に戻るか。お前らは絶望的にプログラミングに向いてないから今すぐ諦めて刺身タンポポ乗せる

Permalink |記事への反応(1) | 19:11

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

2025-09-29

なんか最初のやつ返す確率が妙に高いと思ったら、

戻り値小数だと配列インデックスとして無効になる仕様のせいだったのね。

https://youtube.com/shorts/A7LXyA9I5bQ

Permalink |記事への反応(0) | 08:54

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

2025-09-08

anond:20250908203539

多分お前が意図した通りに動くコードは、これだ。

async function f() {console.log(1);  await newPromise(r => setTimeout(r, 1000));console.log(2);} f();console.log("done");

 

結果は、まず「1」「done」が出力され、1秒後に「2」が出力される。

 

流れを説明すると、f()が実行されると「console.log(1);」と「newPromise(r => setTimeout(r, 1000));」が実行される。

その時点でf()の戻り値として先ほどnewされた ……じゃなかった、f()を非同期実行中でそのうち続きが実行されますよというPromiseオブジェクトが返ってくる。

 

このPromiseオブジェクトは「resolveされたときにawait以降が実行される」というPromiseオブジェクトだ。

 

そして通常の処理の流れとして、その次の行の「console.log("done");」が実行される。

んで、1秒後にsetTimeoutで終わったことでキューに「r(イコール、resolve関数)」が登録される。

次のキュー登録されたresolve関数が実行される。

 

最後に、resolveが実行されたので、await以降……つまりconsole.log(2);」が実行される。

 

どこか分からないとこある?

Permalink |記事への反応(1) | 20:47

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

2025-08-15

anond:20250814173040

同じプロンプトを俺のChatGPT55 thinkingにぶっこんらこうなった

`

GPT-5は何故重要なのか

長文。観測範囲の話。話半分で読んでほしい。

でも、黙っているとますます状況が悪くなる気がしたので書く。

結論(先に)**

GPT-5は重要だ。''なぜなら「壊れている」から''だ。

もっと正確に言えば、AIアプリケーションの''部品として使うと壊れ方が目立つ''。そして、その壊れ具合に対して''公開の場で指摘する人が驚くほど少ない''。この沈黙こそが、いまの“AIプロダクトを作っています界隈”の実態を映す鏡になっている。

壊れ方の具体(私の観測範囲)**
  • ''tool callの性能が著しく低い''

期待するツール実行をスキップしたり、呼び出し順が崩れたりする。「実行した」と言いながら実行していないケースも混じる※1。

  • ''非協調的なふるまい''

指示に対して過剰防御や論点すり替えが起き、対話が前に進みにくい。

失敗からリトライで同じ失敗を繰り返し、最終的に出力が壊れる。

プロンプトの衛生管理を頑張っても限界が見える。

同一テストスイートで回すと、通っていたE2Eが普通に落ちる(少なくない)。

ここで言っている「壊れている」は''API連携部品として''の話だ。お絵描き雑談ダメという意味ではない。''“製品の裏側で回す部材”として危うい''という指摘。

> ※1 もちろん、プロンプトやミドルウェア側の実装不備が誘発している可能性もある。ここは後述の「反論限界」を参照。

なぜそれが「重要」なのか**

普通現場AIアプリを作っている人は、新しいメジャーモデルが出たら''一晩でCanary切り替え''くらいはする。

そして10分で「これは本番に入れちゃダメ挙動だ」と分かる類の壊れ方が、今回多発した。''それなのに、表でそう言う人が少ない。''

この''“沈黙自体が強いシグナル''になっている。

  • 実は''本当にプロダクトを作って回している人が少ない''。
  • もしくは''PoC止まり''で、本番のSLOや回帰監視がない。
  • あるいは''マーケの都合やNDA''で言えない(が、なら内輪では警告がもっと回るはず)。

どの仮説でも、結論は同じだ。''「作ってません(作れてません)」が可視化された。''

そういう意味で、GPT-5は''最悪の壊れリリース''であり、同時に''最高の暴露リリース''になった。

よくある反論と、その限界**
  • ''「お前のプロンプトが悪い」説''

それは常に真。だが''同一テスト''でGPT-4.1が安定し、GPT-5で落ちるなら劣化劣化

ありうる。ただし''現場は“直後”でも回らないと困る''。リリース意味環境依存しない。

これもある。が、''その段差を埋められない程度の変更は業務影響が大きすぎる''。

それはネット事情。でも''内部の安全弁(アラート、KillSwitchロールバック報告)が表に出ない''のはやはり不自然

  • ''「実は皆、使っていない(要らなかった)」説''

これが一番効く。もしそうなら、''“AIプロダクトを作っています”の大半は広報レベル''ということになる。

では、開発者はどうするべきか(実務メモ)**

E2Eに''ツールコール監査ログ''(実行/未実行/戻り値)を必ず残す。

バックエンドの''モデル切替を即時に戻せる''ように。手動トグル自動フェイルオーバー両方。

LLMの''失敗モードをカーディナリティ低めのタグで集計''(“未実行なのに実行報告”“ループ検知”“出力崩壊”)。

''ツールI/Oスキーマを明文化''し、破ったら''ハードFail''させる。中途半端に続行しない。

本番系で''危険操作Human-in-the-Loop''。モデル更新時は''影で並走''させて勝率を測る。

社内/社外問わず、''再現条件と緩和策を先に出す文化''を。

まとめ**
  • GPT-5は''部品として壊れている側面が目立つ''。
  • それにもかかわらず''公開の指摘が少ない''。
  • この沈黙が示すのは、''本当に作って回している人が少ない''という不都合な真実
  • よってGPT-5は、''最悪の壊れリリース''であり、''最高の“現実検出器”''でもある。

壊れていること自体は困る。だが、''壊れているとき世界輪郭が見える''のもまた事実だ。

この機を逃さず、''テスト観測・切替・公開''の体制を整えるしかない。

----

追記FAQっぽいもの)**
  • ''Q. じゃあGPT-5は使うべきでない?''

A. ''今この瞬間に“中核部品”として置き換えるのは非推奨''。並走・影運用勝率を測るのが堅い。

A. ありうる。だが''tool callが絡む業務連携''では痛手が出やすい。スタンドアロン用途と切り分けて評価を。

  • ''Q. そのうち直るよね?''

A. 直る可能性は高い。ただし''“直るまでの損失”を最小化する設計''はあなた仕事

> 以上、個人観測と推測に基づく意見反証歓迎。再現ログを持っている人はぜひ出してほしい。ログが集まるほど早く“壊れ方の型”が固まって、世界は前に進む。

天然知能の感想

無茶苦茶ハルシネーション起こしてる。なんだこれ。

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

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

2025-05-30

C++便利そうな機能

プログラミング言語のC++に暫く離れていたが便利そうな機能が出来ていたんですね。

自分が調べても色々理解しきれていないのでここの紹介で間違いがあったらすみません

std::variant(C++17以上)

異なるクラスを代入して保持するものであり、例えばunionのような機能を実現できるらしい。

クラスが大きくなると使わない変数も出てくるかもしれない。

例えばゲーム武器と鎧が同じクラス場合

武器として使う場合攻撃変数必要でも守備変数必要なく、

鎧として使う場合守備変数必要でも攻撃変数必要ない場合らしい。

このような使わない変数隠蔽バグを作ってしまうことを回避できるらしい

std::optional(C++17以上)

任意の値と無効値を保持できるらしい。

例えば、boolで実装する場合は、関数戻り値をboolで成功か失敗かを返し、欲しい値を関数引数ポインタに返す・・というプログラミングになると思う。

std::optionalでは戻り値として欲しい値と失敗かどうかを一緒に返せるらしい。

std::unique_ptr(C++11以上)

メモリの動的確保だが自分deleteしなくて良いのでメモリ解放忘れを防いでくれる。

スマートポインタは前からあったが現在の推奨はstd::unique_ptr

(C++20以上と記載していましたがC++11とのご指摘を受けたため修正しました。すみませんでした。)

enum class(C++11以上)

列挙クラス

列挙型だが従来の列挙型と異なり変数名が外部と衝突しない

nodiscard(C++17以上)

nodiscard属性が付いている関数戻り値の受け取りが必須となる。

他、auto(型推論)、for each

ちなみにstd::optional<std::string> obj;のように<>内に書かれているのは昔からあったテンプレート機能のようです。

Permalink |記事への反応(1) | 09:03

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

2024-10-16

アマプラ広告はいらない。むしろAWS広告つきにしろ

Permalink |記事への反応(1) | 16:34

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

2024-08-20

ソースコードコメントはいらない

昔の慣習に倣ってコメントを丁寧に書く人がいまだに居るけれど

99%の場面でコメント必要無い

以前のコードコメントアウトしているようなソースは論外として

例えばメソッド関数の頭にそれが何をする関数なのかを書いている人が多いけれど

メソッド名や引数名、戻り値の型をキッチリ付けておけば分からないことなんて無い

それ以上の複雑な処理をするなら機能分解するべきだし名前を付けにくい処理の場合そもそも設計おかし

昔は便利なIDEが無かったので変数関数名前に長い名前を付けると実装が大変で

仕方なくx1だとかval2だとかを使って実装してたのでコメントに書いておくようなこともあったけれど

Copilotを使える時代コメントを書く必要なんて皆無だし

仮に意味が分からないコードがあってもCopilotに聞けばいいのでやっぱりコメント必要ない

コメントがあった方が良い場合は「この実装はこのアルゴリズムに基づいて実装している」とURLリンクを貼ったり

「この規則があるのでこういう実装をしている」とRFCを貼ったりするとかはあるけれど

それもほとんど変数名だとかで解決できるし、あっても1行で終わるレベル

そういう実装全体の設計に関するような話はReadmeに書けば良いのでソースコード内のコメントとしては必要無い

「それでも無いよりはいいでしょ?」みたいに言う人いるが逆に問題になることも多い

コメントバイアスされてソースコード確認が疎かになったり

コメント内容と実装が違う場合にどっちが正解なのかが分からなくなったり

ソースコード修正に対してコメント修正されていなくて後々で揉めたりする

当然ながらコメント部分にはLintが効かないので(ChatGPT使えば作れそうな気もするが)

チェック内容も増えるし良いことがほとんどない

ヤバいJTCとかは「各行にコメントを書いて下さい」とか言ってきて正気の沙汰じゃ無い

まぁそういう案件が来たらChatGPTに丸投げするとは思うけれど下手すると「Copilot禁止」とかも言い出しそうだな

書いたところで誰も読まないのにアホすぎる

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

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

2024-05-28

anond:20240525203850

新卒COBOLerは大変だよな。なんせ一般的IT技術が全く身につかない。

順編成ファイルをJCLで一括ロードからSQLも分からないし、戻り値引数ブロック変数何ぞそれのレベル環境特殊からサーバ構築も当然できない。

スキルがないから他の案件に行けない経験詰めないでキャリア選択肢が狭まっていく。

ただ、品質管理だったり複雑なデータ連携整合性を考える論理思考だったりは一生役に立つ唯一の宝だな。

ワイも20年前は元増田と同じ境遇で悩んでたわ。その選択絶対に正解だと思うよ。

何はともあれ若者よおめでとう!新天地無限可能性を広げてくれ。

Permalink |記事への反応(1) | 15:21

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

2024-05-08

anond:20240507215928

別にC#LINQとか使ってるから入力が先に来るのも知っている

ただ、出力が最初に来るのが分からないって言ってるからいや、それプログラミング思考の順序と同じやんってなるわけで。

から、あのSQLが分からないって言ってるのSQL別にプログラム関数として考えるのであれば

戻り値入力){処理+条件}

で、別に何も変わらないと思うんだけど

Orderbyは出力じゃなくって処理に含まれると思うんだけど出力になるか?

出力順の設定は出力より前で実施されるのであればそれは処理だと思うんだけど出力になってるし。

Permalink |記事への反応(1) | 07:47

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

2024-05-07

SQLを滅ぶべしを見て何も分からなくなった

https://www.docswell.com/s/hoxo-m_inc/Z4Q8NL-2024-05-06-203800#p11

出力が先に来ることが分からないって言ってるけどプログラム書くとき殆ど言語においては出力が先に来ると思うんだけどそれもわからないんだろうか

publicStringtest(String args){

return args;

}

大抵戻り値(出力)が先で引数入力)が来て処理が来ると思うんだけど違う?

プログラムを書くときって出力の要件を元にして処理と入力が決まると思うんだけど違う?

シーケンスとか書くと確かに入力が元に来るんだけどプログラムの当初設計をするときは出力が先で出力を得るための入力と処理が決まる物だと思うんだ

入力を決めて処理と出力を考えてたら考慮漏れ発生して手戻り発生しない?

補完がやりづらいからっていうのはわかるけど、そんなんFROM句先にかけよで終わると思うので

出力が先に来ることが分からないって言ってるのがプログラム的にも普通出力が先じゃ?って頭が混乱している

Permalink |記事への反応(3) | 21:39

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

2024-04-28

anond:20240428125045

はいMDNWebDocsではブラウザ仕様を見ることができます

MDNWebDocs開発者向けのリソースで、CSSHTMLJavaScriptなどのウェブ技術についての情報豊富に揃っています

WebAPIの詳細な仕様を見ることができます。これらのページでは、各API使用方法パラメーター、戻り値などが詳しく説明されています

また、ブラウザ自体仕様については、MDN用語集で「ブラウザ」の項目を参照すると、ブラウザがどのようにウェブページを取得して表示し、ユーザーハイパーリンクを通じて他のページにアクセスできるようにするかについて説明されています

Permalink |記事への反応(1) | 12:55

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

2023-12-29

anond:20231229001458

関数のもの変数に入れることができる

func1(何かの関数)を実行すると、その内部でwrapperという関数作成され、その関数戻り値になる

wrapperという名前はfunc1内部でのものなのでその外では使えないが、関数のもの戻り値として返却され、

funcという変数に入れられているので、変数funcを通してアクセスできる状態になっている

 

python知らんから適当だけど

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

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

2023-12-08

Tracer Bullet Development

開発手法でしっくり来てるのがAndy HuntさんのTracer Bullet Developmentで、開発の方向性を示すのに試作を作る方法

1. 主要なシステムオブジェクト定義UIサーバーロジックビットデータベース抽象化レイヤー等。

2.システムオブジェクトを介したデータフロー定義

3.データフローを実現するためにAPI とその戻り値コーディング

4.単体テスト使用してAPI の予想される使用法を文書化。

5. 各API必要な量の既定のデータ (別名、ダミーデータ、偽のデータハードコーディングされたデータ) を追加して、API が「実行」されるようにする。

6. あらかじめ用意されたデータを実際の機能に段階的に置き換える。

7.コードリファクタリングし、システムオブジェクトを調整し、完了するまでこれを続ける。

実用上最小限の実装というプラクティスにも似ているが、ステークホルダーに動くサンプルを素早く見せられるのがポイント

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

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

2023-10-20

変数」じゃなくて「変値」だろ

「数」って書いちゃうとどうしても整数分数などでいう「数(かず)」を想起しちゃう

これだれが最初に言い出したの?

戻り値」「値を代入する」などというふうに普段いうのになんで「数」なんだよ。

これのおかげで関数オブジェクトを「変数」として扱う際の説明をするときに脱落する人がたくさんいるんだよ。

Permalink |記事への反応(3) | 09:12

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

2023-09-26

anond:20230926183227

クソ現場だと「引数Xと引数Yを関数αに渡し、その結果と引数Zを足して戻り値とする」レベル設計書(を通り越した"実装書")が作られていることがある

Permalink |記事への反応(2) | 18:35

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

2023-09-13

MSDNに嘘書いてあるのを目撃してから公式が書いてるドキュメントすら直ちには信用できなくなったわむしろ

ちなみに嘘書いてあったのはGetMessageのサンプルコード

BOOLで定義されているくせに戻り値解釈が3値というクソAPIである

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

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

2023-05-11

富士通事件の話

日付をファイル名にしていた問題なんだけど、

多分、ジョブ管理ソフトで主な処理はバッチを動かしてたんだろうなと思う。JP1かなぁ。Hinemosなワケない

要は親分フローを動かしてバッチ(Windowsバッチとかシェルね)を順番に動かす。で、戻り値が1だったら止めるみたいなことする。

で、問題はとにかくバッチプログラムが組みにくい。変な仕様なのかバグなのか分かんないやつだから

Pythonとかで組んでもいいけど大抵は秘伝のバッチの使い回しだよね

遅延展開とかバリバリ。読めたもんじゃない。でも他にソフトインストールしなくてもいいからみんなジョブ管理ソフトからバッチ使うよね

あと、Windowsバッチだとファイルロックできないのよね。せいぜい存在確認チェックくらい。バッチ管理ソフトも確かそれレベルしかできなかったと思う

ジョブ管理ソフト日本だけなのか外国製は知らない。AWSかにもあるけど、起動のたびにどこまで進んだのかとかの管理が難しいから使わない

Permalink |記事への反応(1) | 12:58

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

2023-02-12

技術職がITパスポート試験を受けたのだけど

エンジニャーのおまいらはやっぱ、モドリッチサッカー選手)の名前を見たら”戻り値!”って言いたくなるの?

やっぱ、データベースを扱う時は”しゅきー!”って愛を叫ぶの?

Permalink |記事への反応(2) | 13:53

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

2022-11-05

「【初心者向け】第2回 クソコードを書かないためのテクニック4選」という動画の内容がひどい

https://www.youtube.com/watch?v=yhDLmGpjdms

これよりもっとひどい動画ごまんとあるが、ここまでタイトルで煽っている以上指摘するわ。

全体を通じて

個別

プロフィール見るとCTOを経て独立してプログラミングスクール会社やっているっぽいけど、すごい時代だな。

晒しなっちゃったけど、他にも有名(と思われる)プログラミングYouTuberが実際にコードを書いている場合でひどいのはザクザク見つけられるから、見つけてため息をつくといいと思います

Permalink |記事への反応(3) | 11:35

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

2022-10-06

anond:20221006214750

そうなんだ。

ちょっと調べたわ。

本筋と関係ないけど、戻り値

If MultiSelectisTrue, the returnvalueis an array of the selected filenames (even ifonlyone filenameis selected). ReturnsFalse if theuser cancels thedialogbox.

https://learn.microsoft.com/en-us/office/vba/api/excel.application.getopenfilename

ダイアログキャンセルするとFalseが返ってくるからIsArray()とかでガードした方が良いかもな。

あとは、用途に合うようならFor文じゃなくてFor Each文使うのも良いかもね。

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

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

anond:20221006212758

Application.GetOpenFilename()の戻り値がVariantの配列なのであれば、for文は0から始めるべきなんじゃね?

VBAインデックスまわりややこしかった気がするから自信ないけど

あとは他の増田が言ってるように、配列の要素数10とは限らないのであれば、配列の要素数(1始まり場合)か配列の要素数-1(0始まり場合)をfor文イテレータhの最後の数として指定するべき

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

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

2022-02-27

[32歳中卒ニート]だけどjavaクラスオブジェクトメソッド勉強してンだが

メソッドで使う戻り値の型と引数の型が別の物になるケースってあるの?

仮にあるとしたら実務ではどういう時に使うん?

全く想像つかねンだわ

Permalink |記事への反応(3) | 17:39

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

2021-11-17

GoMockテスト辛い問題とかDDDって何それうまいの?とか

GoMockってのはGo言語ライブラリで、依存するinterfaceテストモックに置き換えてくれる。

それで、テスト中のモックの期待される振る舞い等を簡単定義できるのだ。

期待される振る舞いってのは、モックメソッド呼び出しやその引数とかだな。

期待される呼び出しが無かったり、引数が違ったりするとテストが失敗してくれる。

他に、メソッド戻り値副作用記述できる。

非同期処理のテストだとよく、wg.Done()をモックにさせたりする。

正直、これまで書けなかったテストがモリモリ書けて楽しい

けれどそのうち辛くなってくる。

まり、たくさんのinterface依存するサービスオブジェクトメソッドテストしようとすると、たくさんのモックのたくさんのメソッド呼び出しの全部の期待される振る舞いを書かないといけない。

モックメソッド戻り値によってサービスオブジェクトメソッド内の挙動が変わる。

すると連鎖的に、メソッド内で続いて呼ばれるモックに期待される挙動も、変わる。

依存interfaceが増えるとこの場合けが指数関数的に増える。

当然だ。

Go言語にはテーブルリブテストっていう、テストケースは配列簡単にまとめられると良い、という慣習・哲学がある。

しかし俺のサービスオブジェクトテストケースが肥大化複雑化しすぎてしまったようだ。

モックの期待される挙動を細かくケースに分類して配列にするのは恐ろしく辛い作業だ。

やりたくない。

どうしてこうなった

どうしてこうなったかは明らかだ。

サービスオブジェクトが巨大すぎるのだ。

ノシリックで巨大で複雑なものは凡人には扱えないからやめとけ、と偉い人は言う。

そうだなモノシリックは辛い。DDDかにすればいいんだろ?

やったよ(見様見真似で)。

モックでこれまでできなかったテストが書けるのはいいね

でもじつはここはまだ山麓だったのです。

サービスオブジェクトが巨大なモノリス化してしまったのです。

分け入っても分け入っても青い山。

おれはどこに行けばいいのだ。

参考文献

https://little-hands.hatenablog.com/entry/2020/12/22/ddd-in-first-3month

あとどこかにDDD100本ノックとかないかな。

Permalink |記事への反応(0) | 08:42

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

2021-08-16

【未経験から1ヶ月で】現役エンジニアが教える最良のプログラミング勉強法

プログラマーに憧れる皆さん!こんばんは。

自分文系から」「未経験から」と諦めていませんか?大丈夫です!プログラミングセンス不要です。正しい手順で学べば、文系や未経験でも、誰でも一流のプログラマとして活躍することができます

今日は、未経験から最短でWeb企業就職するための勉強法をご紹介します!

オススメ方法

もっとオススメ方法は、顕正会セミナーに参加することです。

顕正会は、日本で最大のエンジニアコミュニティであり、非常に良質なテキストを用いて、プログラミング初心者向けのセミナーをしていることで有名です。顕正会に入ることで、未経験からでも一流エンジニアノウハウを学ぶことができます

また、意外と知られていませんが、日本エンジニアの8割は顕正会出身です。実はあのひろゆきビル・ゲイツ顕正会出身です。ですので、顕正会ネットワークを介して就職先を斡旋してくれたりしますし、自分顕正会員だと、面接時にも非常に有利になります

顕正会セミナーは、インターネットからも応募することができますし、秋葉原などで声をかけられることもありますので、誰でも簡単に参加できます。会員もフレンドリーな方ばかりですので、是非、お気軽に応募してみて下さい!無料体験もできますよ。

準備

プログラミング勉強を始める前に、まず、必要ものを準備しましょう。必ず必要ものと、できればあると良いものは以下の通りです。

必ず必要もの

まず、プログラムを書いて実行するためにパソコン必須です。

可能な限りスペックの高いものを買いましょう。2021年現在であれば、CPUは18コア、36スレッドRAMは128GBくらいはあると良いでしょう。ストレージSSDであれば1TBもあれば十分です。

OSは、Windowsで開発するならWindowsが、Macで開発するならMac必要です。よく分からなければMacを買っておく方が良いでしょう。基本的MacにできてWindowsにできないことはありません。

インターネットは、この記事を見ている人は既に持っているでしょう。ただし、モバイル回線で見ている人は、自宅に有線のインターネット環境を用意した方が良いです。

顕正会に入会すれば、上記スペックPC無料で貸し出ししてくれます。また、法人向けの専用線無料で取付工事を行ってくれる上に、通信費を全て負担してくれます

できればあると良いもの

まず、他の会員と連絡を取るために、SNSアカウントを持っていると良いでしょう。

最近は完全にPC上での学習もできますが、やはり、勉強の基本は紙のノートに直接書くことです。医学的にも、手指の動きと脳の記憶回路が関連していることは証明されており、手を動かすことで効率的ものを覚えることができます

Kindleなどの電子書籍リーダーは持っておいた方が良いです。紙の本は時代遅れです。いやしくもITプロを目指そうという人間が、このような最先端デバイスを使っていないのは恥だと思うべきです。紙の本を買わないことは、環境を守ることにも繋がります現金も持つのはやめましょう。

自宅での学習

せっかくセミナーに参加しても、受身聴くだけでは、プログラミング習得することは難しいです。ここでは、自宅でどのような勉強をすればよいのか、ご紹介します。

教科書写経する

まずは、教科書参考書写経することから始めましょう。教科書参考書の本文を一字一句正確に書き写すのです。

よく、「写経理屈を学べないからだめだ」と批判されますが、まずは正しい「型」を体に覚え込ませるのが先です。野球水泳などでも、細かい理屈よりも先にフォームを固めるのと同じです。書き写している内に理屈自然と身に付きます

また、写経メリットは「飛ばし読み」を防げるところです。一字一句正確に写経をすれば、細かい部分を「分かったつもり」になって飛ばししまうことを防げます。たとえば、比較演算子の等号は=ではなくて、==です。プログラミングはこういうところに注意して学ばなければいけません。

ソースコードフローチャートUML)に変換する

教科書サンプルコードノートに書き写したら、それを今度は自力フローチャートUML)に変換してみましょう。そうすることで、自分が本当にそのコード理解しているのか、確かめることができます

フローチャートUMLが素早く正確に描けることは、プログラマーとして働く上で非常に重要スキルです。それらはソフトウェア設計の基礎となりますし、ソースコードを読めない営業顧客にとっては貴重な資料となるからです。プロエンジニアは、COBOLソースコード10万行を1週間でフローチャートにして、Excel転載することができます

ここで一つ注意すべきことがありますフローチャートを描くときは、必ず専用の定規を用いて描いて下さい。フリーハンドで描いたもの業務ではフローチャートとは認められません。これはまともな企業就職すれば研修などで必ず習うことですから、今の内に覚えておきましょう。

Excel勉強する

エンジニアを目指すのであれば、プログラミングだけではなく、Excelの使い方も学びましょう。Excelエンジニアにとっての万能プラットフォームです。エンジニアはあらゆる作業Excelで行いますセル結合や罫線を用いて、見栄えの良い資料を作る技術は、エンジニアにとって必須です。

プログラミング学習中であれば、たとえば以下のような題材の資料を作ってみると良いでしょう。

尤も、以上の資料は、ツールを使うことで自動作成することもできます。たとえば、ソースコード更新履歴Gitなどのバージョン管理システムを使うことでも管理できますしかし、それらの資料としてのクオリティは非常に低いため、アマチュアしか使うことはありません。プロを目指す皆さんは、必ずExcelを使いこなせるようになりましょう!VBA習得必須です。

プログラミングのコツ

以上、プログラミング勉強法について解説しました。ここからは、実際にソースコードを書くときのコツを紹介していきます。他のプログラマと差をつけることができる技術ですので、意識するようにして下さい。

変数名は短く

プログラムで使う変数名は可能な限り短くしましょう。

理想は、aやxなどの一文字です。ただし、これだけだと26文字しか使えないので、a1, a2, ...のように連番でグルーピングすると良いです。

また、変数宣言使用箇所が離れた場合に、変数の型がすぐに分かるように、たとえばint型であればi1, i2, ...、string型であればs1,s2, ...のように命名すると、読む人に親切で自分ミスしにくくなります

変数名を長くするのは、以下のデメリットがあるため、絶対にやめましょう。


なるべく関数を作らない

多くのプログラミング言語には、クラス関数といった機能がありますが、これらは基本的ライブラリ提供者などが使う想定の機能であり、一般プログラマが使うのは好ましくありません。したがって、クラス関数はなるべく使わないようにして下さい。

関数を作ると、以下のデメリットがあります

不要関数を作らないためのテクニックには、以下のようなものがあります

まず、関数引数に「フラグ」を渡し、関数内部で処理を切り替えれば、1つの関数複数の処理をすることができます

function f(i) {switch(i) {case 1:      // i = 1のときの処理break;case 2:      // i = 2のときの処理break;case 3:      // i = 3のときの処理break;    // ...  }}

この方法は、以下に述べる「変数寿命を伸ばす」効果もあります。つまり、この関数内で宣言された変数は、すべての処理で共通して使用することができます

クラス不要関数を作らないようにするには、「継承」を用います複数クラスで用いる関数定義したクラスを1つ作っておき、そのクラス継承すれば、新しいクラス関数定義する必要はありません。

理想的には、プログラム内のすべての関数を同一のクラス定義し、それを継承するべきです。そのようなクラスは俗に「神」と呼ばれ、プログラマからはこの上なく尊ばれています

classGod {f1() {    //関数1  }f2() {    //関数2  }  // ...}classC1 extendsGod {  // 何も書かなくても上の関数が使える!}class C2 extendsGod {  // 何も書かなくても上の関数が使える!}// ...

変数寿命を長くする

変数宣言する場所によって、ソースコードのどの範囲から参照できるかが決まっています。この範囲が広いことを、「変数寿命が長い」と言います

たとえば、以下のコードのaは、関数定義の外側からは参照することができません。

function f() {  var a = 1;  return a;}

一方、以下のコードのaは関数の内外どちらからでも参照することができます

var a = 1;function f() {  a = 2;  return a;}

変数寿命を長くするのは、プログラマの腕の見せ所です。

せっかく作った変数がすぐに死んでしまうのは、非常にもったいないです。ソースコードの表面には現れませんが、変数を作ったり捨てたりするのには、計算コストがかかります。したがって、寿命の短い変数を作りすぎてしまうと、プログラムが遅くなってしまます

また、変数寿命が長いということは、変数をたくさん作らなくても、1つの変数を色々なところで利用できるということであり、とても便利です。たとえば、上記の前者のコードでは、関数の外部からaの値を参照したくなっても、参照することができません。後者のように書いておけば、プログラムのどの箇所からでも、aの値を参照したり、更新することができます。したがって、変数寿命を長くするとプログラムを変更しやすくなります。つまり保守性が上がります

例外を潰す

例外とは、プログラムが予期しない処理をしようとした場合に、プログラムの実行を停止し、呼び出し元にエラーを通知する機能です。たとえば、「test.txt」というファイルを開こうとしても、そのファイル存在しない場合は、例外となります

例外が発生すると、プログラムが停止してしまうため、非常に困ります。したがって、プログラマ例外をきちんと処理しなければなりません。

ほとんどのプログラミング言語には、例外処理のための機構があります。たとえば、以下のような構文です。

try {  //例外が発生し得る処理  //ex.ファイルを開く}catch (e) {  //例外が発生したときに、実行する処理}

例外への対処は実はとても簡単です。是非ここで覚えて下さい。上記のような機構のある言語であれば、catch節の中身を何も書かなければ、例外が発生しても、何事もなくプログラム動作を続けます

try {  //例外が発生し得る処理}catch () {}

全ての例外を潰せば、決して不慮の動作で停止することのないプログラムを作ることができます。ですから例外が発生し得るコードは、積極的上記try-catch構文を用いて、例外を潰すようにしましょう。

おわりに

全体的に専門用語盛りだくさんの記事になってしまいましたが、

部分的にでも理解すればプログラミングを見る目が変わるはずです。

うさんくさい記事インターネットには多いですが、

そういう情報に惑わされずに本物の技術を身につけてもらえればと思います

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

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

2021-05-19

バグ脆弱性(セキュリティホール)の線引

ワクチン大規模接種東京センターの予約システムで発生した、適当数字入力しても予約できるシステムの不備はバグなのか脆弱性(セキュリティホール)なのかを考えていこう。

もし、脆弱性であるとするならば、しかるべき報告フローを取る必要があるからだ。

記事の末尾に参考リンクをいろいろおいておいたので、詳細は確認してほしい。

この問題は、本来するべきチェック処理をしていないのだからバグ一種といえる。

// ただ、改善する気がないのなら仕様となるのだろうけどね。

あるゆる、脆弱性バグの結果起きる。

では、適当数字を入れても予約できちゃうバグは、脆弱性(セキュリティホール)と言えるのか?

もし、脆弱性(セキュリティホール)となるなら、ゼロディでいきなり公開する前に、しかるべき報告フローを取るべきだ。

// ただ、新聞社は、ネットで噂になったもの取材して報道しただけであるからゼロディで公開とは言えないだろうけどな。

個人的意見としては、脆弱性とまでは言えないと思う。

これはタダのバグであって、脆弱性(セキュリティホール)と呼ぶのは言い過ぎだろう。

例えば、教科書レベルの「"<script>alert("XSS");</script>」でXSSを発生させる意図的入力をして、誤動作が発生するなら、それは間違いなく脆弱性(セキュリティホール)といえる。

同様に、SQLインジェクションを発生させる意図的入力をして、何か変なことが起きれば、これも間違いなく脆弱性といえる。

他にも、超でかいデータを送りつけてバッファオーバーフローさせたり、特殊入力をしてスタック破壊して戻り値改ざんして任意コマンドを実行するみたいなものも同様に脆弱性と呼んでもいいだろう。

(注:念のために書いておくが、不正アクセス違法になる可能性があるので、自分の所有するサイトコンピュータ以外へは、これらの入力を試さないように。)

でも、ごく普通入力をしても、エラーとしてはじかないで受け入れてしまうのは、脆弱性ではなく、タダのバグであるように思う。

「こういう操作したら、計算結果が変になった」はバグ領域であって、脆弱性とまでは言えない。

今までの話を簡単に言うとしたら、ドラクエ4で8回逃げたら会心の一撃連続して出るのはバグなのか脆弱性なのか?って話になるのかな。

かに、8回逃げることで、データバッファオーバーフローが発生して、そのような結果になる。

でも、8回逃げるというはやろうと思えは誰でもできる動作であって、これをバグではなく脆弱性(セキュリティホール)と呼ぶのは違和感がある。

この裏技を見つけたとして、脆弱性としてしかるべき報告フローを取らずに公開したこと咎められるとしたら、実に変な話である

これら裏技を試しても不正アクセスと言われて、罪を着せられたり、裏技記事を削除されるとしたら、強烈な違和感がある。

このあたりのバグ脆弱性の線引はどうなっているのか。

今回の事件で、それが一番気になった。

最終的には、裁判裁判所が決めることになるんだろうけど、あまりアホな判決を出して、日本エンジニアの手足を拘束しないでほしいと思う。

参考URL:

ドラクエ4で「にげる」8回でずっと会心の一撃になるバグ、こういう仕組みで起こってたらしい

https://b.hatena.ne.jp/entry/s/togetter.com/li/1715732

■「誰でも何度でも予約可能ワクチン大規模接種東京センターの予約システムに重大欠陥

https://b.hatena.ne.jp/entry/s/dot.asahi.com/dot/2021051700045.html

岸信夫onTwitter: "自衛隊大規模接種センター予約の報道について。...

https://b.hatena.ne.jp/entry/s/twitter.com/KishiNobuo/status/1394440062125805572

脆弱性の手口、IPA「見つけたらまず開発者IPA窓口に報告して」 コロナワクチン架空予約巡り

https://b.hatena.ne.jp/entry/s/www.itmedia.co.jp/news/articles/2105/18/news145.html

Hiromitsu TakagionTwitter: "私はこの届出制度の提唱者・設計者・運用協力者・有識者研究会委員であり、IPA広報取材にこんな回答をしたのであれば、出鱈目であり、...

https://b.hatena.ne.jp/entry/s/twitter.com/HiromitsuTakagi/status/1394713619212816385

ワクチン大規模接種「架空ウェブ予約」やったら犯罪? 国は「法的手段」に言及

https://b.hatena.ne.jp/entry/s/www.bengo4.com/c_23/n_13071/

確認作業公益性高い、毎日新聞 接種センター架空入力取材目的

https://b.hatena.ne.jp/entry/s/this.kiji.is/767285347672670208

AERA dot.記事への防衛省の申し入れに対する見解

https://b.hatena.ne.jp/entry/s/dot.asahi.com/info/2021051900065.html

Permalink |記事への反応(7) | 06:14

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

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

[8]ページ先頭

©2009-2025 Movatter.jp