
エンジニア採用を進める上で、ある程度のエンジニアリングへの理解は必要不可欠です。その最たるものの一つが、プログラミング言語への理解だと言えるでしょう。もちろん、プログラミングコードを書けるようになる必要はありませんが、どんな言語があって、どのような活用方法があるのかの勘所を身につけておくことで、自社のエンジニア採用ニーズを正しく把握し、またスカウトサービスで検索する際に適切な言語の組み合わせ方ができるようになると言えます。
そこでQiita Jobsでは、2021年6月9日に「採用担当が押さえておくべきプログラミング言語から見るスカウト対象の広げ方」というタイトルでセミナーを実施しました。これは、エンジニア採用を行うために知っておくべきエンジニアリングにまつわる知識をお役立ち資料「採用担当者が押さえておくべき プログラミング言語から見るスカウト対象の広げ方」を元に解説していくというものです。本記事では、こちらのセミナー内容についてレポートします。エンジニアについての理解に悩まれている採用担当者は、ぜひご覧ください。
登壇者プロフィール

清野 隼史(きよの としふみ)
Increments株式会社 Qiita開発チーム リーダー
アルバイトを経て、2019年にエイチームに入社。Qiita Jobs開発グループでQiita Jobsの開発に携わる。2020年よりQiita プロダクトマネージャーに就任する。趣味はサウナ。
- プログラミング言語の考え方について
- 手続き型言語と関数型言語
- 静的型付け言語と動的型付け言語
- プログラミング言語の4象限を活かす
- スカウト対象人数の増やし方
- まずは同じ象限に属する言語同士からスタートしてみましょう
- セミナー資料ダウンロード
プログラミング言語の考え方について

清野:今回はプログラミング言語を大枠で分類し、それぞれの考え方や特徴について見ていきます。具体的には、「手続き型」と「関数型」、「静的型付け」と「動的型付け」という2軸で、大きく4つのカテゴリに分類することができます。
--結構難しそうですね。
清野:かなりとっつきにくい印象があるかもしれませんが、同じカテゴリのプログラミング言語は似通った特徴をもつので、比較的習得がしやすいということ。これらを理解することで、例えばスカウトサービスで経験言語から求職者を検索する際に、ピンポイントで自社が求める言語はもちろん、対象者が少ない場合にはその言語と相性の良い条件も含めて検索をすることで、自社の採用要件とマッチした求職者と出会える可能性を高めることも可能です。
手続き型言語と関数型言語
ーーではまずは、Webアプリケーションにおける一般的な構造について説明をお願いします。
清野:まずは「手続き型言語」です。手続き型言語か関数型言語かの違いについては、主に「どのような考え方でプログラミングを行っていけるか」というところの違いになります。
そもそものプログラミング言語とは、日々私たちが利用しているWebサービスやアプリ、システムを作るために用いられている、コンピュータ専用の言語です。その中で手続き型言語とは「コンピュータに命令したい処理を順番通りに記述する言語」だと言えます。
--どういうことでしょうか?
清野:例えば卵焼きを作るという結果を表現するとしたら、以下のように、具体的な手順を順番通りに記載していくようなイメージです。
- 卵を割る
- 卵を混ぜる
- 卵を焼く
--私たちが普段考える流れと同じなんですね。清野:そうですね。順番通りに記載していくので、コードを書きやすい、という特徴があります。一方で、自由に書けるがゆえに関数型言語と比べるとバグが発生しやすい、といった傾向もあります。
代表的なものとしては、JavaやRubyなどが挙げられます。
清野:次に関数型言語とは、コンピューターに命令したい処理について、「関数」を用いた記述が推奨された言語のことです。手続き型言語が「何に対してこういう処理を行っていく」という考え方であるのに対して、関数型言語は「どのようなものを変換していくか」にフォーカスしていくものになります。
--ちょっと難しいですね。関数って、どういうことですか?清野:関数とは、変換器だと思ってください。変換器をどんどんと作っていき、それを組み立てていくことで、何かの処理を進めていくというイメージです。
先ほどの卵焼きの例で考えると、以下のような構造のものだと理解してください。
- 卵を入れると卵焼きを出力するという関数を作る
- 作った関数に卵を入れる
--卵焼きマシーンを作って、最後に卵を入れる、みたいなイメージですかね?清野:そうですね。手続き型言語を手作業での処理に見立てると、関数型言語は工場のようなイメージで捉えると良いでしょう。関数という形で処理をすべて定義するため、書き手でなくてもコードが読みやすく、バグも起こりにくいという特徴が挙げられます。代表的なものとしてはHaskellやScalaなどが挙げられます。
静的型付け言語と動的型付け言語
清野:次は、静的型付け言語か動的型付け言語です。これは、データをどうやって扱うかの違いによる分類となります。
--先ほどの例だと、「卵」が扱うデータということですか?
清野:そういうことです。「静的型付け言語」とは、変数などのデータ型の宣言が必要なプログラミング言語です。つまり、「データとはこれです」と、プログラマーが直接明示するような言語になります。
--なかなかイメージしづらいですね。
清野:また卵焼きの例を考えてみましょう。卵焼きを作る時の卵の選定時に、「生卵でなければならない」という定義をするのが静的型付け言語になります。
- 卵を割る(ここの卵は絶対に生卵)
- 卵を混ぜる
- 卵を焼く
--なるほど。清野:データ型の宣言が必要なので、手間はその分かかるのですが、リリースする前にエラーやバグに気づきやすいという特徴があります。
代表的なものとしてはSwiftやTypeScriptなどが挙げられます。
清野:これに対して動的型付け言語とは、変数などのデータ型の宣言が不要なプログラミング言語になります。つまり、データがどのような値なのかはプログラムに任せますよ、という考え方の言語です。
--先ほどの卵焼きの例で考えると?清野:卵焼きを作る際の卵の選定時に、生卵かゆで卵かなど卵の状態は定義せずに、プログラミング言語に判断を任せることになります。
- 卵を割る(卵の状態は定義せず)
- 卵を混ぜる
- 卵を焼く
--そうなると、生卵が入るべきところに、ゆで卵が混入する可能性もあるということですか?清野:そうですね。データ型の判断はプログラミング言語に任せるので、そういったことも起こりえます。リリース後に実際にプログラムを実行してみないとエラーやバグに気づけないですが、一方でデータ型の宣言が不要なので記述量が少なく済むという特徴もあります。
代表的なものとしてはJavaScriptやPythonなどが挙げられます。
プログラミング言語の4象限を活かす


清野:以上の分類を前提に、代表的なプログラミング言語をマッピングしたものがこちらになります。
--同じカテゴリの中の各プログラミング言語の違いは、どう考えれば良いのでしょうか?清野:そもそもの文法が違うのと、それぞれの言語によってコンセプトや、課題解決に向けたアプローチが違います。例えばRubyはオブジェクトというものを使うだとか、JavaScriptは手続き型言語だけど関数型言語のような側面もあったりだとか。
表では明確に分かれるようにしていますが、実はこの境界線って結構あいまいなんです。
--なるほど。ちなみに、「ライブラリ」とか「フレームワーク」といった言葉もありますよね?これはどんな概念なんでしょうか?
清野:これらはまたレイヤーが違う概念ですね。こちらに整理しています。

清野:プログラミングをしていると、同じような処理を書くことがあるんですよね。それらを取り出してまとめたものが、ライブラリになります。毎回同じことを書かなくても、ライブラリを呼び出せば良いわけです。
さらにその上のレイヤーとして、フレームワークがあります。フレームワークは、ライブラリを用いて、ユースケースに沿った骨格をまとめたものになります。「Webアプリケーションを作りたい」といった時の枠組みなどになりますね。
以下、フロントエンドとサーバーサイドを中心に、それぞれをまとめたものになります。
〈クライアントサイド(フロントエンド)編〉

〈サーバーサイド編〉


〈その他〉

スカウト対象人数の増やし方

--次に、希望のエンジニアがどれくらいの人数いるかの目安についてです。こちらの画面はなんでしょうか?
清野:こちらは、日本のエンジニア人口に対して、条件を加えていったときにどれだけ対象エンジニアの人口があるかをチェックできる弊社のツールです。転職意欲が中くらいで、職種がフロントエンドエンジニアで、言語としてはTypeSript、スキルレベルがリーダーレベルで居住地が東京の年収幅500〜800万円程度の対象者は、全国で221人いるということになります。
ちなみに日本のエンジニア人口の母数は、「IT人材白書2020」に準じて364,420人としています。
--なるほど。条件を加えていくと、だいぶ減ってしまいますね。例えば「TypeScript」でなくとも、それに準じたプログラミング言語スキルで探すと、どうなるのでしょう?
清野:例えば象限こそちがうものの、JavaScriptは似ている言語だと言えそうです。職種の部分を「JavaScript」にしてみると、他が同じ条件であったとしても、3倍ほどの人数がスカウト対象として増えることになります。
このように、プログラミング言語の属性や特徴を知っているだけで、採用候補者の対象を広げることができると言えます。

清野:それでは、実際の検索結果をQiita Jobs画面ベースで確認してみましょう。こちらの求人内容を見ていきます。

--Ruby on RailsやJavaScriptについては必要だとして、Elasticsearchって、プログラミング言語ではないですよね?
清野:そうですね、ミドルウェアですね。このような専門的なスキルを最初から検索条件に設定していると、一気に対象人数が減ってしまうので、最初は広めの条件で設定し、そこから必要に応じて徐々に絞っていく、というやり方が良いでしょう。
--なるほど。そうすると、試しに以下のような条件を設定すると、該当するQiita Jobs上の求職者は45名、ということになりますね。

清野:ちなみに、このようなQiita Jobsに登録しているプログラミング言語での検索だけではなく、例えばQiitaで投稿しているプログラミング言語ベースで検索するのもありでしょう。

まずは同じ象限に属する言語同士からスタートしてみましょう
今回は「採用担当者が押さえておくべき プログラミング言語から見るスカウト対象の広げ方」というテーマで、プログラミング言語のカテゴリ分けと、その活かし方についてお伝えしました。4象限を理解することで、エンジニア採用におけるスカウト対象を 広げることができることが、お分かりになったのではないでしょうか。同じ象限に属する言語同士が最も習得しやすいので、まずはその中で検索条件を広げてみて、次に対象を広げるのであれば、 横の象限、その次が縦の象限の順に広げていくことがおすすめとなります。
Qiita Jobsでは、今回のような採用担当者に役立つオンラインセミナーを定期開催しております。興味のあるものがあればぜひご参加ください。
取材/文:長岡 武司