UoPeopleのコンピューターサイエンス学部を退学することにしました。
取った授業は以下ですね。
- English Composition
- CS1101 programming foundamentals
- CS1102 programming 1
- CS2203 Database 1
この記事で「入学の目的」「なぜ退学したか」「良かったこと」を書いていきます。
巷にはUoPeopleめっちゃいい!系の記事が多いので、少しくらい別の意見として参考になれば幸いです。
入学の目的
コンピューターサイエンスを体系的に学びたいと思ったからです。
まず背景として、自分は文系出身でソフトウェア開発者として就職したのですが、2年ほど仕事をしていく中で基礎が足りない気がする…と思う場面が何度か出てきました。
例えば、DBのインデックスの仕組みの話の理解に時間がかかったり、問題を解決するためのコードのアイディアが人より劣っていると感じたり、です。
今思うと滑稽なのですが、こういう問題はすべて「コンピューターサイエンスを体系的に学ぶことで解決できる…!」と思い込んでいました。
そうしてCSを学ぼうとしたわけですが、
- 強制力がある方が継続する
- どうせ学ぶなら学んだ証明が欲しい
ということから大学や大学院が候補に入り、そこで安い学費でアメリカで認定された大学でCSを学べるというUoPeopleを知り、入学しました。
なぜ退学したか
いくつか理由はあります。
- 大学でCSを学ぶこと=強いエンジニアになれるではないと悟った
- 授業の内容が期待と違った・無駄が多い
ようは「学ぶ目的が曖昧で、手段が不適切だった」ということが原因です。
1. 大学でCSを学ぶこと=強いエンジニアになれるではないと悟った
なんとなく「大学でCSを修めれば自分が抱える技術に関する問題が解決する」と思っていませんか。
自分はまさにそうで、大学でコンピューターサイエンスを学べば強いエンジニアになれるんだ、と盲目的に思い込んでいたなと思います。
しかし、今となっては大学でコンピューターサイエンスの授業を頑張って受けるだけでは強いエンジニアにはなれないと思いました。
少なくともUoPeopleのCSコースでは無理だと感じました。
それを説明するために、強いエンジニアの定義とUoPeopleの特徴・実態を書いていきたいと思います。
強いエンジニアとは?
曖昧な言葉ですがなんとなく伝わるのがいいですよね。
自分の語彙力で過不足なく定義するのは厳しそうなので、これができたら強いエンジニアだよなぁと思う特徴をいくつか並べてみます。
- 技術の引き出しが多く、問題にあたったときに解決方法をすぐに提案できる
- 特定の技術への深い理解があり、いわゆる聞けばなんでも知っている
- 個人で製品を開発し、販売している
- 有名OSSにコミットしている
- 便利なライブラリやツールをいつも開発している
- なんか知らない技術をいつも触っている
多かれ少なかれ、このような特徴があると思います。
こういった強いエンジニアになるためには何が必要なのでしょうか?
私が考えているのは「大量のインプットとアウトプット。それを可能にする意識と環境」だと思います。
もっと一言でいうと「手を動かせ。手を動かしたくなるような環境もあればいいぜ。」です。
結局、どれだけ技術に触れてきたかが技術の引き出しにつながります。
そして技術に触れるためには色々触るしかありません。そして色々触るためには好奇心・課題意識・触る方へ向かわせる環境(開発仲間の存在・壁によく当たる環境、など)などがあれば良さそうです。
UoPeopleのCSコースを受けても強くなれない理由
先ほどの強いエンジニアになるための要素を正しいとするなら、UoPeopleのCSコースはあまり良い環境とは思えないな、と感じました。
理由はインプット中心でアウトプットの質が低いことと、オンラインなので人に会いづらく刺激を受けにくいこと、です。
UoPeopleの授業はオンライン完結です。
一週間ごとに課題が出されるのですが、基本的には以下の3つが課題になります。
- 教科書を1章読んでレポートを書いて公開。学生同士でレビューしあう
- プログラミング課題を提出し、学生同士でコードをレビューしあう
- 課題(プログラミングかレポート)をインストラクターに提出し、レビューを受ける
インプット、アウトプット、レビュー、議論と学び、のサイクルが回りそうな予感ですが、実態はそうではありませんでした。
残念ながらレビューの質が低く、大抵の学生はコメントが適当です。
Great work. Your code is easy to read. You understand this week's topic well.
こんな感じです。鋭い指摘が飛んでくることはごく稀です。もう少し学年が上がると内容が高度になると思うので、ほかの生徒の提出内容を見れるだけで刺激を貰えるかもしれませんが、少なくとも私が受けた授業はこのような感じでした。
仮に面白い指摘が飛んできたとしても結局文字ベースの議論であるため、時差の存在も相まって待ちの時間が長いです。さらに議論スペースは課題期限とともに1週間で閉じられてしまうので、継続させることをさらに難しくしています。
さらに、UoPeopleのCSコースはゼミがありません。ゼミは1つの分野に継続的に取り組む絶好の学習機会になりうると思うのですが、それを授業や単位として強制的にではなく自分の意志でやる必要がある、というわけです。さすがに難しいです。
こういった問題から、アウトプットの質が高い学習ができる予感はしませんでした。
また、世界各国から学生が集まっているのは面白い点ですが、やはり完全オンラインだとなかなか交友関係が作れません。
コミュニティアプリはあるにはあるのですが…オフラインのように「○○でたまたま出会って意気投合して仲良くなって一緒に技術勉強やプロダクト制作をして…」という流れにはつながりにくいと感じます。
2. 授業の内容が期待と違った・無駄が多い
思っていたのと違うなー、と思う場面がありました。
以下のリンクはUoPeopleのコンピューターサイエンス学部のカリキュラムです。
https://catalog.uopeople.edu/ug_term1_item/computer-science/bachelor-of-science-in-computer-science-bs-cs
色々な授業があります。
アメリカで何か基準に沿って認定された大学らしいので、過去の自分がいう「コンピューターサイエンスを体系的に学びたい」は叶えられるカリキュラムなのでしょう。
しかし、実際にいくつか授業を受けてみたところ、あまり内容に満足がいっていない自分がいました。
理由を一言でいうと「それもう全部知ってる…」と感じたためです。
- CS1101 programming foundamentals
- Pythonの書き方。とにかくプログラミングしてみよう。
- CS1102 programming 1
- Javaを通して変数・関数などプログラミングの基本を学ぼう。
- CS2203 Database 1
- SQLの書き方。JOINについて。正規化について。
ご覧いただいたら分かるように、ソフトウェアにまつわる基礎中の基礎に関する授業が待っています。
これらの授業のGPAは 3.95 くらいでした。もちろん 4.0 が最高値です。
業務2年やってると知ってて当然ですよね…。
ここでようやく、自分はコンピューターサイエンスの学部生が学ぶことを一から順に追って学んでいきたいわけではなく、ただ自分が知らないことを学びたかっただけだと気づきます。
例えば自分の場合、「データ構造」「アルゴリズム」「メモリの仕組み」「ネットワークの仕組み」「OSの仕組み」「PCはなぜ動く?」などです。
もちろん授業で触れるトピックだとは思います。例えば「CS 3307 Operating Systems 2」を取ればOSについて学べそうです。
とはいえ、授業を受けるだけで何もかもが身について専門的になれる訳ではありませんよね。
加えて、カリキュラムの都合上興味がさほどない授業も取らざるを得ないことや、履修条件によって学びたい授業を最初から取れないことも気になりました。
例ですが、自分は今のところこれらの授業に全く興味がありません。
- CS 2205 Web Programming 1
- CS 2401 Software Engineering 1
- CS 4405 Mobile Applications
- CS 4402 Comparative Programming Languages
- CS 4407 Data Mining and Machine Learning
- 一般教養科目
もちろん、「コンピューターサイエンスを体系的に学ぶ」のであれば、こういう授業も必ず必要なことでしょう。ただ、自分はどうやら自分が興味のある分野だけをつまみ食いしたいだけなようなので、興味のない授業の時間は苦痛でしかないと思います。UoPeopleの授業は課題が多く、普通にやると週に15~20時間くらいは使うことになり、しかも全て英語です。さすがに興味のないものに対してそれを行うのはつらいです。
また、一般教養については単位移行が可能ですが、必要な単位をすべて網羅できるかは分かりませんし、単位移行にはお金がかかります。
網羅できなかった場合はその授業を取る必要がでてきます。
このように、何を学びたいのかが曖昧だと(とにかくコンピューターサイエンスを学びたい、みたいな。)入学後に期待とのずれが生じます。
終わりに
結局、自分はコンピューターサイエンスに関することを学びたいことは確かだとは思いますが、コンピューターサイエンスとは何なのか(何を学びたいのか)が分かっておらず、それを学ぶ方法も大学のカリキュラムに沿うことが最適なのか、が分かっていなかった点が今回の肝だったと感じています。
自分のように興味のあるCS範囲のつまみ食いをしたいだけであれば、Courseraや書籍など、より良い方法がありそうだなと思っており、そちらをやっていくつもりです。
また、UoPeopleは「学位を取得する」分にはお得だと思いますが、学生の議論へのモチベの低さとゼミの無さから、大学を通して何を学んだか、何を研究したか?に対して答えを出せる人はほんのひと握り(自分1人でテーマを決めて自分1人で追い求めた人だけ)だと思います。
もちろん、この内容は初学年度から取れる基本授業を3つ取っただけの人が言っているので、実情は違うかもしれませんが、UoPeopleでコンピューターサイエンスを学びたい人にとっての一つの意見として参考になれば幸いです。
なお、UoPeopleを辞めた後で実際に自分が学びたいことを学べているのかは、随時このブログにあげていこうと思います。
継続していたらまた違った景色が見えていたことは否定できませんし、結局UoPeopleが一番良かった、みたいなオチ記事が来るかもしれません。
おまけ:良かったこと
UoPeopleに入学してよかったこともありました。
1. 費用の節約
UoPeopleはとにかく安い(入学金60ドル程度だったかな。)ので、迷うなら入ってみて肌で感じてみるのもおすすめです。
実際私はやってみて違うなーとなったわけですが、これを別の大学でやっていた場合は費用がとんでもないことになっていたことでしょう。
2. 英語の無料教材が多いことに気づく
UoPeopleでは世の中に公開されている無料のテキストを授業で使います(どこかにちゃんと明記されています)。
コンピューターサイエンスやソフトウェアに関する英語の本は、意外と無料で公開されていたりするんだなぁと気づきました。
その気になれば、良質な英語本を無料で読んで学ぶこともできそうです。
3. 英語力について
UoPeopleは授業や課題が全部英語であるので、リーディングやアカデミックライティングの力が伸びたという記事をよく見かけます。
この点に関しては、英文学科専攻だったこともあり自分はあまり恩恵を受けた感覚はありませんでした。
4. 日本コミュニティについて
TwitterやUoPeople公認アプリ(Microsoft?)で日本語コミュニティがあって、そこで同じ志を持つ人と情報交換ができます。
オフ会なんかもあったみたいです。