Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, сосут по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоей зарплаты.
Я утверждаю, что простые и средние задачи на Scala решать существенно проще, чем на большенстве других языков. Конечно, зависит от задачи. Очень многое на Haskell делается красиво и тривиально. Но когда начинается ввод/вывод и обработка ошибок Haskell почти ни чего не дает, по сравнению с распространенными языками.
>>1137340 - Нормальная хвостовая рекурсия - Нормальный вывод типов - Нормальный синтаксис вызова функций - Нет разделения на функции/методы - ??? - Сотни их
>>1150976 Я юзал akka-http, довольно удобно для написания контроллера. Ну и конечно же akka-actors для написания многопоточных программ
Скала и обучение машинАноним07/03/18 Срд 20:36:17#38№1151296
Двач, а скала используется для обучения машин? Насколько реально использовать скалу для МЛ (либы вроде нужные присутствуют и в большом количестве, но используются ли на практике, встречаются ли такие вакансии)?
для проверки гипотез все равно быстрее python юзать и либы там заебись. Иногда уже проверенную гипотезу реализуют на Java, чтобы быстрее работало. А так в Scala для ML большого смысла нету
>>1151300 Спасибо, анон, я примерно это и предполагал. Тогда вопрос #2: со всей этой бигдатой, хадупами, спарками и прочим можно работать как на джаве, так и на скале. Ощутим ли выигрыш по времени при работе на скале, или если знаешь джаву то смысла вкатываться в скалу (для МЛ/ЕТЛ) нет?
>>1151042 я просто быдлоджавер, пишущий e-commerce. Конечно понимаю о существовании различных распределенных нагруженных приложений. Но супер-примеров использования реальных асинхронных штук, кроме мб чата, представить не могу)
А в дс есть какие-нибудь магистратуры, где я смогу изучать фп, теорию типов, мат логику? Мне интересно понять пэйпер dependent object types и свободно читать спеку языка, но пока что мне знаний не хватает. Еще было бы интересно позаниматься пруф асистантами. Начинал ковырять Coq - почти ничего не понял. Начал читать dragon book про компиляторы и потом планирую прочитать benjamin pierce: types and programming languages. Есть магистратуры, куда стоит поступать с таким полем интересов?
Подскажите ньюфагу, как сделать так, чтобы IDEA видела либы подргуженные через SBT. Проект у меня собирается, но автокомплит по загруженным зависимостям не работает
>>1152096 Делаешь в идее поиск по действиям (у меня ctrl+shift+a), пишешь sbt, в открывшейся панели жмешь кнопочку с двумя синими стрелочками. Еще когда build.sbt меняешь, вверху файла должна появляться желтая полоса с опциями refresh project, enable auto-import и еще че-то.
>>1152125 Не особо важно, главное - че за работа. Большинство джава-вакансий - это какое-нибудь нудное говно типа интернет-магазинов, крудошлепства в банках и т д, но если сможешь найти приличную работу на джаве (например, будет варик в бигдату вкатиться), то устраивайся.
>>1152130 Как-то слишком круто. Наукой я интересуюсь, но боюсь я для нее туповат. Я как-то в бакалавриате пытался придумать новый численный метод для вычисления одной фигни и ничего придумать не смог. Публикаций у меня нет и не предвидится, работаю на обычной энтерпрайз-работе (ну не совсем обычной, конечно, все-таки на скале немного особенные люди пишут). Я хотел поступать в магистратуру, чтобы за 2 года у меня либо появились научные интересы, либо чтоб я понял, что мне это не надо.
>>1152220 Еще автор писал, что хватает людей, которые пришли после работы в сфере и есть даже те, кому за 35 >>1152186 Публикации не обязательны. Как я понял - главное в красках в резюме рассписать чем занимался и написать хорошее мотивационное письмо, зачем тебе все это надо. Так же, по словам автора, перед поступлением можно и не знать тему своей будущей диссертации и определится в первый год
Вкатываюсь в скалу, лень смотреть/бенчить самому, может анон поможет:
1) Неоднократно натыкался на заявление что у Scala меньше memory footprint по сравнению с джава, но никто не поясняет за счёт чего это достигается. JVM как я понимаю одна и та же, gc тоже наверное работает одинаково, откуда улучшение? За счёт использования lazy?
2) Моё джавовское мировоззрение напрягает работа с коллекциями и сам факт того, что коллекции иммутабельны, вопрос такой, когда я делаю так: result :+= el на случай если проябался с синтаксисом -- хотел показать добавление элемента в конец коллекции происходит ли полное копирование коллекции? Сложность такой операции по времени и памяти какая будет?
2) списки там связанные, поэтому элемент просто добавляется в конец. да создается новый объект список, но перекопирования старых элементов не происходит
>>1153137 Нет, не происходит. Так как коллекции иммутабельны, общая часть может быть расшарена между всеми "версиями" это коллекции. Представь, например, что у тебя есть иммутабельный список А из 100 элементов, и ты делаешь на его основе 10 новых списков Б_1..Б_10, каждый из которых добавляет один новый элемент к первоначальному списку. У тебя будет 10 списков длины 101, но память будет использована не для 101*10 элементов, а только для 10 новых элементов (по одному от каждого списка Б_1..Б_10), в то время как сто общих элементов будут расшарены между всеми списками: каждый из списков Б_n будет содержать новый элемент и ссылку на список А. Поскольку данные иммутабельны, все эти операции гарантированно корректны.
В реальных структурах данных конкретная стратегия расшаривания зависит от реализации. Обычно структура делится на небольшие чанки, внутри которых изменения копируются (ибо так быстрее), и шарятся уже эти чанки. Сложность по времени обычно логарифмическая, но что-то вроде log_32(n), то есть "effectively constant time". Подробнее о реализации и расшаривании можешь гуглить по запросу "persistent data structures".
>>1153137 >> 1) Неоднократно натыкался на заявление что у Scala меньше memory footprint по сравнению с джава, но никто не поясняет за счёт чего это достигается. JVM как я понимаю одна и та же, gc тоже наверное работает одинаково, откуда улучшение? За счёт использования lazy? Возможно из-за lazy (если его аквтивно используют) он и меньше, но как по мне, у Scala должен быть больше memory footprint. Во-первых, она не самый эффективный Bytecode даёт, так как мы в нём натягиваем сову на глобус, пытаясь выразить сложные scala концепции в терминах java классов и объектов. Плюс функциональщина достаточно активно срёт в память. Недавно как раз смотрел запись конференции, где чувак показывал как типичный код с фолдом списка на скалке умудряется срать в память со скоростью полгигабайта в секунду. В следствии этого во время фолда просыпается GC и код работает раза в три медленнее, чем его итеративный аналог. А всё сраный боксинг/анбоксинг
>>1153241 >код с фолдом списка на скалке умудряется срать в память со скоростью полгигабайта в секунду >А всё сраный боксинг/анбоксинг Пикрелейтед. Открой свое сердце свету трансдьюсеров, брат!
>>1151466 Я тоже в прошлом быдлоджавер. А про многопоточность могу в сказать, что не обязательно руками выделять отдельный поток на обработку каких данных, можно просто засовывать отельные части процессов в фьючи (например дейстия с бд), которые будут рабтать асинхронно, что ОЧЕНЬ актуально, если принимать во внимание, что в современных пк упор делаться на многопроцессорность
>>1153647 >не нужна нужна, поверь нужна щас поясю почему - неизменяемость (иммьютбл переменные и коллекции), очень помогает при работе в многопоточности, легче писать тесты и да и вообще читать код легче - паттерн матчинг. Ну это просто охуенно, это даже не свитч на максималках, это намного круче - краткость. Вот за что ругают яву, за то хвалят скалу - полная поддержка фп. тут даже рассписывать не буду - строягая типизация при той же краткости, и да типы дженекиков при компиляции не стираются, как в яве) - охуенные стандартные либы да и вообще жаба ОЧЕНЬ много потеряла в погоне за совместимостю, после скалы будешь смотреть на неё как на ассеблер после плюсов
>>1153647 >>1154073 пока курил, понял что не расписал и половины перимуществ, если заинтересуешься, то я тебе на почту книжку скину "скала для джавистов" >>1154079 котлин уважаю, котлин крута но скала круче)
>>1154127 Работаю в геймдеве, проект на акке + кэтс, для бд - слик. Также работаю удалённо над проектом-сайтиком, там плей + бутстрап >>1154342 - монады - неизменяемость - функции как переменные - функции высшего порядка - алгоритмические структуры данных - нормальная поддержка рекурсии хотя дать определение фп достаточно сложно, в отличии от ооп
>>1154434 Кресты но это не точно. Я где-то слышал, что ООП - то что в крестах (из Симулы). В смолтолке - не ООП, а объектное программирование (объектная система в смысле позднего связывния, вот ото вот всё).
>>1154375 >алгоритмические структуры данных Алгебраические типы данных.
>неизменяемость Иммутабельность. Оттенок смысла немножко другой. Вообще, не надо ничего переводить на русский. Нужно использовать терминологию как есть, по возможности.
Читал ли ты книжку Functional Programming in Scala (изд. Manning)? Это одна из лучших книг по фп вообще, я бы советовал. И задания обязательно прорешать. Ответы есть, репозиторий на гитхабе.
Есть ещё Functional Programming in Java, тоже Manning. Тоже охуенная вещь. Написана в совершенно другом стиле - более практическом. Автор (намеренно) не употребляет слово "монада" в основной части книги, например, и в послесловии объясняет, почему.
>>1154508 >Алгебраические типы данных. да, спс за фикс >>1154439 >>1154461 >>1154434 ооп - это полиморфизм, инхеритенс не знаю как норм перевести, инкапсуляция и абстракция, а дальше понимайте как хотите
>>1154558 >Это как раз тот случай, когда надо переводить та да, просто русский мне не родной >>1154508 >Читал ли ты книжку Functional Programming in Scala (изд. Manning)? к сожелению ещё не читал, уже скачана, но не читал да и только 3 месяца, как на скале, прочитал только ессеншиал скала, скала для нетерпеливых (на русском) и 200 страниц програминг ин скала одерского
>>1154577 В FP in Scala самой скалы по минимуму. Т.е. предварительное знание языка желательно, но не обязательно. Ну, это авторы так пишут. На самом деле, конечно, просто с нуля ловить там нечего. Но, в дебри языка они не лезут, только в типы, разве что.
Книга небольшая, язык (английский) - простой. Но, времени на чтение (с решением задач) надо много, может быть, даже и год (судя по тому, что народ пишет). Т.е. надо делать это вдумчиво и не спеша.
"Скала для нетерпеливых" - очень годная книга, перевод я, правда, не видел. Одерского можно читать вечно, лол. Народ на форумах пишет, что терпения не хватает.
>>1154549 >ооп - это полиморфизм Сильное заявление. То есть тайпклассы - это ооп?
>инхеритенс Сильное заявление. То есть ооп-языки без наследования - не ооп? Алсо, "предпочитайте композицию наследованию", вот это все... ооп-гуру, выходит, тоже не ооп?
>инкапсуляция и абстракция Точно, анон, ведь без ооп абстракций не бывает! Ой, подожди. Нет, что-то не сходится.
>>1154655 ты зелёный? ну ок, скажи что для тебя ооп, вот мне реально интересно >>1154601 >>1154629 да у меня вообще уже книжек 5 накопилось, котрые хочу прочитать
>>1154679 Для объектно-ориентированное программирование - это, внезапно, программирование, ориентированное на объекты. А объекты - это такие штуки, у которых есть внутреннее состояние, которое можно шатать сообщениями.
Но к "ООП" это не имеет никакого отношения. ООП - это просто маркетинговый буллшит без строгих\инженерных оснований, под которым каждый понимает то, что ему хочется.
Если что, это все к >хотя дать определение фп достаточно сложно, в отличии от ооп
>>1154073 >и да типы дженекиков при компиляции не стираются, как в яве) Ты что-то попутал. У тебя код собирается в байткод jvm, который о типе дженериков вообще представления не имеет. Ну нет на его уровне такой концепции. Не веришь - javap в помощь
А вообще я это за тебя сделаю, возьмём примитивный дженерик class S[A](opt: A) { def get:A = opt }
Компиляем, юзаем javap -c -v и получаем
public A get(); descriptor: ()Ljava/lang/Object; flags: ACC_PUBLIC Code: stack=1, locals=1, args_size=1 0: aload_0 1: getfield #16 // Field opt:Ljava/lang/Object; 4: areturn LocalVariableTable: Start Length Slot Name Signature 0 5 0 this LS; LineNumberTable: line 2: 0 Signature: #28 // ()TA;
public S(A); descriptor: (Ljava/lang/Object;)V flags: ACC_PUBLIC Code: stack=2, locals=2, args_size=2 0: aload_0 1: aload_1 2: putfield #16 // Field opt:Ljava/lang/Object; <- внимание 5: aload_0 6: invokespecial #23 // Method java/lang/Object."<init>":()V 9: return LocalVariableTable: Start Length Slot Name Signature 0 10 0 this LS; 0 10 1 opt Ljava/lang/Object; <- описание нашего поля LineNumberTable: line 1: 0 line 5: 5 line 1: 9 Signature: #29 // (TA;)V MethodParameters: Name Flags opt final
Как бы можно заметить, что класс компилируется единожды и вся работа с полем идёт как с Ljava/lang/Object;
Дальше пишем:
val s = new S[Int](3) val a = s.get println(a + 3)
И снова видим, что в байткоде у нас опять сначала int боксится (6:) и засовывается в дженерик как Object(9), а затем из дженерика выдёргивается именно Object (20:) а уже потом анбоксится в int (23:). Как можешь заметить, отдельной реализации дженерика, заточеного под Int тут не генерируется.
Тоже самое и со String
val s = new S[String]("3") val a = s.get println(a.length)
0: aload_0 1: new #75 // class S 4: dup 5: ldc #77 // String 3 7: invokespecial #80 // Method S."<init>":(Ljava/lang/Object;)V 10: putfield #69 // Field s:LS; 13: aload_0 14: aload_0 15: invokevirtual #82 // Method s:()LS; 18: invokevirtual #86 // Method S.get:()Ljava/lang/Object; 21: checkcast #88 // class java/lang/String 24: putfield #72 // Field a:Ljava/lang/String; 27: getstatic #93 // Field scala/Predef$.MODULE$:Lscala/Predef$; 30: aload_0 31: invokevirtual #95 // Method a:()Ljava/lang/String; 34: invokevirtual #99 // Method java/lang/String.length:()I 37: invokestatic #105 // Method scala/runtime/BoxesRunTime.boxToInteger:(I)Ljava/lang/Integer; 40: invokevirtual #108 // Method scala/Predef$.println:(Ljava/lang/Object;)V 43: return Опять суём String как Object, как Object же достаём (18:), потом чекаем, String ли это (21:) и только затем уже работает с этим объектом как со строкой
То есть на уровне байткода, как можно убедиться дженерики в Scala аналогичные дженерикам из Java, тот есть нихуя их там нет, есть лишь объекты оперирующие рефами на Object.
>>1154751 Ну и зачем ты это высрал сюда? Ты, блять, кончай тут умничать. Здесь тебе не тут.
В скале используется специальный костыль, который сохраняет информацию о типах, только и всего. Там целое кино с рефлексией в скале, заебёшься делать. Но, тем не менее, информация о типах - сохраняется.
Ещё раз, для особо одарённых - она не "не стирается", она специально сохраняется, в специальном объекте, и обеспечивает это компилятор скалы, если его хорошо попросить
>>1154826 >>В скале используется специальный костыль, который сохраняет информацию о типах, только и всего. >>Там целое кино с рефлексией в скале, заебёшься делать. Но, тем не менее, информация о типах - сохраняется.
Как бы фича ради фичи. В рантайме это никак не помогает, так как JVM похуй. JITу она не поможет сгенерировать более эффективный код (а она могла бы помочь, банально со старта девиртуализовать некоторые вызовы, да удалить лишние кастчеки). Да блин, даже сама scalac всё равно генерирует код с кастчеками и прочим дерьмом. При разбработке же нормальные IDE сами прекрасно могут вывести все типы и проверить их соответствие. >>Там целое кино с рефлексией в скале, заебёшься делать. Как бы этим в нормальной разработке особо никто заниматься не будет. Нужно это всё трём с половиной теоретикам. Да кукаретикам, чтобы список "достоинств" скалы раздувать.
>>1154826 Информацию о дженериках в полях, аргументах и результатов методов можно и в джава коде достать. А вот имея на руках объект класса с дженериком узнать его дженерик нельзя. Покажи мне код, который сделает это на скале, хотя бы с костылями.
>>1154908 >При разбработке же нормальные IDE сами прекрасно могут вывести все типы и проверить их соответствие. Это делает компилятор. То, что мы тут обсуждаем нужно _только_ для рефлексии.
>>1154969 Перечитай там ещё раз. Написать метод, который принимает List[Any] и возвращает то, что там на самом деле - нельзя. А дженерики классов, полей, аргументов и результатов функций так же доступны в джаве.
Там Any, блядь, или ты чего-то другого хотел? Ты вообще как-то не так всё это понимаешь (судя по твоему пассажу про IDE). Извини, у меня сегодня нет настроения нести свет просвещения в массы.
>>1154970 Просто как бы скала тоже язык не для всех, и х-ль - язык не для всех, и на жаваскрипе микроконтроллеры не попишешь. То есть это самоочевидное утверждение, но ты, разумеется, имел в виду что-то другое.
>>1155092 Я имел в виду, что лисп вообще и кложура в частности, не подходит на роль промышленного языка общего назначения. Нормальному человеку просто тяжело писать на голом AST. И, особенно, читать.
Плюс вот эти вот тучи функций на каждый пук - их заебёшься запоминать. Плюс динамика ещё. И макросы. Ну и так далее. Очень большой оверхед с очень скромным результатом. Короче - это просто нишевый DSL.
Скала - тоже та ещё хуета, из говна и палок, между нами говоря. Я выучил её уже давно, и до вполне приличного уровня. Но, в реале так и не применил ни разу. Это вещь в себе. А у меня нет таких проектов.
И это очень сложный язык - слишком много языка в языке. Это плохо для промышленной разработки. Умственные способности разработчиков тут ни при чём, это другое.
>>1155120 Анон, извини конечно, но ты совершенно не разбираешься в вещах, о которых пытаешься рассуждать. В частности, ты либо не понимаешь значения, либо просто некорректно используешь слова "AST" и "DSL". Ну, то есть продолжать обсуждение этой темы на данный момент смысла явно нет.
>>1155124 Юноша, если вам хочется приключений - это нормально. Пользуйтесь кложурой и скалой, хуже вам не станет. Не догоните, так согреетесь.
Я же говорил о промышленной разработке. Когда программа живёт в несколько раз дольше железа, например.
Ну, и полезно помнить, что по этому поводу сказал Дейкстра: The competent programmer is fully aware of the strictly limited size of his own skull; therefore he approaches the programming task in full humility, and among other things he avoids clever tricks like the plague.
Это именно то, что никак не может взять в толк модная хипстота, хлебающая смузи в кофешопах.
>>1155129 Анон, повторю еще раз, что из описанных выше высказываний следует твоя некомпетентность в обсуждаемых вопросах, а потому я не вижу смысла продолжать о чем-то говорить - мне это неинтересно. Твой пост ко мне не имеет никакого отношения, а "юношами" ты лучше пацанов у себя во дворе называй.
И всё в порядке с Clojure, на самом деле. Я довольно давно ею занимаюсь (для развлечения). И довольно неплохо знаю. Но, применить в реальных проектах (за деньги) так и не получилось. И это меня огорчает.
>>1155120 > Я выучил её уже давно, и до вполне приличного уровня. > Но, в реале так и не применил ни разу. Чет проиграл. Не взяли на работу на скале и теперь рассказываешь, что скала не нужна, найс.
> И это очень сложный язык С точки зрения долбоебов, строгающих сайты, - безусловно. С точки зрения нормальных людей, которые умеют читать книги и документацию, а не только копировать портянки со stackoverflow, - крайне удобный и понятный язык.
>>1155129 > he avoids clever tricks like the plague Напомню, что тайпклассы, монады, зависимые типы и другие концепции, которые используются в скале, но которых нет во многих других языках - это не tricks, а общепринятые концепции, описанные в куче книг и статей. Если для тебя это tricks, то я тебе советую в универе отучиться, а потом постить в треде для нормальных людей.
Всё немножко не так. В данный момент я сам обеспечиваю себя работой. И сам решаю, что и на чём будет написано. В процессе принятия решений - принимаю в расчёт соображения типа тех, которые высказывал старина Эджер. Как показывает практика - не зря.
На самом деле, довольно много людей получает удовольствие от программирования на скале, но, при этом, не использует её в продакшн.
И да, я бы хотел, чтобы меня "взяли на работу" писать на скале. Но, не представляю, кто бы это мог быть.
>>1155155 Ну ладно. Просто тогда странно слышать от тебя (factually incorrect) фразы вроде "кложа - это дсл", ну а как выглядит аст можно посмотреть, например, тут: https://github.com/clojure/tools.analyzer
Вдвойне странно слышать рассуждения о синтаксисе в контексте "промышленной разработки". На срок завершения проекта и на количество багов никак не влияет то, пишешь ты f x, f(x) или (f x). Это как раз и есть то самое хипстерство и смузихлебство - "нинравица!1". Подобные вещи нужно оценивать прагматично (объективные профиты дает? дает), а не с точки зрения нравится\не нравится. Да и привыкает к любому из этих вариантов человек максимум за 2 вечера.
Далее, что там было... Тучи функций - опять же, это какая-то хипстота. Если человек собирается писать на языкнейм, то он должен не изобретать велосипеды на каждый чих, а разобраться в стандартной библиотеке. В случае кложи это означает, что ему нужно выучить все функции в core. Просто берешь и учишь, тут нет ничего сложного (на худой конец - под рукой всегда есть читшит). В случае с джавой или скалой ему пришлось бы делать ровно то же самое - только эти функции были бы раскиданы по множеству условных "неймспейсов".
Нытье про динамику в 2018 году вообще странно слышать. Статическая типизация необходима в проектах-монолитах хотя тот же линукс вон как-то пишут на void* - и ничего; но там хуман ресоурсы, конечно, специфические, а у нас тут, типа, облака, сети, микросервисы, привет.
Ну и не лишним, наверное, будет упомянуть, что "лисп вообще" как бы и был в течение некоторого немаленького промежутка времени одним из основных языков "промышленного программирования общего назначения".
Короче, я полностью согласен с утверждением "Кложура - язык не для всех".
>>1155607 >factually incorrect Не нужно всё понимать тупо буквально. Есть метафоры, гиперболы, аллегории и прочая хуйня.
>AST Ну, концептуально, синтаксис лиспа - это и есть голое AST. Потому, что синтаксиса, как такового, просто нет. То, что на самом деле это не совсем так, это ничего не меняет в том смысле, в каком я употребил это сравнение.
>DSL Написание любой программы на лиспе сводится, по сути, к написанию DSL для конкретной задачи. Или ты будешь с этим спорить? Ну так вот, лисп - homoiconic. DSL для написания DSL, лол.
>>1155735 >метафоры, гиперболы, аллегории >концептуально >на самом деле это не совсем так Угумс.
>синтаксис лиспа - это и есть голое AST. То есть (f (g x) (h y)) - аст, а f(g(x) h(y)) - уже не аст? Занятненько.
>Потому, что синтаксиса, как такового, просто нет. Есть. Бнф тебе написать или сам напишешь? Про ридер макросы дать почитать? Вообще, весьма надоела уже эта байка, которую бездумно повторяют, совершенно не задумываясь о значении того, что говорят. К вопросу о хипстерах-смузихлебах, угу.
>То, что на самом деле это не совсем так, это ничего не меняет Так может тогда попросту не стоит употреблять такие хуевые сравнения, тем более на техническом хоть и для аниме-девочек форуме?
>Написание любой программы на лиспе сводится, по сути, к написанию DSL для конкретной задачи. Ерунда. Даже хуже: это утверждение не несет вообще никакого смысла. Опять же, на язык просятся хипстеры-смузихлебы.
>DSL для написания DSL A.k.a. "язык программирования общего назначения".
>>1157378 Ты и тут уже со своими фантазиями отметился, лол. Может ты как-то не так компилируешь?
Вот я пишу энтерпрайзный "веб" на джаве, компиляции даже не замечаю. А выгоды от статической типизации и всего, что с этим связано - очень даже. А также - охуенные выгоды от всей инфраструктуры java.
Если мне нужна динамика - использую Groovy. Раньше использовал JRuby, но отказался от него разлюбил, лол.
>>1156785 Если _суровая_ статическая типизация тебя не пугает, то давай. Скала - это статический язык, годно имитирующий динамику. Но, чтобы понимать, как это всё работает, а не просто тупо писать магический код, придётся постараться.
>>1157387 >с рубей на кложу вроде логичнее перекатываться Если ты хипстер, то да. Задрочив руби до потери пульса, они перекинулись на кложуру.
А так - руби и скала - довольно похожи (на уровне запаха кода или типа того).
И некоторые серьёзные руби-бобры таки перекатились на скалу. Например, Дэвид Поллак, автор книги Beginning Scala. Он в начале книги очень живописно описывает свой баттхёрт в начале изучения скалы.
>>1158272 > Если ты хипстер, то да. > Задрочив руби до потери пульса, они перекинулись на кложуру. Свят-свят, все бородатые смузипидоры на гироскутерах съебали в ноду, в кложе они нахуй даром никому не нужны.
>>1158272 >Если ты хипстер, то да. Как там в 2012?
>А так - руби и скала - довольно похожи Ну, учитывая, что руби - это лишп без скобочек и по-японски, лол... нутыпонел. Хотя так-то это про любой оопфп гибрид сказать можно.
>И некоторые серьёзные руби-бобры таки перекатились на скалу. Я и не спорю. Скала - тоже хорошо. Но СЛОЖНА и НЕНУЖНА!!1
>>1157378 Да ну не то чтобы я конкретно перекатываюсь, даже наоборот. Просто решил пополнить слегка коллекцию скиллов чтобы потом на собесах выебоны кидать
И да, я забыл сказать, что Дэвид Поллак, перекатившийся с руби на скалу, это тот самый чел, который потом придумал лифт. Так благотворно на него подействовал живительный скала-баттхёрт.
>>1158291 >Matz: Ruby is a language designed in the following steps: take a simple lisp language (like one prior to CL). remove macros, s-expression. add simple object system (much simpler than CLOS). add blocks, inspired by higher order functions. * add methods found in Smalltalk.
Собираюсь вкатиться в Scala и Clojure, раньше писал только на C/C++ и Python. Посоветуйте какой-нибудь курс по Java, чтобы после него было ясно, что происходит с JVM в этих ваших скалах, желательно с сертификатами чтобы на фрилансе индусировать в случае чего
>>1161327 > Я так и не понял: тебе нужно про устройство jvm что-то Ну смотри, я на жабе сейчас даже хелло ворлд не смогу написать, но хочу писать на скале. Мне же ведь нужно хотя бы примерно понимать, на чём скала построена, как в случае чего тюнить jvm, чё у неё вообще внутри и так далее.
> Или ты хочешь сначала вкатиться в тырпрайс на джаве? Или тебе просто сертификаты нужны? тырпрайс и сертификаты (а я имел в виду что-то вроде курсеровских) - это на крайний случай, чтобы можно было на апвёрке с раджешами конкурировать.
> В джаву через thinking in java и доки можно вкатываться. Ок заебись, уже хорошо, но хотелось бы именно курс с заданиями.
>>1161346 >курс с заданиями. Ну, на курсере вроде алгоритмы от принстона на джаве, но это курс про алгоритмы, а не про джаву, разумеется. Но тащем-то почему бы и нет. Там же проходи интро ту фанкшнл програмин от одерски.
>>1161359 > Ну, на курсере вроде алгоритмы от принстона на джаве, но это курс про алгоритмы, а не про джаву, разумеется. Ок, а чисто про джаву и её экосистему есть?
>>1161346 > Мне же ведь нужно хотя бы примерно понимать, на чём скала построена, как в случае чего тюнить jvm, чё у неё вообще внутри и так далее. Можно почитать jvm specifiсation, еще на всяких хабрах и реддитах периодически постят что-нибудь про то, как тюнить жвм, на чем писать бенчмарки и т. д.
Вообще начинай сразу со скалы, джаву выучишь в процессе, там учить нехуй (если говорить о самом языке, а не о jvm).
>>1161363 В экосистеме джавы очень много древнего индусского говна типа сервлетов, спрингов, и т д, где у авторов библиотек вместо мозга AbstractSingletonProxyFactoryBean. Тебя из экосистемы джавы должны интересовать только java se и jvm. Туторилы по классам из java se есть на сайте оракла + сорцы этих классов читай, полезное занятие.
>>1161712 > Ок заебись, уже хорошо, но хотелось бы именно курс с заданиями. hexlet.io (я лично не пробовал но вдруг тебе надо НА РУССКОМ) udacity да там платно, но более эффективное обучние. ты гораздо больше денег-времени потратишь читая книжки.
>>1161725 > вдруг тебе надо НА РУССКОМ Не, мне как раз-таки надо наоборот.
> да там платно, но более эффективное обучние. ты гораздо больше денег-времени потратишь читая книжки. Согласен. Скажи, какой конкретно курс по яве порекомендуешь для продолжающего? Как-то странно мне будет после нескольких лет зарабатывания денег питоном снова слушать объяснения того, что такое условия и for лупы.
Програмач, как на скале правильно сделать следующее:
загрузить инфу с нескольких тысяч пронумерованных АПИ эндпоинтов (api/page/1; api/page/2 и т.д) и положить в файл в порядке нумерации, при этом (по возмжности) не держа в памяти все ответы АПИ.
Основная проблема, заключается в том, что мне нужно загружать данные параллельно, но обрабатывать их я хочу последовательно.
Я создаю стек с Future и потом по мере готовности заливаю резалты в файл, т.е как только future result оказывается в файле, future убирается со стека и может быть очищено gc. Тем не менее, меня не покидает мысль что это какой-то не Scala-way, как минимум потому что я использую mutable data structures. Я пытался приладить к этой задаче стримы, но что-то каждый раз получается немного не то. Как бы решал эту задачу функциональщик, в какую сторону смотреть?
>>1170111 А как ты собираешься эффективно класть в файл твои респонсы в порядке нумерации, если в память они не влазят, а очередность их прихода не определена?
>>1170111 Параллельно запрашивай ендпоинты и сри данные в отдельную БД, которая нормально дружит с конкурентностью (то есть всякие sqlite мимо). Обязательно индексируй номер страницы api или по какому порядку ты захочешь записывать данные, чтобы при селектах не делать фулл скан каждый раз.
Как закончишь выгрузку в БД - выгружай оттуда данные в нужном тебе порядке и записывай куда надо хоть последовательно, хоть на голове.
>>1170289 Складывай в какую-нибудь легкую базу, а оттуда по крону сливай в упорядоченный файлик, например. У тебя же нет жестких ограничений по времени?
>>1170299 Можно загружать данные батчами - паралелльно делать 50 запросов, по заполнению батча, сортировать его в памяти, писать в файл и поехали со следующим батчем.
>>1170330 Зачем? То, что я предложил - работа для одного функционального чейна. > джойнить и сортировать батчи в отдельном процессе Конкурентно заполняется буфер энного размера. По заполнению буффера, буфер сортируется и высирается в файл. Повторить до окончания.
>>1170410 >Допустим, тебе пришли данные: 42, 0, 1, в таком порядке. В какое место в итоговом файле ты запишешь 42, когда получишь его? Сяду на хуи, мать на колени посажу.
Как найти работу на скале, если везде просят коммерческий опыт 1-3 года? Сейчас работаю джавером. Если у меня будет коммерческий опыт 1-3 года джавы, а скала чисто для себя. Есть шансы устроиться? Или нужно валить из джавы и изо всех сил пытаться найти хоть какую работу на скале?
>>1189034 Обычно просят опыт и на других языках, если не получается, то просись на скалишный проект на работе, только будь готов, что твой прежний опыт работы на других языках мало чего значит
>>1189338 >олучается, то просись на скалишный проект на работе, только будь готов, что твой прежний опыт работы на других языках мало чего значит Я бы с радостью попросился на скалишный проект на работе, да только у нас скала не используется вообще, за ненадобностью
Я хз как там у вас принято, но в Минске практически все вакансии требуют 1-3 года опыта и отличное знание огромного стека технологий, вот только на проверку оказывается что готовы и собаку взять. Рассылай просто резюме туда-сюда да и всё. Валить вникуда не очень идея с точки зрения карьеры, коммерческого опыта от сидения на жопе дома точно не появится.
Осваиваю play framework (2) с ebeans, в попытках избежать тонн боилерплейта хочу написать единственный CRUD контроллер, который будет работать со всеми моими моделями:
> class GeneralCRUDController[T <: Model with HasId]
Дальше делаю вот так:
> def delete(id: Long) = Action {implicit request: Request[AnyContent] => > val c = Ebean.delete(classOf[T], id) > Ok("success") > }
и получаю > class type required but T found. да, я не оч понимаю дженерики
нагуглил что это можно обойти через ClassTag и runtimeClass, но тогда используется рефлекшен и теряется смысл типизации, возрастает сложность дебага, скорее всего снижается скорость работы, да и просто я не люблю рефлекшен
Как мне выходить из этой ситуации? Может мой подход изначально неверен? Доп. вопрос, как я понимаю в play framework 1 был коробочный CRUD. Во втором коробочного CRUD-а нету. Есть ли какая-нибудь адекватная замена, чтобы прямо прописал 2-3 конфига по мануалу и всё работает как по-волшебству?
>>1189462 Не понял, а как ты без рефлекшна собрался диспатчиться по неизвестному типу объекта? Или как этот Ebean.delete(classOf[T] ...) должен работать?
>>1192781 Алсо, их сайт документации (я так понимаю, он на этом фреймворке и сделан) у меня безбожно тормозит. Каждый клик по любому линку вызывает раздражающее мигание всей страницы.
>>1192789 >reinvented на самом деле нет, там значительные отличия. гвт\ваадин\зкос это генерелки жс кода. королев же отправляет на сервер только дифы(то что изменилось) и жс он не генерит из-за чего клиент получается очень маленьким по объему + т.к. нет никаких скрытых полей мы получаем безопасность из коробки(никто не выгрузит в жсоне твои данные просто потому что лень править дто)
>>1192791 https://fomkin.org/ этот? у меня он хорошо работает, но из-за специфики работы этой либы такое может быть, попробуй померить пинг до него, думаю если не больше 100 должно быть ок всё.
>>1192963 Стоп, я был неправ и полную хуйню сказал, извиняюсь.
Я кликнул на их апидоки и даже не посмотрел, что они на жавадок.ио, так что disregard that. Алсо, если это не очередной гвт, тогда интересно. Завтра читну их пдфку, если не лень - распиши пока вкратце, как именно оно работает. Ты имеешь в виду, что жс-код у них фиксированный, с сервера прилетает только наполнение, по которому он генерит страницу? Я подобный подход видел у кложурцов, там один чувак именно так генерил спа из описания на edn edn - это более лучший жсон, если что и хуков в логику. Но у него эта шняга была внутренней и не опенсорсной, как я понял. Если тут та же идея - это прикольно.
>>1193000 >>1193001 ну да там своя либа для генрации хтмл из скала-кода + при каком либо запросе изменений с фронта от сервера уходит не вся страничка, а только то, что поменялось. Всё это общается через вебсокеты. Незнаю почему ты так категоричен, там в эту простыню достаточно много функционала запихано(и никто не мешает делать универсальными и переиспользывать компоненты). Попробуй представить каким был бы код если делать все это классическим крудапи + вебпетушение с жсом.
>>1189468 Ну вот пример из доков (на Java): > Ebean.delete(Order.class, 12);
Т.е передаётся класс и айдишник. Я пытаюсь сделать тоже самое, но на скале и с дженериком, т.к не хочу писать много бойлерплейта. Моя попытка: > class A[T] .... > def foo(id: Int) = { ... > Ebean.delete(classOf[T], id)
Рефлекшен разумеется есть, но он, как я понимаю, спрятан внутри Ebean, что меня целиком устраивает. В своём коде я рефлекшена иметь не хочу, а в библиотечном не против.
>>1189462 И всё же, как правильно крудошлёпить в этой вашей скале (желательно на Play 2)? Чтобы создать подобие админки мне нужно на каждую таблицу из БД делать по дао и контроллеру? Это выглядит как-то очень уж монструозно.
>>1193368 Если тебе нужно где-то взять класс, чтобы засунуть в такую либу, ты уже так и так связался с рефлекшном, расслабься. Чем тебя не устраивают тайптеги или что там у вас в вашей скале? Такой дженерик можно и на обычной джаве разрулить, через подклассы с указанием конкретного типа.
>>1204468 Я вкатывался с жабы, читал хортсмана, но чтобы норм кодить очень желательно прочитать essential scala + programming in scala одерского. Ну а так мне немного повезло, нашёл вакансию, где брали без опыта работы на скале. На работе можно сказать и научился
Скалисты, я Джава прогер. Хочу Скале поучиться. Но с математикой не очень дружу (лямбды в джава знаю). Ну так вот на курсах во всяких курсерах, юдасити по скале и в книжках математическая часть объясняется или по умолчанию считается что я ее знаю?
>>1208947 Отвечаю не за 5 лет, а за 5 месяцев: return -- да, удобно использовать как выход из функции если функция дохера большая. while -- нет, но он и в других языках на которых доводилось писать не очень уж часто используется, гораздо реже for var -- да, иногда удобнее сделать мутабельную переменную (что возможно связано с тем, что у меня на скале небольшой опыт, может со временем пройдёт), а ещё сталкивался с Ebean ORM, которая требует объявлять поля как var.
Более интересный вопрос подобного плана: зачем нужна конструкция for (seq) yield {action} ? Разве её нельзя во всех случаях заменить на seq.map(action), или seq.filter(...).map(action)?
Перехватывая эстафетную палочку, задаю свой вопрос: Кто-нибудь пробовал Scala.js? Как ощущения? Пилю свой прожект, очень не хочу писать фронт на жабаскрипте, поковырял Scala.js, выглядит вроде норм, но в туториале они предлагают складывать html файлы в корневую папку и делать в них дебильные пути к скриптам, вроде: ../target/scala/... Класть html в target тоже по смыслу не подходит. Эта ситуация мне совсем не нравится. Как потом эту чушь двигать на продакшен? Руками копировать файлы куда-то? Запихивать выборочно директории в докер контейнер?
>>1211891 Не слышал, чтобы кто-то вообще использовал scala.js в продакшне. Если хочешь нормальный язык на клиенте - бери кложескрипт (или ризон, если хочется чуть больше приключений).
>складывать html файлы в корневую папку и делать в них дебильные пути к скриптам, вроде: ../target/scala/... А чо, ты в сбт не можешь прописать какой тебе нужно путь для жс-выхлопа компайлера? Не вижу ничего криминального в том, чтобы хуярить дев-билды в public/js (на прод-билде оно все подтирается). Ну то есть типа КОНЦЕПТУАЛЬНО более лучше было бы держать в public только условный app.js, в который в зависимости от билда либо вхуяриваются пути к дев-коду в ../target/, либо пихается минимизированный прод-код, но на практике-то никакой разницы нет, так что не вижу смысла об этом задумываться вообще.
>>1208947 Очень редко. var - пару раз в тестах для инициализации состояния, иногда в акторах и в итерторе-адапторе для какой-то джавовой структуры. while - тоже для интеропа с джавой, стрим там прочитать и все такое. return - раньше использовал как guard, то есть для кода вида if (cond) return value в начале функции, сейчас перешел на if/else if - проще скаластайлом проверять. >>1211891 >зачем нужна конструкция for (seq) yield {action} ? Разве её нельзя во всех случаях заменить на seq.map(action), или seq.filter(...).map(action)? Заменить можно, но for-comprehensions нужны в основном для соединения двух и более монадических операций (без них пришлось бы писть портянки вложенных flatMap-ов) и было бы странно не иметь for для одной операции имея его для нескольких. Я сам всегда использую map/filter/foreach вместо for если получается и всегда for нужно писaть flatMap два раза. >Кто-нибудь пробовал Scala.js? Как ощущения? Пробовал, написал на scalajs-react простой UI для системы мониторинга. До этого (и после) никогда не работал с фронтендом, так что сравнивать мне не с чем. Могу только сказать что на Scala.js можно писать сложные приложения и есть даже какая-никакая экосистема. Проблемы с путями наверняка можно пофиксить правильными настройками sbt.
>>1211891 >return -- да, удобно использовать как выход из функции если функция дохера большая. я хоть на скале всего полгода, но если тебе нужен return, значит ты неправильно построил свою ф-цию У меня лично на работе строго функциональный стиль, ни одного вара, вайла, ретёрна за всю работу
>>1212670 Он наверное имел в виду, что ретурн прерывает исполнение функции, из-за чего у нее возникает больше одного execution path'а или как это правильно назвать, что не очень-то функционально и обычно использовалось в языках с разделением на statements и expressions.
>>1137321 (OP) Но ведь гоудауны просто унизят и обоссут скалиста, как дело коснётся конкаренси и распределённых систем. Он будет забитый, сидя в углу обосссаный, дрожащими ручонками ковырят свою Акку, рыдая кричать "а... аа.. а увас генериков нет даже! у... у нас продвинутая система типо...". Но не успеет закончить, так как поймает смачный пендаль в ебальник, и будет наблюдать как его любимую Акку ебет божетсвенный CSP гошечки, не оставляя ей никаких шансов.
>>1213179 Ну не надо этого... ну серьёзно, скалоёб взгляни правде в лицо, твое поделие работает поверх JVM, а это дно. У вас, блядь, даже либы по работе с БД блокирующие (привет jdbc) о чём тут говорить вообще.
>>1212999 Однозначно да. Джава-бэкграунд является плюсом из-за твоей потенциальной возможности поковыряться в кишках какого-нибудь легаси проекта. Но сейчас скала ― это полностью самостоятельный язык со своей экосистемой. Знание джавы уже несколько лет не обязательно для скалистов.
>>1213211 потом 10к раз отсасывает на реальных задачах, где действительно нужен большой конкаренси и распределённая структура. потому-что эликсиром пользуется толлько руби-хипсторы. ладно дадим шанс эликсиро-господам вынуть хуй из рта: даже у жвм-старья есть hazelcast, kafka, ignite. Годауны размахивают consul, etcd, nsq, groupcache, NATS (пытается ссать на кафку, но пока мимом). Что есть у эликсиродебилов? нихуя, только рэббит, но он на эрланге, так так нормальный челвоек такой хуйнеё как эликсир обмазываться не будет.
>>1213576 >даже у жвм-старья Братишка ну ты долбоеб сравнивать устоявшуюся популярную платформу, которая старше тебя и язык, который появился 7 лет назад.
>>1213682 Усложню вопрос. Есть вообще реальный шанс найти работу на Scala без опыта в промышленной разработке? Или лучше всё-таки начать с какого-нибудь Python или Java?
>>1213702 >Ты в курсе, что еликсир - это нескучный синтаксис для ерланга, да?
В курсе. И что в эриксоне эрланг за сраные сервисные сообщения железок отвечал и весь хайлоуд там был только в мифах и головах нонешних некрохипстушков - тоже.
>>1213736 Хорошь соскакивать, так про любую закрытую херню можно сказать, а мол в корпорации X это работает на Y. Это всё хуйня и не имеет возможности верификации. Давай рассуждать логически, если язык/платформа збс для чего либо, то на ней будут достойные открытые проекты, на эрланге нет нихуя кроме кролика. Это наводит на мысль, что анон прав по поводу "хуйлоуд эрланга - это выдумки хипстопетушков".
Прочитал Programming in Scala Одерски, Functional Programming Principles in Scala и множество всяких мелких статей и блогов. Чтобы ещё навернуть? Про SICP и Кормена даже не упоминаю. И как попрактиковаться?
>>1213688 На собственном опыте проверено, что есть.
Но тут важный момент, где ты живёшь. Если ДС или ДС2, то куча компаний хайрит джуниоров. Причём джунов рассматривают как с минимальным опытом в других областях, так и без. Если в мухосрани, то извините.
Мониторь hh, линкедин, сообщества скалистов в телеграме (там вся движуха).
>>1214180 >ряя нет нихуя фреймворков опенсорса >>есть >ряяя а где проекты на этих ваших фреймворках опенсорсных >>вот >ряяяяя а откуда ты знаешь что он именно на нем а ты код видел >>пикрелейтед
>>1214197 Спасибо тебе анон! Ты меня убедил попробовать. Я сам из мухосрани, но морально готов перебраться в ДСы джуном ради нормальной интересной работы, да и небольшая денежная подушка безопасности есть на первое время, чтоб с голодухи не помереть.
>>1214368 У них львиная для профита благодаря кассандре вместо бд. Т.е. все эти ваши хайлоады на себя берёт банальная жаба. А писать в неё можешь хоть на js.
>>1214390 Вот только почему-то в статье самого дискорда о том, как они заскейлились на 5 млн онлайна, нет ни слова о кассандре (зато много слов о переписывании сишных библиотек на эликсире, вообще охуеть). Даже не знаю, кому верить: анону с зекача или команде discord.
в явном виде ищут только крестовиков, а этот ваш уеликсир только упоминается среди остальных языков для бека на равне с пистоном, гошкой и скалой. Таки ерланг/еликсир не нужен.
>>1214678 >Working with a modern tech stack built on GCE with Elixir/Erlang, Python, Go, Cassandra, Redis, Elasticsearch, and a hint of C++ where appropriate.
Я понял: ты сектант, тебе бесполезно пытаться приводить рациональные аргументы. Давай закончим, тем более что это оффтоп.
>>1214673 У меня почти все собеседования (и самое первое, и последующие на более высокие грейды) быстро переходили в неформальное общение о том, кто я такой, откуда взялся, как пришёл в скала-мирок.
Молодым и зелёным если и будут давать задачки, то, скорее всего, примерно такого уровня: scastie.scala-lang.org/MvUJjYaZQm202EIGNath0A.
Но помимо понимания синтаксиса и стандартной библиотеки, тебе понадобится ещё и представление об экосистеме. В итоге джуну надо знать: синтаксис асинхронная модель (как пользоваться scala.concurrent.Future) библиотека коллекций (map, filter, foldLeft и прочие базовые методы) инструментарий (IDEA, sbt, git) что-нибудь про базы данных (хотя бы в чём отличие SQL от NoSQL) крайне желательна акка (что такое акторы, и зачем они нужны. что такое стримы, и зачем они нужны)
Лучший способ получить эти знания ― написать небольшой CRUD в качестве пет-прожекта. Например, движок для блога или примитивную CRM для воображаемой кафешки.
>>1214318 А ты рисковый. Учти, что цены на жильё в ДС очень быстро сожрут твою подушку безопасности.
>>1214905 Спасибо за такой развёрнутый ответ. >кто я такой, откуда взялся Вот тут я обосрусь 100%, ведь мягко говоря не студентик уже... >задачки, то, скорее всего, примерно такого уровня Функцию написать, я правильно понял? Сколько времени даётся на такое? Интернетами можно пользоваться? >scala.concurrent.Future Нагуглил. Пойду читать. >IDEA, sbt, git IntelliJ? Я накатил эклипс, хз что там знать то можно, всё понятно по контексту. Что-то уровня "знания ворда", лол. >что-нибудь про базы данных >акка Есть что почитать про это? Всё что я гуглил это либо поверхностное, либо бесконечная кроличья нора, от которой можно словить шизу.
>>1215005 Да, написать реализацию. Интернеты для такого не нужны, достаточно ноутбука с IDE, и никто не будет стоять над тобой с таймером. Время выполнения этих задачек джуном, которое устроит меня: nestedMap — 3 минуты, traverse — 10 минут, partition — 15 минут. Если человек тупит дольше, поинтересуюсь, как у него дела, и дальше будем уже вслух обсуждать задачу.
> Я накатил эклипс Откуда же вы лезете? Даже на официальном сайте скалы предлагают IDEA поставить.
>>1215130 Ясно. >Откуда же вы лезете? Ну не стукай, выбрал первое что выдал гугл. >Про БД — просто начни с ними работать >работать Тригернулся. Я просто малость аутист, мне не хватает фантазии придумать что с этими бд вообще делать. Создать, добавить элемент, убрать... Всё нахуй. Лан надо будет накатить SQL и подрочиться. Ещё раз спасибо.
>>1215130 >Откуда же вы лезете? Даже на официальном сайте скалы предлагают IDEA поставить. А я тебе скажу откуда. На курсере Одерски демонстрирует всё в Eclipse. Я попробовал пойти против системы и поставил себе чистую sbt. С наскока нихрена не разобрался в ней и решил, чтоб время не терять, качнуть голый компилятор. Где можно вменяемые доки найти по sbt, а не эту херню с хеллоуворлдом вместо создания проекта?
Есть возможность сменить работу на scala разраба. Сейчас занят в java ee. Какие подводные и стоит ли? Послезавтра собедесование - к чему готовится? кроме анального порева
>>1215570 >На курсере Одерски демонстрирует всё в Eclipse.
Это курс по фп? Ему лет триста уже, тренд поменялся давно. Эклипс заебал уже даже самых упоротых ебанатов, лол. Нормальные же люди им и вовсе никогда не пользовались, ибо просто невозможно же.
>>1216138 Этот курс - пространное введение в Скалу с лёгким уклоном в ФП. Там и про ООП куча, и т.п. А по ФП - не так и много.
Например, чтение книжки Functional Programming in Scala (и решение задач, обязательно) будет гораздо более полезно. Есть гитхаб с задачам, хинтами и ответами.
Это вообще одно из лучших введений в ФП как таковое. При этом знание Скалы требуется на самом начальном уровне. Авторы пишут, что можно вообще с нуля, но это, конечно, перебор.
Есть ещё книжка фолиант Одерского - Programming in Scala. Надо искать 3-е издание, где версия 2.12.
Ну и другой литературы полно.
Вообще, я бы посоветовал Scala For The Impatient (2-е издание). Минимум воды, широкий охват тем, читается легко. А за тонкими подробностями - к фолианту Одерского.
Даже на русском есть (Scala для нетерпеливых, перевод 1-го издания), но сам я перевод не видел, по качеству ничего сказать не могу.
>стоит ли? Конечно стоит - кругозор шире, зарплата больше, молодежней-современней.
>Послезавтра собедесование - к чему готовится? Ну ты скалу-то уже знаешь? Деревья повращал? Мы ж не телепаты, хуй знает, что у тебя за вакансия и какой у тебя уровень.
>>1216434 >Ну ты скалу-то уже знаешь? Нет, нихуя не знаю. Для меня это пафосное название как и все околоджавное больше ассоциируется с чем-то промышленным и даже с ML. >Конечно стоит - кругозор шире, зарплата больше, молодежней-современней. А это точно не гавно на палках/попытка сделать на жвм хоть что то стоящее?
It’s that time of year! Pride 2018. In honor of all of us Scalamaris that are advocates of or identify with the LGBT community–we have a little bit of Scala love for you.
>>1216689 Ну Netty из Akka давно уже выпилили. Сам понимаешь, что это черевато добавлять в зависимости библиотеку, которую по сути поддерживает один человек. А Spring можно и к Scala прикрутить. Как ты без IoC будешь жить, а?
>>1216937 Стоит заметить, что спринг давно уже не только IoC, его корфичами являются и weblux/mvv, и aop, и всякие integration-security, да и без бута/клауда его используют всё меньше (что на понимании макаками-кодерами сказывается крайне негативно). Про нетти сказал как отрезал. А ещё у него новые мажорные версии не выходили десять лет, а пятую ветку забросили после второй альфы.
>>1217015 Согласен. Spring - это такой уанстопшоп, где есть все необходимое для разработки приложения. Если взять Scala, то можно долго куковать в поисках альтернативных библиотек и фреймворков.
> Scala ни нужна Анончики, а можно простыми словами и без троллирования, какие у Scala преимущества по сравнению с Java? Чтоб вот можно было, например, другану-профану за пивасом пояснить, почему я решил упороться Scala. Ведь сейчас под JVM есть и Kotlin, и Clojure и, даже, Groovy.
>>1217377 Скала по отношению к джаве - это как сиплюсплюс по отношению к си. Можно наворотить такого, что голову себе сломаешь, но если использовать как "си с классами", то преимущества очевидны.
>>1217385 > Можно наворотить такого, что голову себе сломаешь Вот это, между прочим, объективный минус с точки зрения языка - любой в меру своей испорченности может нахуячить так, что хуй проссышь нормально даже сам спустя пару месяцев.
>>1217387 Но как бы и на джаве, и на любойязыкнейм можно наворотить в меру своей испорченности. Тут суть не в этом, а в том, что скалу можно использовать просто как более лучшую джаву. Мне кажется для объяснений под пивас это самое то.
>>1217377 >едь сейчас под JVM есть и Kotlin, и Clojure и, даже, Groovy. А ещё jRuby, Jython, и до ебеней матери всякого разного прочего.
Какие преимущества? Никаких. Это просто другой язык. Какие могут быть преимущества у тёплого перед мягким?
Можно делать фп, например. Акка там, хуякка, вот это вот всё. Это преимущества?
А просто как беттер-джава - очень сомнительно, т.к. язык _гораздо_ сложнее. Плюс - несовместимая развесистая иерархия коллекций и т.п. Скала это не беттер-что-то, это вещь в себе.
Беттер - это котлин, хотя, я бы не стал его юзать в этом качестве - очень мутный язык, с весьма мутным будущим.
>>1217414 >Так стд коллекции один хуй говно же. В скале или в джаве?
А потом, это не имеет значения. Проблема именно в том, что скала без родных коллекций - хуйня. А джава - без своих. И, в итоге, на каждый пук надо юзать встроенные конверторы, которые красивые, конечно, но совсем не бесплатные.
Если покопаться в интернетах (англоязычных), то можно увидеть, что про скалу как беттер-джаву пишут, в основном, ньюфаги, которые скалу только вчера увидели. Опытные бобры пишут совсем другое, уже не такое интересное, лол.
В чём проблема с нестедмапом? Это задача, которую можно реализовать через лифтинг f в общем случае, и через xs.map(_.map(f)) в частном. Если кандидат начнёт рассказывать про lift, это ему только в плюс пойдёт.
Но вообще, это задумывалось как элементарная задачка для джуна на знание самых простых операций над стандартными коллекциями. Условно, чтобы понять, что человек не путает map и flatMap.
>И, в итоге, на каждый пук надо юзать встроенные конверторы А вот в кложе такой проблемы нет, кстати. ^_^
>Опытные бобры пишут совсем другое, уже не такое интересное, лол. Тут не буду возражать, я не бобер.
А ты сам из личного опыта говоришь? Ну, конкретно по части того, что "никаких" преимуществ. Тот факт, что это разные языки, нам ведь не мешает их сравнивать и оценивать целесообразность их применения для какой-то данной задачи. Ты согласишься с тем, что скала в целом более высокоуровневая и более типобезопасная, чем джава?
>>1217513 Я не говорил, что нет преимуществ. Я сказал, что не нужно сравнивать разные вещи. И там и там недостатки (в большинстве случаев) являются продолжением достоинств. А за достоинства приходится платить определённую цену. Закон сохранения никто не отменял.
>Ты согласишься с тем, что скала в целом более высокоуровневая и более типобезопасная, чем джава?
Да. Есть куча ценных фишек, свяаных с типизацией, которых нет в джаве. Но, это не бесплатно. Язык значительно сложнее. Порог вхождения в разы выше. Код трудно воспринимать при беглом просмотре. И т.д. Кто не понимает, о чём я - почитайте исходники библиотеки коллекций, например.
И можно (иногда) нахуевертить такого, что будет компилироваться, но не будет работать (я имею в виду ошибки применения типов). В джаве такое невозможно, например.
Инструментальная поддержка, опять же, несравнимая совершенно. Хотя, за последние годы поддержка скалы улучшилась в разы.
Вообще, это сложная тема, которая далеко выходит за границы обсуждения на аиб.
Стоит ли скала того, чтобы её изучить до приличного уровня? Будет ли это полезно для профессиональног роста, даже если ты не будешь писать на ней фуллтайм? - Однозначно.
Ну не котлин же, в самом деле, лол.
Значит ли это, что джава не нужна, и все чёткие пацаны должны перекатиться на скалу? - Ни в коем случае.
>>1217529 Я в целом со всем согласен, про ненужность скалы я и не говорил, и все остальное ты написал по делу.
Разве что >И можно (иногда) нахуевертить такого, что будет компилироваться, но не будет работать (я имею в виду ошибки применения типов). В джаве такое невозможно, например. - https://hackernoon.com/java-is-unsound-28c84cb2b3f
А в целом - да, анон, все так, я с тобой согласен.
>>1217510 >xs.map(_.map(f)) Я примерно так и сделал def nestedMap[A, B](xs: List[Option[A]])(f: A => B): List[Option] = { def wew (x: Option[A]) = x match {case None => None case Some(s) => Some (f(s)) } xs.map(wew) } А потом пошёл читать про футуры. Теперь ещё и про лифт читать буду.
>>1218092 Проверка на None делается внутри map(). В это и смысл.
Футуры - это хорошо.
Лифт - хули про него читать? Это функция, которая "поднимает" другую функцию, работающую со значением типа A, чтобы она работала а с определённым контейнером, содержащим значение типа A.
Т.е. (A => A) => ([A] => [A]) Т.е. лифтованная функция внутри себя вызывает map(f).
Как написать функцию, аналогичной этой, def transformInt(x: Int, f: Int => Int) : Int = { f(x) }
Но что бы вместо единственного входного параметра x: Int были, например 2 строки s1:String, s2:String, и к ним двоим тоже применялась какая-нибудь функция
>>1137326 >Но когда начинается ввод/вывод и обработка ошибок Haskell почти ни чего не дает, по сравнению с распространенными языками.
Я утверждаю, что ты просто не знаешь, как в современном ФП делается ввод/вывод и обработка ошибок. Показывать тебе как это делается на Хаскеле, конечно, бесполезно, но хоть Скалу попробуй осилить http://degoes.net/articles/modern-fp вроде специально для брейндамагнутых джавой язык делался.
>>1218799 Это же map получается, или reduce? Не понятно из твоего поста. "и к ним двоим тоже применялась какая-нибудь функция" - это несколько расплывчато, лол.
На вход надо подавать 1 аргумент - коллекцию. Можно сделать доп. вариант для Option (который, сука, не коллекция, почему-то).
>>1137340 Да, это так. И дело не только в наследовании, а в том, что в Хаскеле мухи таки отделены от котлет.
Например, в Хаскеле есть "обычные" алгебраические типы данных и есть генерализованные АДТ. В Скале нет ни того, ни другого это делается через ебучие костыли вроде sealed trait .. и это вроде как АДТ, но одновременно при паттерн-матчинге может эмулировать некоторые свойства ГАДТ, но с некоторыми ограничениями. В чем конкретно заключаются "некоторые ограничения" - хуй проссышь, просто в какой-то момент ты на них внезапно натыкаешься и у тебя начинается жопаболь.
Type-level programming, higher-kinded types, type-level macros - всё это в Скале эмулируется, но с кучей бойлерплейта, без macro paradise практически ни одна функциональная библиотека на Скале не обходится. Да что уж там, даже тайпкласс или фукнцию с экзистенциальным типом на Скале написать - это проблема, тот же cats использует simulacrum и kind-projector для этого.
Вывод типов - ебанутейший, вплоть до того, что функциоальных либах меняют порядок аргументов в функциях, чтобы типы выводились (охуеть дизайнерское решение - выводилка типов тебе диктует в каком порядке должны быть аргументы).
Ебучий аппликативный порядок плохо сочетается с рекурсией во всех функциональных либах trampolining на каждом шаге вручную, чтобы это хоть как-то работало (слава б-гу он уже там прописан, поэтому используя либу о нём можно не думать, но исходники из-за подобных вещей хрен разберешь).
В общем, чтобы писать программы в функциональном стиле на Скале, надо её обвесить тоннами костылей, за которыми сути не видно. Надо знать, как все эти костыли работают, там макросы, плугины компилятора, надо знать зачем они все нужны. Поэтому в целом Хаскель гораздо проще и понятнее. На Скале всё это говно можно использовать когда ты уже всё знаешь из Хаскеля и еще знаешь специфичные заёбы Скалы. На Хаскеле можно учиться программировать.
Подитоживая эпопею со Скалой вспоминается анектод про Вовочку, который натягивал себе на голову презерватив со словами "Все равно на Новый год писькой буду!". Вот так и программирование на Скале - это постоянное натягивание презерватива на голову с целью превратить её в функциональный язык.
>>1218849 То, что в Скале - это элементы фп. Которые местами весьма полезны.
А попытки _использовать_ Скалу как функциональный язык (scalaz и прочая хуйня) - это именно попытки натянуть сову на глобус и подрочить вприсядку. И за использование такой хуйни в продакшн надо пожизненно разжаловать в сторожа.
>>1218855 Дело в том, что современный "продакшн" - это и есть дрочба вприсядку толп полуграмотных ОО-дебилов. Поэтому соверменные программы - это самое ненадёжное из когда-либо созданного человечеством, при этом по самым неэффективным технологиям. Единственное, что в Скале есть хорошего, это те самые "элементы фп.", но они там настолько убогие, что для написания полноценных функциональных программ приходится тащить с собой кучу костылей.
Что же касается применения фп "местами", так тут можно выделить три стадии развития кодописца:
0. ОО-макак. Считает, что ФП не нужно, лямбды - сложная непонятная хуйня, пишет на Джаве, хотя когда в Джаву 8 завозят таки лямбды начинает делать вид, что про ненужность говорил кто-то другой и переходит на 1-ю сдадию.
1. Недофпшник. Нахватался по верхам на сайтах типа хабра, знает, что такое лямбда, умеет пользоваться функцией map. На этом его знание фп заканчивается, никаких декомпозиционных паттернов поциент не знает, про монады читал только в скалаблогах, там же прочитал про scalaz, но не знает, зачем это нужно. Пишет на мультипарадигменном говне обычные императивные программы с функцией map и лямбдами, с умным видом говоря, что использует фп "по месту".
3. Программист. Полностью знаком с парадигмой ФП, пишет на Скале в таком https://github.com/slamdata/quasar стиле, охуевает с полудурков на дваче, которые рассказывают, что на Хаскеле сложно работать с сайдэффектами, что cats или scalaz нельзя использовать в продакшене и прочих охуенных историй, которые тут генерирует недообразованная студентота, чтобы как-то оправдать свою недообразованность.
Пацаны, эрланг или скала? Вакансий в России больше на скале. Но там часто идет как дополнение к джаве. Неотъемлемо ли одно от другого? Хотелось бы ответов от тех, кто работает или работал с обоими языками.
Но ведь и десктоп, и фронтенд на скале пишут (в том числе в РФ). Не сказал бы, что мне это нравится, но это имеет место быть. Что ты под лёгкими серверами подразумеваешь, мне непонятно. Круды что ли?
>>1220140 Скала не дополнение к джаве. В вакансиях их обычно пишут рядом, если уже есть большой кусок джава-энтерпрайза, а новые проекты пишутся на скале. В легаси-код программистам тоже иногда приходится залезать, поэтому в требованиях упомянают джяву.
Аноны, я постигаю акку, читаю туториал с офф сайта и не могу понять такую базовую вещь: в нормальном коде, дерево акторов создаётся в начале работы программы и остаётся более-менее неизменным, или же некоторые акторы-дети постоянно создаются и удаляются в результате обработки сообщений родителем?
Более конкретный пример: я хочу обрабатывать запросы к СУБД, конечно же параллельно. У меня есть актор А который принимает запрос и: 1) Создаёт актора Б, который выполняет запрос, обрабатывает и возвращает результат. Затем удаляет актора Б. 2) Имеет готовый пул акторов Б, и просто роутит задачу одному из них (я видел, есть класс Роутера и несколько стратегий роутинга сообщений).
Какая из этих стратегий лучше? Если вторая, то как правильно выбрать размер пула? Если таких пулов несколько, каждый раз думать, насколько велик должен быть пул?
Дополнительный вопрос: давеча ГО-анон писал что jdbc не асинхронно, и поэтому скала говно. Насколько правомерно это умозаключение? Я нашёл вот это: https://github.com/mauricio/postgresql-async (хотя в README: This is not supposed to be a JDBC replacement) Получится ли использовать эту либу в связке с АККА ?
>>1223339 В райфе на митапе недавно какой-то насквозь матановый доклад рассказывали, который 95% нормальных людей вообще не поняло. Но сам доклад родился из использования Акки, так что вероятно используется.
>>1224824 >jdbc не асинхронно В смысле, требует поддержания соединения? Так это не JDBC. Точнее - да, JDBC, но потому, что это абстракция для _любой_ БД, большинство из которых не асинхронны.
Хочешь асинхронности - вводи лишний слой (поближе к физической БД), который будет обслуживать твои запросы асинхронно, а с БД работать через пул соединений.
Собственно, на Акке его и можно сделать (наверное, я не большой спец по ней).
>>1225043 Делаем сервис для отображения рекламы в играх (в том числе AR, VR), на скале пишется сервер для фиксирования просмотра, статистики, операции с баблом, непосредственно отображения рекламы на юнити на шарпах, работаем на шведов
>>1225047 Это охуенно, но "энтерпрайз" - это немножко другое - торговля, промышленность, банки, государственные системы.
Но, в принципе, понятно, зачем вам Акка.
А БД какая? В Akka in Action рекомендуют вообще всё в памяти держать, при остановке системы сливать в хранилище, при старте - загружать. Вы как делаете?
>>1225058 С помощью Слика, но мы ещё юзаем ДинамоДБ >>1225062 >но "энтерпрайз" - это немножко другое - торговля, промышленность, банки, государственные системы ок, значит я неправильно понимал >А БД какая? основная Постргрес, для статистики ДинамоДБ >В Akka in Action рекомендуют вообще всё в памяти держать у нас с-ма всего раз запускается, а данных супердохуя >Вы как делаете Держим в бд, но конечно же есть и кэшированные данные, но их немного
> Какого рода энтерпрайз? > Какого рода проекты? Биллинг. Больше сказать не могу, коллеги тоже сидят, не хочу задеанониться, лол
> Зачем Акка? Event Sourcing. Взяли Akka-Cluster, получилось неплохо. Сейчас ещё лучше, ибо код на сырых акторах я уже не помню когда писал в последний раз.
> Почему плюётесь? Future. Но тащемто уже скрыли всё что можно за семи слоями абстракций и везде (почти) Monix
>>1226490 Ну у меня на немощном ноуте IDEA +- работала, но на линухе; а на винде, да, тормоза неебические. Попробуй убунту + идеа, мб заканает, потому что я лично не представляю, как кодить на скале не в идее; поиск юзеджов (для акторов вещь просто необходимая), подсветка передачи имплиситов. Если не идея, то не могу ничего посоветовать, сори
Господа, я тут пытаюсь осилить Functional Programming Principles in Scala на курсере и у меня начинают возникать трудности. Как реализовать тот или иной метод в императивном стиле я представляю, а вот с функциональной реализацией проблемы. Посоветуйте, как развить в себе это самое функциональное мышление.
>>1228444 Я параллельно с курсом читал SICP. Одерски оттуда все задачи подергал. Порой объяснение материала в SICP изложено намного лучше чем в курсе. Есть же всякие entry-level книжки для тех кто решил освоить функциональную парадигму. Я бы не сказал, что конкретно данный курс является лучшим источником информации по теме. Если тебе охота именно Scala освоить для каких-то своих проектов, то лучше взгляни на этот гайд - https://gist.github.com/d1egoaz/2180cbbf7d373a0c5575f9a62466e5e1. А курсы оставь на потом. Их польза крайне сомнительна, к сожалению. Лучше пролистать пару книг и начать писать небольшой проект используя полученные знания. А проходя данный курс ты будешь неделю думать как решить задачу с разменом монет или полиномы высчитывать ФУНКЦИОНАЛЬНО!
>>1228471 Двачую кроме последней части. Перед тем, как писать петпроект, тебе все равно надо научиться составлять алгоритмы. Кому-то нравится видео, кому-то - книжки. Без разницы в принципе, но курс тебя еще будет подгонять сроками, плюс там есть форум, где можно задавать ответы.
Я снова выхожу на связь. Возник вопрос по литературе. Книг по Scala не сказать, что много, но и не одна. Что лучше новичку читать? Есть ли смысл читать Essential Scala от Underscore если потом читать Scala for the Impatient? И что по поводу толстой книги Одерского?
Я понимаю, скорее всего вопрос платиновый. Но я так уже попадал с Питоном. Все советуют The Byte of Python, но это полное говно, а не книга, и я лишь потратил время. Более менее полезной была Think Python, и то, только из-за наличия упражнений. В итоге, всё перешло в изучение Лутца, где много воды, но расписано всё обстоятельно. Правда, один хер, работу джуном я на Питоне найти не могу. Похоже, я слишком старый для этого дерьма. Вот такой вот я вкатывальщик-неудачник, да. В общем, проще - не всегда лучше, потому что остается много непонятной магии в работе. А я так не могу. Меня это раздражает сильно.
>>1228859 >Scala for the Impatient? Я дропнул. Не помню почему. Хоть и на русском было, но что-то мне не зашло. Очень много воды. >по поводу толстой книги Одерского? Вот этой? https://www.artima.com/pins1ed/index.html Мне нормас зашло. В любом случае придётся прочитать всё тоже самое, но в разных вариантах. С задачками я вот это читал http://aperiodic.net/phil/scala/s-99/ >работу джуном я на Питоне найти не могу На скале тем более не найдёшь. Открой хх, там требуются только сеньёры на 200 тысяч, ньюфаги никому не нужны.
>>1228873 Дело не в русике, а в постоянных авторских "а вот в крестах вот так, в яве так...". Да мне похуй как там, пиши по делу. И ебанутая подача, то расписывает простейшую хуйню, а через страницу даёт пример, чтобы понять который надо ещё пару страниц гуглить. Русик я упомянул, чтобы подчеркнуть, что даже учитывая разницу в языках (русик то родной, пинг от глаз до мозга меньше) книга на английском зашла легче.
>>1228891 >"а вот в крестах вот так, в яве так...". Да мне похуй как там
Скала - очень сложный язык. Не понимая, почему нечто сделано именно так, а не иначе - можно просто не понять вообще ничего.
Книга написана очень хорошо и лишнего там нет ничего, всё строго по делу.
И, далеко не каждая книга, а особенно по такому не особо популярному языку, выдерживает второе издание вскоре после первого.
И да, эта книга для тех, кто уже умеет программировать. Т.е. это не учебник по программированию. И скала - очень плохой кандидат на роль первого языка.
>>1228865 >На скале тем более не найдёшь. Открой хх, там требуются только сеньёры на 200 тысяч, ньюфаги никому не нужны. Ньюфаги в принципе никому не нужны. Интересно, откуда при такой политике сеньоры берутся. А мне уже без разницы на каком языке я не смогу работу найти. Мне недавно отказали в интервью на трейни-вакансию, в которой требовали знание хоть какого-то языка. Скалу хотя бы интересно учить.
>>1228896 >Скала - очень сложный язык. Скала - интересный язык. Он создан для людей, которые сначала думают, а потом делают. Если с думалкой слабо, то есть JS, Python, Ruby и PHP. Там можно говнокодить даже с дырой в голове.
>>1228954 >Скала - очень сложный язык. >Скала - интересный язык. >Если с думалкой слабо то есть JS, Python, Ruby и PHP
Ты, вообще, понял, по какому поводу я это написал (про "сложный")? И кому? Попробуй, перечитай.
Или ты привык слушать себя, в основном? Возможно, в этом причина твоих проблем с поиском работы.
Алсо, с каких пор питон и руби стали языками для слабоумных, лол? Многие рубисты, например, люто надрачивают на скалу, тот же Поллак (разработчик Lift).
>>1228985 >Или ты привык слушать себя, в основном? >Возможно, в этом причина твоих проблем с поиском работы. Ты чего злой такой? Основные причины - отсутствие профильного опыта и возраст. Причем, вторая причина ключевая, насколько я могу судить.
>Алсо, с каких пор питон и руби стали языками для слабоумных, лол? Я написал, что даже имея дырку в голове, на них можно успешно говнокодить. То есть язык не так требователен к квалификации пользователя.
>>1228985 >В смысле? Уже который раз слышу, что сложна, но так и не могу понять почему. Такое чувство, что это какой-то налёт элитарности, чтобы отпугнуть ньюфагов. Ну матан, вся хуйня. Но погромирование само по себе подразумевает матан, разве нет?
>>1229002 >очень много всего в нём Это ж плюс, разве нет? Широкий выбор инструментов это здорово. К тому же никто не заставляет всем этим пользоваться. Я вот читал про всю эту ковариативность, и прочую еботню с типами, например, но что-то мне подсказывает используется это очень редко. Про подчёркивание - это наоборот упрощение, когда не нужно переменные лишний раз создавать, ебанул _ да и всё. Как символ, который подразумевает что-то очевидное, типо местоимения. Очень во многом вижу вот этот подход, хз как выразиться, для ленивого человека. Может поначалу это и кажется сложным и нихуя непонятным, но когда один раз поймёшь, то уже не захочешь возвращаться обратно. Огромный простор для того, чтобы лишний раз не писать новый код, а переиспользовать уже имеющийся.
>>1229012 Правда в продакшене это никому не нужно. Проще и дешевле взять Java или Kotlin и в случае необходимости использовать какую-нибудь Akka (хотя реализация акторов на Java вроде имелась). Пока найдешь программиста на Scala, который не фигачит одни монады - контора успеет обанкротиться.
>>1229022 >Проще и дешевле взять Java или Kotlin Есть и обратный момент. Если взяли всё таки Scala, то там вероятно не просто и не дёшево. >который не фигачит одни монады Как что-то плохое. Неужели формошлёп, который потеет услышав что-то про лямбды, будет предпочтительней?
>>1229129 > скала хайп немножко поутих И заебись, меньше вкатывальщиков-джунов, готовых работать за 300 баксов, которые демпингуют зп. А работа будет и так.
>>1229004 Мне далеко за тридцать. И я ощутил в полной мере, как "никогда не поздно вкатываться". Честно говоря, не ожидал такого. Думал, айтишники - ребята прогрессивные.
Отсутствие опыта, конечно, тоже оказывает влияние. Но я ж и не претендую на синьорскую позицию. Я настроился на среднюю джунскую зарплату уже... В общем, немного у меня энтузиазм подисчерпался. Решил вот посмотреть на Скалу.
>>1229177 Я смотрю, олдфагов тут несколько больше, чем принято считать, лол.
Российские айтишники - не прогрессивные. Угадай почему.
Да, никогда не поздно. Просто чем позже, тем сложнее. Уже считаешь себя умным, и это сильно мешает умнеть на самом деле.
Скала - интересный язык. Но, если ты хочешь найти работу, и ты уже не мальчик - учи джаву. Изучение скалы может в этом сильно помочь, но потом.
Варианты - 1С, PHP. Это не подъёбка. JS - слишком молодёжно, мне кажется. Но, тоже вариант.
Вообще, ориентируйся на то, что тебе хотелось бы _создавать_. Потому, что язык (языки) - это просто инструмент. И без мотивации на создание конкретных вещей он бесполезен.
>>1229177 Не все так плохо, братунь. На прошлой работе, примерно год назад, взяли двух вкатывальщиков-джунов рубистами, одному было 33, другому 36. Оба прошли испытательный и остались.
>>1229194 >>1229254 Спасибо за совет и поддержку. Думаю, допройду вводный курс Одерского - жаль бросать, осталось две недели всего. И снова погружусь в Python. Может курсы какие на той же курсере пройду, чтоб сертификатик был в резюме.
не ссы. Просто приходи и говори: "Даров, я тут сделал то и то, научился тому и закрываю вот это. Накиньте двадцатку."
Если посылают -- спрашивай, что тебе необходимо сделать, чтобы получить прибавку, ведь ты хочешь получать больше.
Всё это на личном опыте, если работодатель адекватный -- накинет, или скажет что подкачать. Если нет, то беги нахуй. Скалист без работы не останется долго.
>>1229758 я рили хз, я всё на личном опыте говорю. У меня был супер ахуенный манагер и говорил он так: "С компании надо забирать всё" и постоянно давал мне прибавку, когда я просил.
Не будь терпилой -- требуй, проси, доказывай, что ты заслуживаешь больше. Если нет, то сваливай.
Но быть мудаком, который приходит и говорит: "У меня тут оффер, делайте прибавку или я сваливаю" не стоит.
>>1229755 >Да хуйня эйчарская. Хотят superstar, но сойдет и обезьяна, которая функтор от моноида отличить в силах Ну не знаю. В Тинькове сильно по скале гоняют, ууух!
>>1229763 Дело в том, что контроффера у меня нет. Да и это как-то на саботаж очень похоже. Наверное я просто не очень ценный сотрудник и нужно довольствоваться тем что имеешь.
>>1229763 я другой анон который и начал спраишвать про это вот все, ситуация - месяцев 8 назад устроился джуном, при этом до этого на скале не прогая вообще. И, если в начале я бывало тупил и тд в плане делания всего как на каком-нибудь питоне, а не в фп стиле и все такое, то постепенно стал намного лучше, делаю все сам и с минимумом незначительных замечаний. Но как-то все равно хз, мб я многого хочу и все такое
Кто-нибудь вкатывался в скалу с нуля? Или всё таки это не первый язык у большинства? Гуглю хх, там даже джунов нет, не то что стажёров. Всем подавай сразу сеньёров с опытом и стаком на страницу. В то же время на Java вакансии есть, берут вообще всех, буквально "основы ооп" в требованиях. Может стоит влезть в джаву, а потом уже перекатываться? Хотя с другой стороны, откуда то ведь берутся эти сеньоры...
Знания скалы там почти не требуется. Всё, что нужно, объясняют в процессе. Используется ограниченное подмножество языка, без заморочек, которых в скале полно.
Попробуй, прочитай и _прорешай_ задания в этой книге. Там есть хинты, и даже есть ответы.
Если ты поймёшь, о чём эта книга, зачем вообще всё это нужно, если сможешь решать 1 главу за 7-10 дней (в среднем) и решить все - ты молодец. И смело можешь претендовать на работу, почёт и уважение.
Но, я что-то сомневаюсь. Поэтому, я бы предложил тебе выбрать джаву, а к скале вернуться попозже.
>>1230211 Нет, я не тот питонист. Дело не в книжках. А в последующем устройстве. Прочту я её, не прочту, что-то мне подсказывает работодателю похуй. Хуй с горы без опыта работы? Мы вам перезвоним.
>>1230211 >Олдфаг-кун, это опять ты? Неа. Это другой анон. Я вот писал >>1229624
Но за наводку на книгу спасибо. Вообще, мне дико доставило именно решение заданий в курсе Одерского. Так что книжечку буду читать для собственного развития.
А вообще, мне сегодня ВНЕЗАПНО позвонили и пригласили на собеседование. Что-то там с Питоном и данными я как раз собирался удариться в ML библиотеки. Завтра пойду побеседую.
Могу предположить, что в России-матушке не так много компаний, которые используют Scala вообще, и как основной язык разработки в частности. Это такое экспериментальное направление скорее. Да и Scala завязана на JVM и интегрируется с Java. Поэтому последнюю желательно таки знать.
>>1230226 >твоему работодателю не будет похуй Вот хз, хз. >>1230225 >в России-матушке не так много компаний, которые используют Scala вообще Внезапно, они есть. Но нужны серьёзные ребятки с опытом в 2-3 года на 300 тысяч в секунду.
А, похуй, буду читать этот толмуд и мониторить периодически хх. Не взлетит так в джаву вкачусь. Нет.
>>1230204 работал стажёром, имея опыт стажировки на яве + пет проджект на спринге (мвс + дата), но это вроде как не просилось; требовали знаний ооп + фп + бд
>>1230390 Ясен пень, я вообще скалу учил без особой надежды на работу, чисто для себя, потому что реально интересно. Ну а с вакансией реально повезло, не буду отрицать, работается заебись >>1225047 -кун
>>1230261 >>1230433 Контора хоть и крупная, но мутная какая-то. Вообще, собеседование проходило странно: меня пытались напугать сложными задачами, которые они решают, но при этом уровень моей компетенции не проверяли совсем. На мои вопросы об используемом стеке прямо так и не ответили.
>>1152031 Вбросил бы свою контору, но не хочу деанона.
А вообще, пойми, что, даже если в вакансии написано, что компания ищет сеньора, тебе ничего не мешает написать им и узнать про джуновские позиции. Часто джунов ищут пассивно и не публикуют вакансии для них.
>>1232847 В основном приходится иметь дело с медленной компиляцией, нечитаемым кодом и постоянными тормозами приложения из-за того, что GC работает как сумасшедший пытаясь вычистить весь мусор, который приложение на Scala генерит каждую секунду.
>>1232874 >нечитаемым кодом то что ты не умеешь его читать, это означает, только то, что ты не умеешь его читать Скала тем и прекрасна, что можно писать очень лаконичные и выразительные конструкции, которые выглядят как built-in >медленной компиляцией это да, но для сервака это неважно > постоянными тормозами не замечал
>>1233455 >то что ты не умеешь его читать, это означает, только то, что ты не умеешь его читать У Скалы объективно очень хуёвый синтаксис. К нему можно привыкнуть, как к Лиспу, или как к запаху носков в казарме, но чем-то хорошим он от этого не становится.
>>1233805 >У Скалы объективно очень хуёвый синтаксис Ахуенные истории.жпег Если вот это сложно, то остаётся только 1с с его ВЫЧЕСТЬ ПРМН ПРИБАВИТЬ НАЛОГ и в таком духе. Небольшие трудности могут вызвать только всякие имплиситы, вот выше анон _+_ подобные записи считал сложными. Ну и с типизацией надо разбираться, если ты хочешь использовать это всё на полную катушку. К слову, у скалы же из хаскеля ноги растут? Я как-то читал статью в интернетах, там автор ебанат, он в одной статье давал ссылку на другую, и вот у меня ушло минут 5 прежде чем я сообразил, что та другая использует примеры на хастлере.
>>1233805 Все верно. Намного быстрее и главное дешевле написать все на Java. Хорошо что есть уже обкатанный Спринг и сопутсвующие библиотеки. Пока будешь подбирать стек на скале, у тебя деньги кончатся в конторе. Нужно же чтобы библиотеки были написаны на скала и все было функциональненько!
>>1233851 >Если вот это сложно Ездить на велосипеде с квадратными колёсами не сложно, просто неудобно. >>1233870 Нет, я предпочитаю нормальные языки программирования. >>1233934 С Джавой сравнивать не корректно, потому что Джава менее выразительна, соответственно и синтаксис для неё придумать проще, но если уж на то пошло, там он лучше.
Аноны, давайте помогать друг другу, так как ждать ответов в треде долго. Мб будем оставлять свою телегу другим с описанием и приблизительной оценкой своих скиллов/ знаний фреймворков Начну с себя: @dirinle Scala 7/10 Akka Actors 8/10 Akka Http 6/10 Play2 3/10 Slick 9/10 Я, например, постоянно спотыкаюсь об плэй, так как только недавно с ним работаю
>>1216375 Для скорости нужен го, раст или плюсы. Ты забыл что-ли, что джява работает на JVM? Которая в принципе сосёт на реальных задачах, и написать на ней что-то быстрое, особенно когда дела касается асинхронщины адски сложно. Просто не ебать мозги и взять гошку.
>>1235382 Не особо. Всё относительно - относительно ocaml или clojure её таки используют. Относительно Java, JS или C# - вообще нахуй никому не нужна, забытое поделие.
>Hieronymus Bosch “A visual guide to the Scala language” oil on oak panels, 1490-1510. >The left panel shows the functional features, the main one describes the type system, and the right the object oriented parts.
Добрый вечер, скалагоспода. В общем решил навернуть скалу для себя, в качестве хобби, а то заебал жс на работе уже, да и хочется вкусить все бэкендерские фишки, к тому же на таком охуенном фп языке. Вообще, в дальнейшем хочу перекатиться с фронтоговна на скалобэка, сколько это примерно должно занять? фп вроде немного знаю, на жсе стараюсь ворочать говна в фп стиле
>>1237580 Так Скала - это не ФП. Скала - это Джава с лямбдами + пара костыльных паттернов на макросах имплицитах, которыми пытаются имитировать ФП. Если хорошо в этих костылях разобраться и попердолиться пару вечеров, то можно написать целую монаду, например.
>>1239531 Когда твои познания в ФП немного перевалять за map и пару статей на хабре, а опыт программирования на скале - за пару заданий из кук-буков, ты поймёшь, как они связаны. А пока просто учись и не выёбывайся.
>>1239258 1. проприетарный (де факто) 2. проёбаны GADT-ы, нigher-kinded polymorphism и многое другое. И этого никогда не будет, потому что 1 и на любой вопрос отвечают "это сложно сделать в дудке без костылей".
Вообще, в плане функциональности языки можно разделить так:
0. Эксперементальные языки, вроде Idris, Agda и т.п. Делают НЁХ, но, к сожалению, она не всегда пригодна для практического применения. Например, в Агде нельзя задать функтор для стрелки (морфизма внутри языка), и прочие нежданчики всплывают, про которые никто не знает, потому что никто на этих языках не программирует. Я уж не говорю про отсутсвие экосистемы.
1. Haskell - делают нормально, огромный набор рабочих паттернов для решения практических задач, про язык всё известно, нормальная экосистема. Есть определенные ограничения и косяки, но они тоже, как правило, известны.
2. Scala - пытаются делать то же, что и в Haskell, но по причине родовой травмы, получается только на костылях и в инвалидной коляске. У особо умных личностей путём героических сражений с собственным инструментом и преодоления созданных им трудностей всё же получается что-то сделать (тот же cats или scalaz), но не пытайтесь повторять это дома, может оказаться опасно для мозга. К сожалению, все эти сложности не получается до конца изолировать даже на уровне библиотеки, поэтому даже воспользовавшись чем-либо готовым, вы всё равно рискуете хапнуть говна и повторить геройские подвиги сражения с языком, хотя, справедливости ради, уже в более лайтовой форме, чем авторы либ.
3. F# - онально огорожены и, как я уже писал выше, даже не пытаются делать то, что не поддерживается самой платформой .net. В итоге застряли на полиморфизме ранга-1, причем 13 лет назад, в течение которых все нововведения в язык сводились к синтаксическому сахарку и частным свистелкам-перделкам, которые, по идее, в любом нормальном языке могут быть реализованы на уровне макросов или, в крайнем случае, плагинов компилятора. inb4 MIT-лицензия и наличие mono не особо позволяют шарпу стать "открытым", это все равно, что говорить, что windows-only-говно не онально огорожено потому что есть wine
Аноны, а как по-простому скомпилировать скала-код в байткод для jre? 1. Делаю обычный хеллоуворлд 2. scalac hello.scala 3. java Hello дает Error: Could not find or load main class Test
>>1251030 На коболе знаешь какие зп охуительные? Когда технология загибается, спеца найти становится сложнее и рынок готов предлагать большие зп, лишь кто-то был готов обмазываться и поддерживать уже накатанное.
Читаю это красную книгу, вижу задание. Смотрю как надо сделать. Решаю сделать тоже самое, но с блекджеком с потоками. А хули нет? В пятницу сделал, все выходные пробухал. Щас посмотрел, что я сделал и обосрался. Всего пару дней прошло, а я уже забыл что и как я делал, пришлось 5 минут смотреть в экран, чтобы вспомнить.
Лучшая книга по Скале: http://www.ozon.ru/context/detail/id/31921731/
Учебник по Скале на русском: http://twitter.github.io/scala_school/ru/index.html
Второй учебник по Скале на русском: http://twitter.github.io/effectivescala/index-ru.html
Курс по fp на Скале для слоупоков: https://www.coursera.org/course/progfun
Список годноты: https://github.com/lauris/awesome-scala
Презентации летнего ScalaDays: https://www.parleys.com/channel/53a7d269e4b0543940d9e535/presentations?sort=views&state=public
Два недавних форка компилятора, один от тайплевела и второй от баттхертнутого:
https://github.com/typelevel/scala (https://github.com/typelevel/scala/wiki/Differences)
https://github.com/paulp/policy
Завтра ищешь в интернете книжку Programming in Scala. Похуй если ничего не поймешь. Затем идешь на scala-lang.org и изучаешь стандартную библиотеку от корки до корки. Потом зубришь, именно, сука, вызубриваешь конвенцию по написанию скала кода - от EPFL естественно, чтобы от зубов отскакивало. Когда напишешь свой первый клон Twittera, по пути изучив основы дискретного и лямбда исчисления, скачиваешь и изучаешь любой асинхронный скала вебсервер, рекомендую Play!. Как переделаешь твиттер клон, чтобы выдавал по крайней мере 5 тысяч запросов в секунду, можешь идти дальше - тебя ждет увлекательный мир хайлоада. Apache Hadoop и Spark, сверхбыстрые асинхронные key-value хранилища, NoSQL и прочие мира открытого исходного кода приблуды. Отсос хиккующих питонистов / просто неудачников типа годаунов или рубифанбоев, сосут по жизни, не заставит себя ждать и уже через пол года ты будешь подворачивать штаны, есть маффины, запивая смузи и любая баба будет течь от упоминания твоей зарплаты.