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


Оглавление (нажмите, чтобы открыть):

Как опробованы разработчики Scala [закрыто]

Как берут интервью у программистов Scala? Каковы аспекты, которые ищет интервьюер при опросе разработчика Scala?

4 ответа

Во-первых, я бы сказал, подумайте, зачем вам разработчик Scala. Это действительно Scala, что вам нужно? Подумайте о том, что происходит вместе с Scala (IDE, инструменты сборки, libs, еще один уровень сложности выше Java и т. Д.). Вернемся к вопросу. Это происходит в двух аспектах: теоретическое понимание и практические способности. не позволяйте «теории» обмануть вас. Это так же важно в Scala, поскольку практичность важна в Java.

Теоретическое

  • Посмотрите, знают ли они, что такое функциональная парадигма. Попросите их сравнить две парадигмы (FP vs imperative that is) в философии и практике. Если они могут привести примеры из языков, которые имеют полную или частичную поддержку FP, то это плюс для них.

Теория и практика смешаны

  • Посмотрите, действительно ли они могут правильно выполнять функциональное программирование. Спросите их о списках, картах, записях и рекурсии. Затем идут замыкания, лямбды, редукция, функции более высокого порядка и неизменность.

Практические

Посмотрите, могут ли они реорганизовать неотложный фрагмент кода в хорошую функциональную альтернативу (см. выше). Попробуйте цикл, который реализует математику или что-то в этом направлении.

Найдите свой вкус для функционального и императивного стиля. Выбирайте более функциональный стиль, но будьте осторожны, чтобы он не доходил до крайности со стороны разработчика.

Посмотрите, насколько они знают о Scala libs (например, лифт, отправка и т. д.) и инструменты (например, SBT, fsc, IDEA).

Посмотрите, как хорошо они могут использовать Java (code -and-tools). Scala тесно связана с Java специально в более серьезных средах. Знание этого — большой плюс.

Теоретическое

  • Попросите их сравнить Scala с Java (PHP, C ++, Objective C или что-то еще) и попросить их рассказать вам, что не так с Scala. Посмотрите, понимают ли они проблемы, а также преимущества. Попросите их дать примеры в реальном мире, когда недостатки Scala могут вызвать проблемы (например, для новых Joes трудно продвигаться, это незрело, так как поддержка очень ограничена по сравнению с Java и т. Д.).

Практические

Посмотрите, связаны ли они с сообществом. Спросите их о Мартине Одерском и Дэвиде Поллаке. Попросите их назвать несколько проектов Scala и описать их вам (Facebook, Twitter, FourSquare, DBPedia и DBPedia SpotLight). Посмотрите, знают ли они, как именно Scala используется в этих проектах. Читали ли они статьи, смотрели видео и т. Д.?

Спросите их о книгах (их всего несколько). Чем больше они знают, тем лучше.

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

  • Scala для привилегированных (я чувствую себя умным, я чувствую себя настолько отличным от других Джо, у меня новый блестящий кандидат наук, я ненавижу императив, потому что это для отсталых, Java поверхностна, Scala настолько элегантна , и т.д.). Этот тип неэффективен в серьезных проектах и ​​с ним трудно справиться.
  • Я влюблен в синтаксис Scala и буду любить писать свой DSL везде, где я получаю шанс закодировать. Этот вид любит использовать особенности Скалы до последней капли деструктивным способом. Они чувствуют себя прекрасно, чтобы писать критический и чрезмерно сжатый код, чтобы быть неразборчивым. Этот вид особенно опасен, так как их код не читается. Их дешевая распродажа — их любовь к перегрузке оператора, странные имена и письмо с одним слоем.
  • Я придерживаюсь Scala до последней капли, несмотря ни на что. Это наивный пуристский тип. Они не могут торговаться, а проект страдает, когда требуется гибридный подход, как в случае с проектами реального мира.

P.S: Если вы нашли хорошего Джо, то, пожалуйста, просите меня, потому что нам нужны некоторые;)

В реальном интервью просто знание Scala — это половина выигранной битвы. Наем хорошего программиста всегда сложно, независимо от языка!

Программисты Scala, как правило, приходят на этот язык, потому что они уже были на вершине своей игры на Java и хотели «перейти на следующий уровень».

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

Мне нравится видеть решения таких маленьких проблем, как это: Сделайте гистограмму результатов метания двух шестигранных кубиков 200 раз.

Кто-то с решением, вроде Даниэля Собрала, или этого от Кевина Райт: http://ideone.com/8LFs3 будет стоить более пристального взгляда.

Если ответ выглядит как Java-код, то заявитель может быть недостаточно далеко.

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

Я никогда не делал найма Scala, но я искал бы понимание того, как работают implicits, тип шаблона класса и основы функционального программирования.

Функциональное программирование вместо объектно-ориентированного

Разбираемся — как Scala использует преимущества обоих миров

Серия контента:

Этот контент является частью # из серии # статей: Путеводитель по Scala для Java-разработчиков

Этот контент является частью серии: Путеводитель по Scala для Java-разработчиков

Следите за выходом новых статей этой серии.

Вы никогда не забудете свою первую любовь.

В моем случае ее звали Табинда (Бинди) Хан. Это были безмятежные годы моей юности, седьмой класс, если быть точным, а она была красива, смышлена и, что самое замечательное, она хохотала над моими неуклюжими подростковыми шуточками. Мы «запали» друг на друга (как это тогда называлось), со взлетами и падениями в отношениях, длившихся преимущественно в 7 и 8 классах. Но к 9 классу мы расстались, это было вежливым способом сказать, что ей надоело на протяжении двух лет выслушивать однообразные и нескладные юношеские хохмы. Я никогда ее не забуду (не в последнюю очередь потому, что мы столкнулись друг с другом снова на 10-летней встрече одноклассников), но что более важно — я никогда не расстанусь с этими заветными (если несколько преувеличить) воспоминаниями.

Об этой серии

Тед Ньювард погружается в язык программирования Scala и берет вас с собой. В этой новой серии от developerWorks вы узнаете вокруг чего поднята такая шумиха и увидите некоторые лингвистические возможности Scala в действии. Код Scala и код Java будут показаны бок о бок, если таковое сравнение будет важно, но (как скоро выяснится) многие вещи в Scala не могут быть напрямую соотнесены с чем-либо таким, что вам знакомо из Java-программирования, но в этом и заключается основное очарование Scala! В конце концов — если Java-код способен это сделать, зачем же утруждать себя изучением Scala?

Java-программирование и объектная ориентированность стали первой любовью для многих программистов, и мы принимаем это с таким же уважением и полным благоговением, как и мое отношение к Бинди. Некоторые разработчики скажут вам, что Java-программирование уберегло их от адских мук в преисподней, порождаемой управлением памятью и C++. Другие скажут, что Java-программирование возвышает их над пучиной процедурной безысходности. Найдутся даже такие разработчики, для которых объектно-ориентированное программирование в Java-коде просто является «изначальной данностью этого мира» (а как же иначе — ведь это работало и при моих предках и при их предках до них самих!)

Однако, время неизбежно преодолевает все первые влюбленности и наступает момент двигаться дальше. Чувства изменились а участники этой истории стали зрелыми (и, будем надеяться, подучили несколько новых шуток), Но более значимо — изменился мир вокруг нас. Многие Java-разработчики осознают, что как бы мы ни любили Java-программирование, пришло время выдвигаться к новым горизонтам на наших «девелоперских» просторах и выяснить, как мы можем все это постичь.

Я буду любить тебя всегда .

В течение последних пяти лет обозначилась нарастающая волна недовольства языком Java. В то время, как кое-кто может указать на развитие Ruby on Rails как на основной фактор в этом смысле, я приведу доводы что RoR (в нотации, знакомой поклонникам Ruby) является следствием, а не причиной. Или же, выражаясь точнее, докажу, что факт восприятия Java-разработчиками Ruby следует из глубинной, более скрытой причины.

Попросту говоря, в программировании на Java проступает возраст.

Или, что будет точнее, возраст проступает у языка Java.

И действительно: когда язык Java впервые появился на свет, Клинтон (в свое первое президентство) восседал в офисе, а Интернетом регулярно пользовались лишь настоящие энтузиасты, главным образом потому, что соединение по телефонной линии было единственным доступным способом в домашних условиях. Блоги (сетевые дневники) еще не были изобретены, и все верили, что наследование является фундаментальным подходом в повторном использовании. Мы также верили, что объекты являются наилучшим способом моделирования мира и что Закон Мура будет всегда господствовать экспоненциально.

На самом деле — именно законом Мура были в крайней степени озабочены многие в индустрии. С 2002/2003 доминирующей тенденцией в микропроцессорных технологиях было создание процессорных модулей с множеством «ядер»: в сущности, множества процессоров на одном чипе. Это позволяет обойти Закон Мура, который говорит, что скорость процессоров удваивается каждые 18 месяцев. Ситуация с многопоточными средами, исполняемыми на двух процессорах одновременно, вместо того, чтобы выполнять стандартный круговой цикл на едином процессоре, означает, что код должен быть непробиваемой глыбой с точки зрения потокобезопаности, коль скоро такой код претендует на существование.

В академическом сообществе предпринималось множество исследований касательно этой специфической проблемы, приведших к изобилию новоиспеченных языков. Существенным недостатком выступал тот факт, что большинство из этих языков надстраивались над своей собственной виртуальной машиной или интерпретатором, означая таким образом (как делает и Ruby) переход на новую платформу. Кризис параллелизма — настоящая головная боль и некоторые из новых языков предлагают мощные решения, но слишком много корпораций и предприятий помнят миграцию с C++ на платформу Java каких-то 10 лет тому назад. Перемещение на новую платформу — это риск, который многие компании даже не собираются рассматривать всерьез. Многие, в действительности, по-прежнему зализывают раны от последнего перехода на Java-платформу.

Знакомимся со Scala.

SCAlable LAnguage — Масштабируемый язык

Почему Scala?

Изучение нового языка программирования — всегда нелегкая задача, особенно если язык требует совершенно иного мышления в подходах к решению проблем, а именно функционального подхода, принятого в Scala. И даже больше, когда речь идет о скрещивании подходов, наподобие слияния в Scala объектно-ориентированной концепции с функциональной. Постижение Scala требует времени, и с таким обязательством, давлеющим над вашим и без того напряженным планом работ, вы можете, в первом приближении, вовсе не разглядеть возврата по вложениям. Позвольте мне заверить вас в том, что Scala располагает целым рядом интригующих возможностей, многие из которых будут освещены в предстоящих публикациях этой серии. Ниже приведен неполный список того, что поможет вам увидеть выгоды от освоения этого языка. Используя Scala, вы сможете:

  • Создавать внутренние DSL — типа Ruby, благодаря гибкой реализации идентификаторов в Scala.
  • Создавать в наивысшей степени масштабируемые, параллельные обработчики данных, благодаря тому, что Scala изначально стоит на позициях неизменяемости состояния.
  • Сократить размер эквивалентного Java-кода в половину или на две трети, из-за обилия в Scala синтаксических приемов, таких как замыкания и неявные определения.
  • Использовать преимущества параллельных аппаратных архитектур (таких как многоядерные процессоры), т.к. Scala предрасполагает к функциональному дизайну.
  • Контролировать большие объемы кода, из-за упрощения в Scala правил жесткого типизирования, выставляющих, по существу, одно требование — «все является объектом.»

Несомненно — Scala олицетворяет мощный, новый взгляд на программирование; факт компиляции в код, совместимый для запуска под управлением JVM как нельзя лучше позволяет воспользоваться Scala для «настоящей работы», да еще с такой легкостью.

Scala — функционально-объектный гибридный язык с несколькими сильными сторонами, подогревающими интерес к нему:

  • Во-первых, Scala компилируется в байт-код Java, подразумевая его запуск на JVM. В дополнение к вашей возможности продолжать использовать все преимущества Java как развитой экосистемы с открытым кодом, Scala может быть интегрирован в существующее информационное пространство (среду) с нулевыми усилиями на миграцию.
  • Во-вторых, Scala опирается на функциональные принципы Haskell и ML, не отказываясь от тяжкого бремени привычных объектно-ориентированных концепций, столь полюбившихся Java-программистам. В результате Scala может смешивать лучшее из двух миров в единое целое, что предоставляет значительный выигрыш без жертвования простотой, на которую мы привыкли рассчитывать.
  • И в заключение, Scala был разработан Мартином Одерски, возможно, более известным в Java-сообществе благодаря языкам Pizza и GJ, последний из которых стал рабочим прототипом универсальных типов (generics) в Java 5. Раз так, Scala несет ощущение «серьезности»; этот язык не создавался по капризу и он не будет брошен на произвол.

Как и предполагает название Scala, он также является в высокой степени масштабируемым языком. Позже я расскажу об этом подробнее, как только мы немного углубимся в эту серию публикаций.

Загрузка и установка Scala

Вы можете загрузить комплект поставки Scala с домашней страницы Scala. Текущим на момент написания статьи релизом является 2.6.1-final. Он доступен в виде Java-инсталлятора, пакетов RPM и Debian, архивов gzip/bz2/zip, которые достаточно просто распаковать в целевую директорию, а также в виде исходного tarball, позволяющего выполнить сборку с нуля. (Версия 2.5.0-1 доступна для пользователей Debian с Web-сайта Debian в виде готового к употреблению инсталляционного модуля. Однако версия 2.6 имеет некоторые незначительные отличия, поэтому рекомендуется загрузка и установка напрямую с сайта Scala.)

Установите Scala в каталог по выбору — я пишу это, находясь в среде Windows®, поэтому у меня это будет каталог C:/Prg/scala-2.6.1-final. Задайте этот каталог в переменной окружения SCALA_HOME и добавьте SCALA_HOME\bin к PATH для упрощения вызова из командной строки. Для проверки вашей инсталляции просто запустите » scalac -version «. В ответ должно последовать » Scala version, 2.6.1-final «.

Функциональные концепции

Прежде, чем мы начнем, я представлю несколько функциональных концепций, необходимых для понимания того, почему же Scala ведет себя так, а не иначе. Если вам доводилось иметь дело с функциональными языками — Haskell, ML или же с недавним пополнением в функциональном мире — F#, вы можете переходить к следующему разделу.

Функциональные языки получили свое название из концепции, предполагающей, что программы должны вести себя как математические функции; другими словами, при заданном наборе входных параметров функция должна всегда возвращать один и тот же результат. Это не просто означает, что каждая функция должна возвращать значение, а и то, что эти функции не должны переносить никакого внутреннего состояния от одного вызова к другому. Такая основополагающая идея несохраняемости состояния, перенесенная в функциональный/объектный мир и означающая объекты, неизменяемые по своей природе — главная причина того, почему функциональные языки провозглашаются великими спасителями безумно параллельного мира.

В отличие от многих динамичных языков, с недавних пор начавших отвоевывать себе пространство на платформе Java, Scala является статически типизированным, как и Java. Однако, в противовес платформе Java, Scala прилагает существенные усилия к использованию выведения типов (type inferencing), означающего, что компилятор выполняет глубокий анализ кода для выяснения типа конкретного значения, без вмешательства программиста. Выведение типа требует меньшей избыточности в типизации кода. Например, рассмотрим приведенный в листинге 1 Java-код, необходимый для объявления локальных переменных и присвоения им значений:

Листинг 1. Ох уж этот гениальный javac .

Scala не нуждается в таком расписывании, как и будет показано далее.

Множество прочих функциональных особенностей (таких как сопоставление с шаблоном — pattern matching) проложили себе путь в Scala, но полное их перечисление было бы забеганием вперед. Scala также добавляет некоторое количество деталей, отсутствующих на данный момент в Java, скажем, перегрузка оператора — operator overloading (являющаяся, как оказывается, тем, что Java-программисты вообще не могут себе вообразить), универсальные типы (generics) с «верхним и нижним ограничениями по типу», виды (views) и многое другое. Эти особенности, среди прочего, делают Scala чрезвычайно мощным для решения такого рода задач, как обработка или генерация XML.

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

Приступаем

Наша первая Scala-программа будет стандартной демонстрационной программой, Hello World, как того требуют Боги Компьютерных Наук:

Листинг 2. Hello.Scala

Скомпилируйте это вызовом scalac Hello.scala и запустите полученный код при помощи либо запускающего модуля ( scala HelloWorld ), либо используя традиционный запуск Java, не забыв включить библиотеку ядра Scala в JVM classpath ( java -classpath %SCALA_HOME%\lib\scala-library.jar;. HelloWorld ). В любом случае должно появиться традиционное приветствие.

Некоторые элементы в листинге 2 определенно вам знакомы, но также задействованы и некоторые явно новые. К примеру, начав с привычного вызова System.out.println , Scala демонстрирует свою дружественность к лежащей в основе платформе Java. Scala преодолевает огромное расстояние, чтобы обеспечить доступность всей мощи Java в Scala-программах. (В действительности, позволительно даже наследовать тип Scala от Java-класса и наоборот, но об этом позже).

С другой стороны, если вы внимательны, вы должно быть заметили отсутствие точки с запятой в конце вызова System.out.println — это не опечатка. В отличие от Java-платформы, Scala не требует точки с запятой для завершения оператора если это очевидно по факту окончания строки. Тем не менее, точки с запятой по-прежнему поддерживаются и являются иногда необходимыми если, например, физически в одной и той же строке присутствует более одного оператора. В большинстве случаев, прогрессирующие Scala-программисты могут опускать точки с запятой, а компилятор Scala ненавязчиво напомнит вам (обычно посредством броского сообщения об ошибке), когда такой разделитель будет необходим.

К тому же, хотя это и второстепенная мелочь, Scala не требует в названии файла, содержащего определение класса, отражать имя этого класса. Некоторые найдут в этом освежающее отличие от Java-программирования; а именно те, кто не может без проблем продолжать использовать принятое в Java класс/файл-соглашение об именовании.

Ну а теперь давайте взглянем на то, в чем Scala действительно начинает отклоняться от традиционного Java/объектно-ориентированного кода.

Функция и форма — наконец-то вместе

Прежде всего, приверженцы Java отметят, что вместо » class «, HelloWorld определен с использованием ключевого слова object . Это поклон Scala в сторону вездесущего шаблона Singleton — служебное слово object сообщает компилятору Scala, что это будет синглетон-объект, и в результате Scala гарантирует, что в любой момент времени будет существовать только один экземпляр HelloWorld . Обратите внимание — по той же причине main не определяется как статический метод, как это было бы в Java-программировании. Фактически Scala избегает использования » static » вообще. Если же приложению необходимо иметь экземпляры некоторого типа наряду с его «глобальным» вариантом, приложение Scala позволит как определение class так и object для одного и того же имени.

Далее, посмотрите на определение main , которое, как и в случае Java-кода, является общепринятой точкой входа для Scala-программ. Это определение, хотя оно и выглядит отличным от такового в Java, идентично: main принимает массив строк в качестве аргумента и ничего не возвращает. Тем не менее, в Scala такое определение несколько отличается от Java-версии. Определение параметра args задано как args: Array[String] .

В Scala массивы представлены экземплярами обобщенного класса Array , кроме прочего демонстрирующего то, что Scala использует квадратные скобки («[]») вместо угловых («<>«) как признак параметризованных типов. Ну и, для полноты картины, отметим использование в языке шаблона » имя: тип «.

Мастер Йода рекомендует:  Задача про бесконечный поезд

Как и в случае с другими функциональными языками, Scala требует, чтобы функции (в данном случае метод main) в обязательном порядке возвращали значение. Вот он и возвращает значение «не-значение», называемое Unit . В практическом смысле Java-разработчики могут думать о Unit как об аналоге void , по крайней мере, на данный момент.

Синтаксис для определения метода выглядит весьма интересно, поскольку использует оператор » = «, почти так, как если бы выполнялось присвоение тела метода, следующего за идентификатором main . В действительности это именно то, что имеет место: в функциональном языке функции являются концепциями первого рода, как переменные и константы, а, стало быть, и синтаксически интерпретируются как таковые.

Вы сказали замыкания?

Из того, что функции являются концепциями первого рода, вытекает необходимость представления их каким-либо образом в виде автономных конструкций, также известных как замыкания (closures) — понятие, столь горячо обсуждаемое последнее время Java-сообществом. В Scala это легко выполнимо. Прежде чем демонстрировать возможности замыканий, рассмотрим простую программу в листинге 3. Здесь функция oncePerSecond() повторяет свою логику (в данном случае — печать в System.out) каждую секунду.

Листинг 3. Timer1.scala

К сожалению, именно этот код вообще не является функциональным . или хотя бы практичным. Например, если бы я захотел изменить текст выводимого сообщения, мне бы пришлось изменить тело метода oncePerSecond . Рядовой Java-программист определил бы в oncePerSecond параметр с типом String для передачи такого сообщения. Но даже такой подход крайне ограничен: Любая другая периодическая задача (допустим, пингование удаленного сервера) будет нуждаться в своей собственной версии oncePerSecond — что является прямым нарушением правила «Не повторяйся». Как показано в листинге 4, замыкания предлагают гибкую и мощную альтернативу:

Листинг 4. Timer2.scala

Теперь ситуация становится интереснее. В листинге 4 функция oncePerSecond принимает параметр, но его тип выглядит странно. Формально, в качестве значения параметра callback принимается функция. Это справедливо до тех пор, пока передаваемая функция сама не имеет входных параметров (обозначено как «()»), и возвращает (обозначено «=>») «ничего» (функциональное значение «Unit»). Далее обратите внимание — в теле цикла я использую callback для вызова переданного в параметре объекта-функции.

К счастью, где-то в программе у меня есть такая функция, а именно timeFlies . Поэтому я просто передаю ее в oncePerSecond при вызове из main . (Вы также заметите, что в timeFlies задействован Scala-специфичный класс Console , служащий для той же цели, что и System.out или же новый класс java.io.Console . Это чисто эстетический вопрос; здесь будут работать и System.out и Console .)

Анонимная функция, какова же твоя функция?

Сейчас функция timeFlies выглядит как нечто бесполезное — после всех усилий у нее, на самом деле, нет другого назначения, как только быть переданной в oncePerSecond . Раз так, я бы вообще не хотел формально ее определять, как показано в листинге 5:

Листинг 5. Timer3.scala

В листинге 5 функция main передает произвольный блок кода в качестве параметра oncePerSecond , это выглядит как лямбда-выражение из Lisp или Scheme, что, само по себе, является другой разновидностью замыкания. Такая анонимная функция опять демонстрирует мощь отношения к функциям как к гражданам «первого сорта», позволяя вам обобщать код таким совершенно новым способом, не прибегая к механизму наследования. (Поклонники шаблона Strategy, вероятно, уже начали неконтролируемо исходить слюной.)

Но на самом деле, oncePerSecond по-прежнему специфична: она завязана на неразумное ограничение в том, что callback будет вызываться каждую секунду. Я могу дальше продвинуться в обобщении, указав второй параметр, задающий — как часто вызывать переданную функцию, что и показано в листинге 6:

Листинг 6. Timer4.scala

Это распространенная практика в функциональных языках: создать абстрактную функцию верхнего уровня, выполняющую некоторую работу, передать в нее блок кода (анонимную функцию) как параметр, и вызвать этот блок кода внутри высокоуровневой функции. Например, при переборе коллекции объектов. Вместо использования в цикле традиционного для Java объекта-итератора, функциональная библиотека предлагает взамен функцию — обычно называемую «iter» или «map» — в коллекционных классах она принимает функцию с одним параметром (объектом, подлежащим итерированию). Таким образом, например, упомянутый ранее класс Array содержит функцию filter , определенную в листинге 7:

Листинг 7. Часть листинга Array.scala

Листинг 7 декларирует, что p — функция, принимающая параметр обобщенного типа A и возвращающая логическое значение. Документация Scala утверждает, что filter «возвращает массив, состоящий из всех элементов исходного массива, удовлетворяющих предикату p.» Это значит, что если я захочу на мгновение вернуться к моей программе Hello World и найти все аргументы командной строки, начинающиеся с буквы «G», это будет записано как в листинге 8:

Листинг 8. Привет, люди-G!

Здесь filter принимает предикат — анонимную функцию, неявным образом возвращающую логическое значение boolean (как результат вызова startsWith() ) и вызывает этот предикат для каждого элемента в массиве » args «. Если предикат возвращает истина, filter добавляет такой элемент в результирующий массив. После перебора всего массива, результирующий массив возвращается и немедленно используется в качестве исходного для вызова » foreach «, который выполняет именно то, что предполагает: foreach принимает другую функцию и применяет ее к каждому элементу массива (в данном случае — просто отображает в консоль)

Не слишком сложно представить, как мог бы выглядеть Java-эквивалент рассмотренного выше кода и не слишком трудно признать, что версия Scala гораздо, гораздо короче и намного очевиднее.

Заключение

Программирование в Scala подкупающе просто и в то же время — необычно. Его простота в том, что вы продолжаете работать с теми же базовыми объектами Java, знакомыми и любимыми вами на протяжении многих лет, а очевидное отличие — в способе, которым вам предлагается осмысливать нисходящую декомпозицию программы на части. В этой первой статье из серии Путеводитель по Scala для Java-разработчиков я лишь бегло ознакомил вас с возможностями Scala. То ли еще будет, а пока — успешного «функционализирования»!


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

Что такое Scala и с чем его едят? Это язык программирования, который реализован для платформы Java. Используется для создания серверной части приложений.

Кто пишет на Scala? Можно смело говорить о том, что большинство Scala-разработчиков пришли из Java, так как это очень похожие, в плане синтаксиса и реализуемых задач, языки.

Что еще используют эти люди? Есть два сервиса, которые Scala-разработчики достаточно часто используют. Речь идет про Akka и Play Framework.

  • Akka — это библиотека, которая позволяет упростить разработку многопоточных и распределенных приложений.
  • Play — это полноценный фреймворк, который также иногда называют каркасом разработки. Его основная задача — повышение производительности кода, а также отображение появляющихся ошибок в браузере. Создатели Play, при разработке ориентировались на такие популярные решения как Ruby on Rails и Django.

Scala в основном используется как enterprise язык (для разработки корпоративных приложений), что подтверждают сервисы использующие его. Например это Twitter, LinkedIn, Foursquare, Тинькофф и другие. Разумеется, есть не столь большие решения на Scala, однако это можно считать исключениями.

Scala я выбрал по историческим причинам. Когда учился в университете, ходил на курсы по Java. Мне интересно было функциональное программирование, и я самостоятельно изучал Lisp и OCaml. А потом из всего этого синтезировалась Scala. В этом языке много инструментария, которым можно делать сложные вещи, но, если не задаваться такой целью, то можно писать и довольно просто. Всё равно существует баланс между выразительностью и абстрактной сложностью. В интернете была шутка про языки, в которой говорилось, что Scala пытается объединить возможности функционального и объектно-ориентированного программирования, а в итоге его начинают люто ненавидеть обе стороны. Действительно, когда пытаешься объединить две стороны, то порой наталкиваешься на непонимание обеих.

У разработчика на интервью стоит уточнить несколько наиболее важных моментов:

  • Почему находится в поиске (если находится)?
  • Какие задачи решал в текущем и предыдущем проектах?
  • Разработка велась исключительно на Scala или же параллельно писал на Java?
  • Кто ставил задачи?
  • В какой команде работал?
  • Участвовал ли в выборе технологий для проекта?
  • На какие факторы будет обращать внимание при выборе нового места?

Вакансия: разработчик Scala

Вакансия: разработчик Scala

Важное место среди языков программирования, которые сочетают объектно-ориентированный подход с функциональным программированием, занимает Scala. Он нашел свое применение в крупных компаниях (LinkedIn, Siemens, Twitter идр.). Согласно рейтингу TIOBE, Scala, например, опережает такие языки, как Lua, Lisp, F#, Haskell, Groovy. Мы обратились к экспертам и представителям различных компаний, чтобы выяснить, каких кандидатов они видят на этой позиции

  1. Какими знаниями и навыками должен обладать разработчик Scala?
  2. Каков инструментарий разработчика Scala?
  3. Каковы требования компании к уровню образования потенциальных сотрудников?
  4. Какие требования предъявляются к опыту работы?
  5. Есть ли особые требования, которые обусловлены спецификой деятельности компании?

Сергей Толмачев, разработчик в Waves platform, лектор курса scala.wtf

1. Обычно разработчик Scala – это хороший, любознательный и заинтересованный в своем профессиональном развитии Java-разработчик. Он имеет фундаментальные знания работы с JVM, коллекций и параллельных вычислений. Вчастности, умеет грамотно и к месту использовать мощные функциональные возможности, которые дает Scala, в своей работе, потому что стоит всегда задумываться не только о простоте и понятности кода, но и о других участниках команды, которым придется его поддерживать. «С большой силой приходит и большая ответственность» – это точно про Scala, поэтому стоит не злоупотреблять.

2. Инструментарий почти тот же, что и у Java-разработчика. Обычно Scala-разработчики используют IDE Intellij Idea как систему сборки sbt, в некоторых компаниях используют более консервативный Maven или Gradle. Для профилирования и диагностики выполнения кода используют VisualVM.

3. Нет конкретных и четких требований, это определяет должность и предметная область, с которой сотрудник будет работать: от базовых знаний HTML/CSS/JS для веб-разработки и вплоть до научных степеней, научных публикаций иглубоких знаний криптографии и математики для исследования и разработки экспериментальных наукоемких прототипов и новых проектов. Я считаю, что главное требование для работы в современной компании – это возможность решать поставленные задачи, неважно, кем ты был вчера – дворником или победителем олимпиад по программированию.

Для Scala-разработчика мы обычно даем тестовое задание, чтобы оценить подход человека к решению задач и качество его кода, затем проводим техническое собеседование и уже принимаем решение. Также компания помогала ворганизации Scala-курсов scala.wtf, где сотрудники компании обучали всех желающих основам работы со Scala.

4. Обычно считается, что Scala-разработчик – это достаточно опытный Java-разработчик, который осмысленно выбрал, изучил и применил удобный для себя и своей работы инструмент. Обычно заявляют опыт на Java, превосходящий на 1-3года опыт на Scala. При этом понятно, что из-за меньшей распространенности Scala сложнее получить опыт работы на этом языке, поэтому для подтвержения квалификации могут подойти свои проекты с открытым исходным кодом илисертификаты по Scala-курсам на Coursera.

5. В Waves platform мы разрабатываем на Scala децентрализованную блокчейн-платформу с открытым исходным кодом, что привносит уникальный опыт в решение задач, да и сами задачи решаются совсем не теми способами, что в обычной backend- разработке, где обновление всех сервисов под вашим контролем: сеть состоит из сотен серверов по всему миру, их поддерживает большое сообщество, и людям разного уровня должно быть удобно им пользоваться.

Так что у нас есть пожелания к базовым знаниям криптографии и криптовалют, чтобы разработчик уже примерно представлял, чем ему предстоит заниматься. Многих наших кандидатов очень интересует эта сфера, они узнают о ней донашего знакомства и отдают приоритет нашим вакансиям. Как раз сейчас у нас открыта вакансия разработчика Scala (https://blog.wavesplatform.com/looking-for-scala-guru-ee384233fef0).

Василий Зайцев, Team Lead Data Processing Team at Propzmedia

1. Образование по специальности. Но так как порог входа для Scala достаточно высокий, то и качество образования должно быть высоким.

2. Нет особых предпочтений, обычно Intellij Idea.

3. Алгоритмы, структуры данных, многопоточность (часто Akka), Java-экосистема (JVM, модель памяти), Scala API.

4. Зависит от позиции, но специальных требований я не наблюдал.

5. Конечно, с ростом отрасли больших данных спрос на Scala-специалистов вырос и продолжает расти из-за Spark, Kafka, которые предоставляют как основной Scala API.

Дмитрий Жиденков, Java/Scala-разработчик в компании UniCenter

1. В разработчике Scala ценятся те же качества, что и в разработчике на любом другом языке. Плюс Scala обладает своеобразной атмосферой свободы – она сочетает в себе две мощные парадигмы сразу – ООП и ФП – и в целом обладает крайне выразительным и гибким синтаксисом. Поэтому на программисте лежит больше ответственности за аккуратность и читаемость кода.

2. Самый удобный инструмент на текущий момент – это Intellij Idea с плагином на Scala. Система сборки – SBT, хотя можно без проблем прицепить и Gradle – дело вкуса.

3. Нет строгих требований именно к наличию каких-то дипломов и сертификатов. Необходим определенный запас любопытства и гибкость мышления. Как сам по себе Scala, так и многие сторонние фреймворки часто вносят необычные подходы к решению обычных задач. Например, модель акторов и стримов из Akka. Бывает необходимо перестроить привычную «картину мира», чтобы овладеть новым инструментом.

4. Требования к опыту зависят от конкретной вакансии. Желательно владеть Java и иметь представление о том, как работает его экосистема. Будет очень полезно иметь опыт с функциональными языками. Ну и если вы собеседуетесь навакансию сеньор-ниндзя-гуру-фуллстек-девелопер, от вас будут ждать того, что вы знакомы с инструментами, с которыми собираетесь работать.

5. В основном это классические энтерпрайзные инструменты Java – Spring, Cassandra, Kafka и т.п. Из чисто Scala-фреймворков – это Akka во всех его проявлениях.

Какой-то особой специфики нет, выбираются оптимальные инструменты под конкретные задачи, если только не попасть на поддержку легаси, где стек уже сформирован.

Андрейс Олиньш, самозанятый разработчик, экс-Accenture (Латвия)

1. От хорошего разработчика Scala требуется понимание функциональных языков программирования и таких понятий, как Future, CallBack. Без этого понимания код скорее всего будет написан на Java или C# с использованием синтаксиса Scala.

Из навыков отмечу умение свести задачу к map-reduce.

В остальном требования такие же, как и к разработчикам на любом другом языке.

2. Любая среда разработки подойдет: Eclipse, IDEA, Atom, Sublime. Очень помогает sbt: сборщик, который написан авторами Scala (непрерывный прогон тестов sbt

test выручает постоянно).

3. Обычно хватает записей в CV и пройденного теста. Я начинал с успешно сданного курса Мартина Одерского на Coursera. Теперь поддерживаю форму, щелкая задачки на Hackerrank.

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

4. Два года опыта в коммерческих проектах на Scala или 4-6 лет опыта программирования вообще.

5. Уже давно каждый язык является экосистемой, в которой рождаются и умирают библиотеки инструментов. Каждый проект использует свой, иногда уникальный набор технологий из этой экосистемы, который определяет конечные требования: Play Framework, Akka, Camel.

Александр Зайдель, Senior Software Engineer в компании Agoda (Bangkok Metropolitan Area, Thailand)

1. Аналитический склад ума, умение работать в команде, ownership, быть ответственным. Необходимо понимать, что такое функциональное программирование (ФП), плюсы ФП. Знать различия между обычной рекурсией и хвостовой. Опыт работы с фреймворками, такими как Play, Аkka, Аkka-http, Аkka-streams. Знания SQL и NoSQL баз данных, асинхронное программирование. Я бы отметил TDD и чистый код, т.к. в конце концов работаешь не с компьютерами, а с людьми.

2. Среда разработки – Intellij Idea; для сборки проекта: Maven/sbt/Gradle; система контроля версий: Git; помимо этого не лишними окажутся знания Teamcity/Jenkins, Docker, SSH, Linux.

3. Высшее образование в сфере ИТ, как минимум степень бакалавра.

4. Так как найти Scala-разработчиков сложно, компания готова нанимать людей без опыта в Scala, а таковых кандидатов много. И в этом случае мы ожидаем понимания структур данных и алгоритмов, паттернов проектирования.

5. Предыдущий опыт в сфере букинга будет плюсом, но он не обязателен.

Алексей Кравец, Mobile developer tools manager at NVIDIA

1. Во-первых, как и в случае любого другого инструмента, разработчик Scala должен знать как сам инструмент (т.е. Scala), так и теорию, лежащую в его основе. Как невозможно написать хорошую программу на Си, не зная основ машины, накоторой будет исполняться данная программа, так невозможно написать хорошую Scala-программу, не зная, во-первых, азов функционального и объектно-ориентированного программирования и, во-вторых, устройства исполнителя полученной программы (например, JVM).

Вторым по важности я бы назвал знание и понимание предметной области, умение представить базовые понятия и концепции, с которыми предстоит работать программе, в виде конструкций языка.

2. Я не считаю, что наличие специального инструмента для разработки является крайней необходимостью. В моем случае лучше всего подошел Vim с плагином Eclim.

3. Несмотря на то что ничего не мешает человеку самостоятельно изучить как сам язык, так и базовую теорию, необходимую для работы, вероятность этого достаточно мала. Наличие профильного высшего технического образования наданный момент можно считать необходимым требованием к потенциальному сотруднику, не имеющему аналогичного опыта работы. Дополнительным плюсом может быть прохождение профильных курсов (функциональное программирование, программирование на Java) как в рамках учебы, так и факультативно (например, Сoursera).

С другой стороны, если у человека уже есть опыт работы с нужной технологией (прошлые проекты, github), его уровень образования менее важен.

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

5. Знание предметной области. Например, в ARM мы использовали Scala для разработки компилятора, так что в дополнение к работе со Scala от успешного кандидата требовались знания по внутреннему устройству компилятора.

Леонид Чашников, Scala Developer, Captify

1. В Scala редко приходят «с улицы», обычно туда «переключаются» с других языков, попробовав делать пет-проекты на скале и почувствовав желание сделать этот язык своим основным. Так что обычно для того, чтобы компания рассматривала кандидата, необходимы знания более «популярных» языков, например Java или Python. Ну и быть готовым быстро учить новый язык.

2. Для удобного редактирования кода в Intellij Idea есть scala-plugin, а также существует Scala IDE, основанная на Eclipse, но особо большой популярностью она не пользуется. Некоторые также используют более легковесные редакторы типа Atom/SublimeText или даже Vim/Emacs.

Ну и плюс вещи, которые напрямую к Scala не относятся, но необходимы сейчас почти любому разработчику, – Docker, клиент базы данных, клиент системы контроля версий и т.п.

3-4 Зачастую компании готовы брать опытных (2-3 года) джава-разработчиков, которые хотят учить Scala. Именно уровень образования не оценивается напрямую (вряд ли какая-нибудь компания будет обязательно требовать от кандидата наличия диплома бакалавра/магистра), но, конечно, некоторое знакомство с функциональными парадигмами является плюсом. Иногда могут взять и бывшего студента, хотя в большинстве случаев Scala не является для человека первым языком.

5. Могут быть, если требуется специалист высокого уровня, сразу знакомый с предметной областью, чтобы на его обучение не пришлось тратить дополнительное время. Но в большинстве случаев компании готовы немного обучить подходящего кандидата (да и редко встречаются настолько сложные продукты, в которых требуется очень глубокое знание предметной области от каждого разработчика).

Юрий Бадальянц, ведущий программист в компании 2ГИС

1. Обычно на Scala разрабатывают либо бэкенды общего назначения, либо делают что-то на тему big data. Соответственно, и требования к этим направлениям различаются.

В случае бэкендов важно иметь типичный набор навыков и знаний любого бэкенд-разработчика:

  • протоколы – TCP, HTTP;
  • REST, RPC и другие подобные подходы;
  • понимание принципов построения высоконагруженных и отказоустойчивых систем;
  • SQL и NoSQL базы данных.

Обычно Scala в production работает на Linux/Unix-серверах. Нужно уметь с этим работать.

В случае с big data самые распространенные инструменты – Spark и Hadoop.

Однако big data-стэк очень широк, и в зависимости от компании технологии могут варьироваться. Нужно понимать принципы работы распределенных вычислений. Неплохо иметь какие-то базовые знания, типичные для Data Science-направления, – это статистика, нейронные сети, машинное обучение и т.п.

Что касается самой Scala, тут важно быть знакомым как с объектно-ориентированным программированием, так и с функциональным.

Сообщество в основном тяготеет именно к функциональному программированию: важно иметь хотя бы общее представление о функциональном программировании. Все эти монады, функторы и полугруппы используются в Scala каквполне обыденные концепции.

Также на собеседованиях мы много внимания уделяем пониманию синхронного и асинхронного кода. Сейчас появляется все больше технологий и подходов, которые базируются именно на асинхронном взаимодействии. Язык Scala предоставляет удобные инструменты для работы с асинхронным и многопоточным кодом. Очень важно понимать и уметь этим пользоваться.

2. В качестве основного инструмента для разработки де-факто стандартом в сообществе является Intellij Idea со Scala-плагином (он работает и в community-версии). Помимо IDEA есть плагины для Eclipse и Emacs, но вживую я не видел людей, которые бы ими пользовались.

Как основную операционную систему почти все используют Linux или Mac OS. В качестве системы сборки используют SBT. Что касается других инструментов, то все зависит от специфики работы.

3. По моему личному мнению, уровень образования не так важен. Главное, чтобы человек был заинтересован в собственном развитии и постоянно изучал что-то новое.

4. Scala – это не такой язык, в который можно зайти с улицы. Порог входа в него высокий. Обычно все Scala-разработчики до Scala писали хотя бы на одном-двух языках. Нельзя сказать, что знание нескольких языков является «требованием», но именно так обычно складывается история. В основном в Scala-вакансиях присутствует формулировка типа «желателен опыт разработки на Scala либо желание его получить». Рынок Scala-разработчиков не так широк, ипоэтому большинство компаний готовы принимать людей без опыта production-разработки на этом языке. Главное – заинтересованность, желание изучить язык и двигаться в сторону функционального программирования.

5. В 2ГИС есть скорее не требование, а некоторая специфика, потому что мы пишем ГИС-систему. Периодически нам приходится сталкиваться с математикой, связанной с координатами, расчетом расстояний и т.п. Однако стоит отметить, что задачи и технологии различаются от команды к команде. В 2ГИС существуют команды, которые абсолютно не пересекаются с ГИС-системой. В любом случае, даже если человек не работал раньше с подобным, мы всему научим.

Роман Гребенников, Scala Developer в компании Findify

1. Знания и навыки: в глазах лучших скала-разработчиков, которых я видел в своей жизни, обычно читается хроническая тоска и печаль по текущему состоянию индустрии разработки ПО, где один случайно залетевший дятел может разрушить всю цивилизацию. Эти люди обычно не доверяют ничему, что не было проверено на валидность type checker.

Эта тоска – последствие личного опыта, в котором ломалось даже то, что не должно ломаться, и, чтобы подобное не повторялось, код надо писать так, как будто ты не доверяешь даже самому себе и собственной бабушке.

2. Инструментарий примерно тот же, что и в Java-мире, с небольшими исключениями. Я могу тут написать пару дюжин непонятных слов из трех букв, которые никому не интересны, но в скала-мире в плане инструментария всегда естьсвобода выбора: перебежчики из джавы любят использовать Maven для сборки, кто-то, зловеще хохоча, пишет код Vim. Но большинство вроде меня таки предпочитает попсовую Intellij Idea и sbt.

3. Уровень образования: по личным наблюдениям, в Scala чаще всего приходят из других языков, в большинстве случаев из Java, уже в сознательном возрасте и не от хорошей жизни, поэтому у многих работодателей возникло когнитивное искажение, что Scala-разработчики в массе своей настолько умные, что могут силой мысли исправлять баги в стиральной машине и гнуть арматуру. Другими словами, уровень образования обычно требуется чуть более высокий, чем в случае с Java-миром.

4. Опыт работы: в скала-мире, на мой взгляд, абсолютное значение опыта работы в годах редко кого волнует. Кто-то 10 лет протирал штаны в банке, а кто-то на пятом курсе университета уже слал пулл-реквесты в сам компилятор скалы. Ктому же из-за специфики миграции поголовья на скалу, которая редко бывает первым языком, непонятно, как этот опыт мерять.

Важнее всего способность решать задачи бизнеса, что при некотором навыке легко выявляется в процессе собеседования.

5. Специфика: в скала-мире есть очень богатая экосистема библиотек, которые напрямую или косвенно используются почти в 90% всех проектов, и хорошо бы в этом зоопарке хорошо ориентироваться: Аkka, Scalatest и т.п.

Бонусные баллы можно получить, если уметь писать настолько строго типизированный код, что если он-таки наконец скомпилился, то с большой долей вероятности заработает без ошибок. Но для этого надо уметь уверенно и с умным лицом произносить фразы «моя макродеривация тайп-классов лучше твоей чепухи на генериках из shapeless» и «за использование мутабельных коллекций у нас бьют стримами по мьютексу».

Александр Хлыбов, Junior Scala Developer в компании INB Group

1. Не думаю, что Scala-разработчиков следует как-то выделять среди программистов всех направлений. Требования вполне стандартные: алгоритмическое мышление, техническая база в виде хорошего математического образования (желательно университетского, но отнюдь не обязательно), так как, если вы собираетесь углубиться в функциональное программирование, волей-неволей придется разбираться с теорией категорий и прочими «радостями» математических дисциплин. Единственное качество, которое хотелось бы все-таки выделить, – это непугливость к новым, более сложным вещам. Сказано это не для красного словца или чтобы превознести скалу над массами, а потому что при неимении релевантного опыта с функциональным программированием и сложными системами типов первое время скала может отпугивать.

2. Инструментарий идентичен набору Java-разработчиков: одна из двух IDE на выбор (Idea, Eclipse), опционально GUI для СУБД, которую вы используете. Если вы приверженец Emacs/Vim, можете настроить их для скалы, соответствующие плагины присутствуют и поддерживаются.

3. Как упоминалось в первом пункте, ничего сверхнеобычного, единственное, что на некоторых наукоемких проектах видел требования аспирантуры или даже PhD, но это не особенность именно скалы.

4. Так как специфика Scala обусловливает его использование в нетривиальных, высоконагруженных системах, джуниорам довольно сложно найти работу. Не столько из-за сложности самой скалы, сколько по причине требования наличия опыта в работе на проектах со сложной архитектурой, командной работы и так далее. Поэтому компании, осознавая это, набирают джавистов с желанием перейти на скалу. Так что новичкам остается либо начинать карьерный путь срелевантных технологий, либо надеяться найти стажировку при какой-то фирме.

5. Не повально, но намечается тенденция вопросов к кандидатам о знании и опыте работы с функциональными библиотеками (shapless, cats, scalaz). Конечно, это пока не решающий критерий, но, думаю, по мере проникновения Scala в IT-рынок будет больше энтузиастов, использующих эти библиотеки в продакшн-коде. И желающим писать на Scala, как на улучшенном Java, придется либо сменить язык, либо окунуться в мир монад и аппликативов.

Станислав Коваленко, разработчик, сервис «МойСклад»

1. Основными, на мой взгляд, являются знания экосистемы JVM и основных дисциплин Computer Science. В остальном это, конечно, уверенные знания языка Scala и его библиотеки. Желательно понимать функциональную парадигму и какее использовать в языке Scala.

2. В первую очередь это редактор или IDE. Обычно выбор падает на самые популярные IDE для Java – Intellij Idea, Eclipse или NetBeans. Эти решения содержат в себе очень много полезных инструментов для анализа и рефактора кода, имеют встроенную поддержку многих фреймворков.

Помимо редактора, разработчику нужно работать с инструментами для сборки проектов. Стандарт де-факто для Scala-проектов – это SBT. Это очень мощный и гибкий инструмент, но при этом достаточно сложный в изучении. В нашей компании мы пользуемся им и Maven.

Также, когда работаешь в команде, становятся необходимыми инструменты для контроля версий (Git, Subversion, Mercurial. ) и программы для организации работы над задачами (Jira, Redmine, Trello. ). В нашей компании мы используем Git для контроля версий и Jira для организации работы над задачами.

3. В общем случае это должен быть человек с высшим техническим образованием или студент последних курсов.

4. Требования зависят от уровня разработчика (junior, middle, senior), однако что точно требуется от разработчика Scala – это опыт работы с экосистемой JVM и языком Java. Отсутствие опыта работы с самим языком Scala не является проблемой, если человек имел опыт работы с Java. Но в этом случае желательно, чтобы человек прошел первые три курса на Coursera по специализации Scala.

5. Из общих технических требований – наличие опыта работы с Linux, все наши разработчики используют OS этого семейства. А из не технических – это готовность и желание работать в рамках методологии разработки Scrum.

В остальном все зависит от команды. Если вы хотели бы заниматься созданием UI на Scala, то у нас есть проекты, использующие ScalaJS и ReactJS. Для них было бы полезно иметь некоторый опыт работы с JavaScript, немного разбираться вфункциональном (линзы, тайп-классы) и реактивном программировании. Если backend, то это понимание акторной модели, опыт работы с Websocket и библиотеками Аkka, Аkka-http.

Антонио Рамирез Круз (Antonio Ramirez Cruz), Real Time Developer в Playtika

1. Компьютерные науки, базовые знания парадигмы функционального программирования (high order fn, inmutability, recursion, currying).

2. Cам Sсala, SBT (Simple build tool) для ручной работы со сторонними библиотеками, компиляции, выполнения тестов, сборки и т.д.

  • доступ к БД (slick, Squeryl, finagle);
  • Web (Play Framework, finagle, Аkka-http).


Есть много полезных библиотек для решения различных задач, от использования командной строки (Scopt) до более специфических инструментов для работы с big data, таких как Spark.

3. Требования компании к уровню образования потенциальных сотрудников:

  • для Junior – как минимум образование в области Computer Science или смежных областях;
  • для SemiSenior/Senior – степень бакалавра в области Computer Science или смежным областям.

4. Для Junior – 2 года работы с экосистемой Java, с опытом работы с Scala или желанием изучить Scala.

Для SemiSenior – 4 года работы с экосистемой Java, с опытом работы с Scala или желанием изучить Scala.

Для Senior – 6 лет, владение как минимум тремя различными языками программирования, включая Scala.

5. Нет специфики, по сути, требования доступны для всех разработчиков Java, которые готовы обучаться и работать со Scala.

Андрей Пархоменко, Lead Developer в slotbook.me

1. Исходя из того, что язык Scala является мультипарадигмальным, главным образом функциональным и объектно-ориентированным, программист должен владеть основными навыками, которые присущи этим парадигмам. Поддержка функциональной составляющей основана на объектном базисе, что позволяет писать выражения более грамотно и лаконично. Я бы отметил, что хорошая математическая подготовка есть большой плюс при постижении всех деталей языка Scala.

2. Лично я предпочитаю Intellij Idea с плагином для Scala-разработки. Этот инструмент предоставляет абсолютно все необходимое для решения задач, которые стоят перед нами в процессе разработки slotbook.

3. Если говорить в целом об образовании как о наличии у работника определенной совокупности знаний, которые помогают решать задачи компании, тогда не думаю, что кому-то потребуется номинальная бумага – диплом из университета. Отсутствие диплома об образовании никаким образом не влияет на представление о знаниях будущего сотрудника.

4. По моим наблюдениям, в мир Scala приходят из мира Java. Для одних этот переход – следующая ступень профессионального развития, для других – хобби. Я не видел ни одного человека, для которого Scala был бы первым языком программирования в карьере. Скорее наоборот, программисты устали от недостатков тех языков, с которыми уже долго работали. Захотелось что-то посложнее и увлекательнее. Существует мнение, что для того, чтобы освоить Java, нужно попробовать освоить Scala. А для тех, кто хочет освоить Scala, нужно поработать с haskell.

5. В нашей компании такие навыки, как ответственность и взаимопомощь, ценятся даже больше, чем технические скилы. Конечно, базовый набор знаний языка Scala/Java и его инфраструктуры требуется, но это не главное для работы с нами.

Вопросы по scala

Друзья, я хочу начать изучение языка scala. Буду признателен, если ответите на эти вопросы:

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

Можно ли изучать начать скалу, вообще не зная ява?

Какие сайты есть по скале на русском языке?

Таких нет или почти нет, язык не мейнстрим.

Если с английским проблема, то могу сказать что на русском есть дока у котлина, в силу естественных причин. Но Котлин и скала языки перпендикулярные по идеологии, первый это улучшенная жаба, второй — прибежеще хаскелистов на жвм.

Можно ли изучать начать скалу, вообще не зная ява?

Можно, но лучше иметь хотя бы базовые знания явы.

Какие сайты есть по скале на русском языке?

Во-первых, читай книги, во-вторых, читай на английском. Без вариантов.

Можно ли изучать начать скалу, вообще не зная ява?

Можно, но для написания продакшен кода надо понимать особенности работы JVM.

Какие сайты есть по скале на русском языке?

Из книг могу посоветовать «Scala для нетерпеливых» Кея Хорстмана.

Мне еще предлагают «Scala. Профессиональное программирование» 3 издание. Там 700 страниц, но говорят понятно написано.

Собственно, раз предлагают, в чём вопрос? Берите да читайте.

1) Можно. 2) Единственный способ научиться писать нормально на scala — устроиться работать скалистом.

Есть книга и курс на курсере от Одерски.

А зачем нужны моноиды, монад-трансформеры и вся эта кухня? В книжке про скалу они даже не упоминаются, хотя она называется «профессиональное программирование на скала.»

Можно ли изучать начать скалу, вообще не зная ява?

Можно, но не нужно. Как и любой другой язык на JVM. Ибо вся шарманка заводится обычно ради горы батареек на жаве, а если ты их не знаешь, то профит нулевой.

Можно, но не нужно. Как и любой другой язык на JVM. Ибо вся шарманка заводится обычно ради горы батареек на жаве, а если ты их не знаешь, то профит нулевой.

Так они все, обычно, достаточно прозрачно (автоматически) интегрируются в этот самый любой другой язык. А для некоторых есть свои альтернативы.

Жаба легко читается, специально учить язык ненужно.

Нужно как минимум представлять специфику дженериков и неплохо бы заранее владеть батарейками из предметной области. Т.е. если человек раньше писал на жабе, то переключиться на скалу можно довольно быстро. А если нет, то не очень понятно зачем нужна скала, когда есть хаскель, окамл и т.п. Чисто ради заработка на кусок хлеба опять же лучше начать с самой жабки.

Нужно как минимум представлять специфику дженериков и неплохо бы заранее владеть батарейками из предметной области

Дженерики это действительно сложность в жабе, но ТС решил изучать Scala а значит разберется в дженериках.

зачем нужна скала, когда есть хаскель

Я сам когда-то скалу не осилил, думаю путь в скалу действительно лучше начинать с хаскеля, а я то хотел просто улучшенную жабу, в итоге перебрался на котлин.

Зависит от целей.

Можно ли изучать начать скалу, вообще не зная ява?

Вам важно не какой язык изучать, а не развешивать уши. То есть не слушать советы умного мальчика Вовочки (который идиот).

Я тут вижу возникающие бессмысленные обсуждения маргинальных языков. Кто-то случайно упомянул Ada, и тут же набежали любопытствующие: чем он хорош, каков в сравнении с . (вариантов много). Правильный ответ: нинужен. Устарел и вышел из употребления. Поэтому хоть сравнение с популярными сейчас языками сделать можно, но это скучно.

Также любители Haskell и Lisp (прослышав от болвана мальчика Вовочки, что это наикрутейшие языки, а взрослые дяди то и не знают) то и дело интересуются, как бы их применить, чтобы написать гениальную программу. Ответ: чуваки, обломитесь.

Вот кто-то расхваливает Scala — якобы лучше, чем Java. А некоторые уже стали перебегать со Scala на Kotlin. Умный мальчик Вовочка насоветует. (лучше бы ему помалкивать).

При программировании на Scala или Kotlin не обойтись без применения классов из JDK и готовых библиотек, написанных для Java. Поэтому некоторое предварительное знание Java полезно, но если сильно приспичило изучать Scala, то можно попытаться совместить изучение Scala с ознакомлением с элементами Java. Например, в Scala нет нужной библиотеки, но она есть в Java. Пытаетесь понять документацию в формате JavaDoc к ней и программные примеры на Java, если есть.

Без ангельского даже не лезь. Серьёзно.

Жаба содержит подмножество абстракций доступных в Scala и Kotlin, это значит что освоив любой из этих языков будет легко разобраться в жабе. Совсем другая ситуация например с такими языками как clojure и python, те кто начнет с них не поймут код на жабе, вот им придется учить жабу чтоб понять что там творится и как использовать нужный класс.

Kotlin не маргинален, кстати. В нем как раз мейнстримовские концепции и сам он в неком тренде новых языков общего назначения, как и Swift. И если что, на ряду с Java, Kotlin — официальный язык платформы Android. С той же Scala никогда такого не было.

сайт по скале => github + google translate

Можно ли изучать начать скалу, вообще не зная ява?

Условно скажем так. Scala крутится на jvm и имеет очень плотное сопряжение со многими либами на java. Т е нужен тебе некий функционал, гуглишь, и он с вероятностью 99% будет в виде java библиотеки. Поэтому понимать в общем виде хотя бы нужно. Но это совершенно не относится к работе на дядю. Так как дяди в большинстве своем рассматривают скалу как этакую высокоуровневую надстройку над java. Поэтому на большинстве собеседований на должность скала разработчика тебя по полной программе сначала пропустят по знаниям java, а уже потом будут разбираться что ты знаешь по scala.

Что еще можно сказать. На данный момент есть несколько библиотек, которые несмотря на то что не входят в стандартную библиотеку языка, являются стандартом дефакто при работе с этим языком. Это akka и scalaz. Это то, что с тебя со 100% вероятностью спросят на любом собеседовании собеседовании.

Так же нужно понимать, что у скалы весьма серьезная ниша — это высоконагруженные распределенные системы. Поэтому к знаниям ко всему вышеперечисленному прилипают автоматически такие штуки как Cassandra, Kaffka, Kuberentes/Mesos, Spark и т. п. технологии из мира BigData.

Про русский язык вообще забудь, вся документация и литература по вышеперечисленному только на английском языке.

И из всего вышесказанного можно сказать что план изучения зыка такой. 1. Изучить основы языка. 2. Твердо усвоить функциональную парадигму чтением соответствующей литераторы. 3. Изучить асинхронные парадигмы в отношении scala. 4. Изучить стек akka. 5. Изучить scalaz. 6. Изучить общую теорию современных распределенных систем. 7. Изучить конкретные элементы распределенных систем.

Вот что рекомендую почитать по списку. 1. Martin Odersky — Programming In Scala 2. Paul Chiusano, Runar Bjarnason — Functional Programming in Scala 3. Aleksandar Prokopec — Learning Concurrent Programming in Scala 4. Packt — Scala Design Patterns 5. Joshua D. Suereth — Scala in Depth 6. Riti P. — Practical Scala DSLs

Это так сказать минимальный набор, после которого вы начнете понимать как на скале. После этого можно начать изучать например акку или скалаз.

1. Martin Odersky — Programming In Scala

Только одна эта книжка это 1к страниц. Помню я осилил 250 и бросил. Остальное из твоего списка даже страшно представить.

Не, ну я конечно все понимаю, но scala это не python. Ее по урокам с тюбика не выучишь, ибо нужно четко владеть теорией таких языков. А если человек задается такими вопросам, как изучить скалу, этой теории у него нет. А значит ее нужно так сказать намайнить путем изучения подобной литературы.

Я не говорю о том что ее нужно всквозуню читать. Я не явлюсь сторонником штудирования книг от корки до корки, но ознакомиться по крайне мере в общем виде о чем идет речь в той или иной книге все таки следует.

Можно ли изучать начать скалу, вообще не зная ява?

. Особенно не зная как правильно писать и произносить название платформы и языка («джава», на худой конец «жаба»).

Но впрочем можно.

Какие сайты есть по скале на русском языке?

Есть лента fprog, но почти мертвая http://fprog.ru/planet/ Есть https://eax.me

Но в целом на русском мало чего есть. Английский в IT — обязателен.

Разработка веб-приложений на Scala: среда разработки

Перед тем, как превратить Сервер Роботов в полноценную облачную систему управления электронными устройствами (т.е. в контрольный узел персонального интернета вещей) добавлением к нему веб-интерфейса, отойдем немного в сторону познакомиться с интрументами, с помощью которых будем создавать наше управляющее роботами веб-приложение.

Лично я — стандартный программист на Яве, в своё время для веб-разработки приноровился к JSP+Tomcat, с тех пор для для небольших эпизодических задач мне их вполне хватало. Но т.к. Сервер Роботов не просто крутится где-то в облаке, но и публикуется с исходным кодом в виде уроков, я не хотел использовать для него совсем уж откровенное (хотя и вполне актуальное) старьё, поэтому решил попробовать что-нибудь современное ультра-модное, но чтобы не совсем маргинальное. В этом смысле я уже давно посматривал в сторону функционального программирования вообще и Скалы в частности, теперь появился повод попробовать ее на практике конкретно в области веб-разработки.

А вообще в области программирования для веба существует большое количество разнообразных платформ, языков и фреймворков; по быстрому и углубленному знакомству с ними написано и напечатано большое количество разнообразных статей, постов и книг. Поэтому на основах Скалы и веб-разработки подробно останавливаться не буду; основной интерес для меня в конечном итоге будут представлять подключенные к серверу роботы, а на чем написан вспомогательный веб-интерфейс — вопрос второстепенный, при желании Скалу можно всегда можно заменить на любимый Раби или ПоХаПэ.

очевидно из трейлера:

Скалу часто представляют как улучшенную Яву и говорят о том, что на неё довольно просто будет перейти Ява-программистам. Действительно, программы, написанные на Скале, компилируются в классы, которые работают поверх обычной глобальной и надёжной Ява-машины. В программе на Скале можно использовать любые библиотеки, написанные для обычной Явы (пожалуй, это важнейшее преимущество). Скала также является объектно-ориентированным языком, хотя точнее она одновременно включает объектно-ориентированные и функциональные парадигмы программирования.

Однако, для того, чтобы легко понимать программы, написанные на Скале (не говоря о том, чтобы писать), знания одной Явы может быть недостаточно. Множество новаций в Скале касаются именно синтаксиса. По моим первым впечатлениям, она старается быть настолько лаконичной, насколько это возможно. Программист может опускать разнообразные ключевые слова (например, не указывать тип данных при инициализации переменных, или даже не писать ключевое слово «return») — что именно имелось ввиду в каждом случае, будет пытаться понять из контекста компилятор. Явный плюс такого подхода — программы действительно получаются очень лаконичными, их (как я постепенно начал ощущать) довольно приятно писать, т.к. в коде можно набирать только то, что действительно важно. Побочный эффект такой лаконичности — при чтении чужого кода (примера из интернета или кода библиотеки) работу компилятора приходится осуществлять читающему человеку.

Лично у меня сходу не получилось вникнуть в смысл некоторых примеров кода на Скале, которые я рассматривал на старте, ни с первого, ни со второго раза, как это часто прокатывало с другими языками. Поэтому если вы начнете ощущать накатывающееся раздражение при просмотре некоторых фрагментов кода на Скале, которые будут приведены далее, из-за того, что вы непрерывно смотрите на эти три строчки уже восемнадцать минут и все равно не понимаете, что там, блин, написано, настоятельно рекомендую предварительно прочитать какую-нибудь вводную книгу по основам языка. Хороший вариант — «Функциональное программирование. SCALA для нетерпеливых.», Кей Хорстман (Cay Horstmann).

Или просто перепишите всё на своём любимом языке программирования.

Инструменты для разработки веб-приложений на Скала

Также, как для других языков, для Скалы создали целую кучу разнообразных инструментов для разработки веб-приложений.

Лично я остановился на простом тулките (наборе инструментов) для обслуживания HTTP-запросов Unfiltered. Хотя он в первую очередь предназначен для обслуживания HTTP-запросов в веб-приложениях, его вполне можно использовать для генерации и отдачи статических и динамических HTML-страниц, т.е. с его помощью можно создать и запустить полноценное веб-приложение.

Хорошее введение в философию Unfiltered (компактные модульные тулкиты против перегруженных фреймворков) и демонстрация его основных возможностей на слайдах:

Из моего личного опыта, обычно между написанием кода и развертыванием веб-приложения на сервере (быстрый запуск из среды разработки не в счет) существует некоторое количество промежуточных шагов, не слишком сложных и вполне механических, но часто утомляющих и не всегда очевидных (скопировать архив в определенное место в файловой системе, убедиться, что в конфигурационном файле прописаны нужные значения, проверить работу сервиса и т.п.). В случае с Unfiltered я впервые увидел, что разработка и запуск веб-приложения может выглядеть точно также, как разработка и запуск самого простого консольного приложения, только вместо System.in и System.out и окошка с чОрной консолью, для ввода-вывода здесь используется любой интернет-браузер со всей мощью HTML, JavaScript и CSS. Т.е. буквально, приложение стартует из милой сердцу main через «java -jar», далее ввод-вывод в любимом браузере на localhost:8080; только это и больше ничего. Дополнительные фичи и навороты (типа ORM или работы с шаблонами) подключаются к приложению по мере необходимости из сторонних библиотек, как это всегда происходило с любыми другими сторонними библиотеками.

Но, как уже было сказано выше, можно выбрать любую комбинацию инструментов по своему усмотрению или вообще не использовать Скалу, а любой другой язык программирования. Интернет давно переполнен как всевозможными сервисами, так и инструментами для их разработки; эталона, который бы устраивал всех или во всем превосходил конкурентов, не существует, поэтому я решил остановиться на комбинации Scala+Unfiltered только потому, что мне так захотелось.

В Скале решили сделать инновационным не только сам язык, но и процесс разработки приложений. Я ожидал увидеть просто дополнительный плагин к Эклипсу или Нетбинзу, но вместо него в литературе и разных интернет-ресурсах подразумевается, что работа ведется в специальном консольном Интерпретаторе Скала, который может компилировать и запускать код строка за строкой прямо в процессе набора или типа того. Плагины для Эклипса (на Эклипсе основана среда Scala IDE) и Нетбинза (и IntelliJ IDEA) тоже есть.

Я люблю комбинацию среды Netbeans с проектами в формате Maven (теоретически их можно попробовать открыть и в Эклипсе с плагином Maven или вообще собирать без IDE через консольные инструменты Maven), поэтому попробовал сохранить ее и для Скалы.

Итого, нужно скачать Netbeans (вариант как минимум для Java SE). Плагин для поддержки проектов Maven должен входить в стандартный комплект (если нет, то его всегда можно установить из среды через меню Сервис/Подключаемые модули).

Дальше скачать с Гитхаба (спешите видеть, пока его опять не заблокировал Роскомнадзор) и открыть в Нетбинзе проект snippets/scala-web/ScalaUnfilteredBasicD emo.

Сразу после первого открытия на иконке проекта повиснет небольшой желтый треугольничек с восклицательным знаком, символизирующий проблему с зависимостями. Правой кнопкой мыши кликаем на проекте, выбираем меню «Решить проблемы с проектом. » и в открывшемся окне «Решить проблемы с проектом» на строчке «Некоторые артефакты зависимости расположены не в локальном репозитории» нажимаем кнопку «Разрешить. «.

Ссылки на все необходимые инструменты и зависимости для сборки проекта компилятором Скала с библиотеками Unfiltered при помощи средств Maven уже прописаны в файле проекта ScalaUnfilteredBasicDemo/pom.xml, в том числе там указаны адреса необходимых репозиториев (https://oss.sonatype.org/content/repositories/releases/ — и для Скалы и для Unfiltered), все библиотеки уже есть в центральном репозитории Maven Central, этот диалог выкачивает их оттуда (нужен интернет и место на диске).

Поэтому после автоматической загрузки и установки всех необходимых библиотек, проект уже можно компилировать: опять правой кнопкой мыши на проекте, меню «Собрать» или «Очистить и собрать»

Если в коде не будет найдено ошибок, в окне вывода можно будет увидеть зеленое сообщение BUILD SUCCESS . Это значит, что классы и исполняемые файлы уже готовы, их можно найти в каталоге проекта scala-web/ScalaUnfilteredBasicDemo/targe t.

В частности, там лежит исполняемый jar-файл scala-unfiltered-basic-demo-1.0-SNAPSHOT и рядом в каталоге lib находятся все необходимые для его запуска jar-библиотеки (их туда заботливо положил Maven, следуя инструкциям, прописанным во все том же pom.xml: плагины maven-jar-plugin и maven-dependency-plugin).

В целом, на этом этапе уже худо-бедно можно работать — редактировать код на Скале, компилировать его в jar-файлы и запускать их на сервере в облаке — это всё осуществляет Maven, а всё, что ему нужно — это правильный pom.xml. Но для более комфортной работы с исходниками на Скале (подсветка синтаксиса, автодополнение, запуск приложения из среды и т.п.) лучше поставить дополнительных плагинов. Для этого идем в меню «Сервис/Подключаемые модули», на вкладке «Доступные подключаемые модули» делаем поиск по ключевому слову «scala» и устанавливаем всё, что найдется.

После этого редактор кода начнет подсвечивать синтаксис в файлах *.scala.

Автодополнение тоже работает:

Запуск исполняемого главного класса (содержит функцию » def main ( args : Array [ String ])») из среды разработки при помощи предназначенной для этого большой зелёной стрелочки на панели инструментов не работает, среда почему-то не может найти в проекте главный класс:

Может быть эту проблему исправят в будущих версиях плагинов Scala для Netbeans, пока что пришлось с этим смириться. Тем более, что есть рабочий обходной вариант: кликнуть правой кнопкой мыши на файле scala, в котором определена функция main, и выбрать меню «Отладка файла».

Проект запустится в режиме отладки, меня это вполне устраивает.

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

Пятнадцать лет программирует, руководит людьми, нанимает, делает опенсорс, участвует в подкастах. Очень любит язык Scala.

Оли Махасоева

Solutions Architect в 47deg.com днем, подкасты Scalalaz.ru и scala.love ночью ❤️

Олег Нижников

Любитель функционального программирования, элитный боец P.O.N.V. Автор некоторых OSS проектов

Роман Гребенников

Backend Lead, Scala-энтузиаст и специалист по машинному обучению.Занимается потоковой обработкой данных, рекомендациями и алгоритмами ранжирования.

Евгений Токарев

Scala и FP энтузиаст, соведущий подкаста Scalalaz и co-founder Lucky Fox Games. Занимался проектами в сфере Web/Backend-да, AR и разработки игр.


Дмитрий Бугайченко

Занимается развитием платформы работы с данными в Одноклассниках. Любит Spark, Scala.
Закончил Санкт-Петербургский Государственный Университет в 2004 году, там же защитил кандидатскую по формально-логическим методам в 2007. Почти 9 лет проработал в аутсорсинге, не теряя контакта с университетом и научной средой. Анализ больших данных в Одноклассниках стал для Дмитрия уникальным шансом совместить теоретическую подготовку и научный фундамент с разработкой реальных, востребованных продуктов. И этим шансом он с радостью воспользовался, придя сюда 8 лет назад.

Работа Программист scala

1-20 из 16871 результатов

Получать новые вакансии на почту

Scala- разработчик

120 000 — 170 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala/ Java разработчик / TeamLead

200 000 — 250 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Team Lead ( Scala/ Java)

Шпак Виктория Сергеевна

180 000 — 250 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala Developer (м. Красносельская)

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala Разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

AWS Cloud Engineer (Java/ Scala)

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala- разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala- разработчик

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Team lead/ Senior developer (Java/ Scala)

200 000 — 250 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala/ Java Developer

120 000 — 170 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Разработчик SCALA

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala Developer (Германия, Дортмунд)

Alex Staff Agency

290 000 — 410 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Middle developer / Разработчик / Программист

70 000 — 100 000 руб.

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Scala/ Java developer

Кадровое агентство Алексея Сухорукова

Полезная ли была для вас вакансия?

Пожалуйста, опишите проблему

Программист

150 000 — 350 000 руб.

подобрать команду и разработать новую платформу для бэтинга онлайн. Требования: Опыт разработки/работы с/в какой нибудь из нынешнее рабочих бэтинговых площадок. большой плюс наличия опыта и работа в любых из следующих платформах: «Лига.

Язык программирования Scala: скала, которую стоит покорить

Современные разработчики хотят от новых языков программирования краткости, понятности и типобезопасности. Именно таким был создан Scala. Впрочем, называть его новым не совсем верно – разработка Scala ведется уже 15 лет.

В июльском рейтинге RedMonk язык Scala занял 12 позицию. И это повод присмотреться к нему подробнее.

Общая информация

Scala – мультипарадигмальный язык программирования, который унаследовал изобразительные возможности от нескольких языков. Например, он напоминает и Java, и C#, но с гораздо большими возможностями.

Разработала Scala команда из Федеральной политехнической школы Лозанны под руководством Мартина Одерски. Он также занимался созданием Generic Java и компилятора Java фирмы Sun. В 2001 году Одерски решил создать типобезопасный язык для решения научных задач и улучшить языковую поддержку компонентного программного обеспечения.

В 2003 году создатели выпустили первый внутренний релиз, в январе 2004 года представили первую версию для общего пользования на платформе JVM (Java Virtual Machine – виртуальной машины Java). В 2006 году появилась Scala 2.0. В июне 2004 года Scala вышел на платформе .NET. С 2012 года поддержка этой платформы прекращена. Полноценный нативный LLVM-компилятор (Scala Native) был представлен лишь в 2020 году.

Разработчики преследовали две основные цели:

Масштабируемость языка: с помощью одних и тех же концепций можно было бы описывать и мелкие, и крупные части.

Масшабируемая поддержка компонентов: унификация и обобщение функционального и объектно-ориентированного программирования.

Scala реализован для платформ Java и JavaScript. Разработчики верят, что он станет преемником Java, обеспечив возможность быстрого создания компонентного программного обеспечения благодаря типобезопасности, лаконичности и высокой мощности.

Компиляторы и библиотеки Scala распространяются под лицензией BSD (Berkeley Software Distribution license – программная лицензия университета Беркли).

Особенности

В Scala используется единообразная объектная модель: значение представляет собой объект, а операция – вызов метода. При этом функции являются полноправными значениями – так реализуется парадигма функционального программирования. И каждая конструкция языка возвращает значение.

Но, в отличие от Java, в Scala объявляется не класс объекта, а сразу экземпляр объекта. Это естественная реализация шаблона проектирования Singleton («одиночка») – класса с единственным экземпляром.

Язык поддерживает абстракции типов и значений. К примеру, здесь есть гибкие симметричные конструкции примесей для композиции классов и типажей. Кроме того, доступны представления для внешних расширений компонентов (views) и поддержка обобщенных функций (generics), в частности, дженериков высшего типажа (generics of a higher kind). Views – очень мощный инструмент, полезный для интеграции. Он позволяет расширять класс новыми членами и типажами. Лаконичность кода на Scala можно продемонстрировать так:

Применение

На Scala созданы два крупных веб-фреймворка: Play и Lift. Play задействует платформы Coursera и Gilt, а самым популярным проектом на Lift является Foursquare. Кроме того, LinkedIn использует микрофреймворк Scalatra для поддержки своего Signal API.

Рывок популярности Scala обусловило и объявление Twitter в 2009 году: сервис микроблогов перевел с Ruby на Scala значительную часть серверного кода и продолжил работу в этом направлении. В 2011 году онлайн-версия газеты The Guardian была переписана с Java на Scala. Разработку на этом языке ведут Novell, Siemens, GridGain. Средство автоматической сборки Sbt, которое является одной из ключевых составляющих инфраструктуры разработки языка, также написано на Scala.

Так как Scala поддерживает «свободное смешивание» с Java, на нем можно писать Android-приложения. А возможность компиляции в JavaScript позволяет разрабатывать веб-приложения.

Почему Scala – выбор молодых и современных

Scala – считают академичным языком, писать на котором смогут немногие. Бытует мнение, что на Scala пишут «умники», а те, кто любит попроще, выбирают Python, Haskell или Erlang. Scala – достаточно сложный язык, но эта сложность позволяет реализовать высокую производительность и нестандартные решения на стыке функционального и объектно-ориентированного программирования.

На Scala будет просто перейти Java-разработчикам. Это прекрасный выбор и в качестве второго языка. 12 место в рейтинге RedMonk – отличный показатель популярности Scala. По сравнению с предыдущим кварталом 2020 года этот язык программирования улучшил свои позиции, поднявшись с 14 места. В других рейтингах позиции Scala не столь высоки: например, в списке TIOBE в мае 2020 года этот язык программирования оказался только 20-м месте. Правда, критерием для присвоения индекса служит количество поисковых запросов, содержащих название языка.

Еще один интересный показатель – «индекс предпочтения» GitHub, относительное количество пользователей языка, которые для следующего проекта в своей области выберут его же. Разочаровавшихся в Scala меньше, чем в Java или С++:

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

Но есть и минусы: из-за сложности Scala – не лучший выбор, чтобы создавать большие проекты и сразу отдавать код в продакшн. Кроме того, курсов по обучению этому языку программирования достаточно мало, так что это язык самообразования.

Как интервьюируют разработчиков Scala [закрыто]

Как проходят собеседования с программистами Scala? Какие аспекты ищет интервьюер при опросе разработчика Scala?

4 ответа

Во-первых, я бы сказал, подумайте, зачем вам Scala-разработчик. Вам действительно нужен Scala? Подумайте о том, что идет вместе со Scala (IDE, инструменты сборки, библиотеки, еще один уровень сложности выше Java и т. Д.). Вернуться к вопросу. Это идет в двух аспектах: теоретическое понимание и практические способности. не позволяйте «теории» обмануть вас. В Scala это так же важно, как в Java важна практичность.

Теоретическое


  • Посмотрите, знают ли они, что такое функциональная парадигма. Попросите их сравнить две парадигмы (FP против императива, то есть) в философии и практике. Если они могут привести примеры из языков, которые полностью или частично поддерживают FP, то для них это плюс.

Теория и практика смешались

  • Посмотрите, могут ли они действительно выполнять функциональное программирование правильным образом. Спросите их о списках, картах, молниях и рекурсии. Затем идут замыкания, лямбды, редукции, функции высшего порядка и неизменность.

Практические

Посмотрите, смогут ли они преобразовать императивный фрагмент кода в хорошую функциональную альтернативу (см. выше). Попробуйте цикл, который реализует некоторые математические или что-то в этом роде.

Найдите свой вкус к функциональному и императивному стилю. Выберите более функциональный стиль, но будьте осторожны, он не доходит до крайности на стороне разработчика.

Посмотрите, как много они знают о библиотеках Scala (например, подъем, отправка и т. д.) и инструментах (например, SBT, fsc, IDEA).

Посмотрите, насколько хорошо они могут использовать Java (инструменты кода и). Scala тесно связана с Java, особенно в более серьезных средах. Зная, что это большой плюс.

Теоретическое


  • Попросите их сравнить Scala с Java (PHP, C ++, Objective C и т. д.) и попросить их рассказать, что не так со Scala. Посмотрите, понимают ли они проблемы, а также преимущества. Попросите их привести примеры из реальной ситуации, когда недостатки Scala могут вызвать проблемы (например, новичкам трудно ладить, они незрелые, поскольку поддержка очень ограничена по сравнению с Java и т. Д.)

Практические

Посмотрите, связаны ли они с сообществом. Спросите их о Мартине Одерском и Дэвиде Поллаке. Попросите их назвать несколько проектов Scala и описать их вам (Facebook, Twitter, FourSquare, DBPedia и DBPedia SpotLight). Посмотрите, знают ли они, как именно Scala используется в этих проектах. Они читали статьи, смотрели видео и т. Д.?

Спросите их о книгах (их всего несколько). Чем больше они знают, тем лучше.

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

  • Scala для привилегированных (я чувствую себя умным, я чувствую себя настолько отличным от других Джо, у меня есть совершенно новый блестящий доктор философии, я ненавижу императив, потому что это для отсталых, Ява поверхностна, Scala настолько элегантна , так далее.). Этот тип не продуктивен в серьезных проектах и с ним трудно ладить.
  • Я влюблен в синтаксис Scala и хотел бы писать свой DSL везде, где у меня будет возможность написать код. Этот вид любит эксплуатировать особенности Scala до последней капли разрушительным образом. Они прекрасно сочиняют загадочный и лаконичный код до такой степени, что его невозможно прочитать. Этот вид особенно опасен, так как их код не читается. Их распродажа — любовь к перегрузке операторов, странным именам и написанию однострочников.
  • Я придерживаюсь Scala до последней капли, несмотря ни на что. Это наивный пуристский тип. Они не могут пойти на компромисс, и проект страдает, когда требуется гибридный подход, как в случае с реальными проектами.

П.С .: Если вы нашли хорошего Джо, то, пожалуйста, непременно сообщите мне, как нам нужно;)

Мастер Йода рекомендует:  Как отключить комментарии в WordPress (полное руководство)
Добавить комментарий
Рубрика: Карьера/Образование / Рынок труда