Fork me on GitHub
#clojure-russia
<
2017-03-10
>
akond06:03:20

Друзья, не холивара ради, а в целях познания объективной истины. Начитался я обзоров разных, в голове всё только ещё больше перепуталось. Если бы перед вами стояла задача выбрать между Go и Clojure, что бы вы выбрали, если предположить, что у вас личных предпочтений нет? Для каких задач Clojure лучше, чем Go и наоборот? И как вы думаете этот ответ изменится в течении, скажем, 5-10 лет?

akond07:03:11

Потому что я слышу такие идеи: 1) Go лучше потому что ... 2) Clojure лучше потому что ... 3) Что лучше зависит от задачи.

ilevd07:03:39

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

akond07:03:46

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

akond07:03:33

Перефразирую: приходит к вам друг, который не понимает в программировании, и спрашивает, у меня вот такой и такой проект, каких программистов мне искать? На Go или на Clojure? И положим я несу ответственность за свой совет.

kuzmin_m07:03:04

Go для сервисов, демонов (docker, etcd, consul, ....) Clojure для бизнес логики С Go не работал.

ilevd07:03:50

На Clojure скорость разработки повыше должна быть и библиотек побольше, так как jvm.

ilevd07:03:05

Хотя на Go тоже много чего уже есть, а через 10 лет с его темпами развития, этот фактор выравняется

artemyarulin07:03:57

// Warning: Rant ahead На работе счас гошечка, все домашние и свои проекты на кложуре. Я не понимаю как люди на го пишут, средний пулл реквест на ревью на 200-400 строк, на кложе некоторые целые проекты в 1к укладывают. Обработка ошибок ужасна, map/filter/reduce нету и не возможно заимплеменитить в принципе ибо система типов из 80х. Если вы поняли что такое ФП и полюбили это то от ГО вас будет тошнить

nicola07:03:21

Согласен, го архаичный и грустный

ilevd07:03:00

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

artemyarulin07:03:55

Го хорош как тут сказали для всяких low level things, это ж по сути си с типами. Докеры, всякие бд писать, еще веб сервисы тупые где перформанс превыше всего. Но писать бизнес логику на нем это по мне ад

ilevd07:03:23

Rust вообще монструозный какой-то

ilevd07:03:37

Скорее Crystal

nicola07:03:46

Кстати перформанс у него как у Java вроде

artemyarulin07:03:03

у кого “него”?

ilevd07:03:08

Потребление памяти поменьше

nicola07:03:15

Они всех на-обманывают выдавая себя за низкоуровневый язык ;)

artemyarulin07:03:33

да неа, там GC заточен под latency, оно там суб миллесекондс

nicola07:03:53

Такого не бывает ;)

artemyarulin07:03:23

не могу найти реальные графики, но там реально шустро

nicola07:03:30

В другом месте вылезет

artemyarulin07:03:54

дада, я грю они оптимизируют именно под этот кейс

nicola07:03:57

Оракла столько умов вложил в гц

ilevd07:03:46

О, старт-тайм еще у Clojure больше

artemyarulin07:03:00

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

akond07:03:38

положим время запуска не играет роли

artemyarulin07:03:22

But if you do wish to minimize pause times at the expense of everything else, then by all means, check out the Go GC.

mike_ananev07:03:25

@akond Go и Clojure инструменты для разных задач. Go - для замены С, в качестве разработки системного софта. Clojure - для веб-разработки, для backend' задач на JVM-платформе. Clojure еще подходит для data processing: ETL задачи, преобразование коллекций.

akond08:03:23

@mike1452 то есть для, например, мобильных приложений go подходит лучше?

mike_ananev08:03:16

@akond с мобильной разработкой не сталкивался. Однако если clojure туда зайдет, то думаю она порвет всехв плане удобства разработки. Разве что системные сервисы, типа vpn-тунелей делать на ней будет сложнее.

mike_ananev08:03:12

@akond на мой личный взгляд у Clojure самый высокий индекс удовлетворенности программистов. Ни у одного другого языка не встречал подобного. А это очень много значит, по крайней мере для самих программистов.

andfadeev08:03:56

эта удовлетворенность компенсируется страданием от того как трудно продать кложу во вне

mike_ananev08:03:13

@andfadeev этот момент не совсем к языку относится, а скорее к самому программисту. После знакомства с CLojure в 13 году я пишу только не ней. Работодателя я уведомляю, что разработка будет на Clojure и все. Нравится не нравится - будет так.Я просто больше не хочу тратить свою жизнь не на решение проблем, а на "борьбу с демонами"

mike_ananev08:03:09

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

artemyarulin08:03:11

респект. Я дак не могу на работу ее протащить, если есть выбор то беру мейнстрим типа ЖС или то что в конторе уже есть ибо понимаю что потом может быть проблемы с hiring

andfadeev08:03:35

тоесть в сбт кложа в проде?

mike_ananev08:03:16

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

andmed08:03:03

@mike1452 ну да, респектище. удовлетворенность объективно подтверждали где-то опросами. насчет последнего -- кмк наооборот

andmed08:03:11

off: google cloud дает пробный триал на год на 300 баксов. кто хочет -- щупайте. сижу вот за консолью, ничегонепонятно))

mike_ananev08:03:37

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

mike_ananev08:03:10

CLojure это не просто язык. это еще и хорошая философия построения систем, под которую заточен язык. На ней можно быстро и качественно писать софт. Поэтому она первый кандидат, ИМХО, в качестве рабочего инструмента для быстрых мобильных команд.

andfadeev08:03:45

@mike1452 в сбт в проде есть кложа?

mike_ananev08:03:00

я сейчас уже в самом банке

andfadeev08:03:12

ну не суть, в банке

mike_ananev08:03:51

проект на ней уже сделан. все еще идут подготовительные работы по вводу серверов.

mike_ananev08:03:31

у меня суть работы не писать софт, а делать архитектуры.

mike_ananev08:03:14

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

mike_ananev08:03:32

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

mike_ananev08:03:22

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

andfadeev08:03:00

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

mike_ananev08:03:13

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

mike_ananev08:03:07

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

andfadeev08:03:17

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

mike_ananev08:03:23

@andfadeev про убедить команду, это уже личные качества мне кажется. Своих я убедил и на мои семинары по Clojure ходили люди из всех отделов нашего ЦК.

mike_ananev08:03:23

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

ilevd10:03:11

Получается, что Clojure - самый лучший язык программирования в мире. Но тут https://habrahabr.ru/post/259831/ писали что это не так trollface

kronos_vano10:03:05

про Nim как то сомнительно

kronos_vano10:03:10

кстати он цикл так и не дописал

ilevd10:03:17

Угу. Жалко.

mike_ananev10:03:48

@ilevd я бы сказал что это язык для которого лучше всего был сделан trade-off в угоду практичности

mike_ananev10:03:57

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

akond11:03:15

да, в этом и вопрос

akond11:03:33

в каком контексте он подходит лучше

akond11:03:49

демоны -- понятно, го

ilevd11:03:53

Для скриптов еще не очень

akond11:03:39

как кросс-платформенные нативные приложение под мобилу?

ilevd11:03:48

Хотя там есть lumo, еще что-то , интересно кто-нибудь использует и зачем?

ilevd11:03:18

@akond не в курсе

akond11:03:42

рест сервера?

ilevd11:03:50

Ну да.

akond11:03:29

да го или кло?

ilevd11:03:56

Я бы на Clojure писал.

akond11:03:29

Гопники клянутся, что рест сервера на го лучше.

akond11:03:22

вопрос самого языка оставим пока в стороне

akond11:03:31

мне самому кложа нравится больше

ilevd11:03:48

Дак скорость разработки же.

ilevd11:03:37

Дак нравится и пиши)

ilevd11:03:46

Можно на обоих.

akond11:03:22

Понимаешь, если бы вопрос касался только меня, я бы написал.

akond11:03:00

Мне нужно представить обоснованное решение с явно указанными минусами и плюсами

akond11:03:18

Я ж не хочу, чтобы меня потом кляли

ilevd11:03:41

Тогда, наверное, не надо ничего советовать)

ilevd11:03:55

А вообще набросали же в общих чертах, только в список записать

ilevd11:03:21

Можно еще добавить что на go порог вхождения меньше, прогеров найти проще

akond11:03:36

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

dottedmag11:03:45

Есть разные бизнесы. Где-то Clojure просто не нужна.

akond11:03:58

да, но по-моему легче ответить на вопрос где она нужна.

ilevd11:03:30

Видимо на этот вопрос, ответ: jvm

dottedmag11:03:19

@akond Да, в продуктах со сложной бизнес-логикой и высокой степенью параллелизма.

dottedmag11:03:37

Например, модерновые SPA 🙂

akond11:03:53

хорошо, в спа она сияет

dottedmag11:03:21

И в сложных серверах тоже, конечно.

ilevd11:03:28

Ну тут можно и Go и Erlang/Elixir

dottedmag11:03:43

Сложную логику на Go/Erlang/Elixir писать долго и бажно.

dottedmag11:03:52

У них есть свои ниши.

ilevd11:03:29

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

misha12:03:39

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

misha12:03:01

Главное знать, чего нахлобучивать-то надо

misha12:03:05

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

misha12:03:35

Потому и вакансий нет - 3 чувака 10 проектов молча хачат и в ус не дуют

misha12:03:20

Хороший пример - в #datascript канале чувак сейчас борется с жс и толком задачу даже объяснить не может, потому что тонет в каких-то обертках и проблемах ненаглядности и лишнего гемора языка

misha12:03:05

И в результате твёрдо убеждён, что дс не подходит ему, что бы там деструктурированный url хранить, лол

akond12:03:47

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

misha12:03:28

У них юзкейс - рисовать бесконечное полотно с картинками на дешевых андроидах

misha12:03:10

А чувак не может 2-уровневую хешмапу из жс в дс положить. Разные немного вещи

akond12:03:43

ну, может не хватает чего-то

misha12:03:23

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

akond12:03:22

мне в даталог с непривычки тоже сначала было не очень писать

misha12:03:38

Но не суть, суть, что чувак из-за языка банальные ванлайнеры за недельные рисерч проекты принимает

misha12:03:32

Чтобы описать 2 атрибута схемы, и затранзактить хешмап - даталог не нужен )

misha12:03:52

Это 2 {} и 2 вызова функций

akond12:03:04

может быть там дело в самом чудаке

akond12:03:08

такое же тоже может быть

misha12:03:08

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

savelichalex12:03:13

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

misha12:03:09

Не было ни единого единой проблемы kappa

savelichalex12:03:01

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

misha12:03:20

Тесты на типы приходилось писать, но то такое

misha12:03:18

Автокомплита не хватало больше, чем статической типизации

a.espolov12:03:54

@savelichalex пхпешники же жили как кто, битрикс например 😄

a.espolov13:03:30

и будут еще жить, потому что перейти на использование типов в лапше просто не реально(((

akond13:03:03

так он еще и через js туда ходит, мама мия

akond13:03:01

от себя могу сказать, что я тоже боролся с даталогом. нужен опыт, чтобы в него въехать. он же совершенно не похож на всем привычный сиквел. я думаю его проблема в этом. а логи ведутся на отдельном сервере https://clojurians-log.clojureverse.org/datascript/2017-03-10.html

a.espolov13:03:10

@akond почему проблема?

akond13:03:13

почему проблема использовать новый подход не имея опыта?

a.espolov13:03:46

@akond не знаю как забугорные, но российские работодатели не любят это слово "проблема" - от себя рекомендую смотреть как на задачу, легче преодолевать барьеры в эмоциональном плане

a.espolov13:03:51

@akond перефразирую задача получить экспертизу по подходу

artemyarulin13:03:17

может все уже в курсе, но был приятно удивлен функции tree-seq. Раньше я с зипперами игрался, это функция почти тож самое (даже параметры почти теже). Пример использования - приходят данные (JSON, EDN, etc.), мапы и векторы. Нужно было достать все вхождения :image-url в любом месте на любой глубине

(->> data 
     (tree-seq coll? identity) 
     (keep :image-url))
Функция замечательно тем что возвращает ленивую коллекцию и принимает два параметра branch? определяющую можно ли идти в глубь и children которая возвращает соответсвенно всех чайлдов. Т.е. написать например обход всего жеского диска или сайта по линкам тривиально. Прекрасно же ❤️

a.espolov13:03:27

как завазять с js?)

akond13:03:32

@a.espolov "завязать" в смысле "перестать писать на нём"?

a.espolov13:03:31

да я не прибалтал своего последнего работадателя на использование cljs( стало жалко его

akond13:03:45

поискать в своём городе группу Анонимные Яваскриптеры?

dottedmag13:03:29

Ой, так это ж платов на хабре. Угадаю язык по юзерпику.

dottedmag13:03:35

Эээ. Котлин!

dottedmag13:03:13

Не угадал =(

rustam.gilaztdinov13:03:48

(горячо любимый мной Fantom, Kotlin, Ceylon) So close 😃

dottedmag13:03:07

Я забыл, что он Fantom любил.

misha14:03:34

@akond да, из жс не мог положить мап в базу потому что жс, как бы так помягче, – не особо наглядный

akond15:03:20

тогда я его понимаю. ему вдвойне сложней.

misha15:03:19

это иллюстрация к продуктивности на разных языках (при чем тут одна и та же либа, одни и те же 2 вызова метода. изолированнее пример я не встречал)

misha15:03:15

это даже не клиент-обертки для какого-то спарка на питоне и на джаве сравнивать

misha17:03:06

господа, а подскажите, как один и тот же цвет "при одной температуре" сконвертировать в эквивалентный "при другой" типа хочу цвет, который выглядит так же при 6500К, как "#123" при 3900К

asolovyov18:03:14

@akond на тему датаскрипта - мы его выпилили не из-за того что с ним сильно плохо (хотя, надо сказать, что для фронтэндщиков это сложнее, чем просто из мапы все доставать), а из-за производительности - на фронте банально инишиал данные у нас запихивались 100-200 мс в базу, а сейчас основной тупняк там на парсинге JSON'а. 🙂 То ли таки много данных, то ли хз. 🙂

dottedmag22:03:33

@asolovyov А зачем столько начальных данных сразу в базу?

misha22:03:02

@asolovyov а вы в пустую базу писали данные? или восстанавливали из транзит-стринги? у меня сейчас в игрушечном проекте ((count @conn) => 34958) восстанавливается из транзит стринги 450-700ms на квадкорном i7 макбуке в хроме ((count dump/transit-string) => 2803624)