1st Semester振返り①

Student Life in NUS

私が1st Semesterで履修した科目毎に、どのような内容をどのようなスタイルで学んでいったのかについて感想とともに書かせていただきます。

1st Semester 履修科目は以下3科目です。
① Software Development Fundamentals
② Data Structures and Algorithms
③ Artificial Intelligence

今回はSoftware Development Fundamentalsについて振返ります。

Software Development Fundamentals

プログラミング経験ゼロから、次のSemester以降でより専門性の高いComputer Science系の授業が受けられるレベルに技術を引き上げるべく徹底的にPythonを叩きこむ授業です。

厳密にはPythonというプログラミング言語を使い、プログラミングの基本(制御フローやデータの抽象化、再帰(反復)、オブジェクト指向)や、開発手法(妥当性確認、テストやデバッグ)、データ構造やアルゴリズムの基礎を習得します。

またオブジェクト指向をより理解するために最後の2週間はScalaというプログラミング言語も学びました。

期間は13週間(約3か月)

LectureとLabで週3回5時間

Lectureと呼ばれる講義が週2回(水曜日と金曜日)で合計3時間
Labと呼ばれるハンズオン形式の授業が週1回(月曜日)で2時間

コロナの影響もあり、上記授業はすべてオンライン(Zoom)で行われました。

Labでは前の週のLectureで学んだ考え方をもとにして、授業内でクラスメイトで議論しながら課題を解いていきます。

これに加えて毎週水曜日にForum Discussionと言って、指定された資料やHP上の記事に対してサマリーや自分の意見を述べる宿題と、毎週金曜日にCodingの宿題があります。

1週間の過ごし方

“Loop”という、一定の回数もしくは一定の条件下で反復する概念を学ぶ週を例に、1週間の過ごし方についてご紹介します。

まず、予習的としてDiscussion Forumが位置付けられており、毎週水曜日の提出日の1週間前(前週の水曜日)に宿題の内容が公開されます。

事前に指定された資料やHPの記事を読んで、Loopとは何か、どのような場面で使用するのか、Pythonの場合はどのようにcoding するのか、などの質問に対する回答をまとめて水曜日の授業前に掲示板に投稿します。

その後、水曜日のLectureで約2時間かけて解説や追加の説明を受けます。Lectureでもクラス内ディスカッションやmini Quizのようなものがあり、Zoomではあるもののインタラクティブな講義スタイルになっています。

金曜日はLectureに加えて、Loopに関連するCodingの課題をオンラインで提出しなければならないので、水曜日のLeture終了後はすぐに宿題に取り掛かり、わからなければTeaching Assistantに質問しつつ、Lectureの予習復習も行います。(木曜日はほとんど寝れません)

金曜日のLectureでは、水曜日のLectureの復習や質疑応答に始まり、説明しきれなかった内容や次の単元に関する講義を受けます。

水曜日に提出したDiscussion Forumは自分が投稿して終了ではなく、クラスメイトの投稿を読んでコメントをしなければなりません。金曜日の深夜に宿題を提出したあと、クラスメイトの投稿をいくつか読んで、追加の質問や感想を投稿します。

土曜日、日曜日は月曜日のLabで出されている事前課題に取り組むのと、翌週水曜日宿題や授業の準備があります。

月曜日のLabでは、事前課題の解説とLoopを題材にしたプログラミングの課題に対して、クラスメイトと議論をして発表したあと、その課題の解説を聞いたりします。

理解度を確認するためのQuizと呼ばれる確認テストが隔週ペースであり、Quizの点数も最終的な成績に反映されます。

感想「しんどかった。。。」

とにかくしんどい授業でした。

シンガポール訛りの英語で一度ですべてを聞き取れないことに加え、毎回の授業のカバー範囲が広いため授業の進むペースが恐ろしく早く、プログラミングを初めて学ぶ私にとってはまったくついていけません。

最初のQuizではクラス平均70点に対して私は40点。。

早速落ちこぼれてTeaching Assistantから個別にフォローされ、追加的な補講も常連メンバーにカウントされるほどでした。

予習復習だけでも一杯いっぱいなペースですが、それに加えて宿題やQuizの準備などもあり、ほぼ毎日この授業の対応に非常に多くの時間を割くことになりました。

ただ、授業がすべて終わった今となっては、プログラミングの基本的な考え方が理解できましたし、Pythonについても手を動かして学ぶことができたので理解度はかなり高まりまったという点においては、非常にうまく構成された授業だったと思います。

Pythonをゼロから学んだ感想

私はプログラミング経験ゼロからこの授業を受けました。

プログラミングの初学者として何が一番大変だったかというと、いくら文法を理解しても、解決したい課題を前にするとどうしていいかわからなくなることです。

例えば、「1、2、3、4、5、6、7、8、9の中から偶数の数字だけ2倍したい」という課題があったとします(実際はもっと複雑です)

頭では、2、4、6、8を2倍するだけだから、1、4、3、8、5、12、7、16、9かと瞬間的に答えが思いつきます。

じゃあこれをPythonでとなると。。

どうやったらいいんだ。。

最初はこんなことの繰り返しです。

今となっては、この数字をlistに格納して、for loopと条件式(if文)を使い、それぞれの値を2で割った余りが1の場合は何もせず、0の場合が偶数なので、その値を2倍してlistに格納すれば答えを導くことができます。

このようにプログラミング的な考え方を身に付けるのには、文法をさらっと学ぶだけでは不十分で、多くの演習が必要なのだと思います。

そういう意味においてはこの授業によってある程度考え方を身に付けることができたのではないかと思っています。

2nd Semesterではデータ分析の授業とアプリケーション開発の授業があるので、より実用的なPythonのスキルを身に付けていく予定です。