えんぴつぶろぐ

子育て中のフロントエンドエンジニアのブログ。

UoPeopleでProgramming2(Java)を修了した

オンライン大学 University of the People でProgramming2 (CS1103) を修了したのでその感想を書きます。

これまでのUoPeople関連の記事はこちら:
UoPeople カテゴリーの記事一覧 - えんぴつぶろぐ

はじめに

このコースはCS1102:Programming1に続きJavaを使いますが、CS1102に比べると課題の難易度が上がりComputer Scienceコース最初の関門と言われています。
ほぼ毎週Programming課題があるので課題の量も多め。

ただJavaそのものを学ぶというより、Javaを使いながら計算量やデータ構造・アルゴリズム、Generic ProgrammingやGUI Programmingなどの他の言語にも通ずる問題解決力を養うためのコースなのでやりがいがあるし、 これを修了すると受講できるコースの選択肢が格段に広がります。

また、私はWebエンジニア歴がX年くらいありますが、クライアントサイド・フロントエンドがメインでバックエンドのまともな実務経験はほとんどないので楽しみなコースの一つでした。

学習内容

  • 例外処理
  • 計算量
    • ビッグ・オー:𝑂
    • ビッグ・オメガ:Ω
    • ビッグ・シータ:Θ
  • 再帰、ソートアルゴリズム
  • ADT(Abstract Data Types)などのデータ構造
    • List
    • Set
    • Map
    • Stack
    • Queue
    • double-ended Queue
    • LinkedList
    • BinaryTree
    • HashTable
  • デバッグのノウハウ
  • ファイル・ネットワークなどのI/O処理
  • MVCパターン
  • JavaのCollection Framework
  • Generic Programming
  • GUI Programming
    • Swing component
    • BufferedImage, graphicsなど

プログラミング課題

ほぼ毎週ProgrammingAssignmentがあります。
(他のコースで言うWritten Assignmentに相当するもの)
また、Learning Journalでも毎週振り返りに加えてプログラミング演習があります。

データ構造を実装したり、
バッカスナウアで定められた構文ルールを実装したり、
チューリングマシンの一部を作ったり、
ファイルの読取・書込を実装したり、
木構造のトラバースをしたり、
バグのあるプログラムのデバッグをしたり、
パーサーを実装したり、
スペルチェッカーを作ったり、
簡単なWebServerを実装したり、
テキストやグラフィックを描画するGUIアプリケーションを作ったり、

ととても実践的な内容。

とはいってもイチから10まで丸投げされることは少なく、
ベースとなるClassやサンプルコードが渡され、なにをどう実装するか文章で指示されます。
実装する範囲は関数もしくは機能単位で採点基準もシンプル。
テキストの内容やそれまで登場したサンプルコードを理解していればなんとか実装できるはず…。

が、プログラミング自体に慣れていても、指示の文章がめっちゃ長かったり、ベースとするコードの量が多い&仕様がわかりづらかったりでそれなりに時間が取られました。
要件が多い場合も同様。(スペルチェッカーとWeb Serverは結構面倒くさかった…)

Optionalなプログラミング演習もありましたが全くやる余裕はありませんでした。

そしてGUI ProgrammingはなんとSwingを使うので、Reactの関数component+宣言的UI慣れた身としては辛かった…。 せめてJavaFXにしてほしかった…。

ただ課題としては必須ではなかったですが、バッカスナウアでルールを定めつつ再帰下降法でパーサーを作ったり、式ツリーの構築や後置記法での演算、マンデルブロ集合をシミュレーションするなどといった話もあって興味深かったです。

中高生レベルの数式もたまにでてくるのでAlgebra先にやってなかったら超ビビってたかもしれない。 (理解してなくても課題はできます。)

Learning Journal

先程も言及しましたが、Learning Journalでは振り返り+プログラミング演習です。

ただ、プログラミング演習は基本的にnon-gradedになっています。
題材がテキストの演習問題とほぼ同じだったり、木曜日をすぎるとOffical Solutionが提示されるからだと思われます。

でもそのままコピペするともちろん剽窃になっちゃうので、答えは参考に留めつつできるだけ自分で頑張りましょう。

Discussion Assignment

毎回「XXXのメリット・デメリットについて論じて。」みたいな超シンプルな問いが出されます。

複数の参考文献からの引用+サンプルコードとか載せると高得点をもらえると思われます。

Graded QuizとFinal Exam

Graded QuizはSelf-Quizで見たことある問題がほとんどだったので、Self-Quizをちゃんとやってれば楽勝のはず。

ただ、Final Examは半分くらいがSelf-Quiz/Review Quizにない問題で、教科書のかなり細かい内容などが出題されていた印象。

役立ったもの

「選択ソートってどんなやつだっけ?」
木構造の先行順巡回ってどういう順番だっけ?」

という時にアルゴリズムビジュアル大辞典をよく見ていました。
擬似コードやアニメーションも全部載っているので本当に神。

yutaka-watanobe.github.io

学習時間

学習くらいは大体11時間/週くらいでした。
Web Serverを作った週は時間を取られて18時間かかってた😇

右側3本は課題が少なかったUnit8+最終試験の週でした。

f:id:empitsu88:20210608144922p:plain
週毎の学習時間

成績

インストラクターが「毎回10点マシュマロ」「Discussion Assignmentでほとんどの生徒にコメントをくれる」という素晴らしい人だったため毎回ほぼ満点を取れました。
ただFinal Examで何問か落としてA+はとれず。

f:id:empitsu88:20210608155742p:plain

これまでに受講したコース

ということで以下のコースが修了できました!

  • ENGL0101 English Composition 1
  • UNIV1001 Online Education Strategies
  • CS1101 Programming Fundamentals
  • CS1102 Programming1
  • MATH1201 Algebra
  • MATH1302 Discrete Mathematics
  • MATH1280 Introduction to Statistics
  • CS2203 Databases

+前の大学から単位移行したコース