CSを独学してみようとしている人へ

この記事は42Tokyo Advent Calendar 2024の22日目の記事となります。もう少しでクリスマスですね。adventって言葉なんかかっこいいですよね。ad(前に）＋vent(来る）＝目の前に現れるで主に大文字のAdventだとキリストの降誕を表すという厨二心をくすぐるWordです。

https://qiita.com/advent-calendar/2024/42tokyo

# 結論
独学しようとするな。しっかりしたカリキュラムがある教育機関に行き、学び、かつ演習した方がいい。

# 結論？
と、上記のような結論になってしまうと誰もが回れ右してしまうため、もう少し詳しく書きます。
この記事は、大学などで専門でCS（Computer science　以下CS）を学ぶことがなかったものの、その後仕事やらなんやらでCSに興味を持った人向けに自分は（まだ入門したばっかですが）こうやっているよ、というお話です。
基本的には本質をつかんだカリキュラムに沿っての勉強と、遊びを両立してけばいいのではという話です。

# 背景
私は、高校～大学と典型的な文系として過ごしてました。高校では歴史が比較的得意、中高で哲学にハマり、大学では逆に科学にはまり、自分の学部で唯一科学的なこともできる言語学を専攻。仕事をするにあたり、初めてプログラミングやコンピュータのあれこれに触れました（大学ではOfficeとかが使えれば基本的に十分だった）

仕事で必要な知識はいやでも身につくものの、付け焼き刃なので必要なくなるとすぐ忘れたり、応用を効かせることができないもどかしさが出てきました。（なんでも大元をわかってないと気が済まないのは、良いようで悪い癖です。少なくともエンジニアリングという工学を学ぶ上では）
有名な書籍を買っては積み、有用そうだと思ったサイトを「あとで読む」リストに入れては忘れという賽の河原のような苦行をしていました。

# 独学vs通学
まず、この話から。

このアドベントカレンダーが「42Tokyo」のカレンダーであることからわかる通り、私は今若干特殊であるものの、教育機関に通いながら学習を進めています。

通学はある程度の強制力が働きます。独学だと、今日はいいかなどとやらなくなってしまう恐れがあるので。
あとは、カリキュラムがそこそこ良いものであると事前に調べがついていれば、日々学んでいるこれは正統なものなのかと悩む必要はなくなります。

逆に言えば、強制力がなくても自制して常に学び続けることができて、専門家（ソフトウェアエンジニア）がそばにいて、いつでも相談できる人であれば、独学の方が自由度が高く、効率的に学べる可能性が高いです。

このいつでも相談できるというのが意外とみそで、CSの独学に限らず一般的な独学の弱点は本質的ではないところにこだわってしまう、わかっている人からみたらそこは適当に流していいよというところにつまづいてそこでやめてしまうというところだと思います。

つまり、そもそも「何を」学べばいいのかわからないってことです。

# 何を学ぶか
近くに専門家がいなければ専門家たちが作ったカリキュラムをみればいいんです。

まず、英語圏ではACMとIEEE-CSがCS関連の専門家を育てるためのカリキュラムを作成するタスクフォースを作っており、公開しています。アメリカの大学はもちろん、日本でも情報系（半導体、数理系ではなく明確にコンピュータ科学系）の学科を持つ大学だとこれに則っていることが多いみたいです。

[ACMの2023年版コンピューターサイエンスカリキュラ](https://csed.acm.org/wp-content/uploads/2023/03/Version-Beta-v2.pdf)
[IEEEの2023年版コンピューターサイエンスカリキュラ](https://ieeecs-media.computer.org/media/education/reports/CS2023.pdf)


また、日本の大学だと東京大学の理学部情報科学科は正統なコンピュータ科学系らしいのでそこのシラバス・カリキュラムは参考になります。
[東京大学理学部情報科学科](https://www.is.s.u-tokyo.ac.jp/student/lecture/)

後は、みんな大好きIPA（ビールでも国際音声記号でもない独立行政法人情報処理推進機構）の応用情報技術者試験のシラバスもいいと思います（こっちは若干ビジネスよりです）

[応用情報技術者試験シラバス](https://www.ipa.go.jp/shiken/syllabus/nq6ept000000149q-att/syllabus_ap_ver7_0.pdf)
応用情報や基本情報は正直勉強が得意な人であれば一通り有名な参考書をみてあとは過去問を解きまくるということをやれば合格できてしまう可能性は十分ありますが、目指すべきは合格というよりもここのシラバスに載っていることであれば「常識だよね」といってかみ砕いて説明、実際に使用できることだと思います。

さて、ここら辺まで書いてきて、若干疲れてきたのと、実際私もまだこの辺のシラバスを調べ始めたぐらいのレベルのためこの記事の真面目な部分はここらへんでいったん終わりにしましょう。進んだら追記するかもです。

# 息抜きの遊び
学びにもなって、かつハマる人はハマるようなゲームがあれば頑張れる。これらが面白かったら関連する領域を書籍などで学んでみると一石二鳥。

https://store.steampowered.com/app/1444480/Turing_Complete/

https://nandgame.com/

論理ゲートNANDから初めてだんだん様々な論理ゲートをつくり最終的にはコンピュータをつくっちゃおうというゲーム達です。パズルゲームだと思えば楽しんで解ける（時間も溶ける可能性はある）と思います。（ちなみにこの42Tokyo Advent calendardでもNANDゲートについての記事がありました。)

https://qiita.com/Icchon/items/1ecf60e3cdc61bab2f5f

Nandgameの方はブラウザで遊ぶことができ、かつ日本語訳が有志の方により提供されているので安心です。
Turing Completeの方はちょうどこの記事を書いていた21日の日にもゲーム実況してる方がいました。他にも多くの方にプレイされているのをYoutubeで探せますのでお好みでお楽しみください。

[【Turing Complete】コンピュータを作るまで出られない部屋 #ch789 【宮乃やみ】](https://www.youtube.com/watch?v=W_QG8xZU_ts)

[情報工学修士号がNAND回路からCPUを作るゲームを実況プレイ【Turing Complete】#1](https://www.youtube.com/watch?v=BQEjdjCXPjA&t=719s)
脆弱性のセキュリティ芸人として有名なアスースン・オンラインさんの実況

# 再度、結論
ま、要はしっかりしたカリキュラムをもとに勉強しながら、ゲームや実況動画見て息抜きしていくと良いよ、という身も蓋もない話でした！
42は学校としては講師も授業もないという異質な感じの教育機関ですが、カリキュラムはよくできているなあと日々再認識することが多い良いところです。興味を持ったら調べてみよう！↓（ダイレクトマーケティング）

https://42tokyo.jp/