FLINTERS Engineer's Blog

FLINTERSのエンジニアによる技術ブログ

新卒エンジニアが感じた入社してからの変化と学び

初めまして、今年の4月に新卒入社しました、エンジニアの中村です。

4月から3ヶ月間、研修を受けながらじっくり勉強させていただきました。
入社して3ヶ月で感じた自分自身の変化や学びを共有したいと思います。

自己紹介

経済学部を卒業しており、計量経済学を専攻していました。
計量分析やデータ処理のためにRとPythonをメインに使っていました。

また学業以外では趣味やインターン・アルバイトでRuby(Ruby on Rails)やPythonを使ってアプリケーション開発をしていました。

好きな言語はRubyです。就活生時代はコーディングテストをほぼRubyで解いていました。
好きなエディタはVimです。

もともとScalaとDDDに関心がありチャレンジしてみたいという思いがあったため、その両方を利用している弊社に新卒入社したという経緯です。

入社してからの変化と学び

VimIDE(Intellij IDEA)を使うようになった

学生時代はターミナル&Vimを基本としたハードコアな開発環境を好んでおり、高機能なIDEはなんとなくゴチャゴチャした印象で使いにくそうと思っていたので使用を避けていました。
(大学のJavaの授業でもEclipseを使わずにVimを使っていました。)

しかし弊社に入社してから、JetBrains社製の有料IDEであるIntellij IDEA Ultimateが無料で使えることや、社内でもScalaのエディタ= Intellijという雰囲気があったので、入社を機会にIntellijを使い始めました。

Vimmerの私としては、IdeaVimというプラグインを利用することでvimと同じ操作感でコーディングができるので意外とスムーズにIntellijに移行することができました。
vimのコマンドで文字列置換や検索もできるのでとても便利です。
自分はそこまでカスタマイズしていないですが、vimrcのようにideavimrcファイルを作成することでオリジナル設定も反映させることができるようです。

またIntellijの素晴らしい機能としてコードジャンプ機能があります。
この機能は関数や変数の定義元のソースにジャンプできる機能であり、ScalaJava言語のソースにもジャンプすることが出来ます。
この機能を使えば標準ライブラリの実装や、importした外部のライブラリの実装を即座に見ることができるので言語の学習や初めて使うライブラリの中身を知るにはとても便利です。

このようにIntellijを使うことで、Vimmerの私でもいつもの操作感を損わずに、コードジャンプや補完やデバッグなどのIDEの高機能な機能群の恩恵を利用しとても効率的な開発ができていると思います。

Scalaの楽しさを知る

入社してからScalaというプログラミング言語をがっつり書くようになりましたが、とても書いていて楽しくかつクールな言語だと感じます。
今では好きなプログラミング言語の一つです。

Scalaオブジェクト指向と関数型の両方の性質を持つJVM系言語であり、弊社では多くのプロジェクトで採用されています。

Scalaでプログラミングすると副作用を持たない参照透過性のあるコーディングを自然と意識することになります。 また静的型付けでありながら関数型スタイルの述語関数や型推論によって簡潔かつ明快なコーディングを実現することができます。

個人的にはScalaのメソッド定義(def)やmapなどの述語関数、メソッドチェーンは、Rubyとの親和性も高くすぐに馴染むことができました。
研修と自習を通して、入社して3ヶ月ほどでScalaでの基本的なプログラミングは理解することができたと思います。

参考として、Scalaを学習する上で取り組んだことを簡単に書いておきます。

研修で取り組んだこと

研修中ではScalaの基本文法を学びながら練習問題を解き、CLIアプリケーションの開発やPlay FrameworkでのWebアプリケーション開発までをやりました。
これらの研修では研修担当者から適宜コードレビューをしてもらい、より良いScalaのコーディングを学びました。

また社内で定期的行われる勉強会では、新卒と先輩社員のペアプロ会が開催されました。
内容は一緒に簡単なCLIアプリケーションを作るというもので、私はなんと(!)弊社CTOと一緒にペアを組ませていただきました。
ペアプロでは実際のコーディングの考え方やScalaインターフェイスやメソッドの使い方で参考になる部分がとても多く勉強になりました。

またそれ以外にも社内にはScalaに詳しい方が沢山いるので気軽に質問することができますし、社内共有資料や、Scalaで書かれたプロダクションコードを参考にすることができる環境があります。
そのため「Scalaの基本はわかったけど、じゃあこのユースケースは具体的にどうやって書くの?」といった具体的な実装方法を質問したり調べたりすることが出来ました。

自主的に取り組んだこと

業務外では、競技プログラミングの問題をScalaで解いたり、Scalaスケーラブルプログラミング(通称:コップ本)やすごいHaskellたのしく学ぼう!(通称:すごいH本)を読んだりしてScalaの理解を深めました。

競技プログラミングは手続き型のスタイルで書くのが普通だと思いますが、できるだけループや再代入可能な変数であるvarを使わずに、再帰やパターンマッチ、イミュータブルな変数であるvalを使い、関数型のスタイルでコーディングを試みるのは良い練習になりました。

コップ本は分量が多いためScala学習の初期段階で読み進めるのは大変だと思いますが、ある程度基本を理解してきた段階でもっと詳しく知りたい分野について辞書的に調べるのに使うのはとても有効だと感じました。

すごいH本は、ScalaではなくHaskellの入門書ですが、型クラスや型インスタンスなどScalaでも使われる関数型言語の仕様をわかりやすく解説してくれているのでScala入門者がScalaや関数型の考え方について理解を深めるのにはとても良い本だと思います。

ソフトスキルの重要性

入社後、仕事としてチームで目的を達成するには技術力だけでなくソフトスキルも重要であると改めて感じました。

ここでのソフトスキルはコミュニケーション力、協調性、自発性、リーダーシップなどの目に見えない定性的なスキルを指しています。 特にリモートワークでは各個人がこれらのスキルを持って行動しなければ業務を達成するのはなかなか難しいのではないでしょうか。

ソフトスキルが一番重要になったのは、研修期間の最後2週間に行われたチーム研修でした。

チーム研修では、3人チームで古着を題材したECサイトScala + Play Frameworkでチーム開発しました。要件定義からモデリング、タスク管理、実装、デプロイまで全て新卒主体で行いました。

技術的には0→1でプロダクト開発する流れや、Play Frameworkでの機能開発、AWSでのデプロイまでを体験することができました。

チーム開発ではリーダーという役割はありませんでしたが、webアプリケーションの開発経験があまりないメンバーもいたため、私としては開発を上手く回すためにも経験がある自分自身が積極的にチームのファシリテートやメンバーのサポートしていくことを心がけました。

開発を回すために自分自身が具体的にアクションしたことを今振り返ると、自発的にコミュニーケーションを取ること、定期的なミーティングのファシリテート、コードレビュー、全体の進捗を把握して締め切りを見積りながらタスクを調整すること、次の要件定義や実装のアイデアを考えてメンバーに共有することは出来ていたんじゃないかと思います。

また自分勝手に色々進めるのではなく、自分のアイデアや考えの根拠を説明しながらできるだけチームでコンセンサスをとって進めることを意識しました。

結果的にはメンバー全員が自主性を持って開発に取り組み、一人が一方的に意見を言うのではなく、お互い自由に意見を言い合える雰囲気で開発を計画的に進めることが出来たと思います。

このことから、チームで開発を進めるには技術的な貢献と同等以上にソフトスキル的な貢献が必要であったことがわかりました。

振り返ると、研修とはいえ自分が主体となってチームで一つのプロダクトを作り上げたという経験は一つの自信になりました。
また学生時代からチーム開発において、高いソフトスキル(主にコミュニケーション能力とリーダーシップ)でチームをリードできるエンジニアの必要性はかなり感じていたので、研修で自分がその役割を部分的に担えたというのは嬉しく思います。

主体的にプロジェクトに関わる姿勢は配属後も意識していきたいと思います。

好きなものを極める姿勢

どの会社でも技術的に素晴らしいエンジニアはいらっしゃると思うのですが、弊社も引けをとらず高い技術力を持っていたり、何かしらの強みや専門性を持っているエンジニアが沢山いると入社してから感じました。

また勉強熱心な方が多く、定期的に行われる社内の勉強会やSlackでの雑談でも刺激になることが多いです。

これはあくまで私の個人的な意見なのですが、優秀な先輩エンジニアの方々は業務で利用するかどうか関係なく自分の好きな技術を追求しながら楽しんでいる印象を受けました。

やはり同じ技術でもガリ勉して学ぶのと、好きで楽しみながら学んでいる人とでは技術の習得にかなり差があると思います。(好きでやっている人には努力だけでは追いつけない)

学生生活を振り返ると、私はどちらかといえば研究や仕事のために必要な技術を勉強するガリ勉タイプよりな気がしました。そして、仕事に関係ない技術であっても興味や好きなことドリブンで勉強するという観点があまりなかったかもしれません。

また先輩方を見ていると、それぞれが好きな技術を追求した結果今の仕事に繋がっている部分もあるのかなと感じましたし、それはエンジニアとしては幸せなことだと思います。

私もこれからエンジニアのキャリアの中で、楽しみながら学ぶこと、好きなことを追求していくことを心がけていきたいと思いました。
そして今自分自身が関心があるScala関数型プログラミングについてより深く学んでいきたいと感じました。

最後に

以上、新卒エンジニアが感じた入社してからの変化と学びでした。
研修に携わってくださった先輩方、そして同期に感謝したいと思います。

最後まで読んでいただきありがとうございました。