4 вопроса для разработчика Scala

Представляем вам перевод статьи Джейми Аллен, который является директором глобальных сервисов в Typesafe, базирующейся в Сан-Франциско.

В ней он рассказал о том, какие вопросы могут быть на собеседовании на должность Scala-разработчика и о том, как на них лучше ответить.

4 вопроса для разработчика Scala

Медленно, но верно Scala набирает обороты, и вместе с этим растет спрос на программистов, которые с ним знакомы. Несмотря на то, что Scala занимает всего лишь 39 позицию в августовском рейтинге TIOBE, ему предсказывают невероятную популярность и ведущую роль в корпоративной сфере к 2018 году.

Как следует готовиться к собеседованию на вакансию разработчика Scala? Джейме говорит, что обычно рекрутеры стараются определить общий уровень понимания языка, а затем пытаются узнать о знании библиотек и основных классов.

  • Как отвечает большинство людей: Nil — это конец списка. Null – отсутствие значения. None — это значение Option, если в ней ничего нет.
  • Что следует ответить: Null – это тип, который представляет отсутствие информации для сложных типов данных, наследуемых от AnyRef. Nothing – это низший тип всей системы Scala, включающий все типы AnyVal и AnyRef. Nothing обычно используется как return из метода, который сработал с ошибкой или выдал исключение.
  • Почему нужно ответить именно так: Первый ответ неплохой, но разработчик не понимает, что перечислил только термины и не объяснил разницы между типами и понятиями. К тому же он не рассказал о типах данных в Scala. Способность объяснять подобные, часто вводящие в ступор части языка, показывает понимание основных концепций от систем типов до коллекций контейнеров в среде выполнения JVM. Даже если вы не используете эти типы и понятия, они обязательно всплывут во время работы, поэтому необходимо знать, что им нужно.
  • Как отвечает большинство людей: Option — это тип-оболочка, который позволяет избежать NullPointerException в коде. Для этого можно использовать методы get() и map().
  • Что следует ответить: Option — это контейнер, который предоставляет возможность различия внутри системы типов, которые могут иметь нулевые значения и тех, которые не могут. Значение можно получить с помощью get(), но предпочтительнее использовать функции высшего порядка вроде map, flatMapand foreach. Использовать map нужно, когда необходимо вернуть значение другой Option, flatmap для того, чтобы сгруппировать несколько значений Option вместе, foreach для операций, которые влияют на значение внутри Option без возвращения нового значения и для того, чтобы вывести их сочетание кратко и ясно.
  • Почему нужно ответить именно так: Второй ответ демонстрирует понимание нескольких всеобъемлющих концепций. Например, в нем объясняется, как система типов предоставляет семантическое значение, а также время выполнения компиляции, что делается и когда. Это также показывает, что у вас есть понимание основ функционального программирования, например, того как использовать лямбды или именованные функции с функциями более высокого порядка. Более того, такой ответ показывает, что вы думаете о функциональной композиции.