スクリーンショット_2020-03-11_15.49.13

採用活動でエンジニア250人と面談・ヒアリングしたので簡単にサマってみました


今回のマクアケ開発本部ではエンジニア・デザイナー採用フェーズで、2019年10月〜2020年3月までで250名弱のエンジニアと会ってきました。
その中で、採用に至った人も至らなかった人も含めて、お決まりの角度で聞いた質問と、それに対する回答をサマライズしてみましたので共有します。
象徴的な回答傾向へのレビューも併せてご覧ください。

まずは前提となる参考情報を。
あくまでこんなスタックを持った開発チームのCTOからのビューであることをご了承ください。

マクアケの技術スタック

アプリケーション用メイン言語
- PHP & FuelPHP
- Swift
- Kotlin

Worker / API / Batch
- Go
- 一部PHP

データストレージ(永続ストア)
- Aurora
- Spanner

データストレージ(KVS)  
- memcached
- redis

Infra Structure Ecosystem
- AWS ALB Native
- AWS ECS
- GCP GKE(Kubernates)
- Circle CI
- Terraform

Queueing & Message
- AWS SQS
- AWS SES

Temporary Resources
- Lambda
- Fargate tasks
- Serverless Aurora

Dashboard(Engineering)
- Performance & Metrix:Mackerel & NewRelic
- Log & Alert:datadog & Sentry

Dashboard(Business)
- redash
- metabase

ML
- Python(Scikit-Learn)
- Elastic Search
- BigQuery ML
- AWS SageMaker

さて、見てみましょう。

アプリケーションスクリプト言語

- PHP経験者:72%
- PHPを書きたい、書いても良いと思っている:100%

PHP以外で経験がある言語を教えてください(レジュメ調査&ヒアリング)

スクリーンショット 2020-03-11 18.31.46

- Java:67%
- Ruby:44%(ちなみに内訳の100%がRuby on railsでした)
- C:32%
- Python:17%
- node / typescript:19%

5年ほど前はPHPは未経験から流れてくる勢がもう頭打ち感があったのですが、ruby勢やnode勢もバックエンドをPHPでも書けるようにはなっておいた方がいいのでは、という感覚を持っているようだったのが結構意外でした。
100万MAUを超えてくるあたりのモノリス化していくアプリケーションをそこそこ長めに持たせる事ができる懐がある言語なので、そうしたフェーズのエンジニアに特に愛されているな、と感じました。
逆にruby(on rails)勢はmodelのリファクタリングとActiveRecordの実装レベルを上げてデータストアへの負荷をAIR(Application Instance Resources)に逃す実装ができるかどうかがビジネス上のアーキテクチャ寿命を決定づけている側面があり、実装リーダーやチームがそういうアーキテクチャ実装に触れた事があるかどうかでrailsユーザーのrailsに対する印象が随分変わるようでした。
C、Pythonについては大きく社会意識が変わった印象はありませんでした。
nodeは1st Programming languageに選んだ層がエコシステムに辛みを覚えて次の言語を探している、もしくはバックエンドを既にgo(やruby・phpなど)に鞍替えしている感じでした。
Typescriptは一定人気があるが、特にビジネス観点い邪魔されずにじっくりと育て上げていくプロダクトチームに好かれている印象でした。採用するならワーカーのキャラクターが偏っていることを覚悟すべし、です。

Worker / API / Batchなどを書く場合

Worker / APIを書いた事がある言語は?(これから書くならどの言語がいいですか?)
- PHP:65%(32%)
- Java:61%(70%)
- Kotlin:56%(78%)
- Go:34%(89%)
- Scala:31%(66%)
- C:26%(21%)
- Python:5%(22%)
- Erlang / Elixir:5%(7%)

スクリーンショット 2020-03-11 18.39.59

最も大きな印象は、Java、Scala、Kotlinをはじめ、JVM強し!でした。エコシステムの強さを感じます。
これは連綿とlinux ベースのアーキテクチャがメインだった時代からlambdaやStep functionが強かった頃までの歴史を物語っていそうです。
Goは2018年のlambda対応や、Docker、fargateベースのtaskクラスターなどの出現により、だいぶハンドリングが楽になって身近になってきた感があります。
Pythonへの期待値が上がっているのも同じ理由と、Python特有の事情で言えば、やはりScikit-learnなどに基づいたML事情もあるでしょう。
個人的にはerlangいい言語なのになぁ…。って思います。OTP Supervisorを取り巻く実装に興味があるかどうかと書いた経験、書きたい要望リンクしている気がしました。
Cは一定の人気がある。あり続ける。本当に安定している。
そして5年ほど前に当時あれほど聞いたfunctional programmingについての言及はそのほとんどがClear Architectureに収束していました。

クラウドIaaSについて

使った事がある(含使ってみたい)クラウドIaaS
- AWS:76%(100%)
- GCP:44%(91%)
- Microsoft Azure / IBM:57%(81%)
- さくら:66%(71%)
- heroku:70%(70%)
- Kubernetes(GKE):40%(90%)
- Linode:17%(17%)
- 使った事がない:21%

スクリーンショット 2020-03-11 18.44.10

ここ5年(というか10年)くらいの動向としては、herokuの存在感が下がってきた事でしょうか。他社もずいぶん導入が楽になりましたしね。
GCP、Azureは完全に市民権を得た感がある。
AzureはやっぱりIaaS付属としては最もエンコーダーが優れているのもあって、動画勢に人気。
長年運営しているシステムや、コストパフォーマンスをちゃんと見る必要に駆られたフェーズのシステムにとってさくらはまだまだ欠かせない存在であることも確認できた。
コンピューティングリソースの値付けは魔法の成分が超絶大きいので、まだまだ活気ある競争は続く、と思う。
KubeConに行った時にも感じたことだけど、GCPはやはりギークに愛されている。
コンピューターサイエンスを通じ、コンピューティングリソースを再定義するんだ!というくらいの思想を持ったようなギークにとっては、GCPはとても興味を惹かれるプラットフォームのようで、逆にそこまでエンジニアリングに深入りしていないエンジニアにとっては「難し過ぎる」の印象が拭えないようだった。
会社としてどっちを選ぶかは、チームの性格がどうなのかもよく考えて選ぶべきだなって改めて思いました、


ミドルウェアについての理解

MiddlewareとしてIaaS以外のPaaSを使った事がある:21%
- ElasticCloud:12%
- ElephantSQL:7%
- OneLogin:11%

アーキテクチャに対するミドルウェア経験
- RDBMSを取り入れたアーキテクチャを運用した事がある:100%
- LBを介したスケーリングプラットフォームを運用した事がある:71%
- 非同期処理を理解できる:69%
- KVSを取り入れたアーキテクチャを運用した事がある:61%
- 重演算データストア(BigQuery・SageMaker・Redshiftなど)の経験がある:61%
- Queueを取り入れたアーキテクチャを運用した事がある:37%
- fluentdなどのログアグリゲーターを取り入れたアーキテクチャを運用した事がある:34%
- microservice経験:33%
- Embulk / digdagなどのETL基板向けデータトランスレータを取り入れたアーキテクチャを運用した事がある:30%
- Sidecarを取り入れたアーキテクチャを運用した事がある:20%

スクリーンショット 2020-03-11 18.55.09

①アプリケーション × RDBMSの枠を越えた事があるか
②Load Balancerの経験
③KVS
④Queue(非同期処理)
.
.

というような形で求められるアーキテクチャはプロダクトのフェーズによって変わっていくが、これは職務経歴書に記載されている案件で関わっているフェーズがそのまま反映されている印象だった。
どんな年齢でも④あたりを超えてくると、どこでも活躍できる人材に一歩近づくし、30歳を超えて①のまま、という感じだとやれる仕事がかなり限られてくるなぁってちょっと心配になったり。
memcachedは経験があるがredisはやったことない、みたいな感覚でのやりとりになることも多いけど、
KVS→インメモリなら...永続保持なら...
みたいな感じでミドルウェアの特性を構造化して語れるような人材に出会うと「この人は長くやっていける人だなぁ」なんて思う。
が、意外と少ない。

経験あるダッシュボード

- Google Analytics:91%
- Google Data Studio:22%
- phpMyAdmin(?):66%
- redash:61%
- datadog:55%
- ClouWatch:55%
- kibana:46%
- mackerel:41%
- AirBrake:41%
- zabbix:41%
- NewRelic:38%
- Sentry:32%
- metabase:31%
- SignalFX:7%

スクリーンショット 2020-03-11 18.59.18

僕はダッシュボードとか専門のSaaSを使ったのはRails初期のairbrakeとNewRelicが最初だった(それまではセルフマネージでzabbix一択)のですが、airbrakeはあんまり今はメインストリームじゃないんだね。笑
Makuakeでもメトリクスからログストア、パフォーマンス監視やアラーティングまでdatadogに集約していく動きをしていますが、その動きを目指しているチームは意外と多い印象でした。
SignalFXやdatadogはやはりmicroservice勢に愛されていますねぇ。Clasp on GAS&metabaseでリアグリゲーションしているケースもあって、モニタリングとダッシュボーディングは工夫の時代を迎えています。
Speeeが昔やってた管理画面チラ見せナイトとかを彷彿とさせる。
AnalyticsのデータをData StudioでリアグリゲーションするGoogleコンボも結構定着しつつある。
が、全体的に定番感があるツールはまだない。BIのredash、Metrixではdatadogが一番近い。気がする。
NewRelicはパフォーマンスを追い込む際のツールとして根強い人気。エージェントが重過ぎる問題はあるけれど。
phpMyAdminはダッシュボードとして認識されているのか?と思うかもしれないけど、MySQLコンソールとして根強い人気だったから揚げておく。


リポジトリツールとか、課題管理、データストア、UXとディレクションなど、他にも様々な切り口のサマライズができそうだけど、めっちゃ分量が増えたのでこのくらいにしておこう。
切り口のご希望があればコメントください。時間あるときにやります。


この記事が気に入ったらサポートをしてみませんか?