Actions speak louder than words.

行動は言葉よりも雄弁

【競技プログラミング】について

競技プログラミングとの出会い

2019年5月にAtCoderという競技プログラミングのコンテストをほぼ毎週末に開催しているサイトを教えてもらった。いきなりコンテストに参加するのではなく、過去のコンテストの過去問を解くことからはじめた。実行環境はAnacondaのSpyderでコーディングしている。GoogleのColaboratoryでも実行できることを知って、ますます手軽にコーディングからの実行がしやすくなってきているなと感じる。

競技プログラミングとは、少し数学的な問題を、速く、正確に、制限時間内に答えを出せるように処理方法を考えて、コーディングする。コンテストに参加して、問題を提出すると採点されて、早く正解を提出できればレートがどんどん上がり、レベルも上がっていく。問題は難易度の異なるものが用意されていて、難しいレベルの問題を解くには、解き方・考え方・アルゴリズムを勉強する必要がある。

 

プログラミング教育にむけて

プログラミングは大学生の頃に、JavascriptとHTMLを少し学んだけどその後何かを作ったわけでもなくほぼ基本以外忘れていたこともあり、新たな言語を使えるようになろうと思って、言語はPythonを使うことにした。

競技プログラミングを始めたころ、プログラミング教育が小学校から導入されて必修になることを意識し始めた。授業でいつか生徒に教えることを考えて、高校ではその頃はまだ新課程になる前だったけど、生徒にプログラミングを教えてみた。特に自分が担任をしている理系クラスでは興味をもつ生徒が多く、お試し感覚で教えると、生徒は結構楽しんで問題に取り組んでくれた。そこから、AtCoderのコンテスト問題を教材の参考にして、今も授業方法や教材内容などを試行錯誤中。

 

現在のレベル

ABCのB問題は過去問をほぼ解けるようになったけど、コンテスト自体に参加できないことも多くて、まだ灰色レベルから抜け出せずにいる。C問題の特に茶色の問題を解けるように勉強して、練習してコンテストに出なくては。

参考になる本も買ってはいるが、あまり読み進められていなくて、最近少し優先順位が低くなってきているので、長期休みなどに時間をとって解ける問題を増やしたい。

やりたいことがいろいろあると、やはり優先順位をつけて後回しにしてしまうものがある。やはり何かを犠牲にしないと、何かを成し遂げられないなと実感している。もっと時間を有効に使って、仕事以外の時間をリ・クリエーションの時間に使っていきたい。そんなこと思っているうちに、とにかくやれば1歩進めると信じて進む。

 

アルゴリズムと料理

アルゴリズムの勉強をしていると、効率よく処理する順番を考えて、使える道具や場所(スペース)を組み合わせたりすることなどが、料理をするときに考えることに通じると思う。料理だけでなく、日々家事をこなしたり、仕事をする上でも、どの順番で処理していくかなど考えて動くのは頭を使い、おもしろいなと思う。

次に何をしたらよいかを考えて、仕事をグループで行うときはどのように分担するか、スケジュールの組み方などを考えて決めていくのはおもしろいし、生徒にも身につけてほしい力である。やるべきことを指示されるのをただ待っているだけではなく、自分の頭で考えてどのように動くかが大事だと思う。生徒にもそうやって考えて動けるように関わり方・指導方法をいろいろ試している。