#はじめに
こんにちは。
4月に新卒でイーリバースドットコムに入社した高倉です。
この記事は、私が3ヶ月の研修期間を経て感じたことをアウトプットする目的で書いております。
##研修前のレベル感
私の大学での専攻は機械工学で、授業では軽くプログラミングに触れる程度。
授業以外で個人的に興味をもってプログラミングを勉強し始めたのは大学3年生の秋くらいでした。
YouTubeのチュートリアル動画やUdemyの講座を観ながら、実際にコードを書いて学習をしていました。
入社前に触ったことがあった技術は、以下の通りです。
言語:JavaScript, Ruby, Python, Go, C#, HTML, CSS
ライブラリ・フレームワーク:React, Ruby on Rails
その他:SQL, git, Docker, AWS
##業務内容
新規の業務系バッチ処理機能開発における、以下の工程を行いました。
- 詳細設計
- 機能実装
- テスト(単体、結合)
##使用技術
- C#, .Net Core 3.1
- MySQL 5.6
- AWS(AWS Batch, Amazon Aurora, DynamoDB)
#先輩からの技術的な学び
##パフォーマンスを意識する
Linqでクエリを投げる箇所の実装で、クエリ発行回数を減らすように以下のようにレビューを受けました。
修正前
foreach (data in datas)
{
var query = _sampleDbContext.SampleDb.Add{new SampleType
// 省略
}
query.Context.SaveChanges() //ここでクエリが発行される
}
修正後
var i = 0;
foreach (data in datas)
{
var query = _sampleDbContext.SampleDb.Add{new SampleType
// 省略
}
if (i % 100 == 0)
{
query.Context.SaveChanges() //データ量が膨大な場合の対処
}
i++;
}
query.Context.SaveChanges() //データ量が膨大な場合の対処
それほど多くないデータ量であれば修正前でも問題ないのですが、今回扱うのはかなりの量のデータだったので修正が必要でした。
個人で勉強用に開発をしていたときは動かすことしか考えておらず、このような細かいパフォーマンスの面まで考えることはありませんでした。
しかしこれからは扱うデータ量が膨大なため、余計な負荷をかけない実装を心がけたいと思いました。
##常にテストのことを考えて実装する
DBのカラムに日付を挿入する処理で、SystemのDateTimeを使用していたところ、外部クラスにDateTimeを返すメソッドとして定義し、それを使うようにレビューを受けました。
修正前
var query = _sampleDbContext.SampleDb.Add{new SampleType
date = System.DateTime.Now()
}
修正後
using SystemDate; //外部に定義した自作クラス
var query = _sampleDbContext.SampleDb.Add{new sampleType
date = SystemDate.GetSystemDate() //DateTime.Now()を返すだけのメソッド
}
「正しい日時がDBにインサートされること」のテストを書く際に、修正前だとテスト実行の度にDateTime.Now()は異なる日時を返すのでテストが書けません。
修正後のコードであれば、GetSystemDate()をモック化して指定した日付を返す仕様にできるので、テストが書けるようになります。
恥ずかしながら、テストコードは就職して初めて書きました。
実装時からテストのことも考えていないと後で困るということを学んだので、次に活かしたいと思います。
##使う人のことを考えてログメッセージを作る
修正前
_logger.LogError("APIからの距離データ取得に失敗しました。")
修正後
_logger.LogError("APIからの距離データ取得に失敗しました。、データNo={0}、始点住所={1}、終点住所={2}",
dataNo, originAddress, distinationAddress);
修正前だとエラーは発見できてもどのデータで発生したのかわかりません。
ログの出し方に正解はありませんが、理想はそのメッセージを読んだ人が誰であっても、適切な対処を取れることだと思いました。
#全体的な研修の感想
##入社前に不安になる必要はなかった
新卒一期生かつエンジニアの新卒は私だけだったこともあり、研修や業務についていけるか不安でした。
そのため、入社前に会社で使っている技術を中心にぼちぼち勉強をしていました。
(コロナで卒業旅行などに行けなかったので、時間だけはありました(笑))
しかし、そこまで心配する必要はなかったなと思います。
どれだけ勉強していっても、結局先輩に聞きまくってググり倒していくことになるので安心してください(笑)。
むしろそれが当たり前で、入社してから質問する力を鍛えていく方が重要だと学びました。
とはいえ、会社で使っている技術の基礎だけでも抑えておくと、入社後に圧倒的に楽なのは間違いありません。
もし時間があれば、基礎だけでもやっておくことをオススメします。
##実務的な研修のデメリット
私が行ったような実務的な研修は、体系立った学習をするだけの研修よりも実践的なスキルが身に付くというメリットがあると感じました。
対してデメリットは、先輩社員のサポートがあるとはいえ難易度の高いタスクが渡される時があることです。
初めのうちは「それが自分にできることなのか」という判断は難しいため**「良く分からない所」や「製品の質に直結する」という実装などは、迷わず先輩に聞くことが大事**だと思いました。
私の場合は、周囲の先輩のフォロー&レビューなどもあり、大きなミスは起こりませんでした。
##毎日の充実感
研修といえど、自分が書くコードはお客様が将来実際に使う製品です。
それがなによりのモチベーションになりましたし、エンジニアとして働けているんだという充実感に大きく繋がりました。
学生のときのように自分で勉強するだけの日々では、絶対に味わえなかった感覚です。
#最後に
この記事が、新卒もしくは転職でエンジニアを目指している方の参考に少しでもなりましたら幸いです。