CyberAgentのCATS🐈でiOSインターンをしてきた話

初めまして、今は大学3年(今年の4月から4年)で、iOS Engineerの@Ryu1です。
今までこういったブログ?のような記事は書いてこなかったのですが、今回のCAでのインターンも合わせて連続して3社ほどインターンにいかせて頂くので、書いてみようと思います。

そして今回は、2/7 ~ 2/28の約1ヶ月参加させて頂いたサイバーエージェントのインターンに関する記事です。

CyberAgentでインターンすることになった経緯スクリーンショット 2020-03-01 15.33.19

CAとの最初の接点は、去年の夏に参加したチームラボ のインターンで同じチームで隣の席だった友人から、「今度サイバーエージェントの人事の人と焼肉食べるんだけどよかったら来ない?」と誘ってもらって、そこで人事のななさんに色々とCAのことを教えてもらい、その後エントリーして参加できました。

なぜCATS🐈なのかスクリーンショット 2020-03-01 15.33.19

CATSに参加した経緯としては、面接の際に「どこの部署がいい?」と聞かれた時に、
- 私がCATSとAbemaくらいしかよく知っている部署がなかった
- 過去に同じインターンに参加した多くの人が「CATSは本当に技術的に学べることが多かった」と言っていたのを見た
- CATSはレビューが本当に丁寧で、納得するまで議論してくれる(他の部署のそれについては知らなかった)というのを聞いていた
- 近い世代でiOSに強い羽柴さんがいて学び(刺激)が多そう
という理由で、「CATSがいいです」と言った結果、CATSに配属が決まったという感じです。
因みに、CATSには現在WinTicketと新規の2つの事業があり、私は新規のプロジェクトに配属となったので、NDA的に書けなかったり成果物が載せられなかったりします。

実際CATSに配属されてどうだったか
スクリーンショット 2020-03-01 15.33.19

結論から言うと、エンジニア、プロダクトが成長するのに最高の環境だったと思います。
理由は以下に書こうと思います。

1ヶ月における自分の目標を達成できた
スクリーンショット 2020-03-01 15.33.19

今回のインターンに参加するにあたって、初日に1ヶ月の目標を以下のように設定しました。

- 綺麗で正しい(より良い)コードを日常的にかけるようにする
- Reactiveに関する知識を深める
- testableな設計を意識したコードを書けるようになる
- iOSエンジニア学生のうち上位5%の実力をつける

これらの目標にうち、綺麗で正しい(より良い)コードを日常的にかけるようにするについてコメントしていこうと思います。

2日目くらいに初PRを出したのですが、自分が正しいと思って書いていたコードに対して、"ここを指摘されるんだ...!!"というところに、次々とレビューが入りました。しかし、これこそ私がこのインターンで臨んでいたことであり、
このレビューを受けて正しく修正できた => 自分は成長した
ということは明確だったので、こんなに沢山のレビューを受けて興奮が止まりませんでした(笑)
そして、私が配属された新規プロジェクトは8人?くらいで開発していたのですが全員が全員のPRに対してレビューするという文化があり、その結果、より品質の良いコードがマージされるし、PRを出した本人もレビューをしている方も議論を通して成長できるので、ここはエンジニアにとって天国だと思いながら毎日働いてました(笑)
そして実際、定量的に表すのは難しいですが、1ヶ月前の自分のコードを今の自分のコードと比べると、圧倒的に綺麗になりました。
しかし、上で述べたのは可読性という意味でのコードの綺麗さも含んでおり、私は今まで’’綺麗で正しいコード’’の意味について勘違いしていたことに気づかされました。

綺麗で正しいコードとは
スクリーンショット 2020-03-01 15.33.19

今回のインターンにおいて、@KyoheiG3さんに私のメンターについて頂いて、色々とお世話になったのですが、2週間くらい経ってから言われたのが、

正しく動くためのコードを書くのは当たり前で、エンジニアに求められるのはアプリのパフォーマンスの質だ

という言葉でした。
ここで、今まで私が考えて書いてきたコードによって得られたスキルには、圧倒的に足りないことが多すぎる、ということに初めて気づくことができました。そしてそのパフォーマンスを追い求めるために技術を正しく使わなければならないということをチームメンバーの全員からレビューを通して教えてもらいました。

これからの自分になんとなくの実装は価値がない
スクリーンショット 2020-03-01 15.33.19

もちろん私も今まで何も考えずにただ動けばいい、と思って実装してきたわけではありませんが、例えば、簡単なところでいうと、switch文は全てのcaseを網羅して記述すればランタイムに分かるエラーをコンパイル時に予め潰せる可能性が上がるなど、、、他にもたくさん学ぶことがありました。

これも@KyoheiG3さんに言われたことですが、

本当にこの実装でいいのか疑うことは大切

であり、これをするためには本当にその技術の正しい使い方を知っていないとできないと思うので、これからはSwiftの公式ドキュメントを流し読みするのではなく、基礎学習にしっかりと注力しつつ質の高いプロダクトを作っていこうと思います。

これはエンジニアにとって当たり前のことではありますが、特にCATSのメンバーは、技術を正しく使おうという意識が強いな、と感じました。

エンジニアとしての本当のスタート
スクリーンショット 2020-03-01 15.33.19

上で書いたような考えを私が抱けるようになったきっかけを、良い意味で本当に細かいレビューを通して与えてくださったCATSのチームメンバーには本当に感謝しています。

また、上記の目標について少し触れることになりますが、今まで書こうと思って書いてこなかったテストも1ヶ月通して、設計を意識した上で書けるようになったので、嬉しかったです。

以上のことから、このCATSでの開発が本当の意味での私のエンジニア人生のスタートと言っても過言ではありません。

また、今まで私にはオフラインで話したことのあるiOS Engineerの(勉強会で会う方は除く)知り合いが多くはなく、目標とする人が定められずにいました。

しかし、CATSには3, 4年目でチームのリーダーを任されるような方や、try! Swiftで登壇するような方がいたりと、若くして活躍している人がいました。そういった方が自分のなりたい像にかなり近いというのもあり、憧れを感じるとともに、年がかなり離れているわけでもないのに自分との実力差が見えてしまい悔しいという気持ちも抱きました。なので、いわゆる強いと言われるエンジニアの方達と一緒に開発することができた今、私は絶対に目標とする人よりも早い成長スピードを持って成長し、絶対にその方たちを驚かせられるエンジニアになります。

 CATSにおける開発スタイル
スクリーンショット 2020-03-01 15.33.19

こういう仕様にして欲しい、というのは伝えられるものの、細かい動きなどはエンジニア主導で考えて提案していく開発スタイルはとても楽しかったです。実際に自分もAnimation周りでデザイナーさんと仕様を考えた時は自分の知らないEasingを知れたりして楽しかったです。

 ãã®ä»–・感想
スクリーンショット 2020-03-01 15.33.19

Twitterにで#catechjobで検索をかけると過去のCAインターン生の記事が出てきて、みんな「このインターンに参加して本当によかった」と言っていたのですが、実際私もこのインターンに参加してそう思いましたし、どこの企業で働くことになっても、このインターンが自分のエンジニア人生に影響する人は少なくないと思いました。もし参加できることになったら、部署に関わらず得られるものは多いと思います。

CATSのiOSチームの皆さん、人事の皆さん、本当にお世話になりました。

画像1

これから
スクリーンショット 2020-03-01 15.33.19

私は21卒なのでどこの企業に行くかそろそろ決める時期なのですが、どこに行くにせよ承諾するのは1ヶ月程先になりそうです。

3月から(今日から)は、前半の2週間でWantedlyにてインターンをさせて頂いています。


最初に想定していたより真面目に書いてしまった気がしますが、最後まで読んでくださってありがとうございます。

インターン中にちょろっと書いたQiita
スクリーンショット 2020-03-01 15.33.19

Ruby Error[Your Ruby version is 2.6.3, but your Gemfile specified 2.6.5]
StackView in a ScrollView
Swiftのメモリリークについてまとめてみた
どれもそんなに大したことは書いていないんですが、地味にちゃんと考えなきゃいけないようなことを個人的にメモするくらいなら記事にしようということでまとめました。

p.s. CATSで見つけた目標とするエンジニアの1人の方のように自分も早くMediumで英語の記事を書かなきゃですね(笑)

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
5
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。