UoLやめた話 & Stanford で CS の授業をとった感想
前にロンドン大学の学士のプログラムを始めたという話をしましたが、2学期・計6クラス取ってやめました。理由はとにかく事務関連の処理が遅く、特に成績に関する問い合わせ(明らかな採点もれなど)について数ヶ月も返事がもらえない状態に耐えられなくなったということが一番大きいです。修士系と比べると値段が異常と言っていいほどにリーズナブルなので文句は言えませんが…。
その後、Non-degree student として Stanford の授業をとり始めたので感想を書いてみます。修士にしなかった理由はそもそも推薦状の当てがないので出願できる見込みがないのと、仮にできる状態だったとしてついていけるのかどうかテストが必要だと感じたためです。
Application
Graduate Certificate のアプリケーションを出しました。特に特筆すべきような記憶に残っている内容はないのですが、パスポートが数日前に切れてしまっているのですが身分証これでどうにかならないですかねと交渉したところOKでした。
全体の感想
事務系はとても対応が良いしフレキシブルです。例えば2個目の授業は当初CS107を取ろうとしていたのですが、支払い後に気が変わってCS161に変更できないかメールしてみたら快諾ですぐに処理してくれました。 正直学費が授業の質や事務の対応の良さを考慮してもまだ高いように感じるくらいべらぼうに高いので当たり前といえば当たり前かもしれませんが、成績も期末試験後一週間以内くらいですぐ出ますし、授業中の課題の評価やTAによるQ&Aプラットフォームのレスポンスも早いです。 授業取る時には中間・期末を見据えて持ち込みのCheetSheet作成を念頭にメモをとっておくことが大事だと思ったのでここは次回も忘れないようにしたいです。
CS106
前半と後半で少し趣が異なるのですが、私は特に前半がきつかったです。何せ数学が苦手なため…。Kieth の常にパッションに溢れた授業は熱量が感じられてとてもよかったです。試験や宿題で一定以下の成績を取るとその時点で落ちるシステムだったので結構ヒヤヒヤでした。いくら授業が楽しいとはいえ課題の量も多く、かなり時間を持っていかれるので中間試験前後は終わらない宿題と途方もない過去問を目の前に本当に辛くてこんなのいくつもやっていられないから認定証なんてとてもじゃないが無理!!と非常に厳しい心理状態に陥っていました。 なのになぜか期末の勉強をするころには次何取ろっかな…くらいのメンタリティになっていて怖い。後半は比較的得意なトピックだったのか、少し安定して(それでも期末前はまた死にそうになっていました)最終的にはなんとかAが取れてほっとしました。(なおA+が上にあるはずなのですっごくいいとかではないです)内容としてはとても勉強になりました。みっちりやらされる分独学より定着度は確実に高いですね。
CS161
こちらも課題がびっくりするほど毎回平均点ジャストで、こんなの思いつかないよ!!と叫びながらアルゴリズムを考える問題を解いていたのでまた先行き不安でしたが、CS106と違って中間前は宿題がなかったり最後の授業は期末範囲に入らなかったり少し優しい仕様になっていて嬉しかったです。 元々数学記号っぽいものが苦手なのでアルゴリズム関連のことをぐぐっても Latex 仕様の記号が出てくるとそっ閉じしていましたが、この授業を受けたおかげで自らそういうリソースを検索して読みに書かれるようになり成長を感じました。(自分に甘い) アルゴリズムは基本は知っているつもりでしたが、やはり表面的な理解だったなと今になって思いますし、これもCS106と同じで理解度や定着度がかなり進歩した実感が得られました。期末試験だけは平均より少しだけ良く、今回もなんとかAで終わることができました。
今後
Electiveでどれを取るか悩んでいるのですが、どちらにしても内容がヘビーそうな必修のCS107が控えているのでかなり不安です。授業始まるまでにできるだけCourse Reader とか読んでおきたいしC++も少しやっておかないと厳しそう。
今日の学習メモ
- まあまあ使ったことある気がするのにnth-child系はクラス名を起点に使えることを知らなくて衝撃を受けた。いかにこれまで雰囲気で使ってたかがよくわかる…
CSSの :nth-child、:nth-of-type などにクラス名を使う落とし穴 | PisukeCode - Web開発まとめ
- Cではmax()min()といったような関数はない
- Cでは\0を末尾につけることで文字列がそこで終わりになるので、改行コードを削除したいときは改行コードのアドレスを取得してそこにこれを足す
- Cではファイルを開く際fgetsで一行ずつ取得ができるが、このとき格納する変数を先に用意しておく必要があり、さらにそのサイズは事前に決めなければいけないので(理屈的にはなんでも良いが)例えば256サイズの配列を宣言して決めて使い回す
今日の学習メモ
- Boyer-Moore Voting Algorithm 頭良すぎる〜〜〜〜〜シンプルな感じのロジックに見えるけど最初え、なんで動くの?って感じで色々なパターンやってみたら(当たり前だけど)うわ、この場合もここがこうなるから問題ないのか…!の連続
- 授業の影響で pigeon-hole が頭をちらついていた
- Cでは配列変数名のみの場合配列の先頭の要素のアドレスとなるため、argv+1で2つ目の要素のアドレスを指すことができ、*(argv+1)とすることで要素にアクセスができる。もしくは添字で普通にアクセスする。
- C における文字列は本当にただのcharの配列であり、オブジェクトではないため特にビルトインのメソッドなどもない
今日の学習メモ
playwright を起動してサイトを操作するだけで画面テストを生成してくれるらしい。
「UXデザインとは」からはじめる「本流」のUXデザインはじめの一歩 | UXデザイン基礎セミナー 第1回
「ユーザーは自分の欲しいものを知らない」と「ユーザーの声を聞かないUXデザインは存在しない」がとてもわかりやすく説明されている。ユーザーと接触するのは根底にあるユーザーのニーズを掘り下げるため。
今日の学習メモ
https://lopan.jp/about-svg/filter/
SVGにはフィルタというものがあり、自分でSVG内にフィルタを組み合わせたものを一つの要素のように定義してidを割り振る。これをCSSで指定することで指定の要素にフィルタをかけることができる。すごい。ただしフィルタの種類によっては一部ブラウザではサポートがないみたい。
冷静に考えたら当たり前ではあるんだけど、あのスローモーションになる動きはやっぱり誰かがどこかでそうしようと意図的に入れたからそうなってるんだなあと思う。もう当然のように受け入れてしまうけど、最初にこれを思いつくのは簡単では無いだろうな。遊ぶ側としてはむしろそれが普通くらいの勢いだけど、いざ自分が一からゲーム実装したらこの発想がないかもしれない。
今日の学習メモ
Pythonで小数点以下を切り捨て・切り上げ: math.floor(), math.ceil() | note.nkmk.me
符号はそのままで0に近づけて値を丸めたい時はint() math.floor()だと負の時に0から遠ざかってしまうため