1. プロジェクトの目的を明確にする
これはプロジェクトを進めていく上で一番重要なことだと思います。プロジェクトを渡された際の取り組み方には大まかに二つの種類があると思います。
一つは既にゴールと目的が伝えられている場合です。この場合は実現方法であったり、リソースの割き方について話し合いながら進めていくことになると思います。
もう一つは、ゴールが決められているが目的が伝えられていない場合。この場合は目的を明確化することが重要であると思います。自分にとっては目的が明確に思えるものでも、実際には自分の考えている目的と他のチームの方が考えている目的には多少なりとも違いが出ていることがあると思います。これを解消しないままプロジェクトを進めても、プロジェクトの終わりの方でひずみが生じて時間を無駄にしてしまいます。
結論として、全てに置いて目的意識を持つことが大事だと感じました。
2. 要件定義の重要性
これは目的を達成するために必要なことを「一意」に定義することの重要性を学んだということです。他人にプロジェクトをお願いする際に、相手と自分の認識にズレがあれば上で書いたように話し合って解消すればいいことかもしれません。しかし、それ以前に渡す際に伝えられるところは明確に伝えることで両方の時間を奪わずにすむことができると感じました。
3. 他人のコードを読む
今まで、チームでの開発経験というものは無かったので他人のコードを読むという機会がほとんどありませんでした。実際にエンジニアインターンとして働いてみて、自分が想像していた以上に他人のコードから学ぶことがありました。読みやすいと感じるコードと読みにくいコードとの違いであったり、自分が考えていない実装方法であったり、色んなことが見えてきます。他人のコードを読むことは、意外と「成長するための近道」なんじゃないかなぁと感じました。
4. アウトプットの重要性
みなさん、アウトプットをすることで知識が定着するということは聞いたことがあると思います。自分も頭の中で「そういう効果があるんだろうなぁ」とは思っていたものの、あまりアウトプットする機会というものはこれまでありませんでした。
しかし、CTOの方からアウトプットを実践するように言われて行なったところアウトプットの難しさというものに気づかされました。自分がなんとなく頭の中で理解していることを言語化して伝えるというのは意外にも難しい作業ということを痛感させられました。
まとめ
エンジニアとして必要なことは意外にも、「実装する力」ではないんだなと感じました。それ以前の目的の明確化であったり、コミュニケーション能力であったり、インターンをする前では見えてこなかったことがいくつかありました。
大学生のうちにインターンをすることで、社会人として成功するために必要なこと、チームの雰囲気づくりであったり色々なことが学べると思うので挑戦してることをオススメします。