最近のUoPeopleのこと。入学して二年
昨年の6月に「ちょっと疲れた」という記事をポストしてからやはり疲れを引きずっていて、termが終わると一秒でも早く大学から解放されたくて振り返りを書く気分になれずにいた。でもこのあいだTerm 3を終えて三年目の節目に差し掛かかり、やっとなにか書く気になったので忘れないうちに文字にする。
- CS 1104 Computer Systems
- CS 3303 Data Structures
- CS 2203 Databases 1
- CS 3306 Database 2
- MATH 1302 Discrete Mathematics
- 社会人学生は大変。それでもなんとかやっています
CS 1104 Computer Systems
序盤では2進数や2の補数などの数の表現方法・ブール関数・真理値表・論理回路、中盤ではCPUとRAMの構造、終盤はアセンブリと機械語を学んだ。ちなみに離散数学を履修前にこのコースを取ったのだけど、序盤の数学的要素は特に問題なかった。
教科書二冊のうち片方の『The Elements of Computing Systems』は、オライリーから『コンピュータシステムの理論と実装』として和訳版が出版されていて、たまたま予習用にと買っておいたのでラッキーだった。この分野に関して前知識がなかったので英語だけで理解するのは難しかったと思う。
Logisimで論理回路をシミュレートする課題は面白くて「NAND回路つくれた!加算器つくれた!」と初めのほうは楽しくお絵描きしていたのだが、マルチプレクサとか作ることになったあたりから、自分でも何を作ってるのかわからないがとにかく提出するの精神に変わっていった。
とくに難しかったのがCPUとRAMの章で、すごい数でてくるパーツの名称と役割が想像できずに文字として記憶するしかなくつらかったが、絵で説明してくれるYouTubeを観てなんとか乗り切った。
終盤のアセンブリと機械語の章では、高級言語をアセンブリ言語に翻訳してシミュレーターで機械語に変換する課題が勉強になって、いつも書いてるコードのどんな時にメモリアクセスが発生するかなどハードウェア側の仕組みが知れて良かった。
個人的にはUoPeopleで二番目に難しいコースだった(一位はAlgebra)
CS 3303 Data Structures
様々なデータ構造の計算量を解析したり強みと弱みを調べたり、問題解決に最適なアルゴリズムを選定するための知識が身につくコースだった。スタック、キュー、バイナリサーチツリー、マージソートなどをJavaで一から実装して、Jeliotというコードの動きを可視化するツール上でシミュレートする課題がやり甲斐あった。他のコースに比べてコードを書く割合が多めだったのであまり苦しみを感じなかった。
また解析に必要な数学的概念の復習から始まるので、Algebraのとき完璧に理解できなかった指数関数と対数関数の復習にもなって、ここでようやくきちんとlogを理解した。ひとつ前のtermで取っていた離散数学で学んだシグマの公式や漸化式の知識なんかは大いに役立った。
データ構造そのものの知識が深まったことに加えて他のコースとの関連、たとえば「B+-TreeってDBのインデックスに使われてるやつだ」とか「FIFO・LFU・LRUはバッファプールの勉強のとき出てきたやつだ」とかに遭遇するので、データ構造があらゆるCS分野の土台になっていることに気付かされて納得感があった。
CS 2203 Databases 1
DB1では、論理・物理設計、正規化、ER図、DBMS、SQLの基本を学んだ。自然界のデータをどうモデル化して物理設計に落とし込むか、その思考と手法を学べるコースだった。私は実務でなんとなくテーブル設計やSQLを書いたりしているが、理論がちゃんとわかってない自覚があったので勉強になることが多かった。
課題では与えられたエンティティについて関数従属を見つけては正規化、正規化、正規化....を毎週やっていた。あとはER図を書いたりSQLの基本的な句を実行する実践的な課題もあった。
CS 3306 Database 2
DB2では、DBMSが内部で行なっているトランザクションの仕組み(ACID特性、同時実行制御、分離レベル、デッドロック)を主に、他にはバックアップとリカバリー、アクセスコントロール、パフォーマンスチューニング、セキュリティー、クラウドコンピューティングなどなど、多岐にわたるトピックを学んだ。というか多岐にわたりすぎていて、週によっては教科書80ページ読んでさらに自分でもいくつか文献探して読んで...と、リーディングがきっついコースだった。
Final Examでは教科書の隅々まで読んでないと解けない問題がいくつも出てAを逃してかなしい。
MATH 1302 Discrete Mathematics
自分にとって関門であったMATH科目のうち最後のコース。命題、集合論、二項定理、数列と級数、数学的帰納法、漸化式、関係、グラフ理論、暗号化アルゴリズムなどなど、MATH科目の例に漏れず8週間ですごい勢いで詰め込まされた。どれも初めて学ぶ内容だったので時間はかかったが、これまでにUoPeopleで積み上げた知識と数学勉強ノート(400ページを超える超大作である)を駆使して今回もなんとか乗り切った。そしてなんと、すべてのMATH科目でAを取れたことが泣くほどうれしい。
受講するまでは離散数学って何なのかも知らなかったけど、今までに学んだ他の分野、コンピュータシステムやデータ構造で知らずのうちに扱っていたので、理論を抽象化するための、CSにおいてはわりと重要な数学のカテゴリであることは感覚的に理解できた。数学的帰納法などの証明は理論を人にわかりやすく伝える練習になって、テクニカルライティングにも活かせると知った。数学的な作法や公式って共通言語みたいで、それを知っている者同士では無駄を省いて効率的に抽象的な物事を伝えられるので便利だな〜と思う。うまく言えないが。
社会人学生は大変。それでもなんとかやっています
入学してからこれまでに105単位取得することができた。履修したコースはこちら。
UoPeopleで履修
- ENGL 0101 English Composition 1
- UNIV 1001 Online Education Strategies
- MATH 1201 College Algebra
- MATH 1280 Introduction to Statistics
- MATH 1211 Calculus
- MATH 1302 Discrete Mathematics
- CS 1101 Programming Fundamentals
- CS 1102 Programming 1
- CS 1103 Programming 2
- CS 1104 Computer Systems
- CS 2203 Databases 1
- CS 2401 Software Engineering 1
- CS 3303 Data Structures
- CS 3305 Web Programming 2
- CS 3306 Databases 2
Sofiaで履修して単位移行
- Introduction to Web Development
- English Composition II
- Introduction to Ethics
- Introduction to Psychology
- Introduction to Sociology
- Art History
StraighterLineで履修して単位移行
- Western Civilization I
専門学校からの単位移行
- 23科目(42単位)
こうして並べてみると、この二年間でたくさんのことを学び、私生活の大部分を課題に費やしていたことに気がつき「えらかったね」と「つらかったね」の思いで涙がでてきてしまう。我ながら本当によくやってると思うし未だに「なんでこんな大変なこと始めてしまったの」と自問することもある。でも卒業が近いのでがんばれている。学士の卒業条件である120単位まではあと15単位、残り5コースになりあこがれの「大学卒業」が近づいてきている。
専門学校から42単位も移行できたのは思いがけなかった。だって大卒じゃないしCSとは程遠い美容学校卒なのに。美容師にならなければどこにも活かせなかったはずの経歴をようやく活かせたのが心からうれしい。トランスクリプトには「Hairstyling Practice」「Beauty Health」などの移行科目がずらりと並ぶことになり、それを見たときは「うわっコンピュータサイエンスなのに微妙〜」と思ってしまったのだけど、よく考えたら自分の人生らしいトランスクリプトで今はとても気に入っている。
なんとか今年中には残りの単位を取って、来年の桜の頃にはアカデミックガウンか袴を着て写真を撮る気満々でカメラ係も手配済みである。だが残っている科目がネットワーク、データマイニング、オペレーティングシステムと、馴染みのないものばかりでむずかしくて、少々無理して詰め込んででも卒業を早めるというわけにもいかず、地道にやるしかなくてもどかしい。この限界生活は最短でも今年いっぱいは続くようだ。は〜桜に間に合いますように。
引き続きやっていきます。