半ば衝動的に始めた米ハーバード大学のIntroduction to Computer Scienceだが、初回のビデオを見た感想は一言「非常に分かりやすい」。これは、いくつかの観点から。まずは、英語で受講するということがこれほどまでにコンピューターサイエンスを学ぶ上で優位であるとは思わなかった。さらに、数々の著名人を排出してる大学、講義とだけあって、カリキュラムの構成と講師のレベルが非常に高い。そこで、今回はこれらについて更に深く説明したいと思う。

コンピューターサイエンスを英語で学んで気づいたこと

コンピューターサイエンスはプログラミングだけではないが、プログラミングを書く上では英語力が非常に役立つことは言うまでもない。例えば、大学時代に日本語でプログラミングを学んだときは、毎回アルファベットを日本語(講師が日本語で説明するため)に変換し、それを英語に自分で戻し、なるほど、だからC言語の最初には呪文のように<stdio.h>の構文を挿入するのか、となる。これが英語だと、「You need to include a standard input and output library in the header」以上。もうお気づきだと思うが、You need to include a standard input and output library in the header. 太字にしたところが、以下の構文に含まれている。つまり英語を省略しただけなのだ。

#include <stdio.h>

同様に、以下もPrintfは、Print formatted data to stdoutの略。

printf("hello, world");

日本語で学んだときも理解をしていたはずだが、これをすべての構文に対して変換作業をするとなると、かなり時間がかかってしまう。それを再認識したのは大きかった。つまり、日本でもTechAcademyやTech Campなどの人気オンライン講義があるが、英語がわかる人なら間違いなく英語で海外のサービスを利用した方が良い。利用者数も日本とは比べ物にならないし、その分各社フィードバックを受けて改良を続けており、かなり良いサービスになっている。かつ、価格も日本ほど高くない。僕も実際にいくつか検討しており、今度またいくつか紹介する予定だ。

それだけではなく、分からなくなったときに調べ物をするとき、英語の方が圧倒的に優位だ。ネットユーザーの利用者比較をした場合、英語は全体のの約26%、日本語は2.6%。実に10倍の開きがある。これは、プログラミングのコミュニティーにも言えることで、何か質問がある場合は日本語より英語で質問した方が回答を得られる確率が高い。これは独学をする上ではかなり重要になってくる。

米ハーバード大学、講師の実力とは如何に?

カリキュラムや授業の構成も驚くほど分かりやすい。例えばコンピュータが理解できる言語であるバイナリーの0と1を説明する際にも、電球のスイッチを物理的にオンオフすることによって2つの信号(ビット)を意味する、と説明を始める。仮にオンを1、オフを0とした場合、それは既にコンピュータが理解できる言語になっており、電球を更に横に8つ並べた場合にはバイト単位となり、もっとたくさんの情報を送ることができる。これが2進法を活用した半導体の仕組み。8バイトの場合は、2の8乗で256通りの割当が可能。これを32個の電球を並べて実際にどうなるのかを表現する、これは0と1で表現する以上のインパクトがあるように感じた。

light-bulb

ASCII(American Standard Code of Information Interchange)言語は、このコンピュータが理解できる言語の65番目からアルファベットを割り当てたもので、これでは世界中で使用されている言語を網羅していないのでUNICODEが生まれる。さらに、みんなが大好きな絵文字、色を表すRGB(Red、Green、Blue)を使って各ピクセルを表現し、写真や動画(パラパラ漫画)や音楽(細かい単位の音の連続)まで表現している。要するに、プログラミングをする上では、ハードウェアへ如何に負荷の少ないように効率的なアルゴリズムを書くのかが重要であると締めくくる。

そして、最後のでは実際にやってみようということで、子供用のプログラミング学習ツール「Scratch」を使って、実際にレゴのようにパーツを組み合わせながらプログラミングをしていくという内容だった。

非常に内容の濃い、2時間の動画。カリキュラムの内容はさることながら、講師のDavid J. Malan氏が生徒に対して優しく質問し、そのどの答えに対しても「その通りだ」「素晴らしい」「良い質問だ」と応えるため、皆のモチベーションがどんどん挙げられながら、講義にのめり込んで行く様子がよく分かった。よそ見する余裕はない。僕も携帯の電源を切ったほどだ。

初回講義を終えての感想

初回の難易度は、初級編の導入ということもあり大して難しくない。課題だって恐らくやるほどのものではないだろう(証明書をもらいたいなら別だが)。ただ、このペースでずっと続くことを考えると当然時間を確保するのが課題となる。僕の平日の仕事はだいたい朝の9時から21時ぐらいまで、ときには23時ぐらいになることもある。土日は休みだ。

時間確保との戦い

この中から1週間辺り10から20時間の勉強時間を捻出しようとすると、土日のどちらかはまず潰れることになる。また、土日に全て纏めたとしても頭の中に定着しない気がしていて、平日も少しずつ進めることが大事なはずだ。よって、毎日小刻みに勉強しようとすると当然出社前か退社後になる。

 

スケジュールの見直し(有効活用術)

早朝のジム

月水金日の早朝は、ジムでランニングをしているが、その時間を有効活用することにした。香港の夏は蒸し暑くとても外で走れる環境ではなくあまり気分が乗らなかったが、室内なら冷房も効いていてWiFiが通っている。トレッドミルのモニターにiPhoneを乗せて走りながら勉強する環境が整っている。これで走る間の30分は確保できる。問題は画面が小さすぎて太った体を揺すったら小さいプログラミングの文字なんて読めないことだろうか。ジムのトレッドミルのモニターにiPhoneから投影できるようにしなければならない。これにプラスアルファ、起床時間も1時間早くすることでジムの後を勉強の時間に充てる。

 

移動時間

香港ではコロナの新規感染者がしばらく二桁を超えていない。ワクチンも接種したし、安全だ!と主張したいところだが、良いことばかりではない。また出社の文化が戻ってきている。つまり通勤が発生する。これが往復1時間ぐらいかかり、今まではこの時間にLINEやWhatsAppなどに届いたメッセージを見ていたが、ここを動画視聴の時間に充てるしかない。問題は、動画視聴しかできないことだ。動画視聴は1週間辺り2時間なわけで、通勤時間はそれ以上あるわけだから通勤時間を減らす必要がある。困った。

 

飲み会の回数を減らす

今までは平日でも週3日は飲みに行っていたが、これを平日は1日にする。チートデーはたまにあり、ということにして。それで、火曜日と木曜日の夜を勉強の時間に充てる。2時間ずつ。

 

フットマッサージの時間だって活用する

これからは、WiFiが繋がるマッサージ屋に変える。マッサージを受けている1時間だって無駄にできない。

 

合計捻出時間

以上を踏まえると、平日だけで通勤時間を加味しないで8時間半捻出できることになる。通勤時間を加味すると13時間半。これに週末どちらかを半日使えば目標の合計10から20時間の勉強時間には足りるだろう。

時間
6:00ジムジムジム
7:00CSBlogCSBlogCS
8:00朝食 & 通勤朝食 & 通勤朝食 & 通勤朝食 & 通勤朝食 & 通勤
9:00出社出社出社出社出社
昼食昼食昼食昼食昼食
20:00退社退社退社退社退社
21:00夕食夕食夕食夕食飲み会
22:00リラックスCSリラックスCS飲み会
23:00CSCS飲み会
24:00就寝就寝就寝就寝就寝

 

しばらくは、このスケジュールでどこまで行けるかやってみたいと思う。通勤時間にパソコンを開いて勉強できるようにするためには、どうすれば良いのだろうか。