コンテンツにスキップ

素数判定

メール講座案内・登録ページ

上記ページにミニ講座の詳しい情報を載せてあります. そちらに登録しなくても以下のリンクにコンテンツ・メール講座で配信する内容を載せています. もしあなたが自分のペースでどんどん進めたいなら, 以下のページに直接アタックしてください.

関連する講演・資料

第三回オンラインすうがく徒のつどい

講演アブストラクト

基本情報
  • 講演分野: 数学, プログラミング
  • 講演タイトル: 数学のためのプログラミング入門・学習案内
  • 希望講演時間: 60分
  • 講演の難易度: 入門
  • 聴衆に要求する前提知識: 広義算数, 計算力
  • 聴衆に要望する「知っていると講演をより味わえる」知識: 組み合わせ爆発お姉さん, プログラミングへの興味
アブストラクト

最近は数学の応用について盛んに喧伝されている. その中で産業応用と絡めたとき, シミュレーション(数値計算), 機械学習, 暗号・符号理論などプログラミングとの関連は大きい. 2022年度から高校でもプログラミング教育が必修になる. 統計学での膨大な計算をやりきるためにもプログラミングは重要な道具であり, 数学を応用する上でプログラミングは一つの軸で, 適切なプログラミング教育はもはや欠かせないだろう. 文献\cite{ScottWalck1}では\coloredtextbf{コンピューターに物理を教える}体で物理・数学学習を進めるアメリカの大学での取り組みが議論されている. むしろ一般理工系の数学教育にこそプログラミングが求められているとさえ思っている.

新型コロナ関係で思うように進められていないが, 私自身, 地元の理工系を志す中高生向けの教育提案として私の学生時代の専門, そして仕事での取り組みを合わせて提案できないかと実際に広義知人の地元の政治家に理工系の総合語学というパッケージ案の話を持ち込んでもいる. 今回の講演テーマもこの取り組みの延長線上にある. 自分自身の勉強も兼ねて, 理工系の修士・博士出で主に非数学科の人達とプログラミングの勉強会を開催していて, ここで得られた知見も合わせている.

最近作り終えた数学系プログラミング用ミニ講座として素数判定の巻があり, 実際にメール講座としてまとめた内容をもとに話す予定を立てている. 特に何故これを作ったか, 数学系の人間がプログラミングに取り組むときに何が大変か, 数学系の人間はどういうアプローチで何を勉強すればいいかといったテーマを中心に話をしたい.

上記メール講座で引用した記事に次のような記述があった.

(小学生の)男の子たちは大きな素数を発見するたびに「おおおお!!これは!素数だァー!」「5ケタのを発見した!」って叫んでたから本当に将来有望である(嬉しい)

すうがく徒のつどいの参加者からすれば, いまさら五桁の素数に目新しさもなければ, 大きな素数を計算できたからといって何か感じることもないだろう. しかし虚心坦懐に尋常ではない量の計算を重ねること, それ自体にも楽しみがあり, 情熱を捧げられる対象であることを知ってほしい. ここで日本科学未来館の組み合わせ爆発お姉さんを思い出す人もいるだろう.

万能の道具など存在しない. 無限を相手にしたいタイプの数学が好きな人にとって, 何かしらの意味で有限な計算しかできないプログラミングには本質的な課題はある. それでもなお, ただただひたすらに計算したその最果てで見える世界がある. 今回の目的はその入口に立つための案内である.

プログラマーのための数学講座 組み合わせは爆発だ

  • ENERGEIAでのオンラインイベント

コンテンツ

第一回

Jupyter(またはGoogle Colaboratory)用のipynbファイルはここからダウンロードしてください. これをGoogle Colaboratoryで使うには, 例えばこのページ(外部サイト)を参考にしてください.

以下のHTMLが読み込まれない場合はリロードしてください.

第二回

Jupyter(またはGoogle Colaboratory)用のipynbファイルはここからダウンロードしてください. これをGoogle Colaboratoryで使うには, 例えばこのページ(外部サイト)を参考にしてください.

以下のHTMLが読み込まれない場合はリロードしてください.

第三回

Jupyter(またはGoogle Colaboratory)用のipynbファイルはここからダウンロードしてください. これをGoogle Colaboratoryで使うには, 例えばこのページ(外部サイト)を参考にしてください.

以下のHTMLが読み込まれない場合はリロードしてください.

メール講座: 中高数学駆け込み寺 素数判定の巻

プログラムも使ってたくさん計算しよう/中高数学駆け込み寺 素数判定の巻

中高数学駆け込み寺, 素数判定の巻に登録頂きありがとうございます.

さっそく初回コンテンツを案内します.

このミニ講座は二段構えになっています. 簡単なプログラムを使った具体的に計算をもとに進めます. 途中までは手計算でも十分ですが, プログラムを使って何百万にもおよぶ数を計算します.

結果を見るだけでも構いませんが, 実は少しの工夫で実際にプログラムを動かせるようにしてあります.

もしあなたがプログラムを動かしてみたければ, まず次のリンク先からファイルをダウンロードしてください.

このファイルをGoogle Colaboratoryにアップロードすれば, 簡単に何度でもプログラムが実行できます. Google Colaboratoryの使い方については, 例えば次のページ(外部サイト)を参考にしてください.

Google Colaboratoryのすすめ

今回のミニ講座で使う範囲で言えば, Google Colaboratoryは無料でいくらでも使えます. 驚くほどに便利です. プログラミングに興味があって, 細かいことを気にせずとにかく気軽にはじめたいなら, 最高の環境の一つです. Google Colaboratoryは本やネット上の紹介ページもたくさんあるので, 必要に応じて参照してみてください.

次回は改めてこのミニ講座で何を伝えたいか, 詳しく紹介する予定です.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

プログラム利用の意義: 教えることで深く学べる/中高数学駆け込み寺 素数判定の巻

中高数学駆け込み寺, 素数判定の巻の第二回です.

前回のコンテンツは確認されたでしょうか? 後回しにせず, ぜひさっと眺めてしまってください.

改めて今回はプログラム援用学習のご利益についてお話します. 何の意味もなく面倒なことをさせようとしているわけではないからです.

プログラミングは教育だ

まず基本的な認識として, プログラミングはコンピューターへの教育だと思ってください. コンピューターに指示を飛ばして何かやらせるのがプログラミングです. コンピューターは信じられないほど頭が悪く, 融通も利きません.

人間とコンピューターはプログラミング言語でやりとりします. この意味で特に人工言語と呼ばれる場合があります. 言語なので文法があります. 文法的におかしな文を書くと「何を言っているのかわからない」と言って, コンピューターは全く動いてくれません.

例えば文法的に正しくプログラムを書いたとしても, その内容があなたの意図と違う場合, あなたが書いた通りにしか動きません. あなたの意図や空気は読んでくれません.

数学でも業務システムでも, プログラムを書くときの共通の問題です.

あなたの理解が試される瞬間

コンピューターに正確に教える必要があり, ここで自動的にあなたの理解が正されます.

  • コンピューターに教えようとする.
  • 正しく動かない.
  • なぜだろう?

このくり返しで, 自分独りではなかなか気付けない誤解を一つずつ丁寧に駆逐しましょう. これがまさにこのミニ講座で提唱するコンピューターに教える学習法です.

私の独自のアイディアではなく, 少なくともアメリカの物理教育で実践されている手法でもあります. 興味があればぜひ次の文献を読んでみてください.

コンピューターに教え, コンピューターに教わる

何が言いたいかというと, 生半可な理解ではプログラムはあなたの意図通りに動いてくれません. 意図通りに動いてほしければそれを正確に表現する必要があります. そして意図を正確に表現できたと思っても, そもそもその意図が間違っていると決して「正しく」動いてくれません. これを正してくれるのがコンピューターなのです.

生徒として見ればコンピューターはとても優れています. 指導者の指導が悪くても文句を言いません. 何度同じことをやらせても文句を言いません. 自分の忍耐が続く限り永遠に付き合ってくれます. 人間相手だとこうはいきません.

適切に問いかければ, 何をどうしてその計算結果を導いたのかも詳しく教えてくれます. これをうまく使ってプログラムのバグを取り除きます. 特にデバッグと呼ばれます.

実はいつもやっている

しかし落ち着いて考えてみると, コンピューターの方が遥かに忍耐強いだけで, 人に話している・教えているときと似た点はたくさんあります.

勉強に限らず, 仕事でもお客さんや同僚から思いもよらない指摘を受け, 今まで気付けなかった問題に気付き, それを真剣に考えるうちに視野が開けて理解が深まった経験がある人も多いでしょう. あなたもそうかもしれません. そしてその課題を解決する中で, 大きなビジネスチャンスにつながった経験がある人もいるかもしれません. 同じことをコンピューター相手に実践してみましょう.

今回はこのくらいで終わりにします. 次は第二回を案内します.

最後にコンテンツ再案内

最後にもう一度コンテンツを案内します.

ぜひ先送りせず積極的に取り組んでみてください.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

素早く大量に計算する/中高数学駆け込み寺 素数判定の巻

さっそく第二回のコンテンツを案内します.

先送りにせず積極的に取り組んでみてください.

前回の復習

前回は次の視点から話をしました.

  • 「教える」ことで頭の使い方が変わる.
  • コンピューターに向けてプログラムを書いて教える.

ただでさえ大変な算数・数学学習に加えて, プログラムを読み書きする訓練も必要で, 全くもって楽ではありません. しかしその苦労に十二分に応えてくれるすぐれた方法です.

今回は別の視点からコンピューター利用の算数・数学を議論しましょう. 素早く大量に計算できるメリットを考えます.

手の早さと量の関係

私はよくTwitterで中学・高校の教員や塾の先生とやり取りしていますし, 彼ら・彼女らのコメントもよく見ています. その中で時々次のような話が出てきます.

  • 素早さと量は大事.
  • 手が早ければ早いほど量がこなせる.
  • たくさん量がこなせるとそれだけできることが増え, 見える世界も広がる.
  • 一つ一つにかかる時間が短いから理解を深める上で重要な試行錯誤の時間も取りやすくなる.

よく次のような意見も見かけます.

「一つ一つの質が大事だから早くやるよりもゆっくり丁寧にやる方が大事」.

もちろん状況に応じてこちらの方が重要な場合もあります. しかし実際に多くの児童・生徒を見てきた人からすると, こと学習に関して言えば, 手が早いと試せることも増え, 守破離でいう離, つまり自分なりの工夫をしはじめられるタイミングも早くなり, それが一年・二年と続くと圧倒的な差として出てきてしまうとのこと. ミスをしないように工夫するようになって, 「ゆっくり丁寧派」より早く・正確になるようです.

極端に言えば器用な人間の方が早く上達すると言っていて, 血も涙もない話です. しかし一つの現実として受け止めるべき話です.

補足: プログラマーとしてのコメント

念のため書いておくと, 「面倒な計算は電卓ですればよく, 暗算や筆算の練習なんていらない」といった類のしょうもない話ではありません.

私はスパコンを使った超大規模数値計算プログラムの開発をしていたことがあります. そのとき, 書いたプログラムのバグ取りのために, 凄まじい量の手計算をしたことが何度もあります.

もちろんプログラムで計算させる何兆回レベルの計算はしませんしできません. しかし理工系の人であっても手計算ではやりたくないレベルの規模の計算を手計算し, プログラムでの計算結果と比べてどこが問題か突き止めたことがあります. もちろん電卓的な検算も組み合わせて検証していましたが, 凄まじい手計算力が必要な場面はあります.

話を戻して: 早く大量に計算できる楽しさ

話がそれたので元に戻りましょう. 早く大量に計算できるといいことがある話です. ミニ講座の案内ページにも書いたように, 実応用でも大事な視点です.

ここではまた違う視点から紹介しましょう.

まず, 早く大量に計算できるとそれ自体楽しいのです.

案内ページでも素数判定のプログラムを書いた小学生の話をしました. 実際に例えば次のページでその事例が紹介されています.

最強の勉強法はそれに没頭し, 楽しむことだとよく言われます. 創意工夫でいろいろなことが見えてきて, それがまたさらに学習意欲をそそります. 楽しんで取り組めていると, 課題が見つかってうまくいかず詰まっているときでさえ, 意欲が挫かれることはなく, むしろ「この難敵をどう倒そうか?」と燃えてくるのです.

数学と帰納的なアプローチ

算数・数学系の活動にこれをあてはめてみましょう. 数学はよく演繹の学問と呼ばれます. 実際, 最終的にはゴリゴリの理詰めで計算し, 証明をつける必要があります.

しかし新たな面白い事実を見つける過程では大量の試行錯誤が必要です. ああでもない・こうでもないと大量に実験する必要があるのです. この大量の実験にプログラミングが援用できることがあります. このミニ講座のテーマの素数判定はまさにその典型例です.

男の子たちは大きな素数を発見するたびに「おおおお!!これは!素数だァー!」「5ケタのを発見した!」って叫んでたから本当に将来有望である(嬉しい)

このミニ講座では少なくとも11桁の素数を計算で求めています. 少し時間をかければもっと大きな素数も簡単に求められます. 大人, それも数学を専攻し, プログラムを書いて飯を食ったこともある人間からすれば, それほど大した計算ではありません. 少なくともプログラムを書いて計算する観点からは.

しかしそんなスレた大人の理屈はどうでもいいのです. 子供(特に男の子?)は「すごく大きいモノを見る」だけでも楽しいのです. その大きさも子供サイズの5桁で十分です. しかも自分で作った機械(プログラム)でそれを見つけたとなればどれだけ楽しいか. 特に算数・数学が苦手な人なら大人でも感動できる話のはずです. こういう素朴な感覚を忘れてはいけません.

  • めちゃくちゃたくさん計算できると楽しい!
  • めちゃくちゃ大きな数が出てくると楽しい!

勉強のモチベーションになるならこれで十分です. 楽しくなってきたら私達の勝ちです.

もちろん何が楽しいかは人によって様々です. ここではこの大量の計算で見える世界を楽しむ趣味がある人に向けてミニ講座を作っています. 実際にこれを楽しむ人がいるからです. 小学生にさえいます.

私自身, 何時間どころか何日レベルの大規模計算を本格的に回したとき, その大規模計算に挑むというただそれだけで楽しかった記憶が鮮明にあります. 実験, そして理論と合った正しい答えが出るかどうか以前の話です. こんな楽しみ方もあるのだと伝えたい, その一心でこのミニ講座を作っています.

そして広く公開してたくさんの人からコメントをもらい, ブラッシュアップを続けて実際に多くの子供に遊んでもらいたいと思っています.

今回はこの辺で終わります. 次回は素数判定講座としては最終回です. ぜひ楽しみにお待ちください.

最後にコンテンツ再案内

前回までに配布したコンテンツへのリンクもまとめて再掲しておきます.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

プログラミング学習の落とし穴/中高数学駆け込み寺 素数判定の巻

さっそく第三回のコンテンツを案内します. ミニ講座と銘打ったように, メインコンテンツは今回で終わりです. あと回しにせず, ぜひ積極的に受講してください.

復習: 速く大量に計算できると楽しい!

前回, 講座コンテンツの内容としてはプログラムの高速化を議論し, 学習のヒントとして早さ・速さと量の話をしました.

今回は早さ・速さが実際に量を生む様子を見てもらうのが目的です. 計算を高速化したので, 以前よりも大きな素数を高速に判定できるようになっています. 一つ一つの判定速度が大幅に上がったため, もっと大きな素数に簡単に辿りつけるようになりました.

純粋な数学ではあまり大きな問題にはならないものの, プログラミング, それも応用に近づけば近づくほど実際にどのくらい改善されるか, きちんと定量化する必要があります. これもきちんと議論しているので, ぜひコンテンツを眺めてみてください.

いろいろな「早く・速く, 大量に」

さて今回は「早く・速く, 大量に」のバリエーションを議論します.

日本語の「学ぶ」は「真似ぶ」に由来すると言われています. もちろんやたらめったら適当に真似をするよりも, 適切な例を取り上げて真似した方が効果的です.

適切な例や問題がたくさん載っている代表例はもちろん本です. プログラミングに関しても本はたくさんありますし, 世の中にはプログラムそれ自体も大量にあり, しかも無料で公開されているプログラムも大量にあります. 実際私もいろいろなプログラムを公開しています.

ぜひこれを有効活用してほしい, と言いたいところですが, なかなか難しい事情があります.

しかしプログラミングの勉強を楽しく, そして快適に続ける上でとても大事なことがあります. それが今回のテーマです.

「本の内容は間違っている」

以下の話, もしあなたが数学系ならショックを受けるかもしれません. もしあなたが中高生でもショックを受けるかもしれません.

何かというとごく単純で, 上記の本や世に公開されているプログラムは, あなたが実行しようとしてもまともに動かない可能性があります.

誤解を恐れずに言えば, 「間違ったプログラム」が本に載っていて, それが「正しいプログラム」として世に公開されています. 数学からすれば「間違った証明が平然と本に載っている」と言えばいいでしょうか?

プログラミング学習の難しさ

もちろんこれには事情があります. 中学・高校の古文では昔と今とで日本語は大きく変わっていて, もはや廃れた文法事項や単語があり, 昔と今で意味の違う単語があります.

実はプログラミング言語でも同じです. プログラムはもちろんプログラミング言語で書かれています. そして(適当な意味で)よりよくなるように, プログラミング言語も日々変わっています. その影響で, 古い本に書かれたプログラムを実行しようとしても動かない場合があります. 現代日本語の感覚で平安時代の文章を読もうとしても読めないのと同じです.

状況は古文よりひどいです. たった一年前の本に書かれたプログラムでさえ, 同じように動かない可能性があるからです. 私がプログラミング系のコンテンツを体系的に作ってこなかった理由もここにあります. がんばって作ってもすぐに動かなくなってしまうからです.

今回, プログラミングのコンテンツとして素数判定を選んだ理由もここに関係があります. まず変わらない, 変わったとしてもすぐに修正できるような, ごく基本的な項目だけでプログラムが書けるからです.

こんな本がある, こんなコンテンツがある, こんなプログラムがあるとたくさん紹介したいのは山々ですが, 非常に難しいのです. それでも今後の勉強の指針として具体的なモノを挙げないわけにもいきません.

中高数学の学び直しからの視点

さらに特にいろいろな理由から中高数学の学び直しをしようとしている大人, 特に文系プログラマー陣には, 中高数学をきちんと議論したコンテンツが望まれています. 今回のミニ講座も作ると宣言しただけで多くの反響をもらいました. ぜひ作ってほしい, とても楽しみにしていると.

実際の中高数学で必要なプログラミングはもっと大変です.

  • 文字係数の連立一次方程式を解いてみたり,
  • 二次関数のグラフを書いてみたり,
  • 関数を微分・積分してみたり,
  • いろいろなグラフを書いてみたり,
  • ちょっとしたアニメーションを作ってみたり.

いろいろな要望があるのもわかっています. 何より中高生だった頃の自分がほしかったコンテンツを作る野望もあります. そしてこれに大きな需要があるのもわかっています.

理工系の博士にとっても重要

私は理工系の修士・博士持ちの人達と統計学の勉強会をやっていて, いろいろな数学系プログラミングの話もしています. その中でグラフの「お絵描き」が想像以上に面白く, しかも既に理論的に知っていたことであっても, 実際にお絵描きして確認してみるとまた違う趣があると皆が言うのです.

もちろん私自身も思った以上に面白かったので, 中高数学のプログラミングや, そこで出てくる関数のグラフ書きやアニメーション作りのサンプルはたくさん紹介したいと思っています. 自分自身改めてやってみて, そしていろいろな人の反応も見て, 思った以上に大事な深い実感があります.

次回予告: 深掘りコンテンツの案内

次回は私自身が勉強してきた結果をまとめつつ, 勉強会でも使ってブラッシュアップしてきたコンテンツを案内します.

プログラムをゴリゴリ書いている以上, 放置しているとそれらは動かなくなってしまいます. メンテナンスは全くもって楽ではありません. しかしきちんと時間を取って修正し, 動くようにメンテナンスを続けながら提供しています.

市販の本やコンテンツの多くは, いったん作ったら作りっぱなしで, 作成時点での指定のバージョンでしか動作を保証しません. しかし次回案内するコンテンツは, 提供を続ける限り, 私自身がきちんとプログラムのメンテナンスを続けます.

いろいろな工夫を凝らしたコンテンツなので, ぜひ楽しみにお待ちください.

最後にコンテンツ再案内

最後にここまでの三回分のコンテンツをまとめます. 後回しにせず積極的に挑んでください.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

中高数学学習コンテンツの案内/中高数学駆け込み寺 素数判定の巻

前回まででミニ講座の三つのメインコンテンツを配布し終わりました. お疲れ様でした.

息つく間もなく次をご案内することになってしまいますが, 鉄は熱い内に打てとの言葉もあります. 勉強してみて意欲が高まった状態でご案内した方がよいと思うので, 間髪入れずに紹介することにしました.

コンテンツ案内: プログラミングで数学を 中高数学虎の穴

詳しいことはリンク先の案内ページにまとめてあります. このページを読むだけでも数学・物理・プログラミングを勉強する上で大事なことをたくさん書いています. ぜひ詳しく読み込んでみてください.

強くメンテナンスをしていかなければいけないコンテンツであるため, 有料で提供しているコンテンツです. 言いたいこと・言うべきことは上記ページに書いてありますが, ここでも簡単にコンテンツの特徴を紹介します.

特徴: 中高数学の華, 微分積分

このコンテンツの特徴はやはり中高数学の華, 微分積分を中心に据えています. 微分積分の応用まで議論していて, 特に次の三つを議論しているのが特徴です.

  • 常微分方程式の数値解法(物理, 力学入門に向けて)
  • 偏微分方程式の数値解法(拡散・熱伝導や波動など大学レベルの物理に向けて)
  • 統計学・機械学習の入門(の入門の入門)

常微分方程式の世界, 多彩な応用

常微分方程式を紹介するのは, 経済や数理生物学への応用を紹介し, 数学の多彩な展開・応用を見てもらうのが目的です. 特に経済はいわゆる文系の人達に向けて, 数学の応用の仕方や必要性を説明する意図もあります. あえて強調してはいないものの, 力学をはじめとして物理への応用も大事です.

物理への応用はむしろ偏微分方程式に任せています.

偏微分方程式の世界

物理を勉強しているとたくさんの微分方程式が出てきます. 中高数学までと違い, 微分方程式はふつう解を具体的に書けません. そして作った微分方程式で現象を的確に表せているか確認するのは非常に大変です.

しかも時間変化する現象を追いかけようと思うと, さらに大変です. そこでプログラミングを使って力づくで計算し, それをアニメーションにしています.

例えば波動方程式をがんばって計算すると, 名前の通り波の伝播の様子がアニメーションで見られます. 拡散方程式をがんばって計算すると, 名前の通り物質の拡散する様子がアニメーションで見られます. このように目で見て確認できると理解が深まるだけではなく, 単純に楽しいです. これを味わってほしいのが目的です.

統計学・機械学習: 応用数学のトレンド

統計学・機械学習は2022年時点の応用数学のトレンドです. 実際に使われる部分は恐ろしく難しいです.

数学だけなら私はどうにかできます. 私にとって問題なのはこの数学をプログラムに落とす部分です. ここにも特殊な訓練・鍛え上げられた能力が必要で, 私はこの二つが圧倒的に足りません. ちょこちょこ勉強してはいるものの, その程度で足りるレベルではないのです.

そこでこのコンテンツでは統計学や機械学習への応用に関して, 簡単で, しかも目で見てインパクトがあり, 教育的な例をいくつか取り上げて計算しています. コンテンツのブラッシュアップのためにモニターを募り, 勉強会を開いたときにも評判がよい部分でした.

提供形式の工夫: 本と動くプログラムの一体化

そしてもう一点, 重要な要素があります. このミニ講座でも配布したipynbファイルの形で全てのコンテンツを配布していて, ipynb上で完結させています. そのままで動くプログラムを載せるのはもちろん, 数学やプログラムの解説もipynbだけで閉じています.

世の体系的なコンテンツの多くはやはり書籍がメインです. 最近のまともな本ならプログラムも一緒に配布しています. 実はプログラムだけなら無料で公開されていることはよくあります. 私もよく参考にしています.

いわば無料で本の一部が読めます. しかし本を買ってもらわないと商売が成り立ちません. そうなると無料公開されてしまっているプログラム部分は説明が薄く, サンプルプログラムを読むだけで背景まで推察できる力がない限り, 本を参照しながらでないと勉強できません.

そして実際に勉強してみるとわかります. 本を読みながら対応するプログラムを読んだり, プログラムと圧縮された解説を読みながら, 本の対応箇所を読み進めるのは気が散って非常に勉強しづらいです.

そこで数学・プログラムを一体で勉強できるように配慮したコンテンツが必要だと判断しました. コンテンツの提供形式の上でも, 私自身の勉強の苦労を反映させています.

他にも案内ページでは, 早稲田・東大で物理・数学を専門的に勉強してきた人間でさえ苦労した点を前提に, コンテンツにどんな工夫をこらしているか, さらには数学・物理・プログラミングを勉強するためのヒントもたくさん解説しています.

買う・買わないによらず読むだけで参考になり, 勉強になるようにしています. ぜひ時間を取ってしっかり読んでみてください.

次回の話: アルゴリズムを勉強して計算し倒そう

さて, 上記コンテンツは中高数学の華である微分積分を軸にし, 統計学や微分方程式などの応用に向けた議論が中心です.

一方で算数・数学・プログラミング, 特にアルゴリズムに軸を置いた勉強に興味がある人もいらっしゃるでしょう. あなたもそうかもしれません. 次回以降, この方面でいろいろなアプローチやコンテンツを紹介します.

微分積分やグラフ描き・アニメーションはライブラリや他のツールを使う必要があります. プログラミング言語だけではなく これらのバージョンにも強く依存する点が厄介です.

アルゴリズムにしてもライブラリはあります. しかしことアルゴリズムの勉強となると, そうした外部の影響は受けにくい形で進められます. はっきり言えば古い本(古本で安く手に入る本)でもかなり役に立ちますし, 大量に出版されてもいて, プログラミングの本としては珍しいくらい寿命が長い本がある分野です. 競技プログラミング(競プロ)のおかげで最近はさらにバリエーションが増えてきていますし, 勉強しやすい環境が整っています.

私自身いま積極的に再勉強して知見をブラッシュアップしていますが, 非常に楽しいです. こんなに楽しいならもっと早くから深く広く勉強しておけばよかったと思っているほどです. こちらもぜひ楽しみにしていてください.

最後にコンテンツ再案内

最後に改めてミニ講座三回分のコンテンツをまとめます. 後回しにせず積極的に挑んでください.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

馬鹿みたいに計算しよう/中高数学駆け込み寺 素数判定の巻

今回から算数・数学とプログラミング学習の案内をします. 今回のミニ講座のテーマ, つまり素数判定のようなほぼ算数に近い内容もありますが, 少なくとも入門レベルでは中高数学でいう場合の数にあたる内容が多数を占めます.

競プロを深く遊び倒すときに大事なキーワード

まずプログラミング・情報科学の文脈で対応する単語を紹介します. それはデータ構造とアルゴリズムです.

あなたはこの講座を受講し, しかもここまで読み進めてきた勇士です. そんなあなたには, 何を忘れたとしてもこの言葉だけは絶対に覚えておいてほしいです. そのくらい重要な言葉です.

情報科学の古典的な話題でありながら, 現代でも色褪せないどころか最前線バリバリのテーマです. アルゴリズムを単純に「問題を解く手順」だとみなすなら, ありとあらゆる活動がアルゴリズムを考えているとさえ言えます. もちろん情報科学の文脈ではもっと限定的な意味を持たせていますが, そのくらい基本的で重要なテーマなのです.

アルゴリズムの世界

いわゆるAIやビッグデータ解析でも, どうやって効率的に計算するかが重要で, それはまさにアルゴリズムの問題なのです. 物理でも偏微分方程式の数値計算では, 精度の高い近似アルゴリズムの開発・実装が基本的な課題です.

もっと身近な例もあります. もしあなたの身近に公共交通機関があり, そこでICカードによる決済を使ったことがあるなら, そこにもアルゴリズムが潜んでいます. 例えば次のような論文があります.

もちろん素数判定・素因数分解を基礎にした, 暗号の理論もゴリゴリの実用的なアルゴリズムの問題です.

実用性からの競プロ案内

実用性の観点からもう一つ紹介します. あとで詳しく紹介する競技プログラミングに関わります. 暴力的に単純化すると, 与えられた問題を解くプログラムを提出する競技です. この中で問われるのがまさにアルゴリズム構築力です.

そして競技プログラミングで優秀な成績をおさめていると, それが仕事をする上でアピールポイントになる事実があります. 例えば次のAtCoder Jobsで実際の求人を見てみてください.

ベンチャー系の企業もあれば, 名だたる大企業や関連会社があります. 競プロで鍛えたアルゴリズム構築力を強く評価する企業もたくさんあるのです.

アルゴリズムの世界に挑む

単純に馬鹿みたいに大量に計算できて楽しい! 話から, 身近に多彩な応用があり実用性に満ちた話もあり, 学術的な深く広い話もあります. その分いろいろなアプローチがあり, いろいろな楽しみ方が考えられます.

ここでは算数・数学・プログラミングに関して高いレベルは仮定していないため, あくまで入門レベルの内容・アプローチを紹介します. もちろん私が提案するのは一つの道に過ぎません. もっとあなたにとってよいアプローチもあるかもしれません. ぜひ何が自分の気に入るか, 楽しみながら探してみてください.

勉強するときの注意: アルゴリズム学習とアプリ・ゲーム開発の違い

さて, データ構造とアルゴリズムの話をすぐにしたいところですが, 一つ注意があります. それはデータ構造とアルゴリズム系の勉強と, 世間でよく言われるアプリ開発やゲーム開発の勉強は食い合わせがよくありません. 今回はまずこの点に関して注意します.

アプリ開発・ゲーム開発で重要なのは, 既存の資産をどれだけうまく使うかです.

それらがやりやすいプログラミング言語を選び, ライブラリを調べ, それらを使いこなすのが重要です. プログラミング言語についても, 採用した各言語についてできる限り深い知見を持つべきです. ここで大事なのはいわば初学者が想像するふつうの勉強と言ってもいいでしょう.

まずはあなたが興味のある領域に適したプログラミング言語に関して, 最近出版された本で基本を一通り勉強するのをお勧めします.

そして一通り勉強したら, あとは作りたいモノを作りはじめてしまってください. 足りていない知識や技術がたくさんあるのに気付くはずです. これをいちいち基礎から勉強しようと思わないのがポイントです. 使えるようにすることを第一目標に, 必要なモノを必要な範囲で勉強して, いろいろなモノをどんどん作ってみてください.

ここではアプリ開発には深入りしないので, このくらいで簡単に終わらせます.

次回予告: 競プロへの取り組み方

次回からはデータ構造やアルゴリズム, 特に競技プログラミングに関して, 具体的な本やサービスなどを紹介します. ぜひ楽しみにしていてください.

ミニ講座のコンテンツ案内

改めてミニ講座三回分のコンテンツをまとめます. 必要に応じて何度でも復習してください.

本家メルマガ案内

最後に私の本家メルマガを案内しておきます.

数学・物理・プログラミング, そしてそれらを学ぶ上で大事な英語を中心とした語学の情報を発信しています. もしあなたが私の活動や私からの情報に興味があるなら, ぜひ登録しておいてください. 新しいコンテンツを作ったときにもこのメルマガで案内します.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

競プロで遊ぼう: AtCoderの紹介/中高数学駆け込み寺 素数判定の巻

さて, 今回からは改めてアルゴリズムの話をします. 特に競プロ(競技プログラミング)の観点からの取り組み方を紹介します.

はじめに注意

はじめに書いておきます. このメルマガ執筆時点で私自身アルゴリズムや競技プログラミングの再勉強中です. どちらかと言えば「一緒に勉強していこう」くらいのスタンスで書いていますし, 「この辺が面白そう」, 「実際やってみて面白かった」という視点で書いています.

さて, 今回は競技プログラミングの話, それもAtCoderというサービスを中心に話をします. すぐに遊べるネタが大量にあり, オンライン上の資料もたくさんあるからです. 次回, 他のサイト・サービスやプログラミング・プログラミング言語に関して, もう少し勉強用の資料・情報をシェアします.

競プロ(競技プログラミング)とは何か

まず競技プログラミングを簡単に紹介しましょう. 競技プログラミングは適当に問題セットが与えられ, 問題をいかに早く解けるかを競う競技です. 早押しクイズのプログラミング版だと思ってもらえばいいでしょう. 他にはWikipediaの記述も参考にしてください.

競技プログラミングで出てくる問題は, 特にアルゴリズムを組んで解く問題が基本です. 数学的な設定にして具体的に言えば次のような問題です.

  1. 条件Aをみたす場合の数を求めよ.
  2. 条件をみたす解の有無を判定せよ.
  3. 条件をみたす問題の解を具体的に(1つ)構成せよ.

私がいま取り組んでいる入門レベルの問題では1番が多いです. ちなみに素数判定は1番か2番にあたります. 「素因数分解したときに因数となる素数の数を求めよ」と言われれば1番, 直接「素数かどうか判定せよ」と言われれば2番です.

たったこれだけですが, なかなかどうして難しく, そして楽しいのです. 以下, 条件をみたす場合の数を求める問題を意識した記述にしますが, 本質的な制約ではあります.

競プロでの制約

競プロでは次の大事な制約があります. これが難しく面白い点です.

  • 凄まじく膨大な場合の数を調べる. 10^9 = 100000000 = 1億を越えることもざらにある.
  • 1億を越えるデータ量を高速に調べる. 例えば「プログラムを走らせる時間が2秒を越えたらアウト」といった条件がある.

素数判定で巨大な素数の判定するとき, ルートを取って計算量を削らないと凄まじい時間がかかったことを思い出してください. 常にそれを意識しながらプログラムを書く必要があります.

実際に問題を見てみよう

いろいろ書きはしましたが, これだけではなかなか具体的なイメージは掴めないでしょう. まずは次の記事を読んで, AtCoder https://atcoder.jp の簡単な問題を眺めてみてください.

後者のAtCoder Beginners Selectionは前者の記事を元にしたAtCoder公式のページです. こちらには解き終わった次のアクションとして, AtCoder Problems https://kenkoooo.com/atcoder/などが紹介されているため, あえて載せておきました. 2022/3時点で私が取り組んでいるのもまさにAtCoder Problemsです. 2022/1から再開して2022/3/13時点で300題中160題まで解いた状態です.

これ以外にもAtCoderのホームページ https://atcoder.jp/home の「常設中のコンテスト」を見ると, 次のような学習用コンテンツへのリンクがあります.

量が膨大なので圧倒されると思います. むしろ遊ぶネタがたくさんあると思ってのんびり取り組んでください. 上記AtCoderホームページ https://atcoder.jp/home の上から順に取り組めばいいでしょう.

AtCoderでは他の人が書いたプログラムも完全公開されています. 他の人のプログラムを読み解くのも非常に大事な勉強法です. AtCoder学習のいいところでもあります. ぜひAtCoderを使い倒してみてください.

競プロ学習のいいところ: 一題一題がコンパクト

一言で書きましょう. プログラムが短い点にあります. 短くても書くのは大変です. しかし他人が書いたプログラムを読むのは非常に大事な勉強法で, その読むのがとても楽なのです. 少なくともボリュームの点で.

アプリ開発・ゲーム開発では全体で1000行を越えるプログラムもふつうです. しかし競プロでの簡単な問題は一題ごとに10-20行程度で収まります. 言語によっては2-3行で書ける場合があります. 気楽に「空き時間にちょっと一題見てみよう」が成り立つレベルです.

このお手軽感は勉強を続ける上で決定的に大事です.

プログラミング言語を選ぶときの注意

いまの時点で一点だけ注意します. このミニ講座や紹介した有料講座ではプログラミング言語としてPythonを採用しました. しかし上記の初心者向けプログラミングコンテンツでは, プログラミング言語としてC++を採用しています. これにはいくつかの理由があります.

  • C++は速いプログラミング言語なので競プロに取り組む上で便利である.
  • アルゴリズムに関する本・コンテンツでは具体的なプログラミング言語としてCまたはC++を採用していることが多く, 本やコンテンツで勉強するときにも直接的に役に立つ.

特に後者が重要です. 慣れないプログラミング言語を読み書きするのは, 慣れない外国語でやり取りするのと同じくらい大変です. そもそも意思疎通できないことさえふつうです. そこで「競プロやるならもうはじめからC++にしてしまえばいいのでは?」という話です. 慣れていない人がC++の開発環境を作るのは楽ではありません. しかしAtCoder上でC++のプログラムを実行でき, そこで面倒な部分を吸収してくれています.

Pythonでも大丈夫

これも念のためいまの時点でフォローしておきます. 最近はPythonの応用が広がっていて, 本やコンテンツでもPythonを採用している本が増えています. もちろんアルゴリズムの本でもPythonを使っている本が増えているため, 本を読むならPythonで書かれたアルゴリズムの本を探すのも楽になっています. 無理にAtCoder公式サイトのコンテンツだけで勉強する必要もなければ, C++で競プロに取り組む必要もありません. C++に馴染めないと思ったらぜひ別の言語で競プロやアルゴリズム学習に取り組んでみてください.

今回のまとめ

今回はAtCoderにフォーカスして勉強する方法を紹介しました. 原則無料で勉強できますし, AtCoder以外にブログやTwitterでも質の高い学習情報を出してくれている人がたくさんいます. 実際に私もAtCoderでプログラムを読み書き倒して楽しんでいます.

どうしても合う・合わないはあるため, 無理に競プロ, 特にAtCoderに挑む必要はありません. しかし無料で遊び倒せる上, そこでいい成績をおさめていれば就職にも直接役立ちさえする面白いサービスです.

次回は競技プログラミング系の他のサービスや, アルゴリズム学習に関する本やコンテンツを紹介します. お楽しみに.

最後に: 本家メルマガの案内

最後に改めて私の本家メルマガを案内します.

数学・物理・プログラミング, そしてそれらを学ぶ上で大事な英語を中心とした語学の情報を発信しています. もしあなたが私の活動や私からの情報に興味があるなら, ぜひ登録しておいてください. 新しいコンテンツを作ったときにもこのメルマガで案内します.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

アルゴリズムをしっかり/中高数学駆け込み寺 素数判定の巻

今回は競プロを中心にして, アルゴリズムを勉強できるコンテンツやいくつかの取り組み方を紹介します.

数学系プログラミング問題集: Project Euler

何はともあれ, ここまで読み進めてきたあなたに, まず真っ先に紹介しなければならないサイトがあります.

archiveページからはじめの10題のタイトルを並べておきます.

  • Multiples of 3 or 5 (3と5の倍数)
  • Even Fibonacci numbers (偶数のフィボナッチ数)
  • Largest prime factor (最大の素因数)
  • Largest palindrome product (最大の回文数)
  • Smallest multiple (最小倍数)
  • Sum square difference (二乗和の差)
  • 10001st prime (10001番目の素数)
  • Largest product in a series (数列の最大の積)
  • Special Pythagorean triplet (特別なピタゴラス三つ組)
  • Summation of primes (素数の和)

タイトルからして完全に数学の問題です. 「これは楽しそうだ」と直観した方も多いのではないでしょうか. あなたもそうかもしれません.

Product Eulerの利用上の注意

ただし急いでつけ加えたい注意があります. このサイト, 正解を出せない限り正解が見られません.

AtCoderでは正解できなくても他の人の解答を見て勉強できるようになっています. 特に初学のうちは人の解答を見て勉強するのがとても大事です. しかしProject Eulerではそうはいきません. ある程度まで慣れてきたならともかく, 数学でも物理でもプログラミングでも, 初学のうちはよいモノを見て審美眼を磨くとともに, 読む訓練の徹底を勧めます.

特にあなたがこれから本格的にプログラミング学習をはじめるとしましょう. なかなか自力で書けるようになりません. 英語などの語学と同じです. もっと言えば日本語でもそうです. 日本語を読んだり話を聞くのはできても, きちんと文章を書ける人はなかなかいません. 真っ先に紹介こそしましたが, 実はいきなりアプローチするのはお勧めできないのです.

体系的なアルゴリズム学習・手法学習の重要性

そしてあえてProject Eulerを真っ先に紹介したもう一つの理由を伝えます. それはかなり早い段階で本格的なアルゴリズム学習を要求されるからです.

具体的にはProblem 18を見てみてください.

この問題文の下方, NOTEに次の記述があります.

Problem 67は同じ問題ですが100行あるため総当りでは解けません. もっと賢い方法が必要です.

少し調べてみると, 例えば動的計画法(dynamic programming)を使えば, (まともな時間で)解けると言われています. どんな本やコンテンツで勉強するかによりますが, 重要性を鑑みてかなり早い段階から議論をはじめる本もありますし, 何にせよまともな本ならまず書いてある手法です.

少なくとも競プロ入門レベルならプログラムも短くシンプルなので, プログラムやアルゴリズムに多少慣れていれば, 読むだけなら簡単に読め, わかった気にはなれるはずです. しかし問題を見たときに自力でアルゴリズムを書こうと思うと全く書けません. 一定以上の訓練が絶対に必要です.

何にせよ, 数学系のプログラムでも一般的なアルゴリズムの知識は絶対に必要です. それも中高数学どころか算数レベルであっても, プログラムを書いて計算しようと思うと目まいがするほどハードな計算や, ハードな手法が出てきます. 実は私自身, 教材研究としてProject Eulerに取り組む中でこの第18問に出会い, 「やはり腰を据えてきちんとアルゴリズムの勉強をしなければ駄目だ」と気付き, 今にいたります. 私自身の経験でもあるのです.

そうはいってもはじめの数十題は割とシンプルにプログラムが書けます. はじめの一歩にはお勧めです.

アルゴリズム学習へのいくつかのアプローチ

数学アルゴリズム系プログラムへの第一歩としてProject Eulerを紹介しました. そして何だかんだでアルゴリズムの基本的な知識や技術の習得の重要性も紹介しました. ではどうやって勉強を進めるといいか, いくつかのアプローチを紹介します.

もしあなたが大人なら: 本の紹介

まずあなたが大人で, ある程度の資金があるとしましょう. この場合はもう素直に本を買うのを勧めます. 硬軟織り交ぜていろいろな本があります. これを書いている2022/3時点ではなかなか難しいかもしれませんが, できれば実際に大きな書店に行って, 何冊か見比べてみてあなたにとって読みやすそうな本を探してみてください. もちろんお住まいの地域の問題もありますし, これを書いている2022年時点では新型コロナで難しい部分があるかもしれません.

プログラミング言語についてもいくつかバリエーションがあります. 少し古い本だとCやC++が多いのではないでしょうか. Javaもいくつかあるかもしれません. 最近はこのミニ講座でも採用したPythonで書かれた本が増えています. 本に載っているのはC++のプログラムであっても, オンライン含めた付録にはPythonのプログラムが載っている場合もあります.

ここではひとまず次の二冊を推薦しておきます.

どちらも図解が多く比較的読みやすいはずです. ネット上でサンプルコードも公開されています.

お勧めの理由

実はこれらをお勧めする理由がもう一つあります. それはアルゴ式・AtCoderとの対応です.

前者の大槻本はアルゴ式 https://algo-method.com の公式コンテンツです. プログラムをたくさん読み書きしなければ, 解きたい問題が解けるようになりません. AtCoderと違ってこのサイトは手法ごとにたくさんの問題が載っています.

中高の数学で散々経験したと思いますが, テスト範囲で「この方法で解ける問題しか出てこない」とわかっていても解けないことはよくあります. 手法指定のもとで解けるかどうかは理解の一つの試金石です. ぜひこのサイトとセットで勉強してみてください. 私もAtCoderが一段落したらこのサイトを一通り試してみる予定です.

後者の米田本はいわばAtCoderとの協賛で, https://atcoder.jp/contests/math-and-algorithm に自動採点システムがあります. プログラムの実行環境を作るのは大変ですし, プログラムが正しく書けているかチェックするのも大変です. そこをサポートしてくれるシステムがあるのだから, ぜひ使い倒してください.

サイト・サービスとセットの有料コンテンツとして, 書籍を二冊, 具体的に紹介しました. 買ってじっくり読み, そして書くのが大事で, しかも理解を深める上でも手っ取りばやいです. 本だけではなく各サービスも徹底的に活用して訓練してください. これだけでも一年は軽く遊び倒せるはずです.

もしあなたが中高生なら

次に中高生向けの対策を紹介します. もっと言えば自由に本を買えるお金がない人向けです. アルゴリズムの本は専門的な内容でもあるため, それほど安くありません. 中高の学参は高くても1000円程度の本が多いと思いますが, 大学の教科書や大人が買う技術書レベルになるとどうしても値段がはね上がります.

「親に買ってもらえばいいのでは?」と思う人がいるかもしれません. しかしそんな親がいる子供ばかりではありません. 教育熱心な親だとしても, そんなに自由にお金を出せる家庭ばかりではないのです. 「自分でアルバイトをすればいいのでは?」と思う人もいるでしょう. しかしそれこそ私は親が離婚して片親で, 中学三年で白血病にもなったので, 家にお金もなければ, アルバイトする体力もありませんでした. 上の二言は私自身にとって冗談ではありません. だからこの項はきちんと書き切る必要があるのです.

まずお勧めするのはやはり上で紹介した二サイトです.

上記二サイトは, 自分のマシンにプログラミング言語の実行環境を準備しなくてもいい点も優れています. ここでは特にアルゴ式を勧めます. AtCoderはあくまでコンテストが本体ですが, アルゴ式は教材が本体だからです.

プログラムを楽に書く上で, できればChromebook含めたパソコン, 最低でもキーボードがあるタブレットがほしいですが, 気合を入れればスマホでも何とかなるでしょう. (この講座を見ている以上, 少なくともスマホを持っているか, 家にネット環境とパソコンがあると推測しています.) これまた安くないのが難点ですが, スマホ用のキーボードもあります. Chromebookを含めたパソコンを買うよりは安いので, これで何とかする手がないではありません.

「どうしても教材がほしい!」

そうは言っても, 本やまとまったコンテンツがほしい・読んでみたい場合もあるでしょう.

実はオンラインで探せば無料のコンテンツがたくさん落ちています. いろいろな大学の講義資料もあれば, 著者が自分の本を公開していることさえあります. 特に英語は顕著です. 英語で読むのは大変かもしれませんが, 日本語の資料もたくさんあるのでぜひ探してみてください.

もちろん私自身も日々勉強しながら成果をコンテンツにまとめています. その結晶の一つがまさにこれです. 無料で提供している分であっても手を抜いて作っていません. 今後もいろいろな情報を提供していくので, ぜひ私の他のコンテンツも楽しみにしていてください.

補足: 理工系の総合語学

実は少なくとも数学・物理・プログラミングの分野では, 無料で優れたコンテンツがたくさんネットに落ちています. 英語で探すとさらにバリエーションが増えます. そもそもプログラミング言語の公式サイトなど公式情報はふつう英語です. ミニ講座の案内ページにも書いたように, このミニ講座は理工系向けの総合語学として, 数学・プログラミング方面に向けたコンテンツとして展開しています. 他にも語学, 特に英語に関する講座展開もあるので, 必要に応じてそちらも参照してください.

最後に: 本家メルマガの案内

最後に改めて私の本家メルマガを案内します.

数学・物理・プログラミング, そしてそれらを学ぶ上で大事な英語を中心とした語学の情報を発信しています. もしあなたが私の活動や私からの情報に興味があるなら, ぜひ登録しておいてください.

新しいコンテンツを作ったときにもこのメルマガで案内します.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.

計算力を身につけよう/中高数学駆け込み寺 素数判定の巻

今回はまとめ

ここまで複数回にわたって新時代の算数・数学学習, そしてプログラミング学習提案に向けたコンテンツを紹介してきました. 特に前半では素数判定を議論しました. 次に中高数学の華, 微分積分を軸にした中高数学学習補助教材として使えるプログラミングコンテンツを紹介し, 最後にアルゴリズム学習についていくつか書籍やサービスや紹介しました.

数学や物理はもちろんのこと, 情報科学のくくりで言えば, ある程度古いコンテンツが今でも十分に意味を持ちます. しかし具体的なプログラミングのコンテンツと言われると, あっと言う間に使いモノにならなくなってしまいます. 特に中高生に向かって何度も本やコンテンツを買い直せとは言えません. 習得した技術も含めてなるべく長く使えるモノをと思って考え, 提案しているのがこのミニ講座や関連するコンテンツ群です.

それでもプログラミングは昔よりも遥かに手軽になりました. 現代でこれを使わずに・使えずに数学・物理に挑むのはやはり武器を丸々一つ失っていると言わざるを得ません. 現代の技術を使って, 現代的な視点から私なりに数学・物理・プログラミングを再構成したシリーズの一つがこのミニ講座です.

既存のコンテンツへの不満

素数判定にしても解説やコンテンツはたくさんあります. それでも数学的な定義通りにプログラムを書き, 具体的に動かしてから速度の問題をくどいくらいに解説しているコンテンツはなかなか見かけません. 実際にいろいろな計算をさせるコンテンツも同じように見かけません. できる人からすれば「ここまで書いておけば自分でできるだろう」と思うのでしょう.

しかし初学の段階では何をどう計算するべきかさえわかりません. ここでは書き方を少し変えるだけでプログラムの実行速度が大幅に上がる経験をしてもらうべく, ある程度の量を具体的にプログラムを載せて計算させています.

もちろんこのコンテンツだけでは自力で計算するまでいたらない, もっとたくさん例がほしい人もいらっしゃるでしょう. 実際, 私自身, コンテンツに載せていない計算もたくさんしています. 小規模な勉強会や個人指導でみっちりやらない限り伝えづらい部分で, 今回は泣く泣く削っています.

自分なりのスタイルを確立しよう

数学学習の視点からプログラミングを見ても構いませんし, プログラミング学習の視点から数学を見ても構いません. 大事なのは自分が続けられるスタイルの確立です. 私自身, アプリ開発・ゲーム開発といったプログラミング学習法はどうしても肌に合わず, ようやく見つけたのが数学・物理をテーマにしたプログラミング学習なのです. ぜひあなたの趣味やスタイルに合った学習法を開発してください.

何か質問などあれば下記のアンケートなどを気軽に活用してください. 必ずしも即座の返信はお約束できませんが, 頂いた連絡には必ず目を通しています.

最後に: 本家メルマガの案内

最後に改めて私の本家メルマガを案内します.

数学・物理・プログラミング, そしてそれらを学ぶ上で大事な英語を中心とした語学の情報を発信しています. もしあなたが私の活動や私からの情報に興味があるなら, ぜひ登録しておいてください.

新しいコンテンツを作ったときにもこのメルマガで案内します.

アンケートにご協力ください

何かご意見や感想があれば次の読者アンケートまでお願いします.

回答は確約できませんが, 直接返事をご希望ならこのメールへの返信でも構いません.

またメールします.