知ってますか?
FizzBuzz問題、多くのプログラマーは、「あ、またこの話か・・」と思われるだろう。プログラム学習を始めた人は初耳だと思う。こんな問題だ。
・その数が3で割り切れるなら、「Fizz」と出力する。
・その数が5で割り切れるなら、「Buzz」と出力する。
・その数が3でも5でも割り切れるなら、「FizzBuzz」と出力する。
・それ以外の場合は、その数をそのまま出力する。
単純な問題だ。ここでプログラマーのうち10%くらいは、「知っているけど、久々に組んでみようかなぁ」とか「知らなかったけど、簡単じゃん」と思っているはずだ。
そこで、Pythonが実行できるPyWeb Tinyを埋め込んでおく。こちらで心行くまでFizzBuzz問題に取り組んで欲しい。
Python学習を始めたばっかりの人も挑戦してみてください。
本題に戻ろうと思うが、既に上記プログラミングに夢中になり、ここまで読まない人が20%はいるはずだ。でも続けます。
FizzBuzz問題有名なわけ
これはプログラマーのスキルを計る一つの問題だが、なぜ有名になったのか?それは、コンピュータサイエンス卒業生のほとんどが解けなかった、という話だったからだ。
コンピュータを専門にしている人が解けない?事実とは思えなかった。しかしその後、この問題に関して多くの情報が発信された。それはプログラマーでさえが一定以上(情報は10%~50%とバラバラ)解けないとのことだ。
しかし解けないからってプログラマー失格などとは考えたくはない。解けなくともやっていけるプログラマーの仕事はいくらでもある!。(この辺のお話は別途します)
※当時問題発信の原文を見つけることができなかった。しかし今回それらしきモノを発見した。
プログラミングスキル
FizzBuzz以外に昔からプログラミング能力を問う(高める)問題がある。
・配列に入っているランダムな数値を並び変える
マージ
・2つのソート済み配列をマージ(統合)して、1つのソート済み配列にする
回文判定
・文字列が回文であるかどうかを判定する
二分探索
・配列から特定の要素を見つけるために、二分探索
どうでしょか、皆さん書けそうでしょうか
二分探索は初心者の人には難しかもしれないが、マージ、ソートあたりは課題として提示することがある。ある時ソート問題を出したところ、
「できました!」
うーん、、確かにできている。こちらの課題提示が悪かったようだ。このことがあってから「ソート命令は使わないでね」と前置きするようになった。
こういった課題は学習者のプログラミングスキルを向上させる、という信念があり提示している。しかし、前例のソートのように、マージは、heapqモジュールのmerge、回文はreversedあたりを使えばできそうだ。FizzBuzz問題解けなくてもいいような気が少ししてきた・・・。
C言語が全盛だったころにも上記の問題があった記憶がある。しかしそれよりもポインターなどのメモリー制御やデータ構造を理解するほうが先決だった。ところが現在、高級言語を学ぶ際には、これらは一切触れられない。
技術の進歩と同時に、当然のことながら学ぶ内容も変化するのだ。
AI登場
ChatGPT,Bing AIチャットは上記問題を解けるだろう。ここから数年で大きな変化があるかもしれない。メンターの仕事は、
「AIにプログラムを記述させるには、このように質問してね」
と、AIにプログラムを書かせるためのアドバイスをしているかもしれない。か、失職しているか・・・。
いずれにせよ、ここ1年は、あいかわらず上記課題を出し続けるつもりだ。ただ、「ChatGpt 使わないでね」と前置きを忘れないようにしよう。
まとめ
- FizzBuzz問題解けないプログラマーが一定数いる
- FizzBuzz問題以外にも良い問題あるよ
- もしかしてFizzBuzz問題解けなくてもよくない?
- 課題出されてもChatGPT使わないでね
- AIによる失職第一号はプログラムのメンターになりそう
- PyWeb Tinyは便利だよ
以上