はじめに

ドリコムで1ヶ月インターンシップをさせていただいた2018年卒 小川涼精です。現在は慶応義塾大学 情報工学科に在学中です。
大学ではC, Javaなどを触り、これまではUnityでC#を用いた開発をしてきました。Life is Tech!という、中高生にIT教育を届けるという場所でメンターをさせていだきながら、プログラミングに携わってきました。

インターンシップに参加させていただく前に、Rubyで本格的な開発を行ったことはありませんでした。

サーバーサイドのインターンシップに参加させていただいたのは、自分の中にある技術に対するインデックスを大きくしたいと思ったからです。

今回は、その経験を多くの人に共有したいと思い、記事を書かせていただきました。

インターンシップに期待していたこと

当初私は、会社という大きな枠のなかでエンジニアとして働くことがイメージできていませんでした。

よって、私は、インターンシップにおいて、二つのことを期待していました。
イメージをしっかりと持つということと、自分が手を触れていなかったサーバー側を学ぶことです。

インターンシップで行ったこと

社内サービスの機能改善、機能追加

まずは、社内で社員の方が使用しているサービスに触れさせていただきました。

完成したプロダクトである、社内サービスに手を触れさせていただくことは、既にあるコードを読むという点で勉強になりました。それに加え、新しいことも習得していけるため、かなり大きな力になりました。

また、先輩の社員さんに、データベース設計を意識をしてみたいと伝えたため、最初は想像で、次にプロダクトのコードを見ながら正確にユースケース図を書きました。

以前は、開発をする際、一人で進めていたためため、UML設計などを意識したことがありませんでした。よって、最初にデータベースを考えて構築していくことの大切さ、意義を学びました。

特に、UMLを設計し、書き出す作業は、他のイベントにも活用できました。
具体的には、複数人でのUnityを用いたゲーム開発ハッカソンにおいて、チーム内で意識統一をはかり、結果として優勝しました。

インフラの構築

インターン期間中、社内サービスのサーバ移転を行うことになったため、担当させて頂く事になりました。会社サーバからAWSへの移行でした。

ここでは会社でのインフラの利用の仕方に焦点を当てました。実際に触れて、sudo権限の付与の可否、また付与の範囲について学びました。

AWSへの移行は、EC2とS3を使うことにしたため、データの保存方法の変更を行いました。
そのため、既存データの取り扱いについても注意をはらいました。つまり運用の間に生まれたエラーも考慮しました。例えばセーブしたデータの一部欠損などです。

一般的なCentOSサーバでの作業だけでなくAWS特有の知識を深めることができ、良い経験となりました。

学生からエンジニアへの転換

以降、タイトルにもある「学生からエンジニアへの転換点」について書いていきます。

まずは、学生とエンジニア、各々に求められる力に対する考えを書いていこうと思います。

学生に求められていること

学生に求められていることは、三つあります。

  • 様々な技術に触れる
  • 一つのプロダクトを完成させる
  • ハングリー精神

具体的には、以下のようなことです

可処分時間を有効に利用する

学生は自由な時間が多くあり、その時間をいかに活用するかが重要です。

現在、ネットや書物など、物事を調べる方法はたくさんあります。しかし、ある程度の基礎知識なしには、情報を得られません。
よって、時間を有効に利用するためには、事前に多種多様な技術に触れておくことが不可欠であり、それは自分の中に大きな単語帳を作ることなのです。

一つのプロダクトを完成させる

これは、優先して取り組むべきことです。
就職活動の場で、自らの作品として提示できる上、実際に就職した際、その経験は大いに役立つと思います。

エンジニアに求められているもの

次に、エンジニアに求められているものについてです。

  • 他人の時間と自分の時間の両方を大切にする
  • その実装を行う理由に対する明確な意識を持つ
  • プロ意識を持つ

進捗管理をしっかりと行う

会社という枠組みの中で働くには、必須のことになります。

自らの進捗管理は基本です。かつ、それを同じグループ内のメンバーに共有していくことが必要となります。
「一日の進捗の予定、業務時間中の細かい進捗、予定と結果」といったことを共有します。

他人の時間と自分の時間の両方を大切にする

自ら考慮し、答えが出ない場合は周りの力を借りることが大切です。

インターン期間中に以下のようなことをコメントしていただきました。(引用です)

「Google Brain(機械学習研究部門)の15分ルール:問題にハマった時、1)最初の15分は自分で解決を試みること。2)15分後もハマってたら必ず人に聞くこと。1を怠ると他人の時間を無駄にし、2を怠ると自分の時間を無駄にする。」(引用元)

わからないことを悩み続け、結果何もできなかったという事態は絶対に避けなければなりません。就業時間中の自分の時間は、会社の時間でもあります。

意図が見える実装を行う

これは、プロジェクトの管理者の立場で考えるとわかります。
プロジェクトの管理者は、往々にして、管理のみが仕事でなく、能力が高いがゆえに、他の業務に並行して、担当しています。

具体的には、MR(マージリクエスト)、PR(プルリクエスト)に対し、内容を把握し、コードを読み、マージするかしないかの判断をしてくださっています。
その際、意図が不明確なコードの提示は、管理者の時間を無駄にします。
コードの質やレベルとは異なり、実装の意図・考えは、基本です。(もちろん良いコードが求められてはいるのですが)

良いプルリクについては調べると様々な記事が見つかりますが、私が実践したのは以下の二点になります。

  • 「Before / After のスクリーンショット」を載せる
  • プルリクの本文を「問題点、方針、影響範囲」など項目ごとに書く

プロ意識

プロ意識とは、「周りの人々を意識する」ことです。
例えばコードであれば、自分だけが読めるものでなく、他の人にもすぐに読めるコードを書くということです。
これに関しては「リーダブルコード」という本を読むことをお勧めします。

学生からエンジニアに転換していくには

自分の環境を理解する

開発している言語の歴史やOSの歴史、利用している言語の利点・欠点を意識をすることが必要です。
やりたいことのためには、今よりも適した環境が、他にあるかもしれません。
よって、視野を広げることが大切です。

最小単位を意識することも必要です。例えば、Railsでサーバーを建てるには、 rails server ですが、rubyでは、より簡単にサーバーを建てることが可能です。
大きな枠組みに縛らないことで、より良い発想や革新的なものを生み出せるのです

マインド面において

繰り返しになりますが、周りの人を意識することが必要です。
他人も巻き込んだプロダクト制作を行うと良いと思います。

技術の習得は、エンジニアになってからも常に求められます。
学生からエンジニアになってまず求められるのは、マインド面の変化です。その点を先に意識すべきです。

技術面において

gitの知識は絶対に役立ちます。

なぜなら、会社で採用しているGitLab, GitHubを介して、他の社員とMR、PRのコミュニケーションを取ることが求められるからです。

このことに関しましては、私の前にインターンシップをされていた (小口君の記事) に詳しくまとめてありますので、こちらもご一読ください。

まとめ

学生のうちに、できることは全部してしまいましょう。
インターンシップには絶対行くべきだと思いますし、そのためには自分から行動していくしかありません!
勉強会にどんどん参加するなど、起こした行動の数だけ未来は広がります。
私もこのインターンシップの経験を生かし、もっともっと行動していきたいなと思います!

新卒採用チームより

小川くん、1ヶ月間お疲れ様でした!
持ち前の理解力と物おじしないコミュニケーション力で先輩からいろいろ吸収・成長できたみたいでよかったです。
エンジニアとして働くことについて考える材料になったら嬉しいです。

ドリコムでは現場で働くエンジニアのリアルな声がわかる学生向けイベント「エンジニアmeetup for student」を実施しています。
次回開催は10/12(水)。エンジニア志望の学生の皆さんはぜひエントリーしてみてください!
https://drecom.snar.jp/jobboard/detail.aspx?id=K5lolNcmW5A