これまでに独学で学んできたことまとめ

# はじめに
プログラミングを本格的に始めてからそろそろ半年経つので、振り返りも兼ねてどうやって学んできたかまとめてみようと思います。
これからプログラミングを学びたいと思った方、次に何をやるか迷っている方の参考になれば幸いです。
随時更新予定です。
# 目次
* [HTML・CSS(24年4月頃)](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#htmlcss%E3%83%BC%E3%83%95%E3%82%A1%E3%83%BC%E3%82%B9%E3%83%88%E3%82%B3%E3%83%B3%E3%82%BF%E3%82%AF%E3%83%8824%E5%B9%B44%E6%9C%88%E9%A0%83)
* [JavaScript(24年6月頃)](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#javascript%E3%83%BC%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E5%9F%BA%E7%A4%8E24%E5%B9%B47%E6%9C%88%E9%A0%83)
* [C#入門](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#c%E5%85%A5%E9%96%8024%E5%B9%B49%E6%9C%88%E9%A0%83)
* [C#・SQL](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#csql24%E5%B9%B410%E6%9C%88%E9%A0%83)
* [Git・GitHub](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#gitgithub24%E5%B9%B412%E6%9C%88)
* [Unity](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#unity)
* [Arduino](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#arduino24%E5%B9%B412%E6%9C%88%E9%A0%83)
* [Blazor・Azure](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#blazorazure25%E5%B9%B41%E6%9C%88%E9%A0%83)
* [JavaScript(再)](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#javascript%E5%86%8Dtypescript25%E5%B9%B42%E6%9C%88)
* [Vue.js](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#javascript%E5%86%8Dtypescript25%E5%B9%B42%E6%9C%88)
* [バックエンド](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#%E3%83%90%E3%83%83%E3%82%AF%E3%82%A8%E3%83%B3%E3%83%8925%E5%B9%B42%E6%9C%88)
* [Flutter](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#flutter25%E5%B9%B42%E6%9C%88)
* [Go](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#go%E8%A8%80%E8%AA%9E25%E5%B9%B42%E6%9C%88)
* [Rust](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#rust25%E5%B9%B43%E6%9C%88)
* [AtCoder](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#atcoder25%E5%B9%B43%E6%9C%88)
* [基本情報技術者](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#%E5%9F%BA%E6%9C%AC%E6%83%85%E5%A0%B1%E6%8A%80%E8%A1%93%E8%80%8525%E5%B9%B44%E6%9C%88)
* [WSL](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#wsl)
* [C++・Qt](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#cqt)
* [Docker](https://qiita.com/taichi1234/items/9b3574f1ca5765030a2f#docker)
# 本編
## HTML・CSSーファーストコンタクト(24年4月頃)
最初は学校の授業でHTMLをやりました。プログラミング言語ではなくマークアップ言語ですが、ここで始めてVSCodeを使ったのでプログラミングとのファーストコンタクトといっていいでしょう。
`<h1>`とか`<p>`みたいなごく基本的なものを使ってブログ記事的なのを書いてみようみたいな課題をやりました。
文字ベースで何かをデザインするのははじめてだったかもしれません。
## Javascriptープログラミングの基礎(24年7月頃)
その後は、これまた学校の授業でJavaScriptをやりました。もちろんプレーンのJavaScriptで、変数や関数、ifやforといったプログラミングの基本的な概念を身に着けました。
学期末の課題で自由制作がありちょっとしたゲームを作ろうとして全然できなかったのを覚えています...
## C#入門(24年9月頃)
JavaScriptでは配列をやっていなかったので、ここで配列についてやりました。また、型の変換、数あてゲームなどもやりました。
これらはWinformsでやってました（なぜか.NETではなく.NET Flameworkでした）。
## C#・SQL(24年10月頃)
ここまでは学校の授業の範囲でやっていましたが、このあたりから色々調べて自分でやるようになっいてました。
学校の期末課題で自由制作があったので、レジを作りました。
途中でPOSレジ的な機能を増やそうとしてSQLServerに触れました（最初はDBがなにかもわからずにやってました）。
生SQLとEFCore(C#のORM)の両方をやりました。
try-catchによる例外処理やクラスとインスタンスの概念、プロパティとフィールドの違いなどを学びました。主にMicrosoftのドキュメントを読みながらやっていましたが、図書室にあった[パーフェクトC#](https://www.amazon.co.jp/%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88-C-%E6%94%B9%E8%A8%824%E7%89%88-%E6%96%8E%E8%97%A4-%E5%8F%8B%E7%94%B7/dp/4297121999/ref=asc_df_4297121999?mcid=54bb52babdf0345ea5facdeacd3dc04e&th=1&psc=1&tag=jpgo-22&linkCode=df0&hvadid=707442440784&hvpos=&hvnetw=g&hvrand=16799508197553679246&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009307&hvtargid=pla-1258256579462&psc=1&gad_source=1)も読みました。
## Git・GitHub（24年12月）
レジを作っているときに一部のフォルダをまるごと消してしまったことがあり、どこかに保存しておきたいと思って使い始めました。Visual Studioを使っていたので、GitはIDE上で操作できました。
## Unity
Unityも少し触れましたが、作りたいものがあったわけではなかったのですぐに挫折しました。
## Arduino(24年12月頃)
コンピュータはどうやって動いているんだろう？ということに興味を持って図書館で見つけた[PCネット年代記](https://www.amazon.co.jp/dp/product/4434305212/ref=as_li_tf_tl?camp=247&creative=1211&creativeASIN=4434305212&ie=UTF8&linkCode=as2&tag=bookmeter_book_image_image_pc_login-22)を読みました。
初期のコンピュータやネットワーク技術についてある程度イメージをつかめましたが、自分でやってみたいと思いELEGOOの[Arduino入門キット](https://www.amazon.co.jp/ELEGOO-%E3%82%AD%E3%83%83%E3%83%88-%E3%83%AC%E3%83%99%E3%83%AB%E3%82%A2%E3%83%83%E3%83%97-%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB%E4%BB%98-mega2560-Arduino%E7%94%A8/dp/B06XF2HZGT/ref=sr_1_1_sspa?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2RR9Y82A1E20S&dib=eyJ2IjoiMSJ9.nQjnhow2Tympo0sTGEiAmo2NLIxXkXodotXO7v1FZxHjADE_bs1QpTMN0X9etHmw4mf68zDEiJ_ksAEkd_KSUSAg8LwFlUxyrHqpED6iVsK6e8-uFz9W5qxMtXa0kwN8UlTzGhXiI3bTrO4kW3p9Anf0-WWXMyir39EdTnL5-Cy7Rv6hhtFggXgfcZE_kR6hECX9Hm8h4WZUaaSSoH8FngeL6cJmvY9CSQ_i67yJK3Afa67mi9Vm8gWqtWY-05oZNflFE9puUlvd27UeDuek5bHwfYg7sDT4OjP3wdBTzKE.9lBWV-tQ6J0yjs9BWfYltlFw-_Wn5pU879qJRtG3tlw&dib_tag=se&keywords=Arduino&qid=1744609924&sprefix=arduino%2Caps%2C284&sr=8-1-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1)を買いました。
付属のチュートリアルをやり終えたあと作りたいものが思い浮かばなかったので一旦お蔵入りになりました。
## Blazor・Azure（25年1月頃）
ページを増やしていくうちにWinformsの限界を感じ、Blazorに手を出しました。Blazorだった理由は、C#だったのとWebをやってみたいと思ったからです。
Blazorは短期間で挫折したのであまり学べませんでしたが、ローカル以外で走らせてみたいと思ってクラウドに手を出したのでそれについてはある程度学べました。
学校でMicrosoftアカウントを持っていたのでAzureの学生版を使えました。
Azure App Service・Azure Cosmosなどに触れました。
## JavaScript（再）・TypeScript（25年2月）
Blazorは挫折したもののWebをやる気はまだあったので、別の手段を探しました。
Blazorに挫折した原因の一つはBlazorのドキュメント・コミュニティが充実していないことだったので、Webでは王道のJavaScriptでやることにしました。
JavaScriptは学校で少し触れた程度だったので、[MDNのチュートリアル](https://developer.mozilla.org/ja/docs/Learn_web_development/Core/Scripting)をやりました。
## Vue.js（25年2月）
何か作りたくなったので、[読書メーター](https://bookmeter.com/home)的な記録アプリをつくることにしました。
フロントエンドフレームワークを使った方がよさそうだと思ってVueを使うことにしました。
Reactは学習曲線が急といわれていたので選択肢から外しました。
[公式のチュートリアル](https://ja.vuejs.org/tutorial/#step-1)をやって基本を学びました。
## バックエンド（25年2月）
Vueのチュートリアルをやったあと、実際にどうやってWebアプリを作るか調べてどうやらバックエンドが必要らしいということが分かりました。
ASP.NETも一応選択肢でしたが、このころはJavaScriptに染まりクラスベースはイケてないみたいに思っていたのでExpress.jsを使うことにしました。
ExpressはそこらへんのQiitaやZennの記事を見て基本を押さえました。
アプリを作りながら、サーバー/クライアントの関係、HTTP、認証、ディレクトリ構成などについて知りました。
## Flutter（25年2月）
Vueとexpressが両方JavaScript(TypeScript)だったので飽きてきて、モバイル版の記録アプリも作ってみようかなーという口実をつけてFlutterに手を付けました。
巷ではJavaScriptに似ているといわれることがあるようですが、クラスベースだったり静的型付けだったりする点でC#に近い感じがしました。
[Flutterの公式チュートリアル](https://codelabs.developers.google.com/codelabs/flutter-codelab-first?hl=ja)をやりましたが、結局面倒くさくなってアプリは作りませんでした。
## Go言語（25年2月）
何か新しい言語をやりたくてGoをやり始めました。
飽きっぽいですね。
[A tour of Go](https://go-tour-jp.appspot.com/welcome/1)をやって、そのあとはAtCoderを解いたり標準パッケージを読んだりしていました。
学習コストがかなり低い言語だと思います。
## Rust（25年3月）
お蔵入りしていたArduinoで車（モーターカー？）を作ろうとふと思い立ち、C++はあまり好きではなさそうな感じがしたのでRustで書いてみることにしました。
[The Book](https://doc.rust-jp.rs/book-ja/)を読みつつコードをいじって学びました。
Arduino用の設定に関しては[この記事](https://blog.logrocket.com/complete-guide-running-rust-arduino/)を参考にしました。
## AtCoder(25年3月)
このころ作りたいものがあまりなかった（モーターカーはプログラミングというより電子工作）ので、暇つぶしでAtCoderをやってみることにしました。
AtCoder Bigginers Selectionと競プロ典型90問を解きつつ、毎週末のABCに参加しています。
始める前はあまりいいイメージを持っていませんでしたが、始めて見ると考え方が数学に近くて結構面白いです。
## 基本情報技術者（25年4月）
何か形になるものが欲しいと思って勉強を始めました（情オリもありだったかも）。
暇なときに[基本情報技術者試験道場](https://www.fe-siken.com/fekakomon.php)をちまちま進めています。
## WSL
なんとなく始めました。
始めてみて思ったのは、LinuxがWindowsに比べて最も優れている点はパッケージじゃないか？ということです。
もちろんWebサーバや組み込みで使いやすいということもあるでしょうが、Windowsではいちいちブラウザでインストーラをダウンロードしていたのが`sudo apt install`だけで済むのがすごく快適です（WindowsにもScoopはありますが、aptにあるものがなかったりします）。
## C++・Qt
文化祭のステージの照明班でQLC+というオープンソースの照明操作ソフトウェアを使うことになったのですが、機能が多いv5はまだβ版でした。
機能は減るもののバグの少ないv4を使う手もありましたが、v5の機能が魅力的だったのでv5を使うことにしました。
バグや時々ある妙な挙動がそのままだと困るので、自分で直せた方がいいなーと思ってQtとC++を勉強することにしました（QLC+はQtで作られています）。
## Docker
Qtの環境構築をしているうちにパッケージの依存関係がごちゃごちゃになってきたので、まだ早いかなーと思いつつもDockerを導入しました。
必要なものしか入っていないと安心感がありますね。
## おわりに
だいぶ迷走していましたが、全体的に基本を押さえた後は自分の手で作りながら学んできたな、というのが振り返ってみての感想です。
そして、作りたいものがない時は長続きしなかったので、新しい言語やフレームワークを学ぶなら「何のために学ぶのか」が明確だった方がいいと思いました