blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2023.11.21 インターンレポート

技術力と非技術力を鍛えられる長期インターンシップの魅力

by Ryo Yahiro

#internship #go

自己紹介

こんにちは。2023年9月から10月末まで就業型インターンシップに参加した八尋 諒です。普段は、専門学校でWebのバックエンドの開発について学んでいます。
趣味は、アニメ、ゲーム、ラーメンです!
最近、インターン生と一緒にラーメンを食べに行きました!

ramen.jpg

ラーメン

はじめに

この記事は、『インターンに興味がある学生』や『若手エンジニア』に向けた記事になります。
私が配属された部署は、メディカル事業本部プロダクト開発部DXソリューション開発グループです。
バックエンドチームのAPI要件定義が終わったタイミングに、参加しました。
参加した期間は、9月から10月末までの2ヶ月間でした。
2ヶ月間の間、ドメインのキャッチアップやAPIを13本開発したり、バックエンドチームのことを「冷酷」と言ってざわつかせたりしました。
これらを通して学んだことをこれから書いていきます。

DeNAのインターンへ参加したきっかけ

インターンへ参加したきっかけは2点あります。

  • DeNAの企業理念である「ことに向かう、道のりを楽しむ」が、実態として現場でどのように体現されているか気になった。
  • Golangのようなモダンな技術をどのように使いこなしているのか気になった。 これらのきっかけで、インターンへ参加することを決めました。

インターンの目標

参加にあたって、インターンでの目標を立てました。

  1. Golangについて初心者のため、Golangについての知識を深める。
  2. 複雑な業務知識をどのようにプログラムに落とし込むのか DeNA の知見を得る。
  3. 今まで受託開発を中心としてインターンを行ってきたため、自社開発企業における自分のレベル感を知る。

目的を達成できたか

目的 評価
Golangについて初心者のため、Golangについての知識を深める。
複雑な業務知識をどのようにプログラムに落とし込むのか DeNA の知見を得る。
今まで受託開発を中心としてインターンを行ってきたため、自社開発企業における自分のレベル感を知る。

目標に進む中で学んだことや何故このような評価になったかこれから書いていきます。

学べたこと

学べたことは沢山あるのですが、その中で特に学べた点を4つ書いていきます。

  1. Golangに関する知識
  2. 全体を先に見通す重要性
  3. 言語化の重要性
  4. 工数を短くする方法 これら4点について書いていきます。

Golangに関する知識

もともと、Golangに関する知識はほとんどなく、初心者でした。
プロジェクトにアサインされてから、基本構文やTips、Goの旨味を最大限に活かしたコードの書き方、Golangとオニオンアーキテクチャをどのように組み合わせるのか、学ぶことができました。
また、Golangのフレームワークは他のフレームワークと比べると自由度が高いと感じました。そのため、チームメンバーが根拠と一緒に設計の変更を提案して、柔軟に設計を変えていく過程が見られて、納得できるような根拠があると設計を変えて良いという気づきを得ることができました。

全体を先に見通す重要性

今まで関わってきたサークルでの開発や他社での業務では、タスクを渡されてから全体を見通さずにすぐコーディングへ取り掛かっていました。そのため着地見込みが曖昧でした。
稀に1日や2日のビハインドが起きることがありましたが、改善を求められることはありませんでした。
今回のインターンでは、最初に貰ったタスクが2週間で終わる想定でしたが、2週間経っても進捗が乏しく、更に期日を2週間伸ばしていただきました。
1日や2日ならまだしも、2週間はさすがにやばいと焦ったのを覚えています。

それをきっかけとして、メンターの方に1on1で相談したところ、スケジュールについてのアドバイスを頂き、全体を先に見通す重要性を理解したと同時に自身の中で体系化することができました。

  1. 不確実性のある要素を最小限にする
  2. タスクの内容を細かく区切る
  3. 細かいタスクにそれぞれ時間を見積もっていく

これはタスクの見積もり以外にも応用できるテクニックのため非常に良い学びとなりました。

言語化の重要性

今まで関わってきたサークルでの開発や他社での業務では要件や仕様をすぐに把握できるくらい小さな開発が多かったです。しかし、今回のインターンでは膨大な業務知識や要件、仕様などが存在しており、自身にとってははじめの開発体験だったと言えます。
参加してから1週間ほどはキャッチアップとして事業についての情報を調べ、チームに発表することを通じて理解を深めましたが、この膨大さゆえに API 開発に入っても全然知識が足りていませんでした。
そのことは、最初の開発を行ってから1週間後にチームメンバーへ仕様についての質問を行うことで認識の齟齬がわかり、大幅な手戻りが発生したことで、ようやく気づけました。

今後、手戻りが起こらないようにするために、APIの開発においての手順を整理して体系化しました。その中で、要件に対してどうコードをアウトプットするのが良いかを言語化して説明できるようにしました。その結果、早い段階ですり合わせができ、手戻りも減らし、素早く実装を進めることができました。
そのため、設計のタイミングでメンバーとすり合わせができるよう言語化するのが大事だと学びました。

言語化の重要性に気付かされたきっかけはもう1つあります。バックエンドチームへ心象を正直に吐露することで、実際に変化を起こせたことです。

インターン参加当初、バックエンド開発メンバーが議論する会議に参加したばかりのときに、その議論が非常にドライでストイックで、僕からは個々の人間性が全然見えなくて慄きました。とてもこわかったです。
その影響で特にベテランメンバーへコミュニケーションを取るのをためらっていたとき、同じインターン生や新卒のエンジニアに相談してみたら、同じような意見を持っていることがわかりました。

僕だけの問題じゃないんだなと思い、勇気を出してミーティング時にチームの生産性が下がるのではないかという根拠と共に「バックエンドチームは冷酷だ」と発言しました。 (後に各種会議で和やかな話題になりました)
その後、アイスブレイクが導入され、少しずつチームメンバーの人間性が分かってきました。

工数を短くする方法

インターンとして開発を始めてしばらくするとある程度できるようになってきたと思い、目標についてメンターと相談した際に「パフォーマンスを1.5倍上げてみて」と1on1でテーマをいただきました。
しばらく考えてみたものの、1.5倍にあげるのは難しいと思ったため先輩社員に相談したところ「テスト駆動設計」を紹介されました。
テスト駆動設計を行う前のAPI開発は、実装、テストの順番で書いていたため、実装を書ききった後にテストを書くと考慮不足が浮き彫りになり、手戻りが発生することがありました。
「どうせ変わらないのでは」と思いながらテスト、実装の順番で書いたところ、テストの時点で仕様を事前に把握することができ、手戻りが発生せずにコードを書き終えることができました。
結果として、テスト駆動設計を導入したことで約2倍の速さで実装できました。

まとめ

目的 評価
Golangについて初心者のため、Golangについての知識を深める。
複雑な業務知識をどのようにプログラムに落とし込むのか DeNA の知見を得る。
今まで受託開発を中心としてインターンを行ってきたため、自社開発企業における自分のレベル感を知る。

このインターンへ参加する目的として3個あげましたが、そのうち2個は達成することができました。
残り1個の「自社開発企業における自分のレベル感を知る」については、APIを28日の中で13本開発できたため良い爪痕を残せました。
一方で、仕事に必要な非技術面の能力が社会人のレベルに達していないと感じましたので、今後は小さな目標を立てながら一歩一歩前に進んでいきます。
このインターンに対しては技術的な期待が強かったですが、実務に放り込まれるため非技術面でもたくさん求められることがあり「これが働くってことなんだな」とわかりました。
そのため、技術だけじゃなくお仕事そのものを学ぶことができる現場だと思いました。
ぜひ、インターンへお越しください。

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。