nagumoのエンジニア学習帳

プログラミング学習で学んだことなどをアウトプットしていきます。

プログラミング学習6ヶ月くらいの経過報告

はじめまして、nagumoです。

前回の記事から5ヶ月くらい経っていたので半年という節目に経過報告の記事を書いておこうと思います。

↓前回の記事

nagmo.hatenablog.com

学習状況

自分でもビックリするくらい学習を継続できています

スクールやそこで知り合った人との交流や単純にプログラミング自体が楽しいなどいろんな要因のおかげな気がします。 体感だとここ半年でやらなかった日はなかったんじゃないだろうか

GitHubの草

スクールのカリキュラム的な部分では

HCのカリキュラムの進捗

公式サイトに公開されている表でいうとだいたいこんな状況です。 赤がすでに終了した部分、青が現在進行形で取り組んでいる部分になります。

ちなみに前回の記事時点で⑥HTML&CSSまでは終わっていたので、

⑦Docker〜⑩Ruby on Railsまでがこの期間で取り組んだ内容になります。(だいたい600hくらい)

それぞれの学習について

Docker

dockerは個人的にとても理解するのが大変だった記憶があります。

最初はイメージとコンテナがあまりにも腑に落ちなくていろんなネットで色々な解説などを見たのですが、イメージというものが現実の物質に例えにくい概念なこともあってとても苦労しました。

その他にもdockerよりdocker-composeの方で苦戦しました。yamlファイルの記述もそうですし、バインドマウントなどのデータの永続化の部分もあまりすっと理解ができなくてchatGPTと永遠に壁打ちなどを行って学習していました。

環境構築では、RailsのイメージがdockerHubでは7はおろかめちゃめちゃ古いverで止まっていたので自分で構築する必要があり大変でした。

また、スクールのインプット教材以外にも以下のような書籍などを読み、自分なりに理解を深めました。

自分で環境構築しろと言われるといまだに自信はないですが、自作サービスなどを作る際にはdockerを利用して開発できるようにしようと思います。

Ruby

スクールに入ってはじめて本格的にプログラミング言語のカリキュラムに突入したので、寿司職人に弟子入りしてから初めて寿司を握らせてもらえるときのような喜びがありました。

基本的なインプットを済ませたあとはアウトプット課題に取り組むわけですが、 そのときに、「日本語でやりたい操作を自分の中で考えてそれをできる関数などが存在するかを調べる」みたいなやり方をしていました。

例えば 「果物の一覧が入った配列があり、aに代入されてるものが果物かどうかを調べたい」のようなときに配列の中にaが含まれているかを調べられないかな?のように考えて、 includeというメソッドを見つけてきてそれを使って実装する みたいな感じです。

結果的にこのやり方がたまたまプログラミング初心者にはオススメのやり方だったぽく、割とすんなり課題を進められました。

オブジェクト指向を用いてプログラムを作るという課題では、そもそもオブジェクト指向自体を知らない状態からのスタートだったため、結構時間がかかりました。

特にオブジェクト指向を解説しているサイトだと題材の役割があまりにもハッキリしていて、オブジェクト指向を理解することはなんとなくできたのですが、実際のコードで書くときはオブジェクトごとに綺麗に役割が分かれているパターンが少ないためそこでも苦戦しました。

このときにスクールに在籍している現役エンジニアの方がコミュニティ内で勉強会みたいなものを開催してくれていて、色々知識の補強をさせていただきました。

なんだかんだ全てのRubyのカリキュラムを終えるのに1ヶ月くらいかかりました。

SQL, DB設計, REST

SQLはprogateでやったことがあったのですが、SQLが使えるというのは既存のもう構成が決まっているテーブル操作が行えるという感じで、実際にこのテーブル構成などはどうやって決めているんだろうとprogateをやっているときの疑問がDB設計の学習で解消されて良かったです。

個人的になぜだかDB設計の学習が楽しかった記憶があります。

RESTに関しては当時はなんの話だかあまりよくわからずに学習していました。 その後のRailsで点と点が線でつながったような感じです。

Ruby on Rails

実際にWebアプリを開発するとなるとフレームワークを使って行うことのが主なことや、RubyといえばRails的な部分も感じていたのでとても楽しみにしていました。

インプットを半月くらいで終わらせて、そこからはアウトプット課題に取り組みました。

ECサイト課題

最初にECサイトを作る課題に取り組みました。

実際に作成したECサイト

今までも独学でCRUDの簡単な掲示板などは作ったことがあり、そのときは実際に世の中にあるサイトとのあまりの差に何も感じなかったのですが、 この課題で作成したECサイトでは

  • TOPページ
  • 管理者ページ
  • 購入画面
  • 購入完了メール

など一連のECサイトに必要な機能を実装したため、この課題を通して初めてプログラミングできるかもという実感が湧きました。

また、個人的に苦戦した部分が

「ActiveStorageを利用してクラウドストレージに商品画像を保存する」

という実装で、こちらが全然うまくいかず画像が表示できないまま10日間くらい毎日調べ続けてやっと実装できました。

twitterクローン

次にTwitterのクローンアプリを作りました。

有名サービスのクローンはハンズオン教材なども溢れていて、取り組んでいる方も比較的多いと思いますが、スクールの課題では「ここはこういう感じで実装してください」のような機能要件?だけになっていて、あとは自身で調べながら実装するため、ハンズオン教材とは比べ物にならないくらい難しかったです。

実装としてはツイッターの基本的な機能を作成しました。おすすめ欄のようなアルゴリズム的な部分は実装していません。

https://twitter.com/nagmo01

(ちょくちょく進捗を呟いてたのでよければ探してみてください)

こちらでは

  • deviseでのgithub認証機能
  • 通知機能のテーブル設計

の2箇所で結構苦戦しました。

この課題で基本的な機能だけにはなりますが自分で1からtwitterを作ることができたため、かなり成長を感じました。

逆に、実際に自分が作ったものと本物のtwitterはアプリとしてあまりにもかけ離れていたため、世界的なサービスは本当に良く作られているなぁとも思いました。

そんなこんなでRailsの課題を終えました。

多分EC課題で1.5ヶ月、Twitter課題で1ヶ月くらい取り組んでいたと思います。時間でいうと300hくらい?

上記の2つの課題からは機能実装→PR作成、コードレビューというサイクルで行っていたため、メンターのryoさんにはお世話になりました。 この部分に関しては独学だと経験できなかったであろう部分だと思います。

現在

で、現在javascriptの学習を進めています。 rubyしか書いたことがなかったため、えっこんなに書きづらいの?と最初は思ってしまいました。

その他

学習外のことでは、コミュニティ内での交流が増えました。discordで雑談部屋が存在するのですが、夜とかは暇なので人がいるときは結構な頻度で行ってました。周りから見るとあいつどんだけ暇なんだ...と思われてた可能性は高いです。(まあ本当に暇なんですが...)

個人的なことでいうと退職した直後にスクールに入って学習を始めたので最初の頃は比較的時間があり進捗もかなり良好だったのですが、なんとなくアルバイトでもした方が良いかなと思い始めたのが個人的にはあまり良くなかったです。

自分のような初学者はとにかく量だなーと再認識しました。

まとめ

さすがにこの半年間で学習自体の習慣化はできたんじゃないだろうかと思いますので、このまま止まることなく進んでいきたいです!

また技術への関心が以前より増してきて、あれこれやりたいなーという気持ちもあるのですが、 今後の方針としてはこのまま学習をある程度進めていってシングルページアプリケーションくらいまで学んだら転職活動をしようかなーと思っています。

とりあえずReactというワードを学習を始めた頃からちょくちょく目にしてたのでこのあとに取り組むのが楽しみです。