約4ヶ月半振り返り

4ヶ月半ふりかえり

約4ヶ月半振り返りについて


8月1日からプログラミング学習を始めて、4ヶ月と20日が経過しました。(142日間)

現在の状況としては

  • 最終課題の必須実装が完了(アプリ説明文は未)

  • 追加実装の一部であったAWSのS3とEC2の実装が完了(これはずっとやりたくてワクワクしていたので先に実装した)

  • 2/5を最後にメンターさんに聞けなくなる

という状況です。


ここまでの振り返りと、現在の恵まれた環境で出来るだけ知識・技術を吸収するための優先順位を考えたいと思います!

  1. 学習時間の振り返り

  2. 最終課題の振り返り

  3. これからの優先順位

大きく3つの順番でお話していきます。


(1)学習時間の振り返り

142日間で取り組んだ内容・時間は、以下の通りです。(12月20日(日)時点)

学んだ内容 時間
HTML 26時間15分
CSS 66時間10分
Ruby 46時間10分
GitHub 3時間00分
Heroku 6時間00分
JavaScript 44時間30分
Ruby on Rails 898時間15分
SQL 8時間15分
セキュリティ対策 7時間00分
予備知識 5時間20分
AWS 25時間15分
合計 1136時間10分


プログラミング学習を出来なかった日


142日間のうち、プログラミング学習が出来なかった日は合計8日間ありました。

出来なかった日に何をしていたか振り返ると、

  • なぜプログラマーになりたいのか等の将来像や、日頃の考えについて言語化

  • 学習の振り返り・計画立て

  • 履歴書の作成

  • 眠すぎて寝てしまった

という理由でした。


現在は「とりあえず15分プログラミング学習をする」という目標でやっています。
目標が小さいと取り掛かりやすいのと、やり始めると意外と時間が経って集中しているためです。
反対に「○時間やる!」と設定していた時もありましたが、
プログラミング学習がだんだん義務のように思えて楽しめなくなったので自分に合わずやめました。
たまに眠すぎて寝てしまうことも許容して、これからも続けていきたいと思います。


勉強時間を記録していて良かったと感じたこと


客観的にどれくらいどこの学習に時間をかけているのか把握できたので、データで自分を励ますことが出来ました。
具体的に言うとJavaScriptの学習を始めた頃、Railsとの繋がりが本当に訳わからなくって落ち込んだのですが、 記録を見たら勉強時間が全然違うので「JavaScriptもちゃんと向き合えば大丈夫、わかるようになる」とデータのおかげで出来ない自分を受け入れることが出来ました。
(受け入れたら、理解が進んだ気がします✨)
また記録していたため「あともう少しやろう」ともモチベーションにもつながっています。


(2)最終課題振り返り

cherry-2020.hatenablog.com

この時の振り返りからの差分で考えたいと思います!

3ヶ月半時点で取り入れたかった知識と、そこから前進したこと

  • 環境変数などのOSの知識
    >>AWSやPAYJPのおかげで少し深まった(ほんの少しだけ)

  • 環境構築、バージョンに対応できる力
    >>未

  • GitHub(イシューを作成したり、ブランチを作って、コミット・プルリクエスト・マージ・プルしたりすることは理解。GitHubを使って他のアプリケーションと連携させることや、コードを公開している人ものを自分に取り入れたり、きっと便利な機能が色々ありそうだけどわからない)
    >>嬉しかったのが「Faker」のGitHubから自分で取り入れたいコードを引っ張ってこれたこと!そして出たエラーについてイシューで良い評価をもらっているところから解決策を見出せたこと。最終課題に入る前と比べると、READMEに書いてある様子(コマンドをうって環境構築するのかな、イシューではみんなで発生した問題共有とその解決法載せているのかな等、目がちょっと慣れた)

  • Herokuなどのデプロイ方法(1回しかやっていなくて口で説明できない)
    >>ログインしたり、マスターに反映させてからデプロイしていくことを理解出来た。あとマイグレーションファイルを変更した時は、Heokuをつけてmigrateなど。

  • README(取扱説明書なので、わかりやすく相手に伝えるには大事だと思うが書き方が理解しきれていない)
    >>全く理解できなかったところから「README」を通して誰に何を伝えたいのかを書くと知れたことが大きかった。

  • リファクタリング(引き出しが少ないため、全体の構造をみてこことここをくっ付ければもっとスマートになるなというレベルに達していない)
    >>ルボコップを知れたのは大きかった。リファクタリング力はまだまだ足りていない。

  • データベースをインポートする力・エクスポートする
    >>未

  • Docker(これは面白そうだからやってみたい)
    >>未


最終課題で新しく学んだこと

  • PAYJPの実装(トークンと秘密・公開鍵を活用して実装する流れを知れた)

  • ActiveHash(今後変わらないであろう都道府県や、発送日数などをデータベースを作らずにデータを取ってこられる実装方法を知れた)

  • フォームオブジェクト(attr_accessorでカラムをキーとして、ひとつのフォームから各データベースに保存する実装を知れた)


最終課題で手こずったこと(自分の知識がまだまだ浅いと感じたところ)

  • DB設計
    >>いざ、テーブルや構図に落とし込むのが難しい!!!と実感。

  • if文(条件分岐を実装するためのビュー・コントローラー)
    >>「ログイン中だったらこうする」「出品者だったらこうする」というようなif文のネストの実装が下手くそだと気づいた。またリファクタリングの観点から「if文のネストは見辛いかな?」と実装と、可読性で悩んだところでもあった。ビューにおけるif文だけでなく、コントローラーにおいてURLを直接入力しても表示されないよう、工夫するのが難しかった。(ビフォーアクション・他のコントローラーをインスタンス変数に定義するタイミング・リダイレクトtoでもまた条件分岐・・・😅笑)

  • ストロングパラメーター(パラムス)
    >>トークン全然運ばせてくれなかった!!しかし、このおかげで、permitmergeの理解が深まったり、フォームオブジェクトとの関連性、コントローラーにおけるPAYJPのプライベートメソッドの定義方法の理解が深まった。

  • ネスト
    >>「商品ありきの関連性の時にはネストする」などルーティングでネストしないといけない時とそうでない時の違いを知れた。(全部関連している?!と思ってしまっていた)

  • リファレンス
    >>マイグレーションファイルに記載するリファレンスキーがかなり重要な役割をしていると感じた。具体的にいうと、「参照」するので、リファレンスさせたいのであれば、それより先に参照先のテーブルを作らないといけないとか、ビューやコントローラーにおいて他のテーブルであっても呼び出せるのはリファレンス設定のおかげなど。


以上です!

カリキュラム通りにコマンドを打ったりコードを書いたりするのではなく、どうやったら実装できるかヒントだけで考えながら書くコードはめちゃくちゃ楽しかったです。

また、プログラミング学習のコツも掴めてきました。
(1)とりあえず手を動かしてコードをかく、コマンド打つ
(2)(新しい概念の時は)ツリー図とマインドマップを組み合わせたような形で紙に書き出して、どういう構造しているんだろうと繋がりをみる(ちょっとでもわからない単語出てきたらぐぐる
(3)ブログでアウトプット
という方法です。
細かい部分は覚えていなくてもこういう繋がりだったと理解につながっている気がします!



(3)これからの優先順位

まずは、この機会に追加実装の中身をざっと確認しました☺️


追加実装の内容(各ミニアプリあり)

  • コメント機能の実装

  • ウィザード形式の実装

  • SNS認証によるログイン機能の実装

  • 複雑な検索機能の実装

  • タグ付機能の実装

  • パンくず機能の実装

  • クレジットカード決済機能(ユーザーに紐付け)

  • エラーメッセージの日本語化(チャットアプリに追加実装)

  • プレビュー機能の実装・複数枚の画像投稿の実装

どれもめっちゃ楽しそうです〜😂笑 (知識の引き出しにしたいものばかり)



そこから決めた優先順位

(1)一通りミニアプリを作って実装方法を理解する(個人アプリのためのインタビュー・DB設計等を並行)
👉12月29日(火)締め切り

(2)個人アプリを作る。
👉1月11日(月)締め切り(基本実装)

(3)(1)で学んだことを「フリマアプリ」あるいは「個人アプリ」に反映させる。
👉1月17日(日)締め切り


注:(3)については、(2)を進めた結果、カリキュラムにない(やったことない実装)を取り入れたい場合、そちら優先でもOKにする。

以上です。


ブログで宣言することによって、やらざる得ない環境を作って進めます💪


読んでくれてありがとうございました!