[edX] Harvard Univ. CS50’s Introduction to Computer Science コースの雰囲気と、準備しておくと良いこと

英語力を維持するために、一人でスマホでできることにチラッと書いたMoocの件で。

先日始めた Computer Science の基礎が学べる edX のコースがすごく良いです。

「Week 0:Scratch 編」に続き、今日は「Week 1:C 編」を視聴しています。David 先生の早口にも慣れてきました。

せっかくなので、自分の学びの記録とともに、「Mooc 始めたいな〜」という人に役立つことを。

この Introduction コースは「コンピュータの基礎を学びたい初心者」、特に「プログラミングがやりたい人」向けの講座です。

    Contents
  • オンライン教育の良さ
  • edX なら、無料でも最後まで学べる
  • edX 有料コースの価値
  • edX 有料コースをお得に受講する方法
  • CS50’s Introduction to Computer Science: コースの雰囲気
    • 学べる内容
    • 登場するプログラミング言語
    CS50’s Introduction to Computer Science: 受講時に必要なものと、進め方
    • まとまった時間
    • 宿題には提出期限がある
    • 使用するツールと、事前準備
    • わからないことがあれば、SNS で先生や他の生徒と話せる
  • 学んだことと、プログラミング初心者向け小話

オンライン教育の良さ

オンライン授業ってすごく良いよね・・・

伝統的な授業で、板書きがノートに書き取れないとか、つい聞き逃すことも無いし・・・

何より、先生を選べる。それこそ誰でも等しく教育を受けられます。

一人の素晴らしい先生の授業を、世界中の皆で受けられる。今年は既に世界中から 200 万人が、コースに参加しているとのこと。見ているだけでなく参加すれば、様々なバックグラウンドの仲間と交流できて楽しいかもですね。

教えてくれる David 先生は、技術に対する情熱が溢れ出まくった、とても爽やかな人です。合間合間に “Any questions?” と聞いてくれ、生徒の発言ひとつひとつへ “Really good question!” と敬意を持って丁寧に返します。

生徒の話を決して鼻で笑うことなく、こんなにしっかり返してくれる先生、いただろうか・・・?講義は大きな講堂で行われていますが、話しやすい雰囲気も手伝うのか、生徒たちもよく発言します。

楽しい・・・彼の授業は、まるで一つの Show を見ているかのようです。コロナで失業状態に近い、私の落ちた気分をも上げてくれるよ。自分もこんな大人になりたい。

以前に聴講した Programming Everybody (Getting Started with Python) の先生もすごく良かったので、そのうち受け直したい。

edX なら、無料でも最後まで学べる

edX の良い所は、Auditor (聴講生) でも全ての授業が視聴できること。

以前は Cousera もそうだったんですよね。だけど今は無料範囲が狭くなってしまった様子。なので最近は見ていませんでした。

edX の口座も無料なのですが、無料期間の設定があるので、いつまでものんびりはしていられません。

edX 有料コースの価値

無料コースのままが行くか、有料コースに申し込むか。

大きな決め手は “Official proof of completion(修了証明書)” が欲しいかどうか。それを得るための Final Project に参加する権利です。

Final Project では、生徒同士でチームを組み、ソフトウェア開発を一通り体験できるようです。これは貴重な機会だと思います。独学者にとっては特に。「勉強しました」だけでは、まず現実の仕事を得ることができないからです。

私は CS 関連の学位を持っていないのと、海外の仕事をしたいので、何らかの証明が欲しい気持ちが今あります。本当は MicroMasters Program とかに参加できれば良いけど、そこまでの余裕は無い。CS関連のコース を見た感じ、自分にはこの Harvard か W3Cx のコースかな。

edX 有料コースをお得に受講する方法

有料コースに申し込む場合、お得に買う方法があって・・・

とりあえず聴講生としてコースをスタートさせます。すると、「一週間以内に購入すると、15% OFF ですよ」的な内容のメッセージが表示されます。そこで購入。

大事なことなので、もう一回言いますね・・・

無料登録して、クーポンを GET してから支払う」です。

たとえば私が今受けているコースは、普通に購入すると $90 ですが、クーポンを使えた人は $76.50 で済みます。

CS50’s Introduction to Computer Science: コースの雰囲気

学べる内容

論理的思考、アルゴリズム、データ構造、リソースの管理、セキュリティなど、システム開発に必要な基礎知識が学べます。

見た感じ、ど素人でもイチから学べるように作られています。

元々システム開発を長くやっていた自分の場合、既に分かっている内容ばかりかもしれないけど、ブランクも同じくらい長いし…

ということで、「基礎を一通りやり直したい」「学校で体系的に習ってみたい」「開発現場でどんな英語が使われているのか知りたい」という気持ちで受講しています。

登場するプログラミング言語

C、Python、SQL、HTML、CSS、JavaScript、Java、Swift、Lua ・・・

スマホアプリからゲームから Web 開発から、様々な用途に向いた言語が登場します。特定の言語を徹底的に極めるコースではなくて、「プログラミングの基礎」を身につけるために例として挙げられる感じ。

今日の C 言語の授業でも、入門書で習う程度のプログラミングしかやっていません。でも、ただコードをなぞるよりも深く「考え方」を学ぶことができます。実際のシステムも、小さなパーツの塊です。

プログラミングで「何をやりたいか」、あるいは「やりたいこと」を見つけるために、「コンピュータの考え方を理解し、上手に対話する方法を身につける」「システム開発の流れをチームで経験する」といった、根本的な所を学んで行けるのではないかな。

CS50’s Introduction to Computer Science: 受講時に必要なものと、進め方

まず、edXの講座ページSyllabus をチェック。使ってみた立場から、補足を入れて行きます。

まとまった時間

動画の長さは一つ 1 〜 2 時間くらい。

ハーバード大学での授業がそのまま収められています。まとまった時間で観た方が、「今、この授業に自分も参加してるぞ〜」というテンションが上がって良いです。

そんなに時間が取れない時、集中力が続かない時、内容ごとに復習したい時は、Short Video が用意されています。ただし先生は David 先生ではない。

宿題には提出期限がある

まず、最終プロジェクトの提出期限が 2020 年 12 月 31 日となっています。

いくら「自分のペースでできる」とはいっても、クラスで一人だけいつまでも面倒をみてもらうわけにも行かないんですね。がんばろっと。

最終プロジェクトの他に、9 つの宿題が出てきます。

修了証をもらうには、これらの宿題で 70% 以上のスコアを取る必要があります。

「チームで設計・実装をする」という、開発現場を体験する機会も提供されます。

何だかドキドキしますね。難しそう? でも、そもそも「基礎を学ぶ」コースなので、やる気とコミュ力さえあれば修了できるのかもしれない。

後日、またレポートしたいと思います。

使用するツールと、事前準備

  • Scratch Week 0 〜
  • GitHub のアカウント
  • CD50 IDE Week 1 〜
  • CS50 Sandbox Week 1 〜 ←私イマココ

GitHub のアカウントだけ、事前に作っておくとスムーズです。

Scratch は導入部で出て来ますが、そちらはプログラミングというか、「プログラミング的思考」を教えるために見せているだけなので、やってもやらなくても良いと思う。

Week 1 から、CS50 Sandbox 上で C 言語を使ってコーディングして行きます。このツールは Web 上で GitHub にログインすると、後は何も準備しなくてもすぐに使えます。

内容は、コースが進んだら随時更新して行きます。Syllabus によると、以下も必要になるらしい。

  • Adobe Connect
  • CS50 IDE
  • CS50.me
  • CS50 Programmer’s Manual

わからないことがあれば、SNS で先生や他の生徒と話せる

質問がある場合は、SNS を使って先生やクラスメートと話し合うことができます。

  • Facebook
  • YouTube
  • Instagram
  • LinkedIn
  • Quora
  • Twitter ・・・他

自分の使い慣れたツールでできるって良いですね。

私は Ed Discussion で聞こうかな。 早速、自己紹介を書いてみた。

SNS でつぶやくことで、ステキな仲間が見つかるといいなあ。

CS50’s Introduction to Computer Science: 学んだことと、プログラミング初心者向け小話

Week 1 : C

CS50 Sandbox と C言語を使って、プログラミングの基礎を叩き込む。

  • コードの書き方、読み方
  • コンパイルとは、エラー解決手順
  • Linux とは、Terminal (Shell) の使い方、よく使うコマンド
  • Operator
  • Conditional Statements (条件分岐)
  • Loops (ループ文)
  • Placeholder と Argument (引数)
  • ライブラリとは、その使い方
  • 良いコードを書くには
  • データ型、オーバーフロー

実際にコーディングしながら、考え方や問題解決の仕方を教えてくれます。先生も言っていましたが、言語と同じで、何度でも繰り返して体に叩き込むことが大事です。

終盤では、当時騒がれていた 2000 年問題や、オーバーフローの結果起きた大惨事が紹介され、プログラムを作る者が背負う重い責任を感じました。この仕事は、たった一文字の間違いが、社会に甚大な影響を与えてしまう可能性があるんですよね。

習うことは本当に基本で、現場でもこのまんまカタカナ語で話しているので、英語が難しいといったことも無く。

ただ自分は現場を離れて長いので、忘れているんですよね。「どうやって作っていたかな・・・?」状態だったので。その曖昧になっていた記憶が紐付けられ、体系的な知識となって行く、この過程をもう一度やりたかったので、とても勉強になって楽しいです。

#include <stdio.h>

入出力に使う関数のライブラリですが、”studio.h” と書く人が、きっといるはず(笑) 私は C 言語をよく知らないので、ここで間違えてエラーが出ました笑。

David 先生が “stand io” “standard io” と言っていて、完全に理解しました。「io = I/O = IN/OUT 用のライブラリ」ということなんですね。

ちなみに “.h” は “header file” とのこと。

多くのプログラムの言語って「英語」からできています。だから英語が得意な人は、この世界で圧倒的に有利。インド人 IT 技術者をよく見るわけです。

英語がわかる人は、今日の授業に出て来たコマンドラインの所で、

「ls は list だな」「rm は romove か」「cd = change directly」「/n は new lineくさいな」とか、

データ型の話で、「int は integer の略か」「str は string か」とか、

文字面から意味に気づける。覚えることが少ないんです。

逆にプログラミング経験者の人は、この講座を英語で受けても、結構意味が分かるんじゃないかな。

Syntax sugar

得られる結果は同じだけど、コーディングを楽にしてくれる書き方 Syntax Sugar (糖衣構文) があることも教えてくれました。

i = i + 1 → i++

$v = array(0, 1)  → $v = [0, 1]

と打っちゃう方が大分早く書ける。

構文の書き方は言語によって少しずつ異なりますが(これも厄介笑)、この Syntax Sugar も、何が用意されているかは言語によります。たとえば VBA だと、こういう書き方は動きません。

P.S.

5 分休憩に入る前、先生が “Cookies await in the lobby outside” と言っていて、クスッてなりました。本当にクッキー出たのかなあ笑。

Problem Set 1

ここで使える、講義に出ていないコマンドを載せておきます。普通にメニューからクリックして編集しても良いけど、覚えると何かと便利。

  • touch   ファイルを新規作成
  • vi [ファイル名] ファイルを insert mode で view
  • ESC → :wq  write して quit  ※保存せず終了するなら q

必須じゃないけど、こういう場面で使えるコマンド。

  • pwd  print work directory (今いるディレクトリ名)
  • cd # または cd /  rootに戻る
  • cd ..   一つ上の階層へ
  • ↑  コマンド履歴
  • mv [ファイル名]  move file
  • less [ファイル名]  中身を閲覧  ※終了時は q
  • (q で修了できない時は q! で強制終了)

Week 2 : Arrays

実務経験者の自分には内容がちょっと簡単な気もするのですが、David 先生のエネルギーに触れたくなり、また続きを観ています。基礎は大切だしね。ブランクも長いし、自分の知識に抜けが無いかをチェックして行こうっと。

  • データ型とメモリ領域
  • 変数とスコープ (Variables and Scope)
  • ループ、繰り返し処理 (Iteration)
  • 配列、二次元配列 (2 dimensional array)
  • 定数 (Constant values)
  • グローバル変数 (Global variable)
  • 変数の型変換 (Cast)
  • 引数、コマンドライン引数 (Command Line Arguments)

私が今こういう講座をたくさん受講しているのは、海外の人と仕事がしたく、「開発現場で使われる英語を知りたい」という目的があります。

まだ出発点だけど、ここまで観た感じ、言葉は結構そのまま通じちゃう感じがする・・・この業界は元々 default だの evidence だのと横文字が飛び交う世界で、このページに挙げている IT 英語は日本の開発現場でも普通に使われている感じなんですよね。用語が大丈夫だとしたら、あとは英語の基礎力とコミュニケーション力、何より技術力がモノを言う気がしてきたぞ。

データとメモリ

データ型によって消費するメモリ量が異なるので、エンジニアの人は無駄なメモリを使うことなく・正確で速い処理を書こうとします。David 先生は大きなスクリーンで基盤の写真を見せ、そこに乗っているメモリ上を使って「データがどのようにメモリを食うのか」を視覚的に見せてくれました。

自分達が扱うのはソフトですが、ちゃんと頭の中でハードと繋がるように教えてくれます。

David 先生の今日の名言

“Printf is your friend.”

Week 3 : Algorithms

ここから面白くなってきました。
今日はアルゴリズムの授業。コーディングはほとんど出てきません。

問題が大きくなればなるほど、選ぶアルゴリズムが解くスピードに影響して来ます。

私は職訓で最低限の基礎を勉強した後、中途でいきなり実務に入ったので、実務で必要な部分(もっと全体的なこと)は現場でしっかり学んだけど、「より良いコードを書く」勉強をしていませんでした。アルゴリズムも、仕事で必要な試験勉強のために学んだだけ。

でも今観るとパズルみたいで面白いです。「選ぶアルゴリズムによってソート速度がこんなにも違うのか!」という驚きがありました。実務でも使ってみようと思う。

私はコンピュータの勉強がそんなに好きってわけでもないのだけど、この先生の授業は楽しくて元気が出るので、間が空いても観たい気持ちが沸いて来ます。

ところで、今日の 5 分休憩のオヤツはカップケーキだったみたい笑。

続きはまた後日。超スローペースで進行中・・・

Week 4 : Memory

Week 5 : Data Structures

Week 6 : Python

Week 7 : SQL

Week 8 : Information

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA