
コンピュータサイエンスを学べるRecursionをやってみた感想(まだ途中)
自己紹介
異業種、Web制作を経て、Webアプリケーションの開発者になりました。開発2年目です。現職では、バックエンド、フロントエンド両方担当しています。
大学は文系学部でしたからコンピュータサイエンスについて体系的に学んだことはありません。
Recursionをやろうと思ったきっかけ
twitterやブログなどを見ると、一定の頻度で「開発者であれば当然コンピュータサイエンスについて学ぶべき」という話を目にします。
私自身、「コンピュータサイエンスを学ぶ方が良い」という意見には賛成で、習得する機会を伺っていました。
"放送大学受講"、"情報系の大学に再入学"、"書籍で学ぶ"、"競プロに参加する"など、色々模索しましたが、なかなかしっくり来る学び方が見つからず足踏みしている状態でした。
そんな中、Recursionを見つけて受講を決めたという流れです。
「Recursion良いな!」と思ったのは、
取っ付きやすそうだけど、内容は結構本格的
コーディング問題があり、データ構造やアルゴリズムを学んだ上でアウトプットできる場がある
という点です。
ここまでの進捗

去年から始めて、メインとなるコンピュータサイエンス初級〜上級まで完了しました。途中、子供が産まれて育児にてんやわんやし始めたので、育児の隙間に少しずつ進めていた感じです。
✅コンピュータサイエンスの基礎 初級
✅コンピュータサイエンスの基礎 中級
✅コンピュータサイエンスの基礎 上級
以下は、今後やりたいコース。
OOP
デザインパターン
データベース
オペレーションシステム
離散数学 I
離散数学 Ⅱ
アルゴリズム&データ構造(開講前)
上記以外にも、フレームワークのコースやチーム開発などもあるようですが、私自身は受講&参加するつもりはありません。フレームワーク(LaravelやReactなど)やチーム開発については、日々業務で触れているため、あえてRecursionで学び直す必要性を感じていないからです。あくまでコンピュータサイエンスを学ぶことを目的としています。
しかし、チーム開発は、実務経験のない未経験の方にとってはありがたい試みですね。未経験の時だったら参加したかったなーと思います。
やってみての所感
コンピュータサイエンスの基礎 初級
流石に初歩的な内容過ぎたので、ざっと読んで終えました。
コンピュータサイエンスの基礎 中級
現役でやっている方であれば、そこまで難しい内容ではないと思います。コーディング問題も特に詰まるような問題はありませんでした。
ただし、”ぼんやりと知っている”レベルの解像度だったものを体系的に学び直せたのは収穫だったなと思います。
◯動的配列と固定配列
私は、主にJavaScriptをメインで使ってきましたが、JavaScriptの配列は動的配列であり、固定配列を使うことはないため(多分)、お恥ずかしながら両者の違いを理解していませんでした。
◯その他
印象に残ったものとしては、再帰、動的計画法、分割統治法などです。
再帰はボリュームが多く、手応えがあったなーという印象です。また、動的計画法、分割統治法については、全く知らない概念だったので「ふむふむ、へー、ほー」と言いながら進めました。
「マージソートは分割統治法を利用していたなんで知らなかった…。」
コンピュータサイエンスの基礎 上級
データ構造の入門、木構造、ラムダ、ソフトウェアテストについて学ぶコースです。
具体的には、連結リスト(片方向リスト、双方向リスト)、スタック、キュー、両端キュー(Deque)、二分木、二分探索木、深さ優先走査、幅優先走査、最大ヒープ、最小ヒープ、ヒープソートなどを実装しつつ、学習して行きました。
データ構造やアルゴリズムについては、苦手意識があったので、データ構造と木構造は結構手こずりました…。
全体を通して
動的計画法、分割統治法、片方向リスト、双方向リスト、スタック、キュー、両端キュー(Deque)、二分木、二分探索木、深さ優先走査、幅優先走査、ヒープ、ヒープソート、デコレータパターンetc…。
上記のような「なんとなく名前は聞いたことあるけど、内容はよくわからない…」ものを1つ1つ習得することができました。率直に「やってよかった!!」と思っています。
実際に実装しながら理解を進めていくので、書籍や動画で学ぶよりも深く理解できたと思います。スタックを実装して学んだら、スタックを使ったコーディング問題をいくつも解いていくような形式で進むので、嫌でも理解が進みました。
私のような「開発の仕事はしているものの情報系の大学を出ているわけではないし、コンピュータサイエンスについては自信無いな」というタイプにはピッタリでした。
副産物:C#力が少し上がった
コンピュータサイエンスのコース内では、主な使用言語としてC++, Java, JavaScript, PHP, Pythonが選択できます。また、コーディング問題を解く時は、C#,Go,Ruby,TypeScriptも使用できます。
私は、C#を使って進めました。一番得意なのはJavaScriptですが、あえて経験の少ない静的型付け言語を選択しました。その方が得られるものも多いと思ったからです。
それなりの量のコーディング問題を解きますので、C#に慣れてきましたし、静的型付け言語への苦手意識も払拭できました。
その他
コミュニティもある
Recursionユーザーは、discordというチャットサービスで展開されるコミュニティに入ることができます。分からない問題などあれば、ここで質問したりもできます。
コンピュータサイエンス上級コースでどうしても分からない問題が出てきた時は、このコミュニティの中でヘルプしてもらいました。とは言っても、自分で質問したわけではなく、同じ疑問を持つ人が既にいたのでそのスレッドを参考にしただけです。詰まるところは大体皆さん似たような箇所なんですね。
とりあえず、一つの区切りとして上級まで終わったので、ここまでの感想をざざっと書いてみました。
以上です!