エンジニア未経験の学生が実務を通じて学んだ4つのこと

## この記事って何？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682317/4c91b722-6e7b-ceab-1f6f-9f8513dba3a9.png)

エンジニア未経験の学生が、バックエンドエンジニアが入社前に取り組む課題を通じて学んだことを、ひたすら書いていく記事になります。

対象読者としては自分と近い人、すなわち新卒未経験のエンジニアの方を考えています。まだ新卒の私が言うのもおこがましい気はしますが、少しでもこの記事が役に立ってくれたら嬉しいです。

## 自己紹介
私は2023年の10月に、SaaSアプリを開発しているスタートアップに新卒入社しました。現在は、バックエンドエンジニアとして主にRailsを使用した実務に取り組んでいます。

入社前は大学生向けのプログラミングスクールに在籍しており、Swiftを使用してiPhoneアプリを開発したり、JavaScriptを使用してWebサイトを構築した経験があります。ただ上記は主に個人開発でしたので、実務の経験はありませんでした。

さて、入社前の期間に未経験エンジニア向けの課題に取り組む機会がありました。私はバックエンド領域は完全に未経験だったので、初心者向けの教材として知られるRailsチュートリアルを途中まで取り組んだ状態で、その課題に挑戦しました。
## BE課題とは
上記でも記載しましたが、弊社では未経験のバックエンドエンジニア向けに課題を出しています。（以下、BE課題と呼びます）このBE課題の内容ですが、アプリの既存の機能を自分で実装してみようという内容です。具体的には、Railsで以下の機能を持つAPIを実装することでした。

- コメントの新規作成
- 更新
- 削除機能
- アプリに表示する項目の設定機能を実装すること（新規作成、更新、削除機能のミックス）

ざっくりとした内容のみになりますが、基礎的なBEスキルを養うような問題になっていました。そして一度機能を作成したらGithub上でプルリクエストを作成し、他社員にレビューをしてもらい問題なければ次の課題に進むという流れでした。

以下では、このBE課題を通じて、非常に多くの学びが得られたのでそれをまとめてシェアしていこうと思います。自分自身の備忘録という意味もありますが、これから新卒エンジニアとして活動する方に少しでもお役に立てれば幸いです。
## 課題から学んだ4つのこと
### 1. 相談することを覚える
課題を始めた当初はRailsチュートリアルを途中までやっただけの状態で、それ以外はBE領域にはほとんど触れたことがありませんでした。またdockerによる仮想環境の構築も経験がなかったので、「rails consoleってどうやってやるの？」くらいの理解度でした。

今になって思いますが、開発環境やアプリの仕様など自分自身で考えてもどうしようもないところは、すぐに他社員の人に確認をするべきです。（もちろんある程度自分自身で情報収集した後にですが）

私もそうでしたが初心者にありがちなこととして、「自分が考えるべきところとそうでないところ」の見極めがつかず闇雲に手を出して無計画に時間を過ごしてしまいがちです。試行錯誤していても解決できそうにない場合は、区切りをつけて相談するようにしましょう。
### 2. 未知の恐怖には好奇心で立ち向かう
Railsチュートリアルをやったことがある人はお分かりだと思いますが、本チュートリアルにはAPIを活用したアプリケーションの作成方法は解説していません。ですのでここでまずめっちゃ戸惑いました。

「既存の外部APIを使用することはあるけど、API自体を作成するってどういうことだ？？」

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682317/b6a5bc7f-013b-d39b-4fb0-ad9d4f396d89.png)

事前にRailsチュートリアルで勉強したけど、わからないことだらけで当時結構辛かったです。チュートリアルを進めただけでそんなにできるようになるはずはないのですが、これからどれだけ勉強したらこの課題がクリアできるだろうと、ちょっと怖気付いていました。

そんな時に意識したのは、 **「好奇心を持って課題に取り組む」** ということです。ただ問題解決のためだけにコードを調べたり、エラーに対処するだけでは面白みがなく、うまくいかないと次第に苦しくなってきます。

それに人は未知なことに対して漠然とした恐怖を抱くようなので、「わからないことをわからないままにしておく」ことは避けたほうがいいでしょう。

「どうしてうまくいかないんだろう…？」→「何がうまくいっていない原因なんだろう？」
と視点を変えるだけでもだいぶ楽しくなります。

### 3. 信頼できる記事の執筆者を見つけておこう
今はインターネットが普及している時代なので、ググったら大抵のことは出てきます。私もこのような記事に大いに助けられました。ただしこういった一般公開されている記事の中には、正しくないこと、テキトーなことを書いている記事も多くあります。

個人的に大切だと思っているのは、**信頼に足る執筆者を一人でもいいので見つけておくこと** だと思っています。

BE課題の中には、テストコードの設計と作成も含まれていました。私は今まで個人開発しか経験がなかったので、単体テストを作成することは初めての経験でした。

弊社ではRspecを使用しており、当然、Rspec特有の書き方や構造を新たに覚える必要がありました。この時はまだRubyに関しても素人に毛が生えた程度で猛勉強中でした。「もう1つ言語勉強するのかよ！」と冷や汗をかいた記憶があります。

私の場合はRubyのチェリー本の作者でもある、@jnchitoさんの記事にお世話になりました。この人の記事だったら信頼できる！という人を一人でも知っておくと非常に心強いですよ。

### 4. 既存のコードの他の実装箇所を見ることが、一番素晴らしい勉強法である

これは課題を進めていく上で気付いたことなのですが、自分自身が関わってるアプリの他の実装箇所を見ることは効率的な勉強に繋がります。
既存実装を元に勉強することは以下の3つのいいことがあると思います。

1. 自分の実装を既存実装に近付けることができる（コーディング、メソッドやクラスの構造など）
1. アプリの仕様理解に繋がるので、実務で生きる知識が身につく
1. 実装上ヒントになるような部分が多い

私自身も課題を進める上で「自分が実装しようと思っていることって、他のコードで似たようなことやっていないかな」と結構調べていました。関わっているアプリの構成にもよるとは思いますが、意外と同じようなことをやっている箇所は多い上に、知らないメソッドにも出会うことができるので、非常にいい勉強法であると思います。

もしご自身の環境で他の実装コードが見れるのであれば、ぜひたくさん見ることをオススメします！

※既存のコードが必ずしも正しいとは限らないので、理解せずに鵜呑みにするのは避けましょう！
## 未経験エンジニアはとにかく最初わからないことだらけで大変！ただそれでも一つ一つ疑問を解消していくことが大事。

ここまで読んでいただきありがとうございました！

初学者のうちは、プログラミングやフレームワークの学習だけじゃなくて、他のツールやGithubの扱い方なども入ってきて勉強することがたくさんありますよね。

私自身も、正直最初は頭の処理が追いつかずに一つの機能を作るだけでもたくさん失敗して時間がかかりました。

ただひたすら、不明点や不安な点と向き合い、もがきながら取り組んでいるうちに課題も終わりを迎えていました。

色々書きましたが、最後は気合だと思います！（笑）できない自分を受け入れつつも、新しくできるようになる喜びを大切にして共にこれからも頑張っていきましょう。

拙い文章でしたが、最後まで読んでいただきありがとうございました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/682317/915cbce4-e18d-977e-9eab-9b997203a3be.png)