Wantedlyの就業型インターンに参加しました!
Other
早いもので、春休みももう終わりです。長い春休みを利用して、Wantedly の就業型インターンに参加しました(2 週間)。本記事はそのまとめです。
本記事の概要は以下の通りです。
- Wantedly の就業型インターンに参加した。(2 週間)
- 役職はフロントエンドエンジニア。
- 「Profile Engineering Team」というチームで機能追加を行った。
- 本記事はインターンの内容や反省点などについてのまとめ
それなりに規模感のある組織での就業型インターンは初めてでしたが、非常にいい経験をすることができました。以下に詳細を説明していきます。
1. インターンに応募した理由・選考プロセス
インターンの内容について書く前に、インターンに応募した理由と選考プロセスについてです。
まず、応募した理由。普通に大手での就業型インターンをやってみたかったというのもありますが、
- 大規模なフロントエンド に触ってみたい。
- 中規模以上のチーム開発を経験したい。
- 多くのユーザーを持つプロダクトに自分の手で機能追加がしたい。
- 「Wantedly」のような普段から自分が使っているプロダクトが「どんな設計をしているのか?」,「どんなインフラ構成なのか?」,「フォルダ構成は?」,「技術選定は?」,「普段使っている機能の実装はどうなっているのか?」が知りたいという純粋な好奇心
このように、「普段の開発では経験できないようなことを経験したい!」と思いインターンに応募しました。
次に選考プロセスですが,「ES→ 面接 1 回」と就業型にしてはあっさりしているなぁ、という印象でした。
ES は「開発経験」や「インターンでやりたいこと」など、いつも通り。
面接では、
- プログラミングをやるようになった理由
- プログラミングのどこに面白さを感じているか?
- エンジニアでないとしたら、どんな職業についていると思うか?
- 簡易的な TODO アプリを Miro 上で実装する
などについて聞かれました。
最後の TODO アプリの実装、についてですが、設計周りでミスをしてしまいました(atom レベルのコンポーネントからグローバルステートを操作する、みたいなミスだった気がする)。そのことを面接終盤に指摘されたので「落ちた」と思ったのですが、一週間後、Wantedly 経由で合格通知をいただくことができました。
2. 事前準備・インターン中に意識したこと
2.1 事前準備
事前準備でやったこととしては以下の 2 点です。
- Graphql と styled-component の勉強
- Wantedly の技術関連の記事を読み漁る
それぞれについてもう少し具体的に書いていきます。
Graphql と styled-component の勉強
まず、styled-component についてです。styled-component に関しては、公式のトップページをざっと読み、軽く触っただけです。普段は emotion を使っていますが、CSS in JS に慣れている人であれば、学習コストは低いと思います。
次に GraphQL についてです。GraphQL に関しては、ほとんど触った経験がありませんでした。「React のアプリケーションから GraphQL を叩ける」くらいにはしておこうと、以下の tips を参考にしながら、勉強を進めました。
- https://www.apollographql.com/docs/react/get-started/
- https://qiita.com/mizchi/items/fb9f598cea94d2c8072d
- https://qiita.com/Climber22/items/4269ad07350aae257328
- https://docs.github.com/ja/graphql
Github の GraphQL API を利用して、あるユーザーのリポジトリ一覧を表示する React アプリとかを作っていました。
Wantedly の技術関連の記事を読み漁る
何も知らない状態で開発にジョインするのは不安だったので、Wantedly が発信している技術記事を読みあさっていました。テーマを問わず、技術発信に積極的な会社であったので、そこは非常に助かりました。読んだ記事の一部を紹介していきます。
- https://qiita.com/koudaiii/items/e5c16830234ceed41e80
- https://qiita.com/awakia/items/8344ba751426e386e0f5
- https://www.wantedly.com/companies/wantedly/post_articles/306349
- https://www.wantedly.com/companies/wantedly/post_articles/183567
また以下は CTO の川崎さんが、登壇した際の資料です。
https://speakerdeck.com/kawasy/managing-your-leader
マネジメントされる側の心構えがわかりやすく説明されており、非常に興味深かったです。後半で紹介されている「効果的な 1 on 1」については、アルバイト先の CTO との 1 on 1 の際に早速試してみました。
ここで紹介した以外にも、Github のデザインドキュメントや README 等を読みあさっていました。
こういった事前準備に大体 2~3 週間程度かけました。インターン中にアウトプットを出したいなら、また不測の事態を避けるためにも、就業型インターンの準備は最低でも 2 週間前から始めた方がいいと思いました。
2.2 意識したこと
そして、インターン中に意識したことについてです。
- アウトプットを途絶えさせない。
ここでいう、アウトプットとは当然自分で書いたコードだけではありません。
- コードリーディングを通して得られた知見
- フロントエンド の場合、途中経過のスクショ
これらもアウトプットです。一般的にエンジニアは、コードを書く時間よりも読む時間の方が圧倒的に長いとされています。コードリーディングのようなインプット寄りのタスクであっても、そこから得られた知見を Issue に書くなどしてアウトプットを途絶えさせないことを意識しました。
土日はしっかり休む
僕が現在メインでやっている長期インターンはフルオンラインで自由勤務です。休みを自由に決めることができ、尚且つ出勤する必要もないため、そこは非常にありがたいです。しかし、中途半端な状態のタスクを土日や休日に自宅で進めたり、On-Off がはっきりしなくなりがちでした。そこで、今回のインターンでは、土日はしっかりと休む、ということを意識しました。
個人の勉強・プロジェクトをしっかりと進める。
エンジニアである以上、社会人になっても勉強は必須です。「フルタイムで働きながら、勉強をする」というリズムを練習するため、個人で進めている勉強やプロジェクトはインターン中であってもしっかりと進めるということを意識しました。
3.インターンの内容
さて、いよいよ、インターン本番です。
僕は、「Profile Engineering Team」という絶賛リニューアル中の Wantedly のプロフィール画面や Wantedly People を作っているチームに配属されました。
インターン期間中にやったタスクは大まかに以下の 2 つです。
- 「Wantedly」のヘッダーに「知り合いかも」を追加する
- Profile ページに「知り合いかも」を追加する(実装途中)
秘密事項に当たるかも知れないので、詳細は述べませんが、技術スタックは
- React
- Typescript
- GraphQL
と、インターン前に触れた経験があるものでした。そのため、実装は簡単でした。
- 仕様・デザインの策定
- Wantedly 独自のツールやライブラリなどに慣れる
これらに割と時間がかかった印象です。
一点目の「仕様・デザインの策定」についてですが、Wantedly では、文言やデザイン,仕様の策定はデザイナーだけでなくエンジニアにも裁量が与えられています。そのため、同じチームのエンジニアやデザイナーにフィードバックをもらいながらそれを決めていくのが楽しかったです。
2 つ目のタスクについては、実装途中でインターンが終了してしまったので、まだリリースされていません。(悔しい!)しかし、1 つ目については、既にリリースされています。(ぜひ、使ってみてください!)
自分で作った機能がプロダクションに反映されているのを確認した時は、素直に嬉しかったです。Wantedly の「知り合いかも」に触れる時は、ぜひこの記事と僕のことを思い出してください(笑)
4. 会社の印象
「会社」というよりかは「会社にいた人」の印象になるのですが、エンジニアも、そうでない人も、フラットで話しやすい人が多かったです。(月並みですが。)
そして、エンジニアについてですが、前評判通り、技術的な知識が豊富でスキルレベルが高い人が多かったです。(技術書書いてるみたいなすごい人もいました。 本当に尊敬します。)
また、Wantedly のエンジニアは
- プロダクト
- 開発
- デプロイフロー
- 仕事の進め方
といった開発にまつわる全ての事柄に対して「問題意識が非常に強い」というのが個人的な印象です。
Wantedly では基本的に Issue ベースで仕事を進めます。上記の事柄に対して、課題感を感じた人が自由に issue を立てていいことになっているのですが、1000 近い issue が立っているリポジトリもありました。問題点に気づいた人が臆せずそのことを指摘できる土壌が整っているのは、非常にいいな、と思いました。(ちなみに僕も開発中に気づいた・思った問題点をいくつか issue にしておきました。)
「課題点を言語化する」というのは何事においても非常に重要だと思います。言語化することによって、課題を正しく認識することができるためです。課題を正しく認識して初めて適切な解決策を考えだすことができます
そういった重要なプロセスを踏むことが自分は意外とできていなかったなぁと思ったので、仕事の進め方として非常に参考になりました。
5. 振り返り
5.1 反省点
個人的な反省点としては以下のものが挙げられます。
- 開発を効率化する努力が足りていない。 → 開発環境やショートカットコマンドなど開発環境を工夫する努力をするべき(早速ディスプレイと Vimium を導入しました。)
- 環境構築など周囲に聞いた方が早いことに一人で悩んでしまう時間があった。→ 聞いた方が早いと判断したことについてはメンターにすぐ聞くべきであった。
- 目の前の機能実装に気を取られ、ソフトウェアのアーキテクチャなど、全体像を意識的にみることをしなかった。→ ディレクトリ構成やツールなどで気づいたことについてもメモをしておくべきであった。
- 個人の勉強・プロジェクトが計画通りに進まなかった。→ まとまった勉強時間を勤務時間以外で確保すべきだった。
特に最後の個人の勉強についてですが、夜は頭が回らないので、早寝早起きして朝に勉強をした方が良いな、と思いました。Web 系の企業は始業時間が 10:00 以降と遅めなので、
- 22:00 に寝る →5:30 に起きる →7:00 に勉強を開始
という生活リズムを得るだけで毎日三時間ほどの頭が冴えた状態での勉強時間を確保することができます。朝活がサイドプロジェクトを充実させていく気がしたので、今後そうしていきたいと思いました。
5.2 メンターからのフィードバック
「5.1 反省点」で記述したのはあくまで主観的な反省点です。インターンの最終日にメンターの方から、客観的なフィードバックを「良い点」「足りていなかった点」のそれぞれについて、指摘してもらうことができました。
まず、良い点として以下の点を指摘してもらいました。
素直。指摘されてから修正するまでのスピードが早い。
サーバサイドやデザイナーの人と臆せずコミュニケーションを取れていた。
「慣れない技術・環境 + 2 週間という期間」で仕様を決めてリリースまで行けた。
最終発表がよくまとまっていた。
これらは素直にうれしかったです。良い点はこれからも続けていくとして、、、次に足りていなかった点についてです。
技術への理解が断片的な部分がある
質問の仕方が下手
実装方針を勝手に決めがち
これらについて「なぜ」そうなったのかを考察し、修正していくことが自身の成長につながると思うので、それぞれについて以下に深掘りしていきたいと思います。
技術への理解が断片的な部分がある
あくまで僕の解釈ですが、「技術への理解が断片的」というのはおそらく以下の二点を指すのだと思います。
- 普段使っている技術への理解が浅い
- 基礎知識が疎かである
確かに、僕は JS,React,Node,Golang と言った具体性の高い技術やまたそれに付随するライブラリ等が内部的に何をやっているのかを詳しくは知りません。
「こんなことをやってくれるのかへぇー便利。」という感じでライブラリの公式を読みながら、個人開発物に組み込んでしまうこともありました。
しかしそれでは、
- ライブラリの内部依存の問題に対処できない
- ライブラリが存在しない問題に対する実装ができない。
といった点で問題があると思います。
メンターの方に「普段使っている技術を深掘りしてみると良いかも。」と言われたので、普段使っている技術に対して、
- 「実装への疑問・興味を持ち内部の実装を除く」
- 「内部の実装を除き、技術記事という形でアウトプットする」
- 「ライブラリが OSS であれば、コミットしてみる。」
などが具体的な方針としていいかなと思いました。
また、「断片的」という表現が物語ように、確かに自分は「自分の作りたいものが作れれば OK」なところがあり、基礎知識を疎かにしてきました。現代では、便利なライブラリやフレームワークがそれらを隠蔽してくれていますが、基礎的な Web やコンピュータサイエンス、また普段使っている開発言語の文法に対する意識的な勉強が必要だな、と改めて思いました。(春休みに個人で進めていますが。。。それはまた別の記事で書きます。)
質問の仕方が下手
口頭での説明が上手くいっていないというのはなんとなく思っていました。プログラミング・技術における質問は
- 前提(開発環境やそれまでにやった作業,質問する対象に対する説明)
- やりたいこと
- 何に困っているか?
この 3 点を十分に伝えることが重要だと思います
「自分が認識している前提を相手が認識しているわけではない。」と言われたので、1 の「前提」を伝えるところが上手くいっていなかったのかなと思います。
実装方針を勝手に決めがち
私が今まで参加するプロジェクトは少人数や個人での開発が多かったです。それらは非常に裁量があったため、実装方針など、大抵のことは自分で決めていいことになっていました。
それでも、例えば、設計レベルの話など、重要度の高そうなものについてはフィードバックをもらうように意識していました。しかし、機能実装のレベルでも実装前に実装方針を共有した方がいいと言われました。
確かに、自分の頭の中にある実装方針が最良のものとは限りません。そのため、実装方針を何通りか考えて、フィードバックをもらうことも重要だなと思いました。
6. まとめ
今回のインターンを通して、様々なことを学び、自分の足りていない部分についても認識することができたような気がします。
あっという間でしたが、本当に濃密な 2 週間でした。
Wantedly のみなさん、特にメンターの高瀬さん・中村さん、同じチームの江草さん・NishaMe さん、本当にありがとうございました!