はてなキーワード: FizzBuzzとは
https://twitter.com/fumokmm/status/1703977187903426995
「むしろこれが正解」「速度を出すときにはこういうことをする」「作ろうとする姿勢が大事」
とか逆張りで褒めてるやつが多いけど、普通にこんなんダメだから
何がダメって、FizzBuzzを教えるタイミングって100%がfor文とif文を教えた直後なんよ
まずfor文を教えて「1から100までの数字を出力してみましょう」っていう問題が出されるわけ
そのときにfor文を使いこなせなくてSystem.out.printlnで書くやつはいっぱいいるけど問題無い
ちゃんと教える側が「for文を使えば簡単かつ正確に書けますよ」って形でfor文を教える
その次に「if文を使って偶数のときだけ出力しましょう」とかを教える
そうすることでfor文の中でif文を使えば繰り返し処理を制御できるってことを教える
「FizzBuzzっていう英語圏で遊ばれるゲームがあるんだよ」
っていう形で出題するわけ
ユーザーに数字を入力させてFizzBuzzを判定させる、とかのゲームを作らせるのがいいんだけど
「まずは単純にFizzBuzzの正解を表示させてみましょう」
っていうコンテキストで出題されるわけ
そのときの回答としてSystem.out.printlnを大量に書くようなやつがいたら、もう一回for文からやり直せっていうのが正解
この回答が合っている要素なんて一ミリも無い
https://qiita.com/app_js/items/a78e0605af702b155efc
この記事読んだ。
Paizaの対応の良し悪しやこの人の考えや不満については今回は触れない。
一人のITエンジニア採用担当者、また同時に一人のITエンジニアとして生成系AIに対してどう触れるべきか書いておく。
まず、業務で生成系AIを利用するのは会社のルールの範囲で好きにやれば良いと思う。
問題は転職のフェーズであり、ここでは能力をチェックされているわけだから、生成系AIの回答でコーディングテスト通過です、となるわけがない。
ソフトウェア開発は複雑であり、AIは間違った回答や遠回りな回答もするわけだから、生成系AIを使うにしても結局真偽を確かめられる能力は必要だよね。
コーディングテストで生成系AIを使うというのは「私はそのような最低限の考える力も有りません」と言っているようなものなので、企業側がほしい人材とは言えない。
最近のコーディングテストサービスでは入力内容を記録しているのでコピペしたかどうかは分かる。
なので生成系AIで回答しているような場合は企業側はある程度検知できる。
もちろん誤検知もありえる。サービス(Web)上ではなくIDEなどで回答を作って貼り付けることもあるだろう。
そのため、企業はコーディングテスト通過後の面接で回答に対して深掘りすることが多い。
生成系AI回答で何も考えていない人はここで脱落する。
企業によってはコーディングテストサービスではなくホワイトボードなどでライブコーディングさせる場合もあり、そもそも生成系AIが使えないこともある。
ワイ:
#include<stdio.h> int main(){ for(int i = 1;i <= 100;i++){ if(i%15 == 0){ printf("FizzBuzz\n"); }else if(i%3 == 0){ printf("Fizz\n"); }else if(i%5 == 0){ printf("Buzz\n"); }else{ printf("%d\n",i); } } return 0; }
ワイ:考えるのが面倒くさいから
Boi:ここまとめられるでしょ
#include<stdio.h> int main(){ for(int i = 1;i <= 100;i++){ if(i%3 == 0)printf("Fizz"); if(i%5 == 0)printf("Buzz"); if(i%3 != 0 || i%5 != 0)printf("%d",i); printf("\n"); } return 0; }
Boi:ああっ
ワイ:ww
FizzBuzzってアメリカのIT企業の採用試験で、応募者がコンピューターサイエンスの学部をでてたり、上級プログラマーの肩書きなのに簡単なコードも書けないってエッセイが元だったね。
FizzBuzzプログラムが書けないプログラマがいる、という話がされるとき
ソラで紙に書けることを想定されているらしく、「できる必要がない」とか「できるべきだ」とか言われる。
プロジェクト作成済み、ソースファイル作成済み、Visual Studio起動済み、実行ボタンをクリックするだけでビルドができる状態、
という状態で1週間かかってもできないという人が大勢いるのだ。
「サボってたのでは?」「不合格になりたかったのでは?」とかではなく
「辺境のド田舎なのでは?」「超絶ブラック求人なのでは?」と、
裏があるんじゃないかと考えるもしれないが、そのような救いはない。
てほしい。
プログラミングを理解できない人はいます。いい加減この事実を認めて下さい。
こういう話になると、やれ「教え方が悪い」だとか、やれ「順序立てて学べば誰でも理解できる」などという輩が出てきますが、それは事実に反します。
まず、プログラミングは手順さえ覚えれば誰でもできるようになると言うものではありません。プログラミングを理解するには、一定レベルの論理的思考能力を要します。それが身に付いていない人には無理です。また、どんなレベルの人でも、プログラミングで分からないことは出てきます。プログラミングができる人は、そういう時に、
といったことをして解決する力があります。そういう試行錯誤をしない人や、複雑だったり抽象的な概念を突き詰めて考えることをしない人に、プログラミングを理解するのは不可能です。
たとえば、再帰関数が分からないとしましょう。具体的に何が分からないのかは人によって異なります。たとえば、
など。これらを解決するには、自分で仕組みを突き詰めて考えたり、コードを書いてデバッグしてみたり、調べたり人に聴いたりするしかありません。講師が気の聞いた喩え話などをすれば、たちまち疑問が氷解するなどということはあり得ません。
また、一口に「プログラミングを理解する」と言っても、そのレベルは様々です。
最初の2〜3程度が「自分の思うプログラミングの全て」な人が、軽々しく「プログラミングは誰でも理解できる」などと思わないでいただきたいのです。それは実用上は全然足りていません。サンプルコードをググりながら、やっとこさVBAで複数のエクセルファイルを集計できる程度の人が「プログラミングできる」気になっていては困るのです。
上記の大部分は、自分のプログラムを他人に見せるつもりのある人なら十分に習得しておく必要があります。ましてや、プログラミングで飯食おうと言う人間が、FizzBuzzに毛の生えたようなコードを読み書きするのに精一杯で、効率や保守性に気を配れないのは論外です。
上記の特に後半に書いたようなことは、誰にでもできることではありません。ちょっとしたコツや方針を守れば機械的にこなせるというものではなく、技術力の高い人でも熟考を要することです。彼らは、そうした高度なことを正しく考える力があるから、技術力が高いのです。そういう力は、誰かに用意してもらったカリキュラムを受動的にこなすだけではまず身に付きません。
⑭「html, css, javascript(jquery, express, react(next), vue(nuxt)), python, php, sql(postgre, oracle), graphql, ruby, swift, solidity, unity, c, c++ 業務レベルじゃなくていいならgo, kotlin, java, scala, dart, julia,(以下略」
おれも高校生の頃は元増田みたいにプロフィール欄に言語をいっぱい書いてたから共感性羞恥みたいになってる。
正直、たくさん言語知ってます!ってどうでもいいんだよね。いろんな言語でFizzBuzzできてすごいねー、くらい。