現職のエンジニアですが、本当にこういうバグを作り込むかは別として、割とありがちなバグでリアルでした。 例題は、条件判定ミス。 1問目は、変数の初期化忘れ or いじるべきでないパラメータの直接書き換え。 2問目は、変数名のスペルミス or 数値の誤字。 3問目は、終了条件のミス。 4問目は、使うライブラリ(他人が作ってくれた便利な道具)の仕様理解不足 or 自分で頑張って作ってバグだらけになってしまうパターン。 5問目は、ユースケース(使用する人の行動パターン)の考慮漏れ。 全部あるあるですね…。
職業病か、第5問は物がある時にカウンターをONにする処理が別のバグを引き起こす可能性がありそうなので、居なくなった時にONにした方が構造上安全かなーとか考えてしまう 第2問はあんまり「あるある」ではないかな。Iと1はフォント弄ったりして判別付くようにしてるし、万が一手書きでも判別付くように書く癖付いてる人が多い(0に斜線入れるとか) 半角 or 全角、スペース or TAB、チルダ問題はまだまだ全然ある
今日のおまけ謎の答えは…
答えは
・9行目と10行目の間に「メモの数字を0に書き換える」という処理を追加する
・1行目を「メモに何も書かれていなければ0を書き、書かれていれば0に書き換える」、10行目を「1行目に戻る」にする
など(両替後メモの数字を0にリセットする処理を追加する、という内容なら正解!)
※答えはコメントに書かないでね!
正解したら自慢しよう!riddler.co.jp/redirect/P0Aeqs1pzS7xMK5Bql4f
この段階を踏んでフローとバグ修正を行うの、プログラミング教材として最適すぎて業種が広がりそうな気配がある
プログラミングの経験があると問題文を見た時点で「ここが悪さしそうだな」と察せて楽しい
なんなら正解のコードを見ても「これ後で変なバグの原因になりそうだな」とか思っちゃう
問2に補足
今回のプログラムではメモを1つだけ取りましたが、実際のシステムではいっぱいメモを取ることになります。
もちろんそれぞれのメモは区別しないといけないため、表題をつけるようにしています。
「メモAに記録」、「メモBを読む」と言った具合ですね。
で、プログラムミスをしてメモA0を読まないといけないところでメモAOを読んでいるといったことが現場では頻発するわけです。
プログラミングのバグ修正というSEなら多くの時間を要するこの作業をわかりやすく「ひらめき」として紹介してくれるいい教材だなと思いました。
SEとしてはとても面白い。そもそもELSEにすりゃいいのにってとこに条件付けちゃってるとか
実際、事象だけを聞いて「おそらくこの辺の仕様が、こんな風になってるのかも」を推測するひらめきがデバッグの仕事だし
14:30 全員同点だと最終問題の得点が0点になるバグが・・・
いかに人間が情報を補完しながらコミュニケーションを取っているかがよくわかる
最後の最後までプログラミングとバグを貫く姿勢とそれを瞬時に読み取る洞察力が素晴らしいです
現職のエンジニアですが、本当にこういうバグを作り込むかは別として、割とありがちなバグでリアルでした。
例題は、条件判定ミス。
1問目は、変数の初期化忘れ or いじるべきでないパラメータの直接書き換え。
2問目は、変数名のスペルミス or 数値の誤字。
3問目は、終了条件のミス。
4問目は、使うライブラリ(他人が作ってくれた便利な道具)の仕様理解不足 or 自分で頑張って作ってバグだらけになってしまうパターン。
5問目は、ユースケース(使用する人の行動パターン)の考慮漏れ。
全部あるあるですね…。
5は条件不足もありますね
古のコンピュータゲームのバグの大半はユースケースですね
制作者の意図していない動きをプレイヤーがした結果発生したバグ
逆説的いうと制作者の仕様どおり正確に操作しないといけないプログラムは危険ですね
そんでおまけ問題のミスも、めちゃくちゃやらかしがちなんだよなあ……
@@りりいる 分かります! 単体テストとかで動かして初めて間違いに気付いたりしますね…
趣味で独学でVBAやってますが、やっぱりプロでもこういうやらかしあるんだなとちょっと安心しましたw
3問目のやつなんか私何回やらかしたかw1日かけて調べてしょーもない理由でのバグだった時の脱力感よ…
■花の水やりのヒント
花は水のやり過ぎて枯れてしまいます。
分からない人は先入観にとらわれて書かれていない処理をしていると思います。
1行ずつ書いてあるとおりに進めてみましょう。
ちなみに、バグの原因は誤字ではありません。
大ヒント
6日目にはメモの数はどうなってるかな?
一問目、攻撃力を値渡しで引いてきてダメージを計算してるか、参照渡ししてるかにもよるよね!?(厄介)
ねこます先生...
フグの毒の例え秀逸で笑った
残念ながら自分の毒で死ぬフグはおるんや……
まじか
更にいうとこの喩えはもうドラえもんで既出なんや…
この追い撃ち解説好きだなぁ
3問目:メモを書き換えるより速い速度で硬貨が投入されるとバグります(力技)
メモの書き換え中は硬貨を受け付けない設計も必要ですね
書き換えの速度0.000000001秒とかの世界だよ?
現実の自動販売機でも小銭を流し入れると、正しくない数字になることがありますね
それに関しては書き換えの問題じゃなくて何が入ってきたかを検知するセンサーの問題なんじゃないですかね
これはwebで投稿ボタンを連打すると連打分投稿できてしまうとかあるあるですねえ
あ! そういう誤動作の発生する両替機があったわ
明らかに書いた部分が影響してるバグならええけど、意味わからんところで発生するバグが一番むずいんだ
今回の問題で言うと、自動ドア作ってるのに同じフロアのエスカレーターが急に止まるみたいなやつが色々巡り巡って起こったりする
プログラミングにつて楽しくわかりやすく解説しててうれしい
一問目の模範解答やると、攻撃されたときに反射する系の処理のタイミング次第で、攻撃力低下する場合あるよなぁ(6倍攻撃→反射で2割切る→9分の1)
こういう謎解き本が欲しいなって初めて思った。すごく面白い
こういうのを見ると、生き物の動きはもの凄く高度な仕組みだって分かりますよね。
痒いケツを掻く行為ですら、脳からの命令、神経、筋肉へと伝達、肩の角度に腕の角度から手首の角度へ指の角度、どの指を使うか、ケツの痒い所の座標へ到達させた上で掻くのか撫でるのか叩くのか強さの調整はどうするのか、ズボンがあればそれをずらす為の調整、パンツもあればそれをずらす為の調整…ほんとキリがないよなぁ。
これ、プログラミングの教材として優秀すぎる
19:45 実際にやってみましょう.
ただし1週間様子を見て満足するのではなく3週間くらいは検査に時間をかけたほうがいいかも...
再代入やステートフルがバグを生みやすくなることと、境界値テストの重要性がよくわかる
考えたとおりに動くのではない。書いたとおりに動くのだ。ってのは事あるごとに実感する話。
インデントが全角スペースじゃないか本当に怖い
きっと全角で書く規約の言語なんだ…。
最近の言語はだいたいUnicode対応しているので全角スペースでも四分の一幅スペースでも何でも大丈夫。
ゼロ幅スペースでも大丈夫なので、ネット情報をコピペしたら本来1つの名前になるべきところにゼロ幅スペースが仕込まれていて2つに分かれるバグを掴まされる危険性があります。
プログラムの凄いところはほぼなんでも出来る事。
(ゲームの分野だけでも多種多様なものがある)
プログラムの大変なところは「当たり前」が通じない事。
(「地面」が何なのかなども使う際は定義が必須)
プログラミング経験者です、2問目はそもそもコンパイル通らなくね?1回攻撃できるのなぜ?と深読みしてしまって解けませんでしたwww
「メモに書かれた数値にする」で「以降の攻撃力が『メモに書かれた数値』で固定されたのかな……」と考えてしまった(カードゲーム脳)
同じく
プログラムが小学校で必修になったのでこの授業は面白いと思いますね
自動ドアとかの組み込み系は実際は割り込みとかチャタリングとか面倒くさいこともやらないといけないのですがそれは実際にエンジニアになってからですね😂
プログラミングやってる身としては唯一気づけなかった2問目、ありがちなんだよな…
バグ探し続けたら参照先や変数名微妙に違くて明らかにおかしな挙動より発見遅れる
自分はエンジニアじゃないけど似たような処理をしてて、簡単に勉強できるとこないかなーと探してたら発見しました。初めて見たけどむっちゃいい番組ですね
ちょっとプログラミングとはズレますが、
「自動ドアの上部に横長の輪っか状にチェーンをつけて
片方のドアをチェーン上側、もう片方をチェーン下側に接続すると
モーターを1つにできて、左右のドアの動作タイミングもズレないようにできる」
というのを知ったときは少し感動がありました。
6:00のコードで書いちゃうと反射攻撃やギミックダメージを受けて20%を割ったときに6/9=約66%になる可能性が出たりするんですよね。
逆に回復すると9/6=150%でバフがかかってしまうという。
これを一々考えるの面倒だけどやらないといけないのがプロなんだろうな。
6と7の間でHPの計算をしてないので、計算結果は1のものを参照していると考えたらその不具合は起きないかなと思いました
プログラミングは専門外なので実際にプログラミングした場合にその処理が可能なのかわかりませんが…
毎ターン「そのターンの攻撃力」を計算すれば管理は楽になる。攻撃力自体を書き換えると、どちらにせよバグが起こりやすい。
バフ用のクラスに状態管理させればなお良い。
花の水やりはアレですね。カウントのしかたが重要。
あと、1問目のケースはスキル倍率を示す変数(2問目以降でいうところの「メモ」)をつくっておいて、2~5行目の処理ではスキル倍率の値を書き換えて、攻撃時に攻撃力×スキル倍率の値を算出して使ってそうなイメージが。(攻撃力の値そのものを書き換えないようにすれば元に戻す処理も要らなくなるんで)
プログラミング経験者です。
突っ込みどころはありますが、まぁ概念的なところを理解するという意味では良い入口ですよね。
コンピューターは良くも悪くも書かれたとおりにしか動きません。なので、人間側が丁寧に指示してあげる必要があります。
自分でシミュレーションするのは大事ですね。今の時代、プログラミング結果も直ぐ確認できますが、バグ取りができないですからね。
あと、何全行、何万行とプログラムが書かれることはあっても、「あっ、この処理使えるから機能として別に取っておこう」とかします(正確には「関数化(もしくは機能化?)」)。
新規事業じゃない限り、ゼロから作ることは余程ないかなぁと思います。
10:38 そういうことなんです。分岐ではelseを数字の比較では不等号をつかいましょう
入門編でよく見るやーつ
このレベルの問題を日本語で書いてあるとプログラミングも楽しいんだけどなぁ…。
職業になったら難し過ぎて何がなんだか…。
現役エンジニアですが、自動販売機のプログラミングはよく演習問題として出てきました。
kkと同じぐらいの速さでに解けたけど、わちこの気持ちもわかるから「だよねぇぇぇ」ってなり続けたわ…いい人選😂
問題見る前「ひらめきじゃなくて論理じゃん」と思ったら、ちゃんと謎解きになってた…
15:53
kkさんの顔面突き出し歩きがおもろすぎて何回でも見たいwww
こんなおじいちゃんいるよね
SEなので色々ツッコミどころはありますが、めちゃくちゃ新入社員に見せたい動画です!コードとはなんぞやが分かりやすくてバグもめちゃくちゃ秀逸です!見せます!
I行目は高性能なIDEになれすぎたエンジニアにはわからんかった…
一問目の修正後は攻撃処理時に反撃系でダメージ変動食らったら普通にズレていくのでは…
メモしてるのはそのターンにおける全行動前の割合での攻撃力だから
4問目は間違えた。
「動いてるかどうかしか検知してない為、扉の位置で立ち止まると人が挟まる」かと思った。
ドア自身の動きを検知して開きっぱになるとは・・・
でも安全なのでヨシ!
いすみ司会の動画は本当に為になるなぁ!
現役エンジニアだけど、逆にこうやって文章にされるほうが難しい・・・
自分が書いたコードは不具合おきたらだいたい検討つくから、そこで数値とか処理がおかしくないかひとつひとつ処理確かめながら実行
他人の不具合なおすときはコードざっくりみてどういう処理をしているか把握。
そのあとしらみつぶしに上から不具合がおきてないか実行しながらみるって工程だから、こんな難しくない
それより、他人が書いたスパゲッティコードのバグをなおすとき、何かいてあるかさっぱりわからん時のほうが地獄
3問目はてっきり「50円玉や10円玉を入れると、商品が出ずに処理が二周目に入り0にセットする処理がされてしまい投入金額が消滅する」って事かと思った
そっちかーい
プログラムは思ったとおりに動くのではない。書いたとおりに動くのだ。
という名言がありますね
プラレール博で流れていて、気になったので見に来ました!
プラレールを使って謎解き作るなんて本当凄いです😊
親子で真剣に見てしまいました!
レール使い放題いいな♡
自動ドアの問題。
「ドアの間で直立不動してしまうと、プレスされる」だと思ったら違ったw
バグ修正の動画がバグで終わるのが実際の現場みたいで良かったです……
オチまで綺麗で面白かったです。
1・2の場合、メモした数値に戻すのではなくメモした数値を弄って攻撃用に使用し終わったらメモを破棄するほうが良いですね。
今回はシンプルだからいいけど、敵が複雑な攻撃や反撃を持っていると新たなバグになる。
共通テストの情報科目で出たり、そもそも今求められたりしてる技能だー!
きっとこの動画は役に立つ👏
最初のやつ、わちさんと同じこと思った。「より大きい」ってその数字は含まないのか…
今回しっかり(実演して)考える時間あるし皆ほんわかしてて楽しかったです。フグの例え良すぎ~
そういう言葉の認識は、等号・不等号で覚える方が分かりやすいです
以上、以下→ A≧B、A≦B
より大きい→ A>B
未満→ A<B
等しい→A=B
といった感じです
ちなみに、小学生算数の問題ですね
@@taketime0w0余計ではある
職業病か、第5問は物がある時にカウンターをONにする処理が別のバグを引き起こす可能性がありそうなので、居なくなった時にONにした方が構造上安全かなーとか考えてしまう
第2問はあんまり「あるある」ではないかな。Iと1はフォント弄ったりして判別付くようにしてるし、万が一手書きでも判別付くように書く癖付いてる人が多い(0に斜線入れるとか)
半角 or 全角、スペース or TAB、チルダ問題はまだまだ全然ある
エンジニアですが、一問気づけなかった。
うかつだった……。明日からも頑張ります。
小中学校の教材にしていいレベル。
適性のある人ならすぐわかると気づけるし、わからない人も理解度を深められそう。
プログラマーSEやってる自分では2以外は解けたが…2は除外してほしいかな。
是非もっと作って子供たちに広めてほしい。
あれは視力検査だからね…
こういうの考えるの結構面白いんですよね!楽しかったです!
下にヒント注意:
花の問題ですが、1日ずつメモがどうなるのかを考えるのがいいのかもしれない…と言っておく
1日後と1日目は違いますからね
7日目と1日目が被ってしまう…ってコト?!
1日目:「1」→「2」
2日目:「2」→「3」
3日目:「3」→「4」
4日目:「4」→「5」
5日目:「5」→「6」
6日目:「6」→「7」
7日目:「7」→(水やり)→「1」→「2」
ここまで行ってしまうってことか
@@鳥越利雄七日目に待つ処理が必要か
この動画の本質とは外れますが、エディタ側の工夫で2問目の「数字が英語に!?」みたいなのは防げそうですね
間違いを見つけるのと同時に、「どうすれば間違いづらい仕組みに出来るか」「どうすれば理解しやすい仕組みに出来るか」
そういったことも考えられるようになるとITエンジニア皆が幸せになります
ちなみにこのコード完璧だ・・・と思っても1年後くらいに見たらクソコードだったりする
最後の花の問題のヒント。
枯れた原因は水のやりすぎによるもの
1問目、敵の攻撃が非同期で、2行目の判定の時はHP20%より大きかったけど4行目の判定の時には20%以下になっててさらに9倍になるとか考えちゃった
12:10 開けっぱなしというか微振動するんじゃない??センサーの感度とループの処理速度にもよるけど
問題の分だけだとそうだな
だが今回の問題に入る前に口頭でセンサーは修正されている
という前提があるから
問題に追加して口頭説明通りの条件を足すと振動しない
6:16 いや、世のプログラマーは初期攻撃力をループの外に持たせるから
そして最大HP0という謎の特殊キャラが出てきてタヒるから(ただし数学好きな人はちゃんと処理するけど、そのキャラ出るまでテストできなくて結局タヒる)
割り算の端数でだんだん攻撃力ズレていくのかなぁ?
想定してるメモリ容量がこんだけならこれが適切な処理だと思うけど?
良い動画。プログラミングの知識が完全にゼロの人に、プログラムをどんなものか教えるのにいいですね。
プログラミングって、人が無意識に処理していることも言語化しなきゃだから難しいですよね😂
案外手のかかるバカな子なのに出来上がったらめちゃくちゃ有能なすごい子。
パティシエさんの作り方や材料に面白い工夫などがあれば気になりますね!
ぜひみなさんでlet'sクッキング👩🍳
6:05
これ自分にもダメージ入ってしまう系の攻撃だと、攻撃力2/3になるやーつ
変数が"今のHP"と"最大HP"と"HP(="今のHP" / "最大HP")"の3つだとします。
自分にもダメージが入ってしまう系の攻撃は"今のHP"を削りますが、"HP(="今のHP" / "最大HP")"の値は1行目以外では書きかわらないので、プログラム上は問題ないと思いました。
小学生とか中学生とかにプログラミングの考え方を教える良い教材になるなと思った。
10行のプログラムのバグですらこんなに悩みながら解くのに、数千行のプログラムでバグが出るってそりゃ開発の人も悲鳴上げるわ…
絶妙な問題ばかり。
状況を考えたり、可能性を考えたり、子どもにもできるし、楽しんで解ける👍️
わちさん痩せましたね!
顔がスッキリしてる!!
I行目でクソ笑ったw
でも1じゃなくて1にしちゃうことはよくある
教材としてはありなんだろうけど、実際のコードならさっと分かりそうなところが文字だと細かい部分が分かりづらいなぁ
オチが良過ぎる
問題文の穴を見つける感じで面白かった。
1をiに打ち間違えるのはまじであるある
数千行くらいは割と普通なんだよね、プログラミングって。
大規模になると万行くこともよくある。
16:54 これ、7行目にelseを書いてないのが悪いのよね… そうしたら、2つのバグが一気に直るので…
(7行目の処理は非同期に直す必要があるけど)
1問目のバグは、「HP」が20%より大きいなら の箇所だと思った😂
例題の時は「割合」だったので、
HPが0.2より大きいなら6倍→ほぼ9倍にはならないというバグかと。。
プログラム数ミリ齧った程度だけど、サムネ読んで「あー·····」ってなりましたね·····
まぁ、二問目は「え、バグどこ?」になりましたけどw
大文字小文字とか全角半角は本気でトラップすぎる·····
こうやって分かりやすく書いてあると良い感じにデバッグがクイズになる····おもしろ···
1万円返してくれない自販機w
第4世代のメタモンはアイテムが増えたり変身先の技を覚えたままになったりとバグが多かったです
5問目の問題、修正後もバグる気がするんだけど。
16:50
条件を抜粋すると
ドアが開く条件が閉まっているときのみ。
ドアが閉まる条件がタイマーが10秒以上かつモノがないとき。
この条件だとドアが閉まる途中に人が通るとタイマーが0になり、ドアが閉まる条件が満たされずドアが止まり、開く条件が満たされず開かないことになると思う。
これを直すなら4行目の「ドアが閉まっていたら」を「ドアが完全に開いてるとき以外は」にすれば閉まっていたら開くし中途半端にドアが開いてても開いてくれる。
@@syurari259
そうなんですね。
色々やり方があるのはソフトの大変なとこですよね。
結局自分はソフトに躓いてハードの方に行った人間なのでソフト作ってる皆様には感謝ですね。
10:00台の問題 高価しか数えてないから紙幣対応してない所も?
初めて見たけど謎解き面白い!
最初の「バイ」を言う処理がないから無言バグですね
この部屋で撮ってるの見るの久しぶりだ
0とO、ほんまそれ
プログラミングは特に習ってないけど何となく周りにある小学五年生の娘、おまけはスグに閃いてて流石- ̗̀ 👏🏻👏🏻 ̖́-
水やりロボットのヒントは、やっぱり実際にやってみるとわかりやすいですかね
11:50これは即分かった!!
13:10その例えはエグいwww
確かにwww
良い動画ですね。
自分もこんなプログラミング問題集作りたいです。
18:36 19:47 スタートが1だから、、、こんな風に直観的に理解し辛いプログラム書く人もまれによくいる
2日目の終わりくらいまで頭の中で進めてみて、カウントの増え方と日付とを見比べればわかるんじゃない?
第1~2問、改善策としてメモを用意して値を戻すより、メモを攻撃の計算に使ってメモを捨てる方がよく使われそう。
13:28 例えが秀逸過ぎて自分のキャリア選択がほんとに正しいのかちょっと不安になってきました……(インフラ→開発転向エンジニア)
いいクイズだ、小学生でもとっつきやすい!
1ターンごとに攻撃力を元通りにするって言ってるけど、
そもそも最初から元の攻撃力Fに6か9倍した値を自己代入するプログラマーがいるとは思えない。
普通基本ステータス用の攻撃力と戦闘用の攻撃力は別に定義するよね
バフ・デバフで変動した後元に戻せないし
本当にGBとかファミコンの時代の容量が限られていた頃しか許されない作り方
@@cs-kk5gg そっか。今となっては容量なんて気にしないけど昔は限られてたのか。その考え方はなかった。
これまたやってほしい
自動ドアの問題こえーw
こういうハードウェアが関わってくる問題は実際にテストしないと検知しにくい
昔コンビニバイトしてて、閉まろうとするとまた開く、無限開放自動ドア状態を見たことあったんだけど、センサーの異常だったのかな…
1とIはほんとにたまにだけど半角全角でバグるのありますあります //注釈入れた時めちゃくちゃよくやる
自動ドアが開ききったらモーター止めないといけないのでは?
開き切るまでモーターを動かす→開き切ったらモーターは止まるはずです
「“センサーの半径2mに動くものが〜”だって?2m以内って書いてないなら2mピッタリしか反応しないやないかい!」って思ったらそれではなかった