ANDとOR(論理演算)はIF文で大活躍!プログラムに知恵を与える重要要素
金曜日は、毎週(第五金曜以外)光都ICTクラブの定例会が開催中です。メンバーみんなが、それぞれ課題を持ち寄って取り組んでいます。
Contents
スタートはタイピング練習
光都ICTクラブの各クラブでは、最初にタイピング練習に取り組むことにしています。
定例会のメンバーは、目標に届いていなくても、結構な練度です。生成AIを使うのに日本語入力が必要ですが、十分に実用に耐える程度にタイピングが速いのです。ですので、タイピング練習は、本格的なプログラミング前の準備運動です。
Fizz Buzzの問題
さて、タイトルだけ見るとなんのことやらわからないかもしれません。プログラムの問題で、有名な問題です。その問題とは、以下の通り。
1から順に数を数え上げていき、3の倍数なら「Fizz」、5の倍数なら「Buzz」、両方の倍数(15の倍数)なら「Fizz Buzz」、いずれでもなければその数を表示しなさい。
よく初心者向けの問題で出されます。もともとは海外の言葉遊びだそうです。
答えはたくさんありますが、まずはオーソドックスに(Pythonなら)ifとelifを使って解きましょう。で、問題なのが「両方の倍数(15の倍数)」の部分を、条件式でどのように表現するかというところです。
実はこれ、論理演算を知らないと解けません。一生懸命テキストを探していたけれど、そのテキストはやさしすぎて載っていないのが残念。ということで、一斉講義。
Fizz Buzz問題を解いていたメンバーだけでなく、他のメンバーも手を止めて聞いていました。なんと立ち見が出る大盛況(笑
数学的には高校で習う内容ですが、実は小学校で概念自体は教わっているはず。小学校で教わるときは、国語・算数・理科にわたって以下のように教えていると、北九州市立小学校の校長先生に聞きました。
- 国語:「かつ」「または」の意味と使い方
- 算数:「ベン図」の意味と使い方
- 理科:「植物の種の発芽条件」(光と水と温度がAND(論理積)になっている)
ということで、そんなに難しくありません。「論理積(AND)」とか「論理和(OR)」というように、難しく言ってるだけの話。
したがって、説明したらすぐに分かってくれたようです。
このように、「学校の勉強」「プログラム」「現実の課題」がリンクしてくると、学校の勉強も身の入り方が変わってきます。私は、めっちゃ楽しいと思いながらプログラミングしています。
Unityチームは教科書をやったり、自分なりに改良したり
「まずは教科書の通りにやってみる」これはとても大事なことです。
意味がわからなくてもいいのです。正しい型を体感してください。これが、守破離の「守」の段階。
そのうち、コードの一部分を変えたらどうなるかなと、疑問に思うことが出てきます。そうしたら、教科書のコードを変えて動きを確かめていきます。これが、守破離の「破」の段階。
そして、自分なりにいろいろプログラムを書けるようになります。それが、守破離の「離」の段階。
近道は遠回り。無駄な努力はしなくてもいいけれど、無駄ではない努力は成功の必要条件です。
AIを使うことで、プログラム学習が劇的に変わる!
こちらは、UnityのC#スクリプトを生成AIを活用して作っているところです。
プログラムの学習で、一番つらいのは「動かないこと」です。数行のプログラムだと数十分で解決することもあるけれど、巨大なプログラムだと数日悩むこともしばしばあります。わたしも何度もハマっています。
そこで、生成AIを使うと、完璧ではないにしろ、早く「動く」状態に持っていけます。この、「動く」という事実がなんと精神的に救われることか。
- なんど書きかえても吐き出されるエラーに絶望した
- 吐き出されるエラーの意味がわからない!
- エラーを読んでも、どこを書き換えたらいいのかわからない!
以上は、プログラミングあるあるです。エラーの文字列をそのままGoogle検索にぶち込んでも、微妙な検索結果しかでないこともしばしば。英語のサイトを翻訳しながら一生懸命読んだのに、全然解決につながらないことも。
そうこうしているうちに、あっという間に時間は過ぎていきます。
そこで、エラーの文字列を生成AIに食わせると、かなり有用な答えを返してくれることが多いのです。
AIの回答を読みながらプログラムを修正していくうちに、プログラム自体の理解も進みます。
今さらC言語が役に立つのか?
これは、メンバーの疑問です。
さて、これにはCの経験も豊かなスタッフが答えてくれました。
「Pythonは、遅いもんね」
この一言がすべてを表している実感のこもった素晴らしい回答です。私には、実感を込めて言えません。
PythonとC言語を簡単に比較すると、下表のとおりです。
Python | C言語 | |
---|---|---|
難易度 | やさしい | 難しい |
実行速度 | 遅い | 速い |
使いやすさ | 比較的簡単に使える分野が多い | 高度な技術があれば、幅広い分野で使える |
詳細は省きますが、PythonはC言語に比べて、実行速度が劇的に遅い! 圧倒的に遅い! これでもかっていうくらい遅い!
ただ、ハードウエア性能が大きく向上してきて、「昔なら、100秒と1秒の差だった」のが「コンマ1秒とコンマ01秒の差」になってしまいました。わたしは、Pythonで遅いと感じる場面に出くわしたことがないだけです。
経験豊かなスタッフは、学術的な大規模計算など、処理時間を気にする場面に何度も出くわしたそうです。だから言葉に重みがあります。わたしの薄っぺらい言葉とは大違い。
さてメンバーも、体感はできずとも理解してくれたようです。技術経験豊かなスタッフに聞けるというのが、光都ICTクラブの大きな強みです。