Scalaの開発者スキル

公開されました。 最終更新日
Scala: ソフトウェアエンジニアの面接の質問

適切なScala開発者を見つけるのは非常に難しいことです。候補者やリクルーターから送られてくる山のような履歴書の中から、最適な人材を探さなければなりません。しかし、結局のところ、どの候補者が仕事をこなすことができるのか、どの候補者が単にあなたの組織に適していないのかを見分けるのは困難です。この記事では、あなたの仕事を少しでも楽にするために、適切なScala開発者を見つけるために何をすべきかを正確に説明しています。

1. Scala開発者を採用するために知っておくべきScalaのこと

Scala(/ˈskɑːlɑː/ skah-lah)は、関数型プログラミングをサポートし、強力な静的型システムを備えた汎用プログラミング言語です。 Scalaの設計は、2001年にローザンヌ工科大学(EPFL)のMartin Oderskyによって開始されました。関数型プログラミングとペトリネットのアイデアを組み合わせたプログラミング言語であるFunnelの研究を引き継いだものである。Oderskyは以前、Generic JavaやSunのJavaコンパイラーであるjavacの開発に携わっていた。

Scalaは主に、高度にコンカレントなアプリケーションのバックエンド開発に使用されます。

Scalaの主な利点。

  • オブジェクトは「デフォルトで」不変である(例:すべてのコレクション
    これにより、特にスレッドに関連して、言語のエラーが非常に少なくなります。
  • 進化したタイプシステム
    型が多いということは、Javaのような基本的な型システムを持つ言語に比べて、Scalaはより多くの種類のタスクを実行できるということです。
  • 関数型、オブジェクト指向、命令型などのプログラミングが可能
    タスクによって必要なプログラミングスタイルは異なります。他の言語では、1つまたは2つのプログラミングスタイルにしか対応していませんが、Scalaでは3つすべてに対応しています。つまり、Scalaの環境で作業する開発者は、他のプログラミング環境に切り替えることなく、より多くの種類のタスクを実行することができるのです。

2.IT業界の採用担当者がScalaを知る上で重要なことは何ですか?

何よりも、技術系の採用担当者がScala開発者のポジションを埋めるために知っておくべき3つの超重要事項があります。

  1. 現在、Scalaは最も人気のある 関数型プログラミング言語. 様々な用途がありますが、現在最も使われているのはビッグデータでしょう。
  2.  Scalaは、Java仮想マシンと呼ばれるJavaと同じランタイム環境を使用しています。そのため、Javaとの完全な相互運用性があります。つまり、JavaアプリケーションにはScalaのライブラリを、ScalaのアプリケーションにはJavaのライブラリを使用することができるのです。これにより、Scalaの開発者は、非常に大規模で多様なJavaのエコシステムにアクセスできるため、他の開発者よりも大きなアドバンテージを得ることができます。
  3.  Scalaは、JavaやC#などの言語に比べて複雑な構文を持っているため、開発者が敬遠してしまうことがあります。そのため、学習曲線が特に険しく、資格のあるScala開発者を見つけるのが難しい場合があります。

(2015年3月、Twitter社のプラットフォームエンジニアリンググループの元VPであるRaffi Krikorian氏は、2011年の時点では学習曲線を理由にScalaを選択していなかったと述べています。同月、LinkedInのSVPであるKevin Scottは、"Scalaへの依存度を最小限にする "という決断を述べている。2011年11月、Yammerは、新しいチームメンバーの学習曲線や、Scalaコンパイラのバージョン間の非互換性などを理由に、Scalaから移行しました。 ウィキペディア

Scalaの開発者を探す際には、この言語がもたらす参入障壁を乗り越えようとするエリートを探すことになると理解しておく必要があります。

3.選考段階でScalaのスキルを確認する方法

3.1.候補者の履歴書に基づくScalaスキルの技術審査

広範な技術審査を行う前に、開発候補者が機能的プログラミングに興味を持っているかどうかをチェックすることは価値があります。つまり、Haskell、F sharp、OCamのような関数型言語だけでなく、新しい言語を学ぶことにどれだけ興味があるかということです。

技術系採用担当者のためのScala用語集

Scalaのフレームワークとライブラリ バックエンドAkka, Finagle

ビッグデータSpark, Scalding

ウェブプレイ、リフト、スカラトラ

ユーティライゼーション。スカラズ、キャッツ

Scalaのテストツール ScalaTest, Specs2
Scalaのビルドツール sbt(シンプル・ビルド・ツール

Scala技術の各バージョン間の関係。

主にバージョン2.12が使用されており、バージョン2.11を使用している開発者は少数派です。バージョン3.0は2020年にリリースされる予定です。これらのScalaのメジャーバージョンはバイナリ互換ではなく、すべてのライブラリを再コンパイルする必要がありますが、マイナーバージョン(2.11.1、2.11.2など)はバイナリ互換で、すべてのバージョンはソース互換です。

Scala開発者のスキルを評価するためのScala証明書の意義

たくさんのコースがあります。最も人気があるのはLightbend社が提供しているもので、修了証も発行しています。また、多くの人がCourseraのScalaコースを利用しています。 スカラセンター.

これらのコースもチェックしてみてください。

証明書である程度の適性を示すことはできますが、候補者があなたにとって適切なScala開発者であるかどうかを判断する要素は他にもたくさんあります。

3.2.電話/ビデオインタビューでのScalaスキルの技術審査

通常、履歴書審査の後、採用プロセスの次のステップは、候補者との電話またはビデオ面接です。このプロセスの主な利点は、候補者に以下のような質問をすることができることです。 こうどうもんだい は、候補者が実際のある状況下でどのように反応するかを確認するためのものです。候補者が現場に招かれて1対1の技術面接を受けるかどうかの主な決め手となることが多いので、この段階では適切な技術的質問をすることが重要です。

もちろん、これらの質問は、あなたが募集しているスキルの種類によって異なります。とはいえ、ここでの質問は、あらゆるScala開発者のポジションを埋めるのに役立つはずです。

Q1: パターンマッチングとは何ですか?

なぜこれを聞く必要があるのか。 Scalaには、一般的なパターンマッチのメカニズムが組み込まれているので、知っておくことは重要です。このメカニズムでは、ファーストマッチのポリシーであらゆる種類のデータにマッチさせることができます。

Q2: ケーススタディとは何ですか?

なぜこれを聞く必要があるのか。 CaseクラスはScala独自のクラスです。実際には、通常のクラスにいくつかの条件を追加しただけのものです。Caseクラスは、デフォルトでは不変であり、パターンマッチによって分解可能であり、参照ではなく構造的な同等性によって比較され、インスタンス化と操作が簡潔に行えます。

Q3:Scalaに実装されているオブジェクト指向のパターンは?

なぜこれを聞くべきなのか:Scalaの開発者が知っておくべきオブジェクト指向のパターンは主に3つあります。Singletonでは、ScalaはSingletonパターンを言語で直接実現します。Valueオブジェクトパターンは、Tuple、type、caseクラスを使って実現できます。最後に、Scalaには遅延初期化を提供するlazyキーワードがあります。

Q4: traitとは何ですか?また、Javaに相当するものはありますか?

なぜこれを聞く必要があるのか。 Traitsは、Javaのインターフェイスに似ており、部分的に実装されています。

特定の技術的な質問に加えて、候補者が特定の状況下でどのように行動するかを判断するのに役立つ行動的な質問も数多くあります。

Q5: 過去2年以内に商業的な経験をしたのはどの技術ですか?担当した技術は何ですか?最大の成果は何でしたか?

なぜこれを聞く必要があるのか。 すべてのプログラミングスキルが同じというわけではありません。開発者は多種多様な興味を持ち、様々な技術に手を出していますが、機能的な実用知識を持っているのか、単に手を出しただけなのかを確認することが重要です。この質問は、開発者がその技術を商業施設でどのように使用したかを示すのにも役立ちます。

Q6: あなたが価値があると思うJavaのオープンソース・ライブラリとその理由は何ですか?

なぜこれを聞く必要があるのか。 前述したように、ScalaはJavaと相互運用性があります。Javaにはより多くのライブラリがあるので、候補者がこれらのライブラリをどれだけ使いこなせるかによって、Scyllaエンジンの効果が変わってきます。この質問は、候補者がScala以外のどのようなライブラリに精通しているか、また過去にどのように使用していたかについての洞察を与えてくれます。

Q7:履歴書にフレームワークXを記載されていますね。あなたはそれについてどう思いますか?良い選択だと思いますか?

なぜこれを聞く必要があるのか。 開発者の真の価値は、単に言語の知識だけでなく、プロジェクトを効率的に遂行する能力にあります。この質問は、開発者がソフトウェア開発を強化するためにこれらの外部リソースをどれだけ快適に使用できるかの核心に迫るものです。

3.3.オンラインコーディングテストによるScalaスキルの技術審査

電話でのスクリーニングは、候補者の履歴書と同様に多くの情報を提供してくれますが、最終的には候補者のコーディングスキルを判断する必要があります。結局のところ、これまで述べてきたスクリーニング方法では、候補者がコーディングできるかどうかを実際に知ることはできません。そのためには、コーディングテストが必要なのです。

現在、コーディングテストには様々な方法があります。ホワイトボードを使ったインタビューから、アルゴリズミックなテストプラットフォームまで、さまざまな方法があります。残念ながら、これらの方法のほとんどは、十分な情報を得た上で判断するために必要な情報を与えてくれません。データ構造とアルゴリズムは、ソフトウェアの基本的な構成要素ですが、同時にソフトウェア開発者の日常業務とはほとんど関係がありません。それは、バックホーのオペレーターにシャベルで穴を掘ってくれと頼むようなものです。技術的には土をどれだけ動かすことができるかをテストしているのですが、本当に知りたいのは、利用可能なツールを使って、限られた納期の中でどれだけ効率よく巨大な穴を掘ることができるかということなのです。

同じように、採用プロセスにおいて基本的なスキルをテストすることで時間を無駄にしたくはありません。むしろ、効率的なソリューションを時間通りに提供するために、開発者が利用可能なすべてのツールとリソースをどのように使用するかを確認したいのです。そのための最良の方法は、ワークサンプルテストでしょう。このブログでは、ワークサンプルを作成する方法を紹介しています。 ワークサンプルテスト が、Scalaの開発者にワークサンプルテストを渡す際に気をつけるべきポイントは以下の通りです。

  • 言語のスキルだけでなく、自社で使用しているフレームワークやライブラリの知識もテストする必要がある
  • 多肢選択式の問題ではなく、プログラミングの課題に焦点を当てます。
  • 可能な限り、自社のコードベースを使用した実際のタスクを使用することで、候補者が御社で働き始めたときにどのような仕事をすることになるかを知ることができます。
  • テストを通常の仕事のように扱ってください。つまり、受験者が普段使っているようなライブラリやフレームワーク、一般的なリソースにアクセスできるようにしておくのです。あなたは、候補者の暗記力をテストしているのではありません。それよりも、素晴らしいソリューションを生み出せるかどうかを知りたいのです。

この種のプラットフォームの主な利点は、テストが自動的に配信されるため、受験者は世界のどこからでもテストを受けることができることです。それだけでなく、このプラットフォームは、貴社の技術スタッフが何も言わなくても、コードの品質やソリューションのパワーを自動的に評価します。これは、候補者がどれだけ仕事をこなせるかを読み取るための効率的な方法であり、貴社のスタッフにとっても候補者にとっても非常に便利なものです。つまり、候補者がパイプラインから外れることが減り、高価な開発者がリクルート活動に費やす時間が減るのです。

著者 - アダム・ウォルスキー

写真:Adam Warski Scala開発者に関する記事の著者 の創業者兼CTOです。 ソフトウェアミルアダムは、Scala、Akka、Java、その他の言語や興味深い技術を使ったカスタムソフトウェアのエンドツーエンド開発者です。ブロガー、講演者、オープンソースの貢献者として頻繁に活動しており、SoftwareMillのブログでアダムの情報を得ることができます。ポーランドに拠点を置くSoftwareMillは、革新的なアプリケーションを構築し、優れたプロジェクトを救済するとともに、顧客との密接なパートナーシップを築いています。

4.DevSkillerがすぐに使えるオンラインScalaコーディングアセスメント

DevSkillerでは、開発者のテストに自社のコードベースを使用するオプションを提供していますが、すべての企業が独自のワークサンプルテストを構築する時間やリソースを持っているわけではありません。そのような企業のために、DevSkillerの既製のScalaテストがあります。これらのテストでは、抽象的な概念を扱うのではなく、候補者に実際の仕事を与えてテストするもので、候補者が仕事の初日に遭遇するような仕事をします。

アッカ
シニア
テストされたスキル
持続時間
102 分以内
評価
自動
テストの概要

選択問題

知識評価 スカラ, 関数型プログラミング

プログラミングタスク - レベル: ハード

Scala|Akka Streams|IoTデータストリーミング - IoTセンサからのデータストリームのための時間ベースのアグリゲータを定義します。

スカラ
ジュニア
テストされたスキル
持続時間
66 分以内
評価
自動
テストの概要

選択問題

知識評価 スカラ

プログラミングタスク - レベル。簡単

Scala|Spark|ML Logs Transformer - ログの変換パイプラインの実装を完了します。

スカラ
ジュニア
テストされたスキル
持続時間
96 分以内
評価
自動
テストの概要

選択問題

知識評価 スカラ

プログラミングタスク - レベル。簡単

Scala|ScalaCalc - math library - ポリゴン演算を実装することでジオメトリモジュールの機能を拡張します。

スカラ
ジュニア
テストされたスキル
持続時間
88 分以内
評価
自動
テストの概要

選択問題

知識評価 スカラ, アッカ, スカラアクターズ

プログラミングタスク - レベル。中程度

Scala|ヘッダパーサ|簡単なScalaパーサを用意します。

アッカ
ミドル
テストされたスキル
持続時間
76 分以内
評価
自動
テストの概要

選択問題

知識評価 スカラ, アッカ, スカラアクターズ

プログラミングタスク - レベル。中程度

Scala|Akka|TCP ストリームメッセージ - TCP ストリームメッセージのクライアントハンドラを実装し、TCP ストリームメッセージを処理して結果を送信者と databaseSaverActor に返す。

イメージソース。 ゴダタフィ

シェアポスト

技術者の採用についてはこちら

ラーニングハブに登録すると、有益な情報をメールで受け取ることができます。

シームレスにコーディングスキルを検証&開発

DevSkillerの製品をご覧ください。

セキュリティ認証とコンプライアンス。お客様のデータの安全性を確認します。

DevSkillerのロゴ タレントブーストのロゴ タレントスコアのロゴ