Pull to refresh

Comments 43

Читал на днях в оригинале, понравился список «будет ли Scala простой для адаптации в вашей организации». И да, теперь я слежу в Твиттере за Dean Wampler’ом =)
Сплошное нытье, смешанное с обидой непонятно на что. В скале куча инструментов, которые не обязательно использовать одновременно. Очень странно слышать такое от человека с пятилетним стажем, который сам может приложить руку к улучшению языка/документации/IDE, и не один, а с командой.
Он как бы и не ноет. Наоборот говорит, что скала хороша. Но вот большинство команд имеют средний уровень и потому выбор скалы для них может привести не более чем к необоснованным разочарованиям.

Он не говорит о сложности языка, а говорит о сложности восприятия для определенных личностей. И зачастую это непонимание связано больше с нежеланием, чем со способностями.
Неверно. Критика вполне конструктивна, и основывается на том, что читать код Scala нормально может только программист-эксперт.
Да не критикует он читабельность кода. В силу специфики и мощи языка, сложность эта неизбежна. Тем более, что бОльшая сложность возникает в большей степени при реализации библиотечных функций, о чем и говорит на примере метода flatMap. Он всем доволен — и Scala, и собой.
Критику же я разглядел только в упоминании про IDE, но там же он и поясняет, что очень сложно создать средство разработки для подобного языка.
«Им необходим четкий, типобезопасный, высокопроизводительные язык и среда.» — чОткий язык это как раз то, что нужно твиттеру :)
Ладно, немного эмоционально получилось, добавлю конструктива:
1. Не надо переводить идиомы дословно. Лучше выкинуть кусок, чем оставлять заведомо непонятный никому оборот.
2. Не надо переводить слова по словарю не поискав их в гугле и не проверив что такая семантика и контекст имеют место хотя бы в нескольких других документах.
3. Ну давайте тексты на вычитку другим людям. Ну если уже совсем никак и друзей владеющих техническим языком нет, то хотя бы паре авторов из этого блога можно написать с просьбой сделать ревью — хоть один да согласиться.
После прочтения статьи стало интересно, что же это за книги написанные автором и насколько они востребованы…
Удалось найти только одну и с достаточно негативными отзывами на Amazon.com; почему-то не удивило.
Это автор Лифта, кстати. В сообществе Скалы это на сегодняшний день один из самых известных проектов.
В таком случае извиняюсь за пренебрежительный тон.
Тем не менее, всё же кажется несколько странным использование множественного числа в отношении написанных книг.
Полак человек неоднозначный. С одной стороны он кажется один из наиболее продуктивных разработчиков в мире. С другой стороны его взгляды и, хм… стиль программирования скажем так спорны.

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

А кто-нибудь может мне рассказать что это за изоляция такая?
Полагаю, что речь идёт о «high cohesion».
А по-подробней можно? Как это достигается в Scala и почему не достигается в Java?
UFO landed and left these words here
На самом деле вы немного преувеличиваете с «сотни дёргающих друг друга в разном порядке объектов, меняющих при этом внутреннее состояние», в java-мире практикуется разделение логики и состояния (Anemic Domain Model), подразумевающее создание statless-сервисов. Другое дело, как мне уже ответили ниже, достигается такое разделение более естественно.
UFO landed and left these words here
ага, ага, расскажите это авторам wicket, hibernate и им сочувствующим
UFO landed and left these words here
Иногда хибер прячут в DAO-шки, которые отдают immutable DTO-шки и логику уже пишут на них. В общем вопрос реализации.

Что касается Wicket, JSF и прочего, то да, такой подход есть. И опять де есть stateless-подоход. Я не говорю, что ООП не используют. Но довольно распространены не то процедурные, не то функциональные практики.
Достижимо что угодно и где угодно, вопрос в сложности и стабильности этих достижений.

Ну вот пара первых приходящих в голову особенностей Scala в сравнении в Java:
1. Удобство создания неизменяемых структур данных и их обилие в стандартных библиотеках.
2. Удобство создания чистых функций.
3. Удобство создания маленьких и простых классов и функций.
4. Возможность ухода от использования null и исключений (Option и Either).
5. Более простое делегирование операций благодаря наличию замыканий.
6. Поддержка множественного наследования не только интерфейса но и поведения (trait).
7. Возможность более точной спецификации сигнатур функций благодаря развитой системе типов.
Полагаю, что речь идёт о «high cohesion».
UFO landed and left these words here
UFO landed and left these words here
В котором «средний программист» не будет _более_ продуктивным. Т.е. плюсов переходить нет.
Если говорить прямо, то в статье сказано, что плюсов переходить не будет у ленивых, слабеньких и ничего не хотящих добиться в этой жизни программистов…

Работа с функциональными языками реально переворачивает мозги. Я после Scala даже на Java стал по другому писать…
Аргументы за «Scala сложна» таковы:
— Заобеденные дискуссии содержат в себе критерии для перехода от обычного разработчика к старшему
— Ваши разработчики приходят на работу в 9.15 и уходят до 6ти, не проверяя свой email

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

Я думаю, более стилистически точный перевод на русский звучал бы… "Удивительное рядом — Scala сложна!" или вообще, Внезапно.
Спасибо! Ломал голову, искал имя в его семье, смотрел не было ли докладов в этом одноименном штате за последнее время. Думал над «Scala сложна, детка!», но не решился, так и не определив что за Virginia :)
Возможно это мое imho, но основную проблему Scala я вижу в излишней математичности. Язык кажется сложным, потому что он пестрит математическими выражениями. Практически каждый элемент требует знаний и навыков теоретико-множественного исчисления, тогда как программисты больше склонны к алгоритмическому мышлению и далеко не все имеют математическое образование. А основные понятия языка и методы определены в его API, поэтому учить Scala — это не только учить язык, но и все, что идет под scala._. В итоге язык становится оторванным от реальности и представляющим исключительно академический интерес теоретикам программирования, использующим его как площадку для своих паттернов.

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

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

Еще одна особенность — это повсеместное использование DSL в библиотеках. Хорошо это или плохо — тема отдельного разговора.

Если сравнивать Scala с Groovy, то последний, обладая схожими возможностями, при этом являясь динамическим, т.е. «недоязыком», покрывает Scala в удобстве использования, потому как более-менее пытается следовать Java-way. Сравните, например, внешне скрипт на Gradle и на т.н. «Simple Build Tool»… ;)))
UFO landed and left these words here
Народ жаждет подробностей.
UFO landed and left these words here
Ой да ладно. Твиттер со своим standard-project и в 0.7 страх наводил, которым тут и не пахнет. Научиться читать (и со скрипом писать) такие билды — это два вечера (сам вот только недавно осваивал).
UFO landed and left these words here
Грэдл это пипец на марше. Во-первых время запуска, на прокте из 6 модулей в сумме секунд 40. Мавен xthtp 'nj время уже зипует архивы, если проект на джаве. Во-вторых мания авторов делать из всего DSL и рассказывать в документации про этот DSL, а не про стоящую за ним модель. Как результат простейшее действие для своего выполнения требует залезания в исходники самого грэдла или вопроса в рассылку (благодаря чему по потоку сообщений она ещё зимой делала scala-user).

Извините, накипело.
По теме комента: а можно пример элемента _требующего_ знаний теории множеств.

Чем лучше имя на христианском набора символов? Если не понимаешь что оно делает — непонятно в любом случае. Если понимаешь — всё ок. Единственна реальная проблема — это именование таких операторов в устной речи. Но если не увлекаться и граничиваться операторами вроде << или ++ — проблем вообще не видно.
Очень интересный пост, спасибо за перевод.
Это ведь необычно, когда адепт языка/технологии открыто говорит о его минусах.
Очень многие жалуются на сложный код Lift, и выбирают Play второй веб фремворк по удобству для Scala и не нативный для Scala. Так что вполне вероятно что сложность языка(его внутрених библиотек) умноженная на сложность библиотеки(аля lift) — очень сложное нечто. Сам я достаточно просто пишу средние проекты на Scala, но переиспользовать чужие библиотеки не решаюсь.
Одна возможность создавать почти нативный DSL говорит о том что язык выучить невозможно т.к. это бесконечное число языков…
Что тут можно сказать. Scala нужно знать, писать на ней, и внедрять )
Изучаю Scala в данный момент. Многое непривычно и приходится менять стереотипы сложившиеся при кодинге на Java. Scala может показаться сложнее просто потому, что там больше возможностей. Я уверен, сложность освоения окупится скоростью разработки.
От Java я пришел к Scala через Groovy и Python. Некоторые функциональные особенности языка были уже знакомы, но, безусловно было огромное количество всего нового. Полность. с Вами согласен: после определенного момента скорость разработки непременно повысится — кода получается гораааздо меньше. Очень доволен переходом на Lift.
Only those users with full accounts are able to leave comments. Log in, please.