オンライン開発インターンに2週間行ってまいりました!

前書き

10月に入ってからの2週間、某IT系(東証一部上場)企業でインターンしてまいりました!
バリバリ業務をこなしていたので、社名は出さない条件でブログを書きます!

どんな内容

インターンシップ生1人にメンターさんが1人つきます。
プロジェクトチームにジョインする形で毎日の会議も参加します。
自分が参加した開発プロジェクトはWebアプリ開発で、
言語はTypeScript(Express+Vue)+環境はDockerでした。
他メンバーは機械学習関係をしていたようです(自分の研究に近い)。
あと最終日には発表が待ってます(オンライン)

楽しかったです!今までのインターンでもTOP1、2を争うくらい。

コミュニケーション

メンターさんとはslackでやり取りしますが、
実は社内でもかなり優秀な方だったらしく、
自分がslackに呟きをするとすぐに駆けつけて、詰まってる点を一緒に解決してくださいました。
slackで分報チャンネルを作ってそこに自由に備忘録なり趣味なりつぶやけて、
自分は結構有効活用できた方だと思います!

インターンシップ生とのコミュニケーションは正直あまりなかったです。
ただイベント行事や懇親会などで他の部署の社員さんとは交流できました。
勉強会やTechイベントに積極的な会社でしたので、
今後も何かしらの形で関わっていきたいと思います。

初めての体験

チーム開発は以前のインターンシップで同世代の仲間と経験済みです。

melheaven.hatenadiary.jp

ただバリバリのエンジニアとの開発は初めてで格の違いを見せつけられました(そらそうよ)

Gitlab

Gitlabでプロジェクトのソースコード管理をしているようですが、
Githubを使っていれば特に問題がないように感じました。

以前のチーム開発インターンシップではGitでかなり苦しめられましたが、
今回のインターンシップではConflictやエラーが発生しないように、
自分たちでGitlabの仕様をカスタマイズしているようでした。

  • CI/CD機能で投げたPushが正常にビルドされるかどうか
  • Issueをタスク単位で設定して、Issueごとにマージリクエストを投げたり
  • 作業中のマージリクエストはマージでできないようにする機能
  • WikiやSnippetなどの文書保存

ミーティング

毎日のミーティングは15分程度。
オンラインで昨日までにした内容と本日進めていく内容を確認。
週初め月曜には先週やった事と今週進める事、プロジェクトタスクの進捗状況確認、
Y(やった事)W(わかった事)T(次やる事)の確認。

新人エンジニアの日常

自分のいた部署では新卒エンジニアの方がいました。(多分同い年?)
彼は小規模なプロジェクトの開発リーダー?として任されており、
彼を中心に機能実装を進めていく感じでした。
本人曰く「追い詰められることはあまりない」

社内技術ブログ記事作成や昇級審査などでエンジニアとしての給料も上がっていくようです。
(多分今の自分では一つ目も受からない・・・)

開発

開発はオンラインですが、繋がっているコミュニケーションはslackのみ。
あとは自分の部屋でソースコードと格闘です。
詰まった時はメンターさんがslackで教えてくださいますし、
本当に詰まってどうしようもなくなった時はTeamsでペアプロペアプログラミング)で助けてくださいます。
おかげさまで進捗は生まれました。

学んだ事

技術面

Node.js・TypeScript・Docker・Vue・Express・HTTP・Binaryの扱い方・APIの叩き方・OAuth技術

アウトプットと伝え方

いくら考えても分からないことは仕方ないので、メンターさんに聞く。
ですが重要なのはメンターさんにどう伝えるかです。
インターンシップ後半くらいから、

  • 今取り組んでいる事
  • 問題として詰まっている事
  • 自分なりに理解している事・解釈・考え
  • 理想の目標

を書き出して、slackに貼っていました。
これでメンターさんにとっても「インターン生が何を考えているのか把握しやすくなったし、成長を感じた」との評価をいただきました。
特に自分の解釈や考えを述べる事で、「こいつも色々考えてるな(間違ってるけど)」と思われたかもしれません。
あとアウトプットは自分の思考整理にもつながりますし、備忘録になります。

これは質問時に自分の考えを躊躇いなく発信できる事に繋がりました。

ドキュメントは読もう!

今まで自分は誰かがやってきたことをそのまま実装する機会(コピペエンジニア)が多かったわけですが、
誰も実装したことのない技術に取り組む。
こういった場合にドキュメントや論文が役に立ちます。

ドキュメントは汎用性を持たせるために、回りくどい書き方がされていたり、
自分が知りたい重要事項が端っこに書いているだけと、Qiitaやブログより解読するには難しい点が多いです。
「これからはドキュメントを読みながら、自分の実装に応用する」ということを意識して開発に取り組みたいです。

分からない事や失敗を恥じない

どの分野でも同じだと思いますが、
失敗を恥じる前に失敗の原因を探ることが重要です。
「失敗しました」はある種の結論であり、
それは「結論を出す」という事に対するタスクの観点から見るとそれは成功となると感じました。

バグの切り分け

今回自分はバグが発生した際に
どこにバグの原因があるのか見極められずにいました。
フロントエンド、Proxyサーバー、APIのどこに問題があるのか・・・。
そんな状態でも数段階に検証して、
エラーの原因箇所を絞っていくプロセスの重要性を学べました。

適応力と技術を楽しむこと

開発言語はTypeScriptで自分は未経験でした。
そのためコードの書き方もわからない、エラーで詰まるわでメンターさんは大変だっただろうなあと思います。
業務では新しい言語を扱うのは当たり前で、
「私この言語知らないから許してっちょ」なんて言ってられません。
この適応力がプロのエンジニアに必要なのだろうと感じました。

でも適応力と感覚を手に入れるには
経験と現在までの知識と技術力によるところが大きいはずです。

新しい言語やバグで様々な視点で知識の引き出しを開けて解決していく事に
楽しみを覚えるエンジニアに早くなりたいですね・・・