オレゴン州立大学のオンラインCS学士号に入学して1年経った
2023 Winter に入学してから 2023 Fall までに受けた講義と所感について
2022年4月(2022 Spring)にオレゴン州立大学のオンラインのコンピュータサイエンス第2学士号プログラムに合格しました。
その後に下記記事に記載の通り、主に学費を節約する目的でオレゴン州立大学に単位移行をするため、他の大学でコンピュータサイエンスのクラスと数学のクラスを受講しました。それに伴い、オレゴン州立大学では2023年1月(2023 Winter)から正式にクラスを受講し始めました。
本記事では、オレゴン州立大学で2023年1月(2023 Winter)から2023年12月(2023 Fall)までに受講したコンピュータサイエンスの講義の全体的な振り返りを書き残していきます。
日本からオンラインでアメリカの大学の学生をすることや、コンピュータサイエンスで実際にどんなことを学ぶのか興味がある方には参考になるかと思います。
2023 Winter
学期 | 番号 | 名前 | Grade | 難易度 | 作業量 |
---|---|---|---|---|---|
2023 Winter | CS290 | Web Development | A | 易しい | 70時間 |
プライベートでの諸事情とオレゴン州立大学での初めてのTermであったことなどを考慮し、1クラスのみ受講しました。
フルタイムで働きながらパートタイム学生をする場合、通常は各Termで1〜2つの講義を取得することが推奨されています。3つ以上は週30時間以上のワークロードが予測されるため、仕事をパートタイムにする必要があるかと思います。
CS 290 – Web Development
Web開発のフロントエンドとバックエンド全てをカバーした内容となっています。ブラウザの挙動からVS Codeとそのビルトインターミナルの使用方法、HTML、CSS、JavaScript、Node.js、Express、React、Mongoose、MongoDBといった言語、ライブラリの使用方法について学習しました。
期末テストがない代わりに、毎週の小テストや課題を提出する必要があります。最終課題ではMERNスタック(MongoDB, Express, React, Node.js)のポートフォリオの作成が求められます。
私はWeb開発の業務経験があるため、何の問題もなくスムーズに終わらせることができましたが、10週で上記ツールやフレームワークのセットアップから全てのトピックをカバーするのはコンピュータサイエンス初学者にとってはなかなかハードなようで、苦戦している方もちらほら見受けました。
プログラミング初学者のためのプログラミングスクールのカリキュラムなどを見ると、上記の学習内容で大体3ヶ月~6ヶ月ほど掛けている印象があるため、2ヶ月ちょっとで遂行するのはなかなかハードだったのかなと推測しています。
また、課題のRubric(評価基準)も厳格で、その週に学んだ内容を理解した上で要件を満たした課題を提出する必要があったため、Rubricをしっかり理解することが大事でした。TAの方もRubricの理解が曖昧で採点を間違えていたことがあったため、採点に対してもしっかり理論立てて抗議できるとより良いと思います。
Gradeは100.78%でした。追加の課題でエクストラクレジットをもらえたため、100%を超えていました。
2023 Spring
諸事情からこのTermはクラスを受講しませんでした。
オンラインで受講できる学士号プログラムのため、クラス登録をしないだけで実質的に3ヶ月の休学が可能となっています。しかしながら、連続して複数回のTermを休むことができなかったり、トータルで休めるTermの回数に制限があったりするため、アドバイザーの方に相談することを推奨します。
2023 Summer
学期 | 番号 | 名前 | Grade | 難易度 | 作業量 |
---|---|---|---|---|---|
2023 Summer | CS271 | Computer Architecture and Assembly Language | A | やや難 | 70時間 |
通常Termが10週のところ、Summer Termは8週となっています。そのため、通常カリキュラムを圧縮したクラスとなるため、通常Termより忙しくなることが期待されます。
Summer Termは取得できる講義が少ないため、休暇や、インターンシップ、自己学習の期間とするなど学生によって様々です。
Summer Termに講義を二つ取得するのは非常に忙しくなることが予測されるため推奨されていませんが、個人的な感覚だと難しい講義+易しい講義の二つであれば大丈夫かなーと思いました。来年は二つ受講してみようかと思ってます。
CS 271 – Computer Architecture and Assembly Language
コンピュータアーキテクチャ、デジタルコンピュータの操作、アセンブリ言語とaddressing、stacks、argument passing、arithmetic operations、dicisions、macros、modularrization、linkers、debuggersなどが本クラスの内容となっています。
クラスは、毎週のクイズや課題、テストがあり、後半にかけて課題がどんどん難しくなります。この時点で離散数学と並んで難しかった講義です。
クラスの流れとしては、大まかに下記となっております。
- CISC (Complex Instruction Set) Computerのアーキテクチャの理解
- CPUとメモリ内部での命令の実行プロセスの理解
- Microsoft Macro Assemblerを用いた整数演算
- マクロ、モジュールの使用と引数の扱い方、それに伴うスタック領域の使い方
- 少数の扱い(Reverse Polish Notation (RPN), IA-32 floating-point unit (FPU), Endianness, IEEE 754 Floating Point Format)や文字列の扱い
- CISC vs RISCアーキテクチャ、それぞれのアーキテクチャの処理量の計算及び比較
- 並列性(Instruction-level parallelism, Pipelining, Processor-level parallelism, multiprocessors, multicomputers)、Pipeliningの有無に伴う処理量の変化の計算
CISCのアーキテクチャを理解し、実際にアセンブリを書いたことで、単純な整数演算においても、CPU内部の整数演算ユニットやバス、レジスタがどう扱われているのか、メモリとの連携がどう行われているのかを意識することができ、とても勉強になりました。
また、変数や引数などを扱う上でのスタック領域の扱い方も意識することができ、普段高級言語がよしなにしてくれている部分を知ることができて大変興味深かったです。プログラミング言語のパラダイムをハンズオンで経験することで、普段使うようなオブジェクト指向言語の内部でどのようにメモリ管理をしているかを意識するようになりました。
今後様々な技術を学習していく上で、こうした技術の上に成り立っているということを知っているだけで役立つ部分は大いにあると思います。
Gradeは100.49%でした。こちらもエクストラクレジットを取得しています。
2023 Fall
学期 | 番号 | 名前 | Grade | 難易度 | 作業量 |
---|---|---|---|---|---|
2023 Fall | CS325 | Analysis of Algorithms | A | 難しい | 119時間 |
2023 Fall | CS340 | Introduction to Databases | A | 易しい | 71時間 |
本Termで初めてオレゴン州立大学の講義を二つ受講しました。有志のコースレビューのサイトでは、CS325は週13時間、CS340は週8時間かかる想定です。
フルタイムで働きながら場合によっては21時間以上費やす週があったため、時間管理がなかなか厳しかったです。
*追記:1学期中に2クラスを受講して、GPA3.50以上を維持した場合、成績優秀者名簿に載るらしいです。日本から同じプログラムで成績優秀者名簿に載っている方が数名いらっしゃるようでした。
1学期中に6クレジット以上のクラスを受講してGPA3.50以上をキープできたら成績優秀者名簿に載るらしい。
これは前学期の分だけど、今学期もGPA4.0だったから今回も載るはず。
卒業までGPA4.0を維持するから、これからもHonor Rollでいきます。 pic.twitter.com/FYWQc43PUH
— Nishi🇺🇸社会人学生エンジニア (@ni_5h1) March 29, 2024
CS 325 – Analysis of Algorithms
クラスの全体構成としては、毎週のクイズと課題があり、グループプロジェクトも2回ほどあります。また、監視付きの中間試験と期末試験があります。クラス難易度とボリュームの観点で今までの講義で1番難しかったです。
主に下記のトピックを中心に学習します。それぞれのトピックに対していくつかのアルゴリズムの実装方法や証明方法を学びます。
- Asymptotic Notations
- Correctness of Algorithms
- Recursion
- Recurrence Relations
- Divide & Conquer
- Dynamic Programming
- Backtracking
- Greedy Algorithms
- Graph Algorithms
- NP-completeness
- Heuristic Algorithms
Asymptotic NotationsやNP-completenessは数学的要素が多く離散数学の知識が必要となります。他のトピックに関してはデータ構造の予備知識、Pythonの基本文法の知識が必要となるため、自分のようにコミュニティカレッジで事前講義をC++で学習していた場合はPythonを事前に学習しておく必要があると思います。
このクラスのおかげで普段の実装でも計算量を意識するようになり、ビッグオー記法でどの程度の計算量となるか目算できるようになりました。今後もアルゴリズムの学習を継続して、競技プログラミングに挑戦していこうと思っています。
中間試験のスコアが47/50、期末試験のスコアが57/60で、最終Gradeは98.85%でした。
CS 340 – Introduction to Databases
このクラスはグループプロジェクトが中心となります。チームメンバーは一人のみで、任意の方とチームを組むことができます。メンバーが講義をドロップしたなどの話をよく聞くため、早めにクラスに対するモチベーションや目標が一致している方を探した方が問題は少ないかと思います。
講義としては主に下記のトピックを学習します。
- SQL
- Relational DB & Design
- Relational Algebra
- Intersection tables
- Database Normalization
- Analytical DBs and BI
- No SQL
SQLや正規化、M:Nにおける設計など、DBの基本を学習します。内容自体は基礎が中心なので難しくありません。
時間を費やすのは主にグループプロジェクトであり、内容としては任意の事業者を想定して、DBを使用することで業務改善をするというものであり、DBの設計から最終的にはCRUDを実施するWeb APIを開発します。
Web APIの開発では、ORM(Object-Relational Mapping)を使用しなければ、どのような技術スタックで開発しても良い方針となっていて、ここでのチーム開発に時間がかかります。
成績評価は毎週のクイズと課題、グループプロジェクトの進捗報告と最終提出により評価されます。エクストラクレジットも含めて完了したため、最終Gradeは100.79%となりました。
今後の予定
下記の通りに受講を進める予定ですが、多少詰めすぎている感があるため私生活を考慮して変更する可能性もあります。
まとめ
CSを専攻している学生は、アルゴリズムの授業を修了した段階で、データ構造とアルゴリズムという主要のクラスを修了したことになるので、インターンシップを開始したり、エンジニアとしてのキャリアの方向性を考える時期となります。
私もこの1年間で低レイヤーでの実装、API実装、アルゴリズムの実装を中心に行なってきて、バックエンドでゴリゴリAPIを実装していきたい欲が湧いてきました。
今後の身の振り方は考えるとして、コンピュータサイエンスは引き続き継続学習していきます。
シェアする