LINUX.ORG.RU

Следует ли изучать яву перед изучением скалы?

 , , ,


1

2

Собственно, начал вникать в яву, с ходу всё очень понятно и ясно. Прям ООП как он должен быть. Но слишком многословен. Имеет ли смысл переключиться на изучение скалы, или лучше сначала изучить яву, чтобы понимать, что под капотом у скалы?

Ответ на: комментарий от Zhbert

Чтобы кодить. Причём в связке с ORM и брокерами сообщений.

И ты о чём? О скале или о яве?

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

Но слишком многословен. Имеет ли смысл переключиться на изучение скалы

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

Im_not_a_robot ★★★★★
()

Имеет ли смысл переключиться на изучение скалы

да

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

нет

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

А можно вопрос более развёрнуто? :)

В общем случае не следует, в каких-то определённых случаях может и придётся - но информационного вакуума же нет, интернет, scaladoc/javadoc никто не отменял - проще всё по ходу соображать.

RFC ни по java, ни по scala я не читал... даже сертификацию никакую не сдавал... и ничего, живой.

BattleCoder ★★★★★
()

Если на галере работать, жаба сильно более ликвидна. Работы на шакале раз два и обчелся.

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

Есть шакала с более хорошим ООП, синтаксисом, смузи и маффинами - закономерно более шаткая, с меньшим комьюнити хипстеров.

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

Олсо, юзая шакалу, придется столкнуться с кучей жабо-библиотек. Например, написали ли уже для нее ORM, сравнимый с Hibernate? Несколько лет назад нам пришлось переходить на Хиб, ибо встроенный в play2 EBean оказался совершенно неюзабельной поделкой (в смысле, ничего не умел + глючил. сейчас может уже научили. Хотя это и приводит к решению неких сакральных вопросов

Но для того, чтобы юзать жабо-либы, знать саму жабу не нужно

Вот если бы ты был разработчиком _самой_ скалы, ее компилятора, библиотек - там без вариантов пришлось бы жабу зубрить. А для прикладного кода - «и так сойдет».jpg

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

для новых проектов всё может быть прямо наоборот

stevejobs ★★★★☆
()

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

anonymous
()

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

stevejobs ★★★★☆
()

По опыту изучения Clojure - да, стоит. Будет крайне не хватать двух вещей:

1) Знания библиотек (включая стандартную). Нужно для использования у себя в проекте + чтение чужого кода, чтобы разобраться в либах\багах\эксепшенах;

2) Понимания инфраструктуры (что внутри jar, как работает maven и т.п. «магии»).

Norgat ★★★★★
()

На реальных проектах (а не мифических забугорных, в омерике) я ни разу не видел Scala. Только Java с жутким Legacy.

Лучше с Java начать, но нужно помнить, что Java сейчас это Spring и Android.

fman2
()

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

Legioner ★★★★★
()

Лучше Haskell, а то в Scalaz будет сложно вникнуть.

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

в жабе и скале же одинаковые дженерики? различаются только variance: use-site (java) или declaration-site с прямым указанием какая имено (scala)

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

еще в scala можно higher kinded types, но они симпатичнее в haskell

dave ★★★★★
()

Нет. Языки перпендикулярные, будет даже вредно, при этом java читаемый язык, по наитию поймешь что код на яве делает.

Aber ★★★★★
()
Ответ на: комментарий от stevejobs

Как минимум в Scala есть reified generics или что-то такое. Вообще мне казалось, что в Scala система типов мощней, но могу ошибаться, я давно её тыкал.

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

Т.е. с учётом того, что мне нужны БД, копипаста кода и куча либ, то проще сразу садиться на яву и даже не трогать скалу?

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

Скажу так: скалу изучать не следует.

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

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

stevejobs ★★★★☆
()
Ответ на: комментарий от ktulhu6662

коспромисс между болью и фичами.

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

кто-то готов справляться с таким балансом фичи/боль

кто-то готов выдерживать куда бОльшую боль и использует, например, Clojure. Или вот например, Макс Лапшин в Erlyvideo пишет его на Эрланге, а Лев Валкин к Эрлангу использует еще и Haskell. С добавлением OCaml. А также Си и C++. Ибо они нефиговые инженеры.

кто-то напротив не готов ни к чему, даже к тому что фичи в джаве будут появляться раз в полгода. (к фичам относятся не столько «большие» вещи типа лямбд, а например, добавить метод в какой-нибудь стандартный класс). См комментарии к https://habrahabr.ru/post/337704 - первый же коммент «Меня пугает такой частый релиз», или вот: «очень рискованный шаг». Если добавить аргумент к методу раз в полгода - это рискованный шаг, то вам господа нигде кроме жавы вообще не жить

только ты сам можешь понять, что для тебя приемлемо :)

я для себя решил так: если нужно писать какой-то достаточно «умный» и красивый код, которому важна система типов итп, чтобы он выглядел литературно, который надо холить и лелеять (например, если делать СВОЮ компьютерную онлайн-игру, где гейм-дизайнеры постоянно хотят извращений) - то это Scala. Потому что я делаю это для себя, делаю максимально качественно, и готов вложиться на 146% ради этого

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

но мой выбор серьезно продиктован тем, что Java - первый язык, который я нормально знаю. PHP не считается, потому что его нельзя «знать». Возможно, если бы первым была Scala, всё было бы по-другому.

stevejobs ★★★★☆
()
Последнее исправление: stevejobs (всего исправлений: 3)

Следует ли изучать яву перед изучением скалы?

А как же иначе?

Но слишком многословен

Зато я вижу явно, что происходит, какова структура программы и данных, а не то, что мне навязывается под видом «автовыведения типов»(TM) как «синтаксический сахар».

Bioreactor ★★★★★
()
Последнее исправление: Bioreactor (всего исправлений: 2)
Ответ на: комментарий от stevejobs

И систему типов Хиндли-Милнера изучали и _реально_ это используете в _практической_ деятельности?

бесстыдно копипастить со Stackoverflow

Вы так говорите, как будто в этом есть что-то плохое.

Я же не участник «Специальной Олимпиады» -

http://lurkmore.to/Спортивное_программирование

Bioreactor ★★★★★
()
Ответ на: комментарий от stevejobs

По собственному желанию я заявления писать не буду. Только по статье.

А в целом - иногда использую просто поля. Но не в публичном апи.

dzidzitop ★★
()
Ответ на: комментарий от stevejobs

Если кому-то мешают простыни геттеров/сеттеров, то есть Lombok.

hippi90 ★★★★★
()
Ответ на: комментарий от Bioreactor

эм, хиндли-милнер - это же базовый алгоритм вывода типов, как его можно использовать в прикладном коде? Олсо, в скале используется не хиндли-милнер :) Для прикладного кода, можно держать в голове интуитивное правило: у тебя должно быть указано достаточно информации, чтобы тип конкретно выводился. Нельзя как в верблюде написать fun x -> x, потому что тип должен быть конкретным, а не «из непонятно чего в непонятно во что». Всё. Как там внутри это работает - хз. Где-то была преза с создателем конпелятора Скалы, который признается, что зачастую он сам не понимает, как именно работает механика под капотом (но этого и не нужно, т.к. она работает примерно интуитивно)

stevejobs ★★★★☆
()

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

arkhnchul ★★★
()
Ответ на: комментарий от Bioreactor

Part of the design is to disallow things like «text» ÷ 11 or apples + oranges, and for that I need a type system.

судя по приведенному куску кода, там тупо парсер текста, принимающий на вход List<String>. Т.е. примерно ту же портяну он написал бы и на джаве.

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

stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

«Расскажите последовательность Фибоначчи...»(С)

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

под красивым кодом я чо имел в виду. Вот случай из реальной жизни, есть MMO игра на джаве. Изначально кто ее делал, решили сделать три базовых класса: воин, маг и разбойник. От них идет не только иерархия наследования, но и дизайн многих API. А потом гейм-дизайнеры однажды приходят, и хотят иметь лучника, который частично маг, а частично воин. И все апи мгновенно превращаются в помойку. Потом эти опомоенные апи отдают кодером скриптов (т.е. по сути гуманитариям-геймдизайнерам, которые в «программировании» разбираются на уровне вызова player.addHealth(10)), и они эти сложные опомоенные апи совершенно не понимают, начинается неописуемый бардак. Переписать уже нереально, игре пять лет. Чтобы этого не случилось, надо а) с берега продумывать продвинутую архитектуру типов, а не делать Mage extends Object б) продумать пути отступления и рефакторинга. Возможно, Скала в этом могла бы помочь, со всякими имплиситами и макросами (от которых люди плюются, но когда тебя приперли к стенке, пусть уж лучше хоть какой-то план отступления будет, хоть и мерзкий на вид).

stevejobs ★★★★☆
()

Пока вы тут флудите ктулху уже грохнули. Помянем усопшего...

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

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

anonymous
()

Имеет ли смысл переключиться на изучение скалы,

нет. скала модно и молодёжно, раньше на её месте был руби, ну и где он?

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

скалы приходят и уходят, а java остаётся.

vtVitus ★★★★★
()
Ответ на: комментарий от stevejobs

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

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

еще есть Kotlin, он нечто среднее - синтаксис очень сильно похожий на джаву

на самом деле - удобная java называется groovy. он и встраивается удобно и т.п. котлин не показался сколько нибудь нужным.

vtVitus ★★★★★
()
Ответ на: комментарий от dzidzitop

equals, hashCode, toString можно тоже не писать...

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