3ヶ月ほど転職活動をしてきて、たくさん学びがありました。
結論、転職は時期尚早と判断し諦めました。
表題通り愚痴込みの投稿になりますが、極力表現には気をつけます!!
僕のざっくりレベル感
- エンジニア歴は5年ほど。
- おもにバックエンドの開発を中心に行なっており、Rails歴が一番長い。
- 超独特で複雑な要件でもない限り、依頼される開発は問題なくこなせます。少なくとも今まで「わからないので実装できません」はありませんでした。
- パフォーマンスに関する「経験」は↓の感じ
- N+1の解消(Preload, EagerLoad)
- データの性質を考えて正規化すべきかどうかなど、データ構造について考えて実装する。
- パフォーマンスに関する「知識」は↓の感じ
- 都道府県・市区町村などのほぼ変わらないデータに関してはRedisなどでキャッシュしておく
- 数億コードなど、馬鹿でかいデータ量になるとパーティショニングなどをしてテーブル・DB分割をする。
- レコード数の増加に伴い、データサイズがデカくなってきた場合は、VBCなどで圧縮をかけて持つようにする
- プログラムには計算量というものがあります。O(N)とかO(log N)とか。これはデータの持ち方などによって変わってくるので、場面に合わせて適切なデータ構造を選択し、極力対数時間で処理できるプログラムを意識する。もっと複雑なプログラムになると多項式時間で処理できると御の字らしい。
- 個人開発もしています
- 大抵は勉強がてらで簡単なCRUDを作って終わりだと思いますが、ビジネスとしてスケールするようプロダクト設計・戦略を立てています。リリースして1年数ヶ月目。
- SNSやアプリストアなどで広告運用しています。どう言った広告の打ち方をすると、自分が求める数値がでるか考えながら試行錯誤中。
- インフラはAWSで、
Route53 ~ ALB ~ ECS on EC2 ~ RDS
というような基本構成。 - NextJSでWebフロント、ReactNativeでアプリを書いています。
- フロントに関しては初心者レベル。
- MVCでやってればスケールさせられるっしょと思い、hookをコントローラと見立てて、zodをAPIレスポンスなどのスキーマ検証を行うModelに見立てています。
- NextJSとReactNativeを採用した理由は、個人開発なので開発コストを削減する必要があります。なので、hookや一部のライブラリなど、共通で使いまわせるReact系の技術を採用。
これだけみたら採用するやろ、普通。
受けた企業のレベル感
具体的な名前は伏せつつギリバレそうな範囲で書きますと、
- 香水のtoC向けサービス
- HR系の大手
- 会計ソフトの大手
- 人材系の大手
- 食に関するtoC向けサービスの中〜大手
- 在庫管理サービスの中手(表現合ってる?)
これだけみたら落ちるか、普通。
3社はスカウト・3社は自ら応募。
書類選考・技術課題は全て通過。
4社は次の技術面接落ち。
2社は”最終面接”で技術を理由に不採用。
最終面接で技術を理由に不採用 ٩(ˊᗜˋ*)و
まず物申し(愚痴り)たい。
最終面接はカルチャーマッチとか見てるんちゃうん!?
確かに技術の話はしたよ。ただ、めーっちゃ軽くしか話ししてへんで?
それも1次の技術面接で話した内容で、深掘りしてもらって、通過!ってなったんやで!?
軽く話した内容で落とされるなら、なんのための1次面接なんじゃあああ!!!もっと1次の面接官を信じろよ!!!
最終まで行ったのって、スタートアップ・中小の話やろ?って思ってるそこの貴様(あなたさま)。
大手も最終まで行きました!!!
考察(第一巻 〜俺は悪くない〜)
まずは人のせいにしていきます。
性格悪いんで落として正解ですね
1. CTO, VPoE, EM, さまざま会ったけど、別に採用のプロちゃうな
面接には逆質問の機会があります。
全社で聞けばよかったと後悔している質問ですが、、
「今のビジネスフェーズにおいてどう言ったエンジニアを求めていますか?」
と大手含め何社かに質問しました。はっきりと回答できた人はいませんでした。
シード・アーリー期、グロース期、レイター期のそれぞれのフェーズや、事業戦略によって必要となる人材は変わってくるはずです。
例えば、シード・アーリー期のスタートアップフェーズにおいては、Googleの第一線で活躍できるようなハイパーエンジニアは高すぎる買い物なわけです。
この辺をはっきり言語化できへんって、どういう採用戦略を立ててんのや??
一度採用したら簡単にクビにできないし、、なんかちょっと不安があるし、、うーん自信ないから不採用にしとこ...ってやってるんじゃないかな?という印象です。
わからない、不安に思うことがあるなら聞け!報連相!
2.面接の形式に固執しとんなー
面接って、回答者に意図を悟られないように質問しなくちゃいけないって風潮ありません?
大手の中では、「こういう部分を見たいです」と最初に言ってくださるとこもありました。
ですが、大体は直接聞かずに、遠回しな質問で技量を図ろうとしている感じでした。
限られた時間しかない中で、どの部分をどこまで答えていいのか分からないシーンが何度もありました。
「最も困難だった開発は?」
-> どれだけ複雑な実装をしたのかが見たいのか?
-> 困難に直面した際、個人でどのような行動をとったかが見たいのか?
-> 困難に直面した際、チームでのどのような行動をとったかが見たいのか?
etc...
「開発以外でも、人生において挫折した経験は?」
-> そもそも何が知りたいねん。特に挫折がない人はどうすんねん。浅い人認定か?こんな浅い質問で?
-> おそらく、困難に直面した際にどういう反応をしたのかを見たいのかなという印象でした。それなら、過去に社内で起きた困難をベースに質問を作成して、回答を求めた方がより有意義なのではと思ったり。
何を意図した質問や?意図がわからんとこっちも答えづらいねん!!
はっきり意図を伝えないコミュニケーションで本当に見たい部分が見られているのか?
ちなみに最後の挫折への回答は、簡単にいうと浪人までした大学入試に失敗したこと。
幸い、なぜ浪人までして失敗したかの自己分析もしていて、仕事に活かしている部分があったので、それについて答えました。
答え方としては悪くないと思いますが、質問の意図にあった回答かは分かりません。
3.面接官はあくまで一会社員
プロダクトのコンセプトや、どのような価値を提供するかなど、ビジネスをしっかり考えながら個人開発をしているって、個人的にはかなりのアピールポイントだと思っていました。
まだまだ未熟ですし成功もしてませんが、
- 先の目標を立てて実際に行動に移す(自主性)
- ビジネスという目的のために、どのような手段を使用するか考える(プロダクト意識)
- 限られたお給料の中からサーバー代や広告費を捻出(愛)
のように、自主性・プロダクト意識・愛(笑)の3点を”実際に体現”できているエンジニアはほぼいないと思います。
ですが、、、
まったくアピールにならん!!
伝えてはいますが、まず深掘りされません。
ただ、1社だけ会計系の大手さんは深掘りしてくださいました。
ですが基本的には、会社から見れば個人開発は規模が小さいし、面接官自身がビジネスをしたことないので、どのように扱えばいいのかわからないのかなという印象でした。
技術力”だけ”を見ていると言うなら、個人開発は切り捨てても良いと思います。
ですが、大抵は「プロダクト意識をもって〜」だの、「自主的に〜」だの謳ってます。結局は、その部分の見方がわからず、単に技術力”だけ”を見ることになっているのかなと思いました。
プロダクト意識を真に実感してる会社員なんかおらんやろ
結論
面接官は別に採用のプロでもスーパーマンでもありません。
なので、完璧な面接は存在しないですし、たった数時間で全てを見切れるわけでもありません。
面接もコミュニケーションですから、自分が下だと思わず、対等に議論するイメージで受けるのが良いのかなと思います。
今思うのは、逆質問を利用して自分からアピールポイントを深掘りしていくのも良いんじゃないかと思いました。
例えば
僕:どんなエンジニアと一緒に働きたいんや?
面接官:プロダクト意識が〜...
僕:個人開発しとってな、これが結構大変で...
のようなイメージです。
まぁ、なんやかんや書いたけど、結局タイミングと相性みたいなもんもあるとおもうわ。知らんけど。
また暇があったら第二巻も書きます。