はじめに
この記事は進捗ゼミのインターン体験記の後編です。前編はこちらから読めます。
TLDR
Chatworkのサマーインターンは楽しかった!おすすめ!参加しよう!
講義パート
講義内容は インターンの紹介ページ にあるので、感想だけ書いていきます。
単なる技術ではなく、その背後の理論を学べる
Chatworkは巨大なプロダクトを1つ持っていて、それを中心に回っている企業です。なので、大量のプロダクトや新規事業を積極的に展開していくような企業に比べて、好き勝手に面白い製品を導入したり言語を導入したりすることには制約があります。逆に、すでに出来上がっているシステムに対して大人数でもスケールする開発手法を研究したり、既存のアーキテクチャのバランスをとりつつも適切に新しい設計を行うための手法を研究したりする部分が同じような規模の企業に比べて非常に強いです。
例えばインターン中に見聞きした書籍には以下のようなものがあります。
どちらも学生が趣味で行うような開発ならばやらない、もしくは雑にやるという類の問題ですが、Chatworkのような規模になってくるとこのように言語化・理論化を行って複雑性に立ち向かっているということが分かります。
他職種×エンジニアという観点
参加者の多くは開発職になりたい人だったのですが、デザインの講義、マネジメント側の考え方の紹介、運用側の講義などの直接は関係ない講義もありました。講師の方はみんな口をそろえて「私の分野と開発が出来るエンジニアは本当に貴重な人材だから目指した方がいいよ」とおっしゃっていて、講義の背後に存在する「真っ当なプロダクトはエンジニアがエンジニアリングをしているだけでは作れない」という考え方を感じました。
このような幅広い講義はエンジニアとしての視野を広げるのに役立ち、趣味で開発をしているだけだと見つけられない開発者としてのキャリアパスを考えるきっかけになりました。
知らない本がなぜか読めるようになっている
私はかなりの量の積読をしてしまうタイプなのですが、インターンの講義後にふと関係がありそうな技術書を開くと、なんと目次の7割ぐらいに見覚えがある単語があると気づきました。技術書を読むときには最初の一歩が踏み出しづらいですが、講義パートを聞くことである種強制的に知識の種が撒かれるので、面倒がらずに専門書をいて本を読めるようになります。
開発パート
ざっくり説明すると、与えられた課題を実装したうえで、自分たちでプロダクトの内容を想像しながら顧客の価値に直結するものを考えて機能を追加するという内容です。
詳しい内容は参加してからのお楽しみということで、感想を書きます!
突如活きる予習
急に知らないコードベースに投げ込まれ、全員で知識を持ち寄りながらいい感じに理解してコードを書き換えていきます。ちゃんと仕組みを理解して新しい実装をするためには、個々人が100%の潜在能力を引き出して実装を進める必要があるのですが、ここで自分がRust
の各種概念をきっちりと理解していたことが活きました。自分はRust
でしたが、TypeScript
+React
の開発経験がある人はそれが活きていましたし、DynamoDB
の経験がある人はそれを活かしていました。チームのメンバーごとに強みがあって全員が自分にしかできないタスクをしているというプロ意識をもてるとかなり開発に熱意が持てて楽しいです。
白熱するチーム
今まで自力で開発をしてきたという学生、特に地方に住んでいる学生には周囲に技術的コミュニティが無いとかチーム開発をしても発言力や技術力が自分だけに偏ってしまうといった問題を抱えている人が多いと思います。自分でプロダクトを作っていこうという技術とモチベーションがある学生というだけでも希少なので、自分の開発にそのようなエンジニア仲間が参加してくれてかつプロダクトに興味を持ってくれる確率というのはかなり低いと思います。
しかし、Chatworkのインターンに集まってきた人たちの多くは、自力で色々なイベントを中心になって進めてきた人たちでした。そのため、実際に開発を進めていったときに、自分が適当に決めた設計や目標に周囲が適当に同調して結局一人で決めることになってしまう、といったことは全くありませんでした。全員がプロダクトに対して主導権をもって開発をしてきた人たちだったので、全員がちゃんと意見をもっていて、絶対になあなあにして話を進めず、理屈をたてて納得するまで議論を続けることが出来ました。
これはめちゃくちゃ新鮮な体験でした。このためだけにでもChatworkのインターンに行く価値があると思っています。日常生活で議論がもめたときには感情や力関係のようなプロダクトに関係ない部分で決まりがちですが、開発パートでは全員がプロダクトに貢献する意思を持っていたので議論が白熱しても決して無意味に傷つけあうことはなく互いにリスペクトを持っており、よりよい生産につながっていくことが感じられて最高でした。
自分の技術力については自分で勉強すればいいものの、周囲の技術力や能力というのは自分ではコントロールできないので、インターンの場を使って周囲と生産性の高い議論を展開する技術を学べるというのは素晴らしいことだと思います。
無限お菓子と無限ドリンクが良い
5日間の開発パートは実際にChatworkのオフィスで働きます。ITベンチャーらしくきれいでカッコイイオフィスでした。
開発中はデザイナーさんやエンジニアさんたちがかわるがわる見に来てくれてお菓子をくれてよかったです。飲み放題のドリンクバーもあって快適でした!
大量の伏線回収
開発パートでは、講義パートで習ったことが次から次へとでてきて、その概念の活用を次々に迫られます。例えば、DDDの文脈でユビキタス言語について学ぶのですが、学んだ当初は私はぶっちゃけ「ユビキタス社会」みたいな流行りの言葉でしょ?程度に思っていました。しかし、開発が進んでいくとすぐにお互いが話している概念がいとも簡単にズレるということに気づきました。もしかすると、実は今までの他の開発経験でもズレていたのかもしれませんが、自分の理解と言葉を押し通していただけだったのかもしれません。どうやって意見を合わせていくかという課題に向き合ったときに「あ!これ進〇ゼミでやったところだ!」という気持ちになり、最終的には「ユビキタス言語使おう」が口癖になりました。
このように、実際にやってみないと分からないような概念の存在価値や適切な運用方法に関して否が応でも学ぶことになります。もちろん、インターンだけで学びきれないことはありますが、次の機会に開発手法や設計の書籍を読むときに「こういう体験がインターンであったなぁ」という具体的なイメージを持つことができ、理解が非常に速くなります。
最終3時間の爆速開発
前編ではChatworkのインターンはインプット系であると書きましたが、開発パートの最後の方にはハッカソン系インターンの醍醐味であるところのギリギリでの連帯感をしっかりと楽しむことが出来ました。
私のチームはバックエンドのAPIが完成したのが時間制限の3時間前だったのですが、そこから爆速で開発が進みました。みんなでしゃべりながら一丸となって最後の1分までコードと日本語を書きまくるというのはやはり最高に楽しいです。こういう楽しさを経験しておくと、今後のエンジニアとしてのキャリアのモチベーションも湧いてくると思います。
キャリア面
あんまり企業説明感はなく、空気から学べる
インターン中にも良く言われていたことですが、学生の成長と学習に重きを置いてくれていて、あまり企業説明会や就業体験という感じはしませんでした。気軽に参加できるいいイベントという気持ちで応募するといいと思います。Chatwork側からの説明はそこまでありませんでしたが、10日間のインターンの内容から技術的な哲学や働き方、文化までものすごくたくさん空気感を知ることができました。背中で語るスタイルなのでかっこいいですね。
キャリアへの意識が高まる
私は大学院に進学する予定なので、自分の技術的な好みや将来的にやりたいことは定まっていても、具体的に職種や業界を選ぶことが出来るほどにはキャリアに関する明確なビジョンはありませんでした。しかし、それでも将来に向けた刺激をたくさん受けることが出来ました。
- これまでにない開発経験が出来るので、自分の好きなことについての解像度が上がる
- 真剣に就活をしている人の話をたくさん聞ける
- 人事の方がものすごく親身に対応してくれる(終業後数時間キャリア雑談会的な会話に参加してくださいました。すごすぎる)
などなど、様々な方面から就活に役立つ情報を得られたりや自分の意識を良い方向に変えたりすることができました。
まとめ
自分のプロダクトを作っている人、大規模なプロダクトを動かしてみたい人、チームで一丸となって能動的に開発を進める体験がしたい人、アーキテクチャやシステム設計が好きな人あたりには高確率で刺さると思います。インターンの内容にも開発バリバリ実務バリバリではなく、理論を知って現実を見すえて、出来るだけ理想に近づけていくための具体的な手段と妥協点を見つけていく、という非常に成熟した考え方が反映されていたので、Chatworkでしか得られない経験が出来る非常に貴重な場所でした。