えんぴつぶろぐ

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

2021年転職と学業と育児の振り返り

2021年もう終わっちゃいましたが、転職と学業と子供のことについて書きます。

TL;DR

  • 転職した。
  • Ubieに入社して半年経った(別記事)
  • UoPeopleでは21単位取れた。
  • 子供3歳。今が一番かわいい。

転職

やはり2021年の一番のイベントは転職だった。
2月頃から本格的に転職活動を始め、3月末で終了した。
9社応募して結構大変だったので少し詳しく記録を書いておくことにする。

応募した会社

  • エンジニアとして、より成長できそうな会社
  • 情報発信を積極的にしていたりとカルチャーが魅力的な会社
  • 海外事業をしている、もしくは英語を使うなど職場環境がグローバルな会社
  • リモートワークがメインなど子育てしながらでも働きやすい環境

をピックアップして9社ほど応募した。

やったこと

ポートフォリオの作成

一からデザインしたい気持ちもあったが無限に時間かかりそうなのでテンプレートを探しアレンジした。
ネット上で配布されているテンプレートはjQuery+Bootstrapのものが多く、さすがにフロントエンドエンジニアとしてjQueryポートフォリオを提出するのはマイナスになりそうと思い、Nuxt.jsでほぼ作り直した。

職務経歴書(日英)の作成

職務経歴書をアップデートした。
また、英語でのレジュメ(職務経歴書)の提出を求められたのが1社あった。

UoPeopleのキャリアコースを受講した際、レジュメを作成してクラスメイト同士でレビューするという課題があり、そこで用意したものがあったのであまり時間をかけずにすんだ。

フォーマットについては、その授業で紹介されていた、IT系職種のレジュメの各種サンプルが揃っているサイトを参考にした。

技術課題

数ページのフルスタックWebアプリケーションを作るという技術課題がある企業がいくつかあった。
設計から画面構成の検討、技術選定、バックエンドの実装、フロントエンドの実装、テストコードの実装、ドキュメントの作成までのセットを2社やった。

フルタイムで働きながら転職活動をしていたので作業時間を確保するのがめちゃきつかった。
バックエンドど素人で、なにかと調べながら進めてたので余計に時間がかかっていたと思う。

けど一人でバックエンド含めてアプリケーションを作るという経験はかなり久しぶりだったのでとても良い経験になった。
1つはNext.js+Firebase、もうひとつはフルスタックTypeScriptフレームワークのfrourioでNext.js+Prisma+fastify+MySQLという構成にしたが、frourioの開発体験がめちゃよかったのでまた使いたい。

英語面接の準備

事前のカジュアル面談などで「英語での面接があるからよろしく!」と教えてくださったところが何社かあったので、震えながら準備をした。
(事前に知らされずにサプライズで英語だったところもあった)

自分はアメリカのオンライン大学UoPeopleに入学できる程度の読み書きの英語力 はあるが、大学の授業はすべて非同期でしゃべる機会は一切ないし、英語の勉強もしばらくサボっていたのでリスニング・スピーキング力が壊滅的だった。

オンライン英会話で、エンジニアリングのバックグラウンドがありそうな先生を選択して面接のロールプレイをお願いしたり、毎日スピークバディを使ったりして練習をした。

短い期間だったので焼け石に水だったと思うが、少なくとも当日何も言葉が出てこず詰まる、ということは防げた。

「面接官が英語話者なので英語で質問するけど、日本語もある程度わかるから日本語を使ってもOKだよ」
という企業も多かったので、技術的な質問など込み入った話題では日本語を使わせてもらうこともあった。

コーディングチャレンジ対策

オンラインコーディングテストやライブコーディングがある会社がいくつかあった。

久しぶりにAtCoderなどので競技プログラミングの典型問題を解いて肩慣らしをしたが、全然数はこなせなかったため
「あ!これ進研ゼミでやった問題だ!」
なんてことはなかった…。

アルゴリズム力ではなく、ライブラリなしでフロントエンドのUIを実装するタイプのテストもあり、フロントエンドエンジニアのスクリーニングとしていい問題だな〜と思った。

結果

  • カジュアル面談 たくさん
  • 応募 9社
  • 内定 6社
  • お祈り 3社

気になっていた会社さんにたくさんお話聞かせてもらって悔いのない転職活動ができた。
会っていただいた企業様には本当に感謝しています。

転職後の仕事

迷った末Ubie Discoveryにジョインすることにした。
入社エントリはこちら。

note.com

上の記事に書いてあるように「楽しい・快適・働きやすい環境で最高です」っていうのは入社半年経った今もそう。
実際どんな仕事をしたのっていうのをちゃんと書こうと思ったけど書いてたら4000字くらいになりそうだったので別の記事を追って公開することにする。

学業

オンライン大学UoPeopleに入学してもうすぐ2年経とうとしている。

この記事はちょうど1年くらい前に書いたもの。

empitsu88.hatenablog.com

2021年は以下のコースの単位が取得できた。

(リンクがあるものをクリックするとコース感想記事に飛びます)

これまでのUoPeople関連の記事はこちら

さすがに転職活動中は休学したけど、それ以外の期間では細々と履修し結果、21単位が取れた。
今履修中のComputer Systemsも来週の最終試験をすっぽかさなければ単位は取れそう。

これで取得した累計単位は78/120
そしてCGPAは今の所3.96/4.00なので褒めてください。

大学でのコンピューターサイエンスの学習って必要だった?

「ソフトウェアエンジニアにコンピューターサイエンスや数学の知識は必要か?」みたいな話題がネット上で定期的に炎上するけど、個人的にはUoPeopleで学習を始めて本当によかったと思っている。
これは自分が、WEBフロントエンドという特定の領域でこれまで長く仕事をしていて他の領域の業務経験があまりなかったから、という理由もあると思うけど、自分がやっている領域が全体の中でどこに位置するのか、自分が触っている技術が歴史の中でどのような変化をたどってきたのかをしっかり知ることで世界の見方が変わってくる気がする。

転職してフロントエンドエンジニアからソフトウェアエンジニアになって、バックエンドもフロントエンドも触ってデプロイもするようになってそれは余計に感じる。

新しい領域(私の場合バックエンドやインフラ領域)について取り組む際、基礎を知らないまま場当たり的に学ぶのと、知った上で取り組むのではキャッチアップ速度も理解度も全然違うんじゃないかな。
(自分は他の人と比べるとキャッチアップの速度は遅いのですが、自分の中で比較したときの話です、念の為…)

業務に役立ったコース

それに業務に役立つコースもたくさんあった。

データベースのコースを取っていたおかげで、転職後にクエリ書いたりDBいじるときにびびらずにすんだし
Programming1, 2のコースでJavaを嫌ってほど書かされたおかげでKotlinも抵抗なく書けるし
プログラミング言語比較論で命令型言語と非命令型の比較をやったおかげで、触ったことない言語を学ぶ時も「おなじ命令型でスクリプト言語だから大丈夫やろ」みたいに心理的ハードルが低くなりそうだし
同じくプログラミング言語比較論で関数型について知ったおかげでReactの設計思想も腹落ちするし
データ構造のコースは、抽象構文木(AST)を扱ってEslintのルール作ったりBabelのplugin作ったりするときに役立ちそうだし
TypeScriptの型パズルは完全に集合論なので離散数学でちゃんと理解ができたし
統計学のコースを取ったおかげで、社内のデータアナリストの話が1ミリだけ理解できるし

体系的に学んだことで、connecting dotsがあらゆる場面で体感できている。

そういえばこんな資料も今年書いてました。
「業務に役立つ」とかいって卑近なことしか書けてないので、卒業する頃にはもっと説得力のある例が出せたらいいな…。

empitsu88.hatenablog.com

アウトプットとフィードバックの大切さ

昔々に基本情報技術者試験応用情報技術者試験の勉強はしていて、情報技術者としての最低限の俯瞰的な知識は持っていたつもりだったけど、
膨大な範囲を短期間で学習したせいかよく理解もせずに暗記で覚えてしまっていた部分もあったし、選択問題で正解するだけではなく人に説明できるほどそのトピックを理解できていたかというかなり怪しかった。

UoPeopleだと、

アカデミックな文献を読んだあと自分の言葉で概念を説明して、
それがクラスメイトにレビューされて、
プログラミング課題もこなして、
演習問題を解いてっていうのを毎週やりつつ、
更に中間試験と最終試験をパスして、

というプロセスを踏んでようやく単位がゲットできるので本当にありがたいなと思う。
自分の場合は、インプットだけでなくアウトプットとフィードバックがないと物事の理解ができないと本当に感じている。

育児

娘は3歳になりました(今年4歳)。

平易な言葉で喋ればなんの問題もなく会話のキャッチボールができるし(舌っ足らずで何言ってるかわからないときもあるが)
以前言った言葉やお約束をちゃんと覚えていたり、
ひらがな、カタカナもだいぶ読めるようになってきて人間の知識の吸収の速度に驚かされる。

数の概念も理解してきて日々成長を感じる。

最近はフリック入力キーボードでのひらがな入力を試みており成功率が上がってきているのでびびっている。

今年行ったところ

今住んでいるところはチャリ圏内であれば大きな公園がいくつもあることに気づいたので休日の外遊びの選択が広がった。
3歳になって公園の遊具とかも使えるものが多くなってきたので、アスレチックや巨大滑り台などでも遊べるようになって子供も楽しそう。

このままコロナが落ち着いてくれれば、屋内施設にももっと連れて行けるんだけど…。

娘の可愛い言動集

毎回言ってる気がするけどまじでこれ↓で、3歳になって赤ちゃんぽさは流石になくなってきたが、言動が面白すぎるし、佇まいも表情も頭のフォルムも赤ちゃんのときとは違う可愛さがある。
まじで可愛いの最高記録を常に更新し続けていて「今」が一番可愛いから安心するんだ、過去の私よ。

ここからは娘の可愛いエピソードをひたすら貼ります。
可愛いので見てください。

娘の今後の人生について考える

3歳になって会話も流暢になり、好みや性格もはっきりしてきたせいか、
「今後もこの子が幸せにのびのびと人生を楽しむにはどうサポートしたらいいだろう?」
っていうのを最近めっちゃ考える。

子供は親の所有物ではなく独立した個人であるので、本人としての意思を尊重するのは当然。
とはいえ子がもう少し成長して、一般的にリスクが高いと言われる進路や希望を言われた場合、監督責任がある親としてどう声をかけようかな、というのを最近はとても考えている。

たとえば

「整形したい」
「AV女優になりたい」
パパ活で生活しちゃダメなの」
「小学校に行かず顔出しYouTuberになりたい」

というようなことを言われた時どう声をかけようか…
というのを脳内シミュレーションしている。

今の所の解としては

  • なぜそうしたいのかを聞く
  • 聞き出した課題に対して、その解決策が適切なのかを一緒に考える
  • 提示されたオプションのリスクとリターンをどう認識しているかを確認する

とかかなあ

あとは、娘がもう少し大きくなる頃までには、日本のジェンダーギャップ指数が先進国ワーストである点やITエンジニアの極端な男女比が改善されてるといいな…というのを思っている。

しかし乳児だった頃に比べると、自分が子に対してイライラしたり叱ったりすることがすごく多くなってしまった…
言葉が通じて会話ができる分、期待してしまうのかもしれない。

アンガーマネージメントをちゃんとできるようになりたい。

今年

  • UoPeopleはこのままのペースだと卒業まで時間がかかりすぎるので、Sophiaなどからの単位移行も活用して効率よく進めたい。
  • 仕事は、引き続き残業時間を抑えつつ時間単位の生産性を高めて高い成果を挙げられるようにしたい(そもそもあんまり残業をすると学業だけじゃなく育児も生活も崩壊するし)
  • フルリモート可の会社になったので(出社推奨日は月数回あるが)都内から離れてもいいからもっと広い家に住みたい。アウトドアレジャーに行きやすい環境に引っ越したい。というのを最近はずっと考えている

今年もよろしくお願いします。

UoPeopleでComparative Programming Languages(プログラミング言語比較論)を修了した

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

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

はじめに

プログラミング言語パラダイムの変化を追いながら、命令型言語と非命令言語(関数型や論理型など)の特徴を学び比較を行うコースです。

各言語の歴史や特徴だけでなく、コンピューターシステムのアーキテクチャコンパイルの仕組みなども触れるので、今までのCS系コースの総復習的な内容だと感じました。

なお、提出する課題の量は他のコースと比べるとかなり少ないのでいくらでも手を抜けるコースとなっております。

主な学習内容

(長いよ!)

最近こちらの方の記事がバズっていましたが、チューリング機械や正規言語、文脈自由についてUnit2で触れたので「あ!これ進研ゼミでやったやつだ!」となりました。

zenn.dev

課題について

他のコースでは存在するWritten AssignmentやProgramming Assignmentが、このコースではなんと一切ありません🎉🎉🎉
シラバスには「Written Assignmentを提出」と書かれているUnitがありますが多分誤植です。
コード書いて提出させるような演習的な課題もないので理論重視のコースのようです。
(提出が求められない任意の演習は少しだけありました)

Reading Assignment

提示されている読書課題の量は多めなので、きちんと読もうとするととても時間がかかります。

多いときだと

基本のテキストブック 1~2章 + 記事やPDF 2~3個 + OptionalのURL 5個 + ビデオ教材 4本

という感じです。

Optionalな文献にはしれっとプログラミング言語チュートリアルAPIリファレンスが提示されてたりするので、全部読むのは無理大変だと思います。
資料はデッドリンクになっているのも多かったですが、わからないところは日本語の記事を検索したりして学習したりしていたので特に支障はありませんでした。

尚、要点が一番まとまっているのはLearning GuideのIntroductionとVideo materialsだったので最初にこちらを見ておくと理解しやすいと思います

Discussion Assignment

課題が少ない分、 Discussion Assignmentの配点は重めです。

「XXX型言語のXXXという特性について例を提示しながら説明しなさい」
「XXXの言語とXXX言語を比較しなさい」

みたいなシンプルな問いが出されます。

リサーチが必要なお題もいくつか出されますが、ぐぐればすぐわかるものばかりなので、そんなに難しくはないと思います。

私は優しいクラスメート・インストラクターに恵まれたようで、

  • 見出しなどをつけて読みやすくする
  • サンプルコードは簡単なものでもいいから必ずつける
  • 参考文献は学術機関(大学とか)がサイトに載せている資料など、できるだけ信頼できそうなものを使う
  • 締め切りギリギリに提出(水曜日夜〜木曜朝)

という感じでやっていたらほぼ毎回10点がもらえました。

Self-Quiz

Self-Quizは他のコースとは異なり、テーマ別に2〜5本くらい出されますがそれぞれ5〜10問くらいなのでそこまで量は多くないと思います。

Unit3のSelf-Quiz一覧

プログラミング言語の開発者の名前を答えるような暗記問題や、単語をタイプする問題も出ます。
Java, Perl, Haskell, Prologなどの言語のSyntax問題も多く出るので、Self-Quizで困らない程度の基本的な文法は覚えておく必要があります。

Learning Journal

Learning JournalはUoPeopleのよくある振り返り日記です。
要件を満たしていれば、満点はもらえると思います。

Graded QuizとFinal Exam

Final Exam、Graded QuizはSelf-Quizにはない問題も多かったです。
単語の穴埋め問題も出されるのでスペルミスにも注意する必要があります。

最終試験は「正解2つあるように思えるけどどっち!?」という悩ましい選択肢が多く、何問かミスりました…😇
(いまだ何が正解だったのかわからない…)

役立ったもの

日本の大学が公開しているプログラミング言語論のスライド

日本の大学・大学院が公開しているプログラミング言語論の講義資料はUoPeopleのこのコースとかぶっているトピックも多く、大変参考になりました🙏

筑波大学Programming Languages and Methodology

東洋大学2014年度 プログラミング言語論

JAISTAutomata and Formal Languages in Nomi

2進数,10進数,16進数相互変換ツール

2の補数表現を計算する問題がいくつか出るので、手で計算したものの確認に使わせてもらいました。

2進数,10進数,16進数 相互変換ツール

Online Perl Interpreter

Perlのコード片を読まされる問題がちょくちょくあります😨
入門サイトを読むだけでは難しかったので以下のエディターで手を動かしながら覚えました。

Execute Perl Online (Perl v5.24.2)

Haskell

関数型言語Haskellのコードリーディングの問題もちょくちょく出ます。
こちらのサイトの説明がわかりやすかったです。

Functional Programming 2018 Fall

Haskell CapmNetwork

Prolog

Prologもがっつり覚える必要があるため、こちらの書籍とOnlineエディタが非常にありがたかったです🙏

http://www.k-techlabo.org/www_prolog/prolog_main.pdf

SWISH -- SWI-Prolog for SHaring

学習時間

学習に費やした時間は6〜11時間程度でした。

週毎の学習時間

成績

Final Examで結構間違えたのでヒヤっとしたけどなんとかA (GPA 4.0)が取れました🎉

f:id:empitsu88:20211107010145p:plain

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

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

+前の大学から単位移行した45単位

計78単位

UoPeopleでIntroduction to Statistics(統計学入門)を修了した

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

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

はじめに

Rを使いながら記述統計学と推計統計学の基礎を学ぶコースです。

言葉の定義や概念をきちんと確認しつつ、Rを使って様々な演習をこなし、Discussion課題で実世界の事例に適用する…といったバランスの取れた構成になっていて良いコースでした。

↓のようにつぶやきましたが、MATHコースの割に計算はほぼRを使うので数式は簡単な公式を覚えるくらいでOKでした。

また、必修コースのせいかプログラミングに不慣れな学生も多いため、Rのセットアップや使い方については手厚いサポートがありました。

学ぶ内容

  • 記述統計学、確率・推計統計学の違い
  • 母数、パラメーター、統計量
  • 度数、相対度数、累積相対度数
  • 平均、中央値、分散、偏差、パーセンタイル、四分位範囲、外れ値
  • 確率変数、標本空間、期待値、確率
  • 母平均と標本平均、母分散と標本分散の違い
  • 離散型確率分布:二項分布とポワソン分布
  • 連続型確率分布:一様分布と指数分布
  • 確率密度関数
  • 正規分布、標準正規分布、正規近似
  • サンプリング分布

課題について

Assignment

Assignment(他のコースで言うWritten Assignmentに相当する)は隔週なので課題の量はそこまで多くないと思います。

問題数が多くて面くらいますが、簡単な計算問題や語彙の確認がほとんどです。

また、あるUnitのAssignmentで、Rでなく手計算で求めることが必須の問題があったので注意してください。
Rと手計算で結果が変わります。
指示には「Rを使わないで自分で計算してね!」と書いてあるのですがわかりづらいので、その週のCourse Forumは「Official Solution間違ってるでしょ!?」と書き込む生徒が続出していました…。

Self-Quiz

いつもテキストをざっとしか読んでない状態でSelf-Quizに臨んでいたので初回は全然わからず量も多く、毎回泣きながら解いていました。
ですが人間不思議なもので何度も同じような問題を解かされるのでだんだん覚えてきます。

計算は基本的にRを使いますが、mean()やsd()、var() などの関数を使わずに平均や標準偏差を算出することを求める(度数分布表や確率分布表のみが提示されているなど)問題が多いので、平均や分散を求める様々な方法をおさえておきましょう。

Discussion Assignment

とある分布を使用する事例を挙げるとか、実世界の課題を統計学的に考えた時にどう考えますかみたいな問が多いです。

私は毎週水曜日夜や木曜日ギリギリに投稿していたせいか、雑に書いても10点をもらえることが多かったです。
ただこのコースでも、例を挙げるだけでなく自分でシミュレーションしてRコマンドとヒストグラムも貼るようなガチ勢は若干名いました。

(↓はUnit8だけガチ勢として参加したときのツイート)

Learning Journal

Learning Journalは振り返り+簡単な演習の形式が多かったです。
私のインストラクターは、Rのコマンドと出力を貼らないと減点してくる方だったので、とにかく試したコマンド(テキストやSelf-Quizと全く同じやつ)や学んだことのSummaryを貼りまくったら満点をくれました。

Graded QuizとFinal Exam

Graded QuizがUnit3, Unit6、そしてUnit8と3回もあります。
ですがSelf-Quizの数値違いのような問題が多いです。
Final ExamはSelf-Quizにはない問題が多かったですが、Self-Quizをちゃんと理解していれば解けそう問題でした。

スコアはGraded QuizとFinal Examの比重がかなり高いので、とにかく手を動かしてRの演習をこなしSelf-Quizを理解するのが大切かと思います。
Discussion AssignmentとAssignmentのGrading Weightsはそれぞれたった5%でした…。

役立ったもの

Annotated bookとNote

コースではテキストのAnnotated bookとNoteが配布されます。

Annotated bookは「ここが大事!」とか「ここの数式は覚えなくていい」とか書かれているので基本的にはこっちのテキストを見ておいたほうが効率的かもしれません。

Noteは結局最後までほとんど見ませんでしたが、テキストをまとめ直したり様々なRのサンプルコードが載っているので理解を深めるのに役立ちそうです。

完全独習 統計学入門

このコース受講中にちょうどDMMブックスの70%オフセールがやっていたので参考書として買いました。   「超入門書」と銘打っているため、敢えて確率について触れない方針の本だそうです。
標準偏差や平均を算出する様々な方法やサンプリング分布について易しく解説されていました。

www.amazon.co.jp

統計WEB

確率分布(二項分布や指数分布など)についてはこちらのサイトがわかりやすく解説しておりお世話になりました。

bellcurve.jp

データ分析のための統計学入門

Twitterでシェアしてくれた方がいたのですが、「データ分析のための統計学入門」の日本語訳がなんと無料で公開されており、こちらも役立ちそうです。
私は余裕がなくてまったく見れなかったのですが、
目次を見る限りUoPeopleのコースは第4章あたりまでの内容となります。

学習時間

学習に費やした時間は6〜10時間程度でした。

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

成績

今期とった3コース中、かけた時間は一番少なかったですが、Self-Quiz周回のおかげで幸いにもGraded QuizやFinal Examで満点がとれたのでA+が取れました。

f:id:empitsu88:20210609233541p:plain

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

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

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

UoPeopleでDatabases(DB設計・SQL)のコースを修了した。

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

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

はじめに

このコースはDatabasesについて、DBMSの種類や基本的な用語の定義から始まり、情報モデルについての概念をおさえつつRDBMSの設計プロセスを実践を通して学ぶコースです。
SQLについてもANSI/ISOの規格に基づいて、基礎的な部分は網羅的に触れます。

今期は3コース同時受講(統計学Java、Databases)していましたが、このコースが一番楽しかった気がするし実務ですぐ役立ちそうです。

ちなみにコースを始める前の自分のレベルは

  • ORMなら使ったことある
  • 簡単なSQLなら覚えてる
  • 正規化はなんとなく知ってる

みたいな感じです。

学習内容

  • DBMSの種類
  • DBにまつわる様々な職種
  • 3層のデータモデル
    • 概念モデル/論理モデル/物理モデル
  • 各種用語の定義と使いわけ
    • Entity set/Relation/Table
    • Entity/Tuple/Row
    • Attribute/Column
    • Relationship set/Primary key/Foreign key
    • Relation degree
    • Relationship cardinality
  • 各種制約
    • Entity integrity constraint
    • Referential integrity constraint
    • Semantic integrity constraint
    • Domain constraint
    • Null constraint
    • Unique constraint
  • ER図
  • 正規化
    • 関数従属
    • Closure Set
  • SQL
    • DCL
    • DML
    • DCL
    • 各種データ型
    • Aggregate function
    • Nested Selects
    • Sub Queries
    • Unions
  • アプリケーション・DB設計プロセス
  • トランザクション
  • アプリケーションとの結合

課題について

Programming Assignmentがほぼ毎週(Graded Quizある週以外)出るので課題の量は結構多いと思います。
Learning JournalでもUnitの振り返りに加えて演習やSQL課題が出ます。

内容としては

概念モデルの作成、
要件定義、
ER図の作成、
正規化の実施、
実際のDatabaseの構築、
SQL演習

などです。

序盤の設計では、Attributeの名前や型をどうするかなど迷うかもしれませんが、 事前にある程度の採点基準が提示されるのでそれに従っていれば細かい所まで気にしなくても大丈夫でした。

環境構築について

ご覧の通り、後半のUnitから実際にSQLを書く課題が出てくるので、なにかしらのDBの環境構築が必要です。
ただコースからはあんまり親切な案内は提示されないです。(MySQL Workbenchなどへのリンクが貼られているのみ)

また、最終週はSQL ServerまたはOpenOffice Baseの構築が必要だったので、Macの自分はDocker for Macを使ってSQL Serverを使えようにしました。

このあたりの記事が参考になります。

How to Install SQL Server on a Mac | Database.Guide

が、自分のMacbook Air M1では上記で紹介されているMicrosoft SQL Server が起動せず、
M1対応のDocker for Mac + Rosetta + --platform optionを使ってもだめだったので
以下で紹介されているAzure SQL Edge というimageを使ったらうまくいきました。

Docker Express: Running a Local SQL Server on Your M1 Mac | by Maarten Merken | Geek Culture | Medium

Discussion Assignment

Discussion課題は

このDatabaseの設計にはどういう問題がありますか、
この設計プロセスで気をつけることはなんですか、
正規化のProps/Consはなんですか、
このSQLはどうやって使い分けますか、

みたいな感じでした。

Unit1から例として実際のDatabaseを構築してER図を提示したりする猛者がいました…が、そんなことをしなくても普通に高得点はもらえるかと思います。

役立ったもの

IntelliJ IDEA

UoPeopleをやっている人はJetBrains Student Pack(学生向け無料ライセンス)が使えます!!

この学生向けライセンスを申請すると、IntelliJ IDEA UltimateやWebStrom、PyCharmなどがダウンロードできます。
ただし、教育・学習目的にしか使えないライセンスになっており仕事などには使えないので注意してください。

JetBrains Student Pack(学生・教職員向け無料ライセンス)と申し込み方法 | JetBrains Blog

私はIntelliJ IDEAでUoPeopleのJavaやDatabasesのコースを進めていました。
IntelliJ IDEA UltimateならDatabaseの閲覧・操作に便利なプラグインがビルトインされています。

Database tools and SQL | IntelliJ IDEA

ER図作成に便利なデータベーススキーマ機能があるCacoo

IntelliJ IDEAのDatabase Toolでも Diagrams > Show Visualization... でDatabaseからER図が自動生成できるのですが、鳥の足記法ではありません。

「鳥の足記法でER図を作成しろ」という課題があったので、その際はIntelliJからスキーマCSVでエクスポートし Cacooにインポートして生成していました。

データベース設計図 | テンプレート | オンライン作図ツール Cacoo(カクー)

ただ、なぜかインポート時にエラーが発生しrelationshipの部分が期待通りにインポートできなかったため欠けた部分はCacoo上で書き足していました…。

オンライン作図ツールdraw.io

また、https://draw.io というオンラインツールでもER図が作成できました。
こちらはインストラクターも紹介していました。

Flowchart Maker & Online Diagram Software

達人に学ぶDB設計 徹底指南書

参考書としては「達人に学ぶDB設計 徹底指南書」が役立ちました。 DB設計の基礎や正規化について例を出しながら丁寧に解説しており、今回のコースではUnit1〜3くらいまでの内容にベストマッチしています。

書籍の後半はパフォーマンスについてやバッドノウハウ・グレーノウハウの具体例が主ですが、このあたりの内容もDiscussion Assignmentで自分の考えを補強する時に役立ちました。

www.amazon.co.jp

Graded QuizとFinal exam

Graded QuizはSelf Quizの内容 + アルファって感じでした。
Final ExamもSelf Quiz / Review Quizにない問題が多く、ふわっとした問が多くて答えに迷うことが多かったような…。

成績

インストラクターがめっちゃ厳しい人でLJでなかなか満点をとれなかったり、 ピアからつけられた微妙な点数(全問正解しているのに85/90点みたいな)に対してGrade Appealしても受け付けてくれなかったりでちょっとモヤりましたがA-で着地しそうです。

f:id:empitsu88:20210608221934p:plain

学習時間

学習時間は8〜15時間/週くらいでした。
Discussion Assignmentで例を提示すべくDatabaseを作成したりと割と頑張ってしまったので、もう少し効率よく進められた気がします。

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

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

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

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

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

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

社内勉強会で離散数学の論理学入門について話した。

先日、社内のエンジニア部門で「自分の好きなテーマで発表する」という社内勉強会があったので

「よっしゃ、UoPeopleで離散数学(MATH1302)のコースもやったしその中でも特にプログラミングと関係性の深い論理について話すか〜」

と数理論理学入門についての資料をつくったの公開します。

タイトルで大層なことを言っている割には入門的なことしか書いてません…。

いつかは集合論SQLやTypeScriptについてもまとめてみたいですね。

プロフィール

ABOUT ME

Flash Developer → Technical Director → Frontend Engineer → Software Engineeer

2018年に母になりました。

SNS

ARTICLES/SLIDES

RADIO