CS50 のカリキュラムの活用の秘訣は?

今日は 2週目/3週目 の講義の様子をお伝えしながら、CODEGYM Academy の前半カリキュラムとして中心的に採用している、CS50(ハーバード大学のコンピュータサイエンスの講座、クリエイティブ・コモンズライセンスで保護されており、非営利で利用可能な教材)についてもご紹介を深めていきたいと思います。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
Malan先生は、先生はとてもわかり易く平易な言葉で、時折ジョークを交えながら、コンピュータサイエンスの世界を魅力的に講義してくれます。身振り手振り、様々な小道具を使って教えてくれるので、動画を見ると理解がとても深まります。

2週目は、C言語を使って構文・アルゴリズムを学習。

HarvardX CS50x 2021 / CC BY-NC-SA 4.0
CS50 ではイントロダクションにあたる「Week 0」では、完全初心者を対象として、Scratch を使って、繰り返し処理など、アルゴリズムの考え方を学びました。
Week1(授業としては2週目)では、左側にScartch、右側にC言語の構文というような形で対比を行いながら、前回の復習も兼ねて学ぶことで、よりプログラミング言語に対する初学者のアレルギーを払拭する工夫がなされています。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0

動画視聴のポイントは、1度も止めずに「通しで視聴すること」

CS50は11週間分(Week0~Week10)にわたって講義ビデオがあり、それらの多くは平均的に2時間30分前後の長尺のビデオです。骨太なハリウッド映画1本分くらいの長さです。
ですが、この動画はぜひ、トイレ休憩や1-2分のコーヒーリフレッシュを覗いて、必ず一度のタイミングで通しで見てください。 30分で区切り、明日続きを見ようとするのではなく、まず3時間という時間の枠を確保し(たとえば、CODEGYM Academy が毎週土曜日のAM9:00~13:00 にこれを行っています)自分に厳しいルールを決めて、まずは映画を見るようにこの動画を視聴します。
独学の e-Learning においては、90% が途中で挫折してしまうというデータがあります。
多くの人は一人で続けられないからこそ、CODEGYM Academy では、「たとえ事前に録画されアーカイブされた動画であれ、厳しく出席管理をして、同じ日・同じ時間にその動画を主張する」という同期性を大切にしています。 このビデオを見ておいてくださいね、というのは、実際多くは見なかったり、挫折する原因となるのです。
また、CODEGYM が培ってきたノウハウの一つである、厳しい出席管理を含めた「適度な制約、プレッシャー」は、最終的に受講生の成功に近づくことを目指します。

3週目は配列、テキスト処理、メモリ管理、そして暗号化の考え方を学習。

CS50 は、コンピュータサイエンスの「基礎」をとても大切にしています。いきなり Rails のフレームワークを触ったりせず、「String」について 30分 近くもかけて解説をします。
String とは一体どのように実装されているのか? メタプログラミング的な視点で、物理的なハードウェアとメモリの関係性から、テキストとして処理される配列の考え方を教えます。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0

メモリとはなにか? RAM、ハードディスクの違いは?

C言語を含むプログラミング言語ではリソース管理も重要であり、メモリについての考え方はハードウェアレベルから解説が行われます。かなり基礎的な話ですが、とても大切なことです。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
RAM とハードディスクの違いについても解説がありました。磁気ディスクやSSDなどを通じて長期間保存する方法と、Random Access Memory は性質が根本的に異なり、RAM は揮発性(シャットダウンすることで記憶を保持できなくなる)です。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
書いているエッセイが途中で消えてしまった方は多いでしょう。たとえ話が上手な Malan先生。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
これはC言語に限った話では、当然ありません。たとえば受講生が将来的にiOSエンジニアやAndroidの開発をしようとするとき、メモリリソースの管理の考え方は、とても重要になります。
Webアプリエンジニアは、普段あまり考えませんが、ハードウェアと密接な開発を行うソフトウェアエンジニアにとってはとても重要です。
こうした基礎を、図、画像、たとえ話を通じて「初学」の段階から知っておくことは、将来的な学習の理解度曲線を高めることに繋がるでしょう。
そして話は徐々に、ハードウェアではなく抽象的なメモリ管理の話に移り変わっていきます。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0

あなたが誰にもバレないように、「I LOVE YOU」というメッセージを、気になる特定の一人に送るためには... ?

暗号化の技術については改めてきちんとした講義が行われますが、最後のほうに、文字列処理のトピックと絡めて、簡単に触れられていました。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
暗号化を考える上では、可逆的なプロセス(複合できること)が望まれるという点について解説がされます。つまり、複合するためには「鍵」が必要という考え方。その鍵は一体どのようにアルゴリズムとして考える事ができるでしょうか?
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
先生や友達にバレないように、秘密のメッセージを送る。
そのためには例えば、アルファベットを1つずつずらして、そのルールをお互いに知っておくということが一つの考え方です。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
コンピュータの世界では、文字列はただのビットであり、配列です。
ですから、数字に変換し、それに1を加算し、そしてまた文字列に戻せばよいのです。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
暗号化を通じたセキュリティの保護は、コンピュータサイエンスだけでなく、一般的なソフトウェアエンジニアにとってとても大切なトピックです。例えば、秘密鍵暗号方式、公開鍵暗号方式は、SSHなど開発者にとっては非常に馴染みのある考え方です。実際に後半のプロダクト開発においては、これらの作業が実務的に行われるでしょう。
そのとき、「なんでこんなことをするのか」根本的に理解ができていなければ、ただ単にセキュリティの実装は、「とりあえずやる」といった意義として捉えられがちで、暗号化やセキュリティについて十分に理解できず、社会に出てしまうことになります。そうした姿勢はとてもよくありません。

CS50 では、ハーバードの学生と「一緒に授業を受けている」シミュレーションが、あなた自身を没頭させ、エンゲージメントを高めてくれます。

HarvardX CS50x 2021 / CC BY-NC-SA 4.0
Malan 先生は、しばしば、わざとバグを実装して受講生の興味を引きます。
そしてそのバグは、どのような点で設計上の問題があるのか受講生に投げかけます。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
CS50の講義の様子をご紹介している中で、上記のようなシーンがあります。
これは実際にハーバード大学の学生がリアルタイムで受講しているものと全く同じ講義が収録され、編集され、配信されているからです。無観客で作られた教材ではなく、全て Malan 先生によるライブの授業なのです! だから、動画視聴においては、学生が実際に存在します。
そして学生にときどき問いかけ、学生は質問を投げかけます。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
このプロセスを通じて、私たちは仮想的なピアラーニング、他の学生がどのような視点でこの講義を受けて、どういった着眼点から質問を見出しているのかを知ることができます。
大抵の場合ハーバードの現役学生は頭がよく、質問は相当キレがあります。だから、そのような着眼点で疑問に思わなかったとしても、今は何も思わなくて構いません。
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
HarvardX CS50x 2021 / CC BY-NC-SA 4.0
大切なのは、この学生のように「なぜこのように動くのか?」「この定義は解説されなかったが、暗黙的なルールとして存在しているのか? 」こういった視点で授業を受ける上でのヒントになります。
あなたや、CODEGYM Academy の受講生が11回にわたる授業を終えて、自分のファイナル・プロジェクトを提出した頃、十分に高い「質問する能力」が身につくと思います。
そして、「問題に対して向き合う力」─ 仮説を立て、それが正しいか確認し、検証する作業を繰り返すこと。これが学習の本質です。
私達はただ単に、プログラミングの技術を教えているわけでは有りません。
プログラミングを学ぶ過程では、仮説思考を学び、未知の問題に取り組む力を身につける事ができるのです。