NUS Graduate Certificateでは何を学ぶのか?

さて、今後時間がある際に、NUSでの学習模様をお伝えできればと考えている。今回は手始めに、既に履修済みのGraduate Certificate in Computing Foundation I(略してGC-CF I)の内容をお伝えしたい。

○GC-CF Iの概要と応募条件

概要や応募要項については上記のサイトを参照頂けると幸いである。一言で言えば「大学学部1−2年レベルのコンピュータサイエンスの基礎を学ぶための講座」である。4科目のうちの3科目を修了すれば「Graduate Certificate in Computing Foundation I」と言う修了証(学位ではない点は留意)が与えられる。

こちらは応募条件も「大卒又は関連資格保有者」とだけ記載されており、基本的にパートタイムでの仕事の放課後に受講する前提の講座である。有り体に言えば「大卒でお金さえ払えば比較的広く門戸は開かれている、社会人用スキルアップ講座」の感である。「ITの重要性が言われて久しいがいきなり本格的な修士課程は厳しいしそこまでやるつもりかも分からない」位の人が先ずはどんなものかしらとトライしてみる、と言った用途に向いている。コロナ禍においてはオンラインで授業が為されていたようだが、基本的にはシンガポール在住者向けのものであるのでその点は留意である。

自身が修了したのはIT5001 Software Development Fundamentals、IT5002 Computer Systems and Applications、IT5003 Data Structures and Algorithmsの3つであるから、その前提で以下、各々の内容について記載したい。内容については以前の合格報告のNoteとかなり重複するのでその点も留意頂けると幸いである。

○IT5001 Software Development Fundamentals

この講座が一番最初に受けるべき講座である。内容的にはPythonを用いたプログラミングの基本である。For/While文の書き方などごくごく基本から再帰、クラス、継承等をPythonで学ぶものであった。自身の場合は以下書籍のPython2.7版で独学していたが、概ねこの書籍の内容を押さえておけば特に講義の前半の数回は流しで問題ない内容であった。

画像1

一方で、自身の場合は独学で既知の内容もそれなりにあったものの、後半の授業の再帰、クラスや継承は曖昧な理解しかなかった事もまた痛感した。

最後にはクラスや継承の学習の一環としてドラクエ/FF的な戦闘ゲームを作るという課題に取り組む内容であり、単純に面白かった。子供時代の積み残しである「ドラクエ風戦闘ゲームを作る」という目標が期せずして達成された授業であった。

課題は確か数回のコード提出課題があり、加えて中間テストと期末テストと言った構成であったと記憶している。内容的には授業の内容をきちんと復習して課題をきちんと提出すれば成績は付く位のレベル感である。自身の場合はお陰様でA-の成績も取れ、達成感のあった授業であった。

○IT5002 Computer Systems and Applications

IT5001は「入門編」的な内容でありここは比較的敷居は低いと思われる。しかしIT5002/IT5003になると、いきなり「ガチ」な内容になるので留意が必要である。先ずはIT5002。こちらは一言で言えば「PCがどうやって動いているか」を学ぶ講座である。使用された参考書は以下。

画像4

画像2

画像3

具体的には2進数のブール代数をDigital Logic Designの参考書を副教材としながら学ぶと共に、QtSpimと言うソフトウェアを利用したMIPSと言うアセンブリ言語(注)の実習も含む所謂「パタヘネ本」の1−5章位の内容を濃縮して学習すると言った内容である。

(注:MIPS、アセンブリ言語の大雑把な解説...PCと言うのは煎じ詰めると0と1しか理解出来ない。しかし0と1からなる機械語で人間が直接プログラミングをするのは余りに難しい。そこでもう少し人間にも判読可能な形である形にしたものがアセンブリ言語のMIPSである。しかしこれでも四則演算をするだけでもまだるっこしいのでC、Java、Python等のプログラミング言語が開発されて現在はそちらが中心に使われている。実際にはC, Java等のコードはコンパイラでアセンブリ言語に翻訳され、アセンブリ言語はアセンブラで機械語の0と1に翻訳されてPCに実行されていると言う関係にある。)

ご興味のある方は上述のパタヘネ本を参照して頂けると良いが、文系人間にはかなり「ガチ」な内容であり、威圧感に溢れている。自身にしても書籍だけで独学と言うのはまず無理だったと思う。しかしコンピュータサイエンスを学ぼうとなれば、「その後の専門が何の分野になるにせよ、この位は知っておいて欲しいと言うBody of knowledge、土台となる基礎」と言う事なのだと思われた。

先生自体は上述のガチな内容を可能な限り噛み砕いてステップバイステップで教えてくれ、質問にも親切丁寧に答えてくれるかたであり、大変に助かった。パタヘネ本の内容、特にMIPSやプロセッサ処理、パイプライン制御等を独学で学べたとは自身的にはとても思えない。ステップバイステップで解説してくれかつ分からない事を聞ける先生がいて、実習で実際にMIPSで四則演算などやってみるから理解出来たと言う面は大きかった。

画像5

また、上の写真のような、実際に配線を繋いでみたりして回路を作ってみよう!的な理科の実験的な講習もあり、これは童心に戻って楽しめた。

個人的な感想としては、かなり本格的な内容で中年の錆つき気味の脳みそから煙が出てくるような内容であったにせよ、情報工学の1−2年生であれば皆学ぶであろう内容についてしっかりした基礎を身につける事が出来て自信になったと感じている。まあ自身が再びアセンブリ言語を仕事で書いたりする日が来る等と言う事はまずないのだけれども、「パタヘネやりました」「MIPSだの二進法からやりました」と言うのは、ガチ界隈な皆様より「ああこの人真面目にやる気あるのね」と思って頂けるための通過儀礼的なものであり、エンジニアとしての基本的な知識の土台なのかなと感じている。

恐らく、このIT5002(と下のIT5003)を面白いと感じるか、やってられないと感じるか辺りが「コンピュータサイエンスを本格的に学ぶか、ライトな教養程度にしとくか」の分水嶺になるのではないかと思われる。

○IT5003 Data Structures and Algorithms

お次はこちらである。日本語で言えば「アルゴリズムとデータ構造」である。内容的には、計算の手数を示すビッグO記法の考え方から始まり、各種データ型、数字を小さい順にソートすると言った単純なアルゴリズム、バイナリサーチ、ヒープ、ハッシュテーブル、グラフ、最後の方はダイクストラ法辺りまでの各種アルゴリズムを学ぶ内容である。

書籍的には以下の「プログラミングコンテスト攻略のためのアルゴリズムとデータ構造」のPart 2まで位をPythonで学ぶと言う感じである。Pythonで学べると言う意味では「Pythonで学ぶアルゴリズムとデータ構造」辺りが内容としては一番近いのかなとも思う。

画像6

画像7

NUSの授業については、上記のアルゴリズムを学ぶ過程で、ハノイの塔、迷路等のゲーム的なアルゴリズムを作る内容もあり、知的好奇心をそそる中々に面白い内容であった。

しかし脳力のくたびれ気味のおじさんにはアルゴリズム的思考は中々難しく、成績はぎりぎりBが付いた感じであった。脳力もピークアウト気味の中年の悲哀、自身のロジカルシンキングの弱さを感じた成績ではあったが、こうした学部生が誰でも学ぶような基礎をきちんと身につけられたのは一定の自信にはなった。

IT5002と並んで、この「アルゴリズムとデータ構造」を面白いと感じるか否か辺りは「コンピュータサイエンスを本格的に学ぶか、ライトな教養程度にしとくか」の分水嶺になるのではないかと思われる。興味のある方は上記の書籍をぱらぱらと参照してみる等して頂けると幸いである。興味が持てそうと言う事であれば、書籍で独学するよりも大学で先生やTAのもとで教えて貰う方が遥かに効率的であるから、NUSにせよ日本の大学の公開講座等でもこうしたコースがあるのであれば先生に付いて教えて貰う事を個人的には勧める。分からない/煮詰まった際に質問が出来る先生がいるのといないのとでは効率が大きく異なるように個人的には感じている。

○Graduate Certificate in Computing Foundation Iで得られる事、要約。

以上を修了する事でGC-CF修了、Graduate Certificateが貰える。

*プログラミングの基本。

*PCがどのように動いているかについての、パタヘネ本相応の内容。

*アルゴリズムとデータ構造の一通りの内容。

...と言った、コンピュータサイエンス関連の学部1−2年生であれば概ね皆学ぶ内容を濃縮して学べる、と言うのが当該講座で得られる事である。

しかしながら、「学位ではない」と言う点には十分に留意頂けると幸いである。これの修了を履歴書に書いても、当該修了書単体ではジョブマーケットでは殆ど評価される事はないと思われる点には留意である。少なくとも自身についてはこれがあるからヘッドハンターから連絡が来た等と言う事は率直に言ってなかった。確かに上記だけを修了していた所で職場で即戦力になると言う事はない。そう言う意味では「社会人教養講座」と言った感はある。

そうした中で自身がこの講座を修了して良かったと感じたポイントは、「(一般のオンライン講座、プログラミング講座等では取り扱いが余りない)文系から理転する際のしっかりとした基礎力を養う事が出来た」「自身にとっては理転の際の餓鬼界から人間界に上がるための蜘蛛の糸となった」と言う点である。

冒頭に紹介した大学ウェブサイトに記載の通りで、「Students who have completed the certification programme may wish to apply for admission to the Master of Computing (General Track) programme.」...つまり修士課程に出願する際に、(GC-CFを修了する事が修士過程合格/入学を保証する訳ではなくあくまで志望者の競争で決まるにせよ)選考時にプラスポイントとして評価/考慮の対象になると言うのも、大学側が「この位の内容はコンピュータサイエンスを本格的に専攻する際には最低限必須の基礎である」と考えている事の反映であるとも思われる。

NUSのMaster of Computingに、非コンピュータサイエンス出自者の入学枠のGeneral Track経由で入学した際には、当該IT5001, IT5002, IT5003は最初に受講して修了するべきEssential Moduleとなる。自身のように既に修士課程入学前にGC-CF Iを修了済みの場合は修士過程入学時に修了分が単位として移管され、同じ内容を重複して受講しなくても良いように免除されるようになっている。

...以上、NUSのGraduate Certificate in Computing Foundation Iの内容の解説でした。興味のある方に幾らかの参考になれば、これ幸いであります。

この記事が気に入ったらサポートをしてみませんか?