LINUX.ORG.RU

Попробовал Scala. Больше не хочу.

 ,


3

7

Решил задачу на Scala невероятно красивым способом? Расскажи об этом своему clojure-коллеге. Только окажется, что он ушел три часа назад, оставив тебе записку «Используй Map». — Daniel Worthington-Bodart

Мне кажется, это «бесчеловечный» язык. Удивительно, что он сделан вроде бы человеком и вроде бы для людей. — Clinton Begin

Впервые я познакомился со Scala шесть лет назад. Тогда мне пришлось иметь дело с самодельной build-системой, написанной на Scala и использовавшей Scala в качестве языка для build-скриптов. Scala мне сразу не понравилась:

1. Build-скрипт компилировался по три минуты после внесения правок, и это еще до начала непосредственно сборки,
2. Синтаксис скриптов был совершенно бессистемный. Где-то было def где-то var. Где-то знак =, где-то фигурные скобки. Такое впечатление, будто кто-то шатался по скриптам, разбрасывая случайным образом знаки пунктуации.

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

Но вот в последние две недели мне пришлось разрабатывать простое RESTful API для большого и сложного набора данных. Я к Scala больше не притронусь!

Scala мы выбрали потому, что весь проект сделан на Java и XSL, с большим количеством обработки XML. Вроде как Scala — очевидный способ повысить продуктивность, особенно принимая во внимание встроенную в язык поддержку XML.

Но не тут-то было!

(Compile Times, Libraries and the Community, Magic Syntax, Everything is a Type, ‘Local’ Type Inference...)

Много о чем еще можно было бы написать. Неразбериха в инструментах сборки. Полная безнадега в поддержке Scala в IDE. Мешанина из «типов типов». Вечная копипаста с case class'ами. Но сказанного достаточно: всего этого хватило, чтобы затормозить разработку как минимум на две недели. Хватило, чтобы расхотелось когда-либо иметь дело со Scala.

Если вы дочитали до конца, то наверняка выделили лейтмотив моего текста. Он заключается в том, что Scala — неюзабельный язык. Я полагаю, изначально это был некий полигон для языковых экспериментов, который почему-то превратился в довольно распространенный язык. Не вижу ни одной убедительной причины в пользу Scala; есть много других языков, чтобв поэкспериментировать с ФП; если уж не терпится испытать сильные системы типов (а вам должно хотеться!) — попробуйте Haskell. Я допускаю, что, может быть — может быть! — вам удастся что-то такое проделать со Scala.

Но, ради всего святого, не пытайтесь использовать ее в продакшене.

Scala — неюзабельный язык.

чтобы это познать мне хватил пары статей про нее.

Это ж надо вляпаться в продакшен проект на не поддерживаемом языке.

Deleted
()

Дисциплина может спасти. Побыстрее комп для компиляции. Scala нужна когда в асинхронной логике можно рехнуться, будет простой код на Scala vs uberhell на Java

vertexua
()
Ответ на: комментарий от vertexua

Scala нужна когда

скала допустима когда есть люди с культурой написания кода, а не хакиры-переростки, которые рады все уместить в одну строку

Deleted
()

О господи, зачем это говно какого-то анонимного идиота переводить и тащить на лор? Как оценил эту блогозапись Одерский, «it's by someone who from reading his post seems to have written Scala all of two weeks after coming form Javascript.»

trycatch
()
Последнее исправление: trycatch (всего исправлений: 1)
Ответ на: комментарий от vertexua

Побыстрее комп для компиляции.

Кластер штоле? :)

будет простой код на Scala vs uberhell на Java

За счет чего? Обоснуй, пожалуйста (с примерами)

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

ну ты какбы не знаешь что код должен быть читабельным, и понятным, а также желательно так написанным чтобы вылетевшее NPE однозначно локализовалось, а не

get().get().get().get().get().get()// <- NPE at this line

Deleted
()
Ответ на: комментарий от Deleted

код должен быть читабельным, и понятным

Любой код читабелен и понятен при должном уровне владения языком.

чтобы вылетевшее NPE однозначно локализовалось

В этом поможет отладчик.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Любой код читабелен и понятен при должном уровне владения языком.

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

Хотя учитывая что ты таки вляпался в скалу, оно и неудивительно.

В этом поможет отладчик.

Видимо сложно сразу написать так чтобы по стектрейсу можно было протелепать и тест и накидать багфикс 8) Обязательно нужно к удаленному серверу подцепить отладчик чтобы поймать ошибку случающуюся например раз в неделю.

Deleted
()
Ответ на: комментарий от Deleted

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

Это их проблемы. Я никогда ничего подобного не испытывал.

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

Если в принципе такая ошибка происходит, то это ошибка в ДНК. При прямых руках и при использовании нормальных языков/инструментов подобная ситуация не возникнет в принципе.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Это их проблемы. Я никогда ничего подобного не испытывал.

Это элементарно, ты не пригоден для работы в команде, это раз, два тебя нельзя допускать к руководству, т.к. твой код подчиненные не смогут разобрать, и три, твой код никто кроме тебя не сможет поддерживать. Грамотный работодатель поостережется тебе поручать важные проекты (т.е. любые не write only).

При прямых руках и при использовании нормальных языков/инструментов подобная ситуация не возникнет в принципе.

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

Deleted
()

Мне кажется, что ситуация со Scala все больше напоминает ситуацию с C++. Сложные языки, нормальные возможности и ... негодующие неосиляторы.

forCe
()
Ответ на: комментарий от Deleted

Это элементарно, ты не пригоден для работы в команде

В команде непрофессионалов — да, непригоден.

твой код подчиненные не смогут разобрать

Профессионалы — смогут.

твой код никто кроме тебя не сможет поддерживать

Профессионалы — смогут.

3:0

Vuvuzela
() автор топика
Ответ на: комментарий от Deleted

Разумеется, команда быдло-monkey-кодеров не разберется ни в чем сложнее абстрактной фабрики синглетонов.

Но я с быдло-monkey-кодерами не имею дела.

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

В команде непрофессионалов — да, непригоден.

Ты себя чтоли к профессионалам отнес? Сертификат сеньйора не покажешь?

Профессионалы — смогут. x2

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

Deleted
()
Ответ на: комментарий от Deleted

Сертификат сеньйора не покажешь?

Так называемые «сертификаты» — это бумажки, которыми можно подтереться. Если мне на собеседовании попадается чувак, обвешанный сертификатами, я сразу гоню его ссаными тряпками. Ибо не придумаешь лучшего свидетельства, что перед тобой раздолбай и бездельник, выучивший сотню-другую баззвордов.

А у тебя, дай догадаюсь, такой сертификат есть? Правда ведь?

Vuvuzela
() автор топика
Ответ на: комментарий от Vuvuzela

Так называемые «сертификаты» — это бумажки, которыми можно подтереться. Если мне на собеседовании попадается чувак, обвешанный сертификатами, я сразу гоню его ссаными тряпками.

Заклинание «призыв понтующегося неофита» как всегда сработало 8)

Deleted
()
Ответ на: комментарий от Deleted

Это все, что ты можешь сказать по теме? Докажи, что существует связь между цветастой бумажкой и профессионализмом предъявителя.

Vuvuzela
() автор топика

У чувака бомбануло в личном блоге, а на ЛОРе опять будет тред в 100500 комментариев

anonymous
()

years of serious JavaScript development

ну и чего ты это нам притащил?

RedPossum
()

Что только люди не сделают, лишь бы нормальную Java не учить. Не надоел кактус?

anonymous
()
Ответ на: комментарий от Vuvuzela

Кто они, эти твои профессианалы? Сможешь назвать хотябы троих? Или они у тебя сферические в вакууме?

anonymous
()
Ответ на: комментарий от Vuvuzela

Профессионалы — смогут.

Смочь-то, может и смогут, только станут ли, а если и станут, то как быстро тебя пошлют?

anonymous
()
Ответ на: комментарий от anonymous

Кто они, эти твои профессианалы? Сможешь назвать хотябы троих? Или они у тебя сферические в вакууме?

Нет, не сферические. Работают в моем hi-tech стартапе. Но их имена ничего не скажут тебе.

Vuvuzela
() автор топика
Ответ на: комментарий от anonymous

Смочь-то, может и смогут, только станут ли, а если и станут, то как быстро тебя пошлют?

Вот ведь незадача, мы работаем вместе не первый день, и, знаешь, почему-то никто никого не посылает. ЧЯДНТ?

Vuvuzela
() автор топика
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код.

Но ведь это ложь.

Иногда нужно. =)

Что не так с монадами в Haskell?

Vuvuzela
() автор топика
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)

Ты с дуба рухнул?

Miguel
()

Нить попаболи ниасиляторов скалки, иди!

anonymous
()
Ответ на: комментарий от Vuvuzela

Любой код читабелен и понятен при должном уровне владения языком.

Все господа, расходимся, юный гений в треде заткнет всех нас за пояс.

trex6
()
Ответ на: комментарий от Vuvuzela

Уважаемый специались ведь сможет представить нам примеры своего хитроумного кода, в которых не сможет разобраться code-monkey, но сообщество профессионалов с легкостью поймет и оценит высокий уровень специалиста?

trex6
()
Ответ на: комментарий от Vuvuzela

Работают в моем hi-tech стартапе
моем
hi-tech

И тут Остапа понесло? Мы конечно понимаем, что стартап пока еще секретный и у него нет ни названия, ни публичной информации. Мы так же понимаем, что идея стартапа настолько уникальна и перспективна, что озвучить ее просто не предаставляется возможным.

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

trex6
()
Последнее исправление: trex6 (всего исправлений: 1)
Ответ на: комментарий от Vuvuzela

Что же ты наделал, зараза?! Я от смеха не могу уснуть.

anonymous
()

Неразбериха в инструментах сборки. Полная безнадега в поддержке Scala в IDE. Мешанина из «типов типов». Вечная копипаста с case class'ами.

Вы, кажется, использовали не тот подход. На Скале нельзя как, например, на питоне - просто взять и начать писать после любого другого языка. Её нужно основательно изучать, чтобы использовать эфективно. Как C++.
На работе пишу на Scala - вполне OK язык. Хотя это не совсем то, как я представляю свой 'идеальный' язык.

Не вижу ни одной убедительной причины в пользу Scala; есть много других языков, чтобв поэкспериментировать с ФП

Для нас главным аргументов являлось то, что оно на JVM, ибо вся инфраструктура уже на нём. На Джаве очень не хотелось писать.

Но, ради всего святого, не пытайтесь использовать ее в продакшене.

Плохой совет.

Осиливайте!

Debasher
()

Можно было написать короче: не осилил. Ну и man «парадокс Блаба».

LongLiveUbuntu ☕☕
()
Ответ на: комментарий от BattleCoder

На haskell сложновато (точнее, невозможно) писать императивный код. Иногда нужно. =)

В некоторых учебниках такую фигню могут написать, и где-то я такое даже вроде бы видел. На деле проблем не заметил. Когда нужны были эффективные heap-based priority queue и простой вектор в стиле С++ с возможность двоичного поиска, то я без проблем использовал монаду IO. Чуть многословнее из-за IORef и массивов, но это было единственной проблемой. По скорости код не уступал аналогичному коду на F# и Scala, а, вероятно, даже превосходил, который в свою очередь был очень близок к коду на C# и Java соответственно (примерно зная как первые транслируются во вторые).

Более того, не так просто отделить, где функциональный код, где императивный, а где декларативный. Это всего лишь ярлыки. Хаскель интересен тем, что там все это можно использовать вместе. Впрочем, в Common Lisp - тоже при должном умении. Скажу по секрету, даже в C# иногда.

dave
()
Последнее исправление: dave (всего исправлений: 1)

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

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

ovk48
()
Ответ на: комментарий от ovk48

а можно городить моноиды в категориях эндофункторов

Тем не менее, flow из akka и стандартный плагин продолжений Scala - примерно оно и есть. Другое дело, что могло бы быть сделано намного лучше, например, как в F#. Впрочем, эта тема непонятна многим. Пока они с нею не столкнутся сами - ни черта не поймут. Да и бог с ними.

dave
()
Последнее исправление: dave (всего исправлений: 1)

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

anonymous
()

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

SBT я, честно говоря, не осилил. Раза 3 пытался. Слишком он сложный. Система сборки должна быть простая как два рубля. Вот Makefile для любого проекта делается с абсолютно минимальными знаниями. Это хорошая система. Можно там и всякие универсальные правила воротить с трекингом зависимостей, но это уже излишества. Maven тоже хорошая система. Простой pom копипастится легко, в нём всё понятно и он работает. По мере усложнения проекта конфигурация усложняется, но обычно всё понятно. А этот SBT - для него надо походу весь мануал прочитать, чтобы хоть как-то использовать. Но в принципе maven мой проект на скале компилировал нормально, зачем мне этот SBT, я так и не понял.

Поддержка в IDE мне понавилась (Idea 3 года назад). Что мне надо - работало как надо. В паре мест подсвечивалось красным, но это абсолютно не критично было. Есть куда развиваться, но в целом продуктивно работать эта поддержка позволяла. Сейчас скорее всего всё ещё лучше.

Вот стандартная библиотека коллекций в скале это ад и израиль. Просто нереально сложная. При том, что она используется всеми везде и её исходники должны быть читабельны любым новичком. Впрочем может это только у меня такой подход - если чего не понятно, не изучать книжки, а лезть и читать исходный код. Исходный код этих коллекций я нифига не осилил. Там нереально высокий входной барьер. Если переходить на скалу всерьёз, всё, конечно, осиливается потихоньку, но я в итоге в скале использовал java.util-овские коллекции, с ними мне, по крайней мере, всё было понятно, что и как реализовано и работает.

Legioner
()
Ответ на: комментарий от Legioner

SBT я, честно говоря, не осилил. Раза 3 пытался. Слишком он сложный.

На самом деле там всё элементарно :)

anonymous
()
Ответ на: комментарий от anonymous

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

Legioner
()
Ответ на: комментарий от BattleCoder

Там могут быть трудности с представлением глобальных изменяемых переменных - тогда необходимо пересмотреть архитектуру. Остальных сложностей пока не заметил. Только по моим оценкам, liftIO в раз 5-6 медленнее, чем прямое IO. Видимо, дополнительный уровень косвенности привносит заметное замедление. Поэтому особенно увлекаться монадными трансформерами с IO не стоит там, где критична скорость.

dave
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.