アラフォー既婚社会人のプログラミング学習方法
先週から私が取り組んでいる学習方法について紹介したいと思います。参考になれば。
※Dockerのイメージをビルドするのにすごく時間がかかるので、その間に書いてます。
目的と期日を明確にする
以下のように設定しました。
LaravelをDockerを使ってAWSにデプロイすることで、DockerとAWSのスキルを身につける。期限は11/9まで(11/10がスクール発表会のため)
ポイント
「デプロイする」をゴールに起きましたが、どちらかというと「AWSとDockerのスキルを身につける」に重点を置いています。
これはデプロイできなくても、その過程でスキルが身についたら、目的達成と言い訳するため。
また期日を決めることで、日々集中して学習できるのと、11/10からチーム開発カリキュラムが始まるため。
学習方法を決定する
以下のように決めました。
- サイトによるdockerの学習(入門 Docker)
- 書籍によるdockerの学習(Docker/Kubernetes実践コンテナ開発入門)
- ローカル環境にdockerでlaravel開発環境を構築(webで調べる)
- 書籍によるAWSの学習(Amazon Web Services 基礎からのネットワーク&サーバー構築)
- AWSにデプロイ(webで調べる)
学習する上で意識したいこと
1.短い間隔で復習を行う(40秒勉強法)
Daigoさんが進めていた学習法。40秒にはこだわらず、復習する回数を多めにするイメージで
2.朝の通勤時間中に前日の復習を行って、その内容をツイッターでつぶやく
朝の隙間時間でひたすら思い出して、知識の定着を図る。
3.サイトと書籍による学習は最低限にする
技術の概念や用語、全体フロー、枠組みを理解したら、コマンドの使い方や細かいオプションは暗記せずにどんどん前に進む。
4.誰かに説明することを意識しながら学習する
学習内容を誰かに説明するつもりで勉強する。
この時、書籍に書いてある内容を暗記するのではなく、自分のことばに変換して理解することで「理解している範囲」が明確になる。
この時よくわからないカタカナ語や英単語は言葉の意味をしっかりと調べておく。
5.全体の流れと関係性の理解を重視する
3でも書きました。ここの処理は調べればすぐ見つかるので、スタートからゴールまでどんなプロセスを踏む必要があるかを理解することを重視。
例えば、dockerで言えば
- dockerfileを入手して(作成して)
- imageをビルドして
- containerをランする
という大きな流れは覚えておいて、各プロセスで打ち込むコマンドまでは暗記しない。
6.環境構築時は自分が何をしているのかなるべく理解する。
サイトに書いてあるコマンドをただコピペして、はい終わりではなく、そのコマンド実行が全体プロセスの中のどこで、コマンドを実行することで何が起きるのか理解する。
この時も自分のことばで何が起きているのか説明できるようにする
7.ブログで情報発信
余裕があれば、自分の理解をテキスト化して、ブログ等で発表する。
この時文章の体裁等にあまりこだわらないようにする。今回の目的は「AWSとDockerのスキルを身につける」こと。
うまくいかなかったときにやること
1.問題の切り分けを行う
どこまでがうまくいっていて、どこからがうまくいっていないかを明確にする。
今つまっているところで例にあげると
- イメージからコンテナを作成するところまではうまくいっている(確認方法:docker container psで動作している)
- コンテナ(プロセス)にアクセスする時、エラーとなる。
- エラー内容からホスト名の指定が間違っていると想定。
2.問題解決策を考える
今回で言えば以下のような解決アプローチを考えました。
- Mysqlの最新バージョンでうまく動く設定を試す。
- Mysqlのバージョンを下げて安定運用できるものを試す。
- Mysql以外のイメージを使う(postgresql等)
まず1のアプローチ(ホスト名を正しく設定する)で以下のように試しました。
3.アプローチ1
・Mysqlのコンテナにアクセスする時のホスト名を指定するファイルを見つける(.envと想定)
・ホスト名を何に変更すれば良いか調べる。
・指定するホスト名はdocker-compose.yml定義されているらしい(色々を試す→うまくいかない)
・変更内容が反映されていないかもしれないので、コンテナを削除→再作成を行う(うまくいかない)
・Mysqlに接続してマイグレートするためには、権限の付与が必要ということがわかる。少し調べて時間がかかりそう(理解が難しそう)だったのでアプローチ2を試すことにした。
2のアプローチ(Mysqlのバージョンを下げる)を試してみる。
4.アプローチ2
・Mysqlのバージョンを8.0系から5.0系に落とすため、バージョンを決定しているファイルを探して、変更する。
・現状のイメージを削除する。
・イメージをビルドしなおして、コンテナをランしようとするとコンテナが起動後、すぐに停止してしまうようになった。
なぜ起動後、すぐに停止してしまうか原因を調べる【今ここ】
5.煮詰まってきたらほかのことをやって気分転換。
・気分転換にRails復習のため、自分の理解をまとめてブログにアップする。
・Html/cssで格好いい見た目のデザインを作る。
うまくいっていないときに考えること
・うまくいかなくてラッキー!立ち止まっていろいろなやり方を調べて知識が増える。
・うまくいく方法を探しているときの知識の定着は通常の勉強の3倍(根拠はない)
・いろいろ調べた内容はブログや情報発信のネタとしても使える。
・これがお金をもらって期限を決められた仕事だったら今以上にプレッシャーを感じていたはず。誰に迷惑をかけるわけでもない今行きづまって、失敗できて本当に良かった。ラッキー!
・うまくいかないってことは新しいスキルを身につけて、成長しているってこと。
・うまくいかなくてイライラしたり、こんちくしょーって気持ちは筋トレした後の筋肉痛みたいなもので成長には不可欠。
参考
勉強方法を考える上で参考にしたyoutube
だいごさん
とださん
かつまたさん