技術記事以外

技術記事以外の振り返りやその日学んだことのちょっとしたメモなどを置く予定です

Stanford の Foundations in Computer Science Graduate Certificate を取りました

この記事の続きです。自分用としてもメモ。

CS107

前評判通りかなりintensiveなコースでした。あまりに不安だったので過去のコースサイトのリンクから各週のスライド・Course Readerという情報量の多い参考資料のpdf・Labのページを全部読んでおきました。読んだと言っても、目を通したという感じです。そもそも知らない内容が多く、個人的にとっつきやすい分野でもないため正直アセンブリ周りは全然分かっていませんでした。自習できないところを学ぶためにお金払ってる側面もあるのでそもそも全てわかるようになることは元から目指しておらず、まあ心配なのでちょっと準備しておこうみたいな気持ちでした。

そんな程度でも前準備は多少役に立っていたように思います。CS161のように発想が追いつかず課題を解くのに悩むとはまた違った感じですが、課題はかなり取り組みがいのある内容で相変わらず業務外の時間は土日含めほとんど溶けました。基本的に課題はプログラムを書くことになり、テストも自分で用意するので大体思いつく限りのテストを実施してグリーンなら提出の目処はつくという点では少し楽だったかもしれません。テストが通った時や、リバースエンジニアリング系の課題で答えがわかった時は楽しかったです。C言語は通らないで来たのでコマンドラインデバッグする発想もなく最初は面食らいましたしできる気がしませんでしたが、意外とできるものですね(当たり前だけど)。

中間・期末試験は想定通り難しかったです。課題の時はそれなりだったアセンブリの解読が急にできなくなる不思議。これだけ密な授業内容でありながらやはり生徒は皆優秀なので中央値は高く、中間は最高得点ではありましたが期末はもうちょい落としていた覚えがあります。最終成績はなんとかAに収まりほっとしました。

担当のJerryはまた Kieth とは違ったタイプだけどこちらもパッション溢れている先生で、特にとても生徒思いな先生でした。SCPD経由で授業をとっている生徒とも積極的にコミュニケーションを取ろうとしてくれるし、毎回授業後にはメールが届いて授業のサマリや次回予告のみならず先生の近況まで伝えてくれます。お茶目。

内容は普段普通にコード書いてたら正直使わない内容ではあると思いますが、プログラムがどうやって動いているかなど根幹部分への理解が深まるのでとってよかったです。(そもそもRequired Courseではありますが)

CS108

Electiveです。この授業だけは授業のリソースが公開されておらず、チームプロジェクトがあったので結構不安でした。仕事だとチームでの仕事はそれだけ学ぶものが多いし成果物も良くなるので好きなんですが、授業課題となると全員が決まった時間を確保できないことなど普通にあり得ますしそれで成績左右されるのはストレスフルなのでできれば避けたい思いがありました。ギリギリまでファイルシステム系の授業と悩んでいましたが、Androidに興味があったこともあり最終的にはこちらを選択しました。

授業内容は、半分くらいは「ものすごく実務の上で大事だが学生の間は学ぶ機会がなさそうなこと」でした。例えば(かなり簡略化してますが)コードは長きに渡って色々な人に管理されるから自分さえわかればいいってもんじゃない、とか。ただし私はすでに実務経験があるので「本当それ大事!わかるわかる」みたいな感覚で聞くことがほとんどでした。そういう意味で授業はあまり重くなかったです。 残り半分は私の経験のないAndroidプログラミングの授業でした。Webとは思った以上に構造が違うので最初は結構びっくりしましたが、大体構造がわかればあとは授業課題の実装はそこまで大変ではなかったです。こういうツールや言語の自習は得意なので、比較的授業はさらっと見てあとはハンドアウトと普段通り検索で対応しました。

授業ポリシーがちょっとユニークで「実務では他の人にどう評価されるかも大事だから、どんなにプロジェクトへの貢献時間だけが大きくても最終的にチームメンバーからの評価が悪かった時はそれを評価に入れる」とか「Generative AI の使用はOKだが使用によってどんな効果があるか調べてるからどの目的でどの程度使ったかレポートしてくれ」などがありました。結局コードの生成は AI 使わなかったのですが、このポリシーがきっかけで検索するときの選択肢にGeminiが入ってきて、ちょっと使った結果「自分のある程度知識がある分野は(おそらく調べ方とか単語を知っているため)普通に検索した方が早いが、全く何も知らない分野(Androidユニットテストの書き方など)はGeminiに聞いた方が早いこともある」という気づきが得られて興味深く思いました。

個人課題はあまり難しいものではないですがCS107に比べるとテストでの確認が少ししにくいタイプのものが多く、ゆえに中盤はちょくちょく点を落とす場面もあって落第まではいかないだろうと思いつつも若干の不安はありました。そして懸念していたチーム課題。タイムゾーンの問題があるのでその辺承知の人だけ集めて組みたく自分からメンバーを募集しました。特にチームリーダーみたいなものは決めなかったのですが、自分で募集したしかなりタイトな締切なので良いだろうということで、ある程度決めの作業は私の一存で決め、仕切りをさせてもらいました。初っ端のタスクの振り出しやデザインモックの作成、アーキテクチャの提案などの作業は並行して分担できないものが多く、あまりそこに時間をかけられる猶予もなかったので逆にそういう人が誰かいないと立ち行かない課題でもあったと思います。

途中まではなかなかコントリビューションの伸びないメンバーがいたり、申告なかったですが多分gitがあまりわかっていないメンバーがうっかりmainに push -f するといったこれ進研ゼミで見たやつパターンがあったり、想定よりは遅れに遅れ最後かなりカツカツでしたが、一応最後1日をテストとクリティカルなバグ修正に当てるくらいの時間は確保できました。後半は流石にみんな自分の成績もかかっているので作業スピードも伸び、Slack上でのコミュニケーションも以前よりしっかり取れるようになったのでスムーズに進み始めました。

最終的にはそれなりに良い成果物になったと思いますし、チームの皆さんがポジティブに評価してくれたようで、個人の成績ではExtraでポイントをもらってA+で終了できました。エンジニアとして実務経験があるのが私だけだったので、むしろ私がもっとプロジェクトマネジメントに長けていたらより余裕をもって終わらせることができたのかもという点は反省点でもあります。他のメンバーはパートタイムではなさそうだったので、Stanfordの授業を並行して複数とっている忙しい中でしっかり参加してくれて感謝しています。

余談ですがAndroidStudioにEmulatorも動かすため私の貧弱なMacは常にウィンウィン悲鳴をあげていました。重いこと重いこと…。途中で実機に切り替えマシになったのですが、チーム課題も佳境に差し掛かった段階で急に実機にインストールできない(セキュリティ的な理由で)みたいなエラーが吐かれ始めた時は眩暈がしました。

総括

  • Stanfordの授業は高いけど、高いなりの理由(授業の質・サポートの質・課題の質etcが総じて高い)はある。JPYのレートも踏まえて具体的にどの程度見合っているかはなんとも言えないけど。
  • 本当に全てがオンラインで完結する
  • 授業がちゃんとしている分、ちゃんと成績をとるならかなり時間が持っていかれるので心してやろう
  • やってよかった

結局、大変なんだけど学びはあるし張り合いもあるから終わったらでまた授業をとりたくなってしまう…!

メモ

  • 学期により担当する教授が違うので、ratemyprofessorとかでどの教授の取るか決めた方がいい
  • アカウントがあれば https://carta-beta.stanford.edu/! で学生からのレビューも見られる
  • 全然関係ないけどUTAustinの同等のもの https://mscshub.com/