vit_r: default (vit_r)
[personal profile] vit_r

Почему Ява лучше Хаскеля



Писать много влом, так что грубыми мазками по поводу комментариев под ссылкой на очередные стенания, теоретических построений на странной аксиоматике, новой любви [livejournal.com profile] orleanz и прочих страданий о несовершенстве мира.

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

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

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

Выяснить, что имел ввиду автор кода на «лаконичном выразительном языке» нет никакой возможности.

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

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

Date: 2014-08-13 06:26 am (UTC)
From: [identity profile] norguhtar.livejournal.com
А как же аннотации и IoC? В Java сейчас это все активно применяют.

Date: 2014-08-13 07:05 am (UTC)
From: [identity profile] vit-r.livejournal.com
Это про школьницу на свидании.

Date: 2014-08-13 06:33 am (UTC)
From: [identity profile] kouzdra.livejournal.com
Как раз в смысле сопровождаемости функциональные языки лучше - система типов жестко "держит" семантику - большая часть логических ошибок вываливается на уровне проверки типов.

Да и проще они - меньше надо догадываться "что имел в виду автор"

Просто жаба привычнее.

Date: 2014-08-13 07:04 am (UTC)
From: [identity profile] vit-r.livejournal.com
Логическая ошибка не может вывалиться на этапе проверки типов, потому что это правильное решение неправильной задачи.

Date: 2014-08-13 08:31 am (UTC)
From: [identity profile] orleanz.livejournal.com
" Как раз в смысле сопровождаемости функциональные языки лучше

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

В Хаскелле же как раз и кратко, и понятно.

Date: 2014-08-13 09:10 am (UTC)
From: [identity profile] vit-r.livejournal.com
Не надо говорить "Вит спутал".

Date: 2014-08-13 01:07 pm (UTC)
From: [identity profile] orleanz.livejournal.com
Не веришь мне, так вот тебе выше Куздра, выплывший из глубин многолетнего использования Хаскелла и ОКамла, говорит что таки легко читать функциональный код.

Кстати, про тут задачку про которую ты говорил что типа у меня излишне сложное решение - у меня там реализован БЫСТРЫЙ алгоритм, О(n) ,

а то что ты и thesz предложили (более краткое), дают скорость О(n*n), см. http://orleanz.livejournal.com/1788009.html?thread=7256425#t7256425

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 01:10 pm (UTC) - Expand

(no subject)

From: [identity profile] orleanz.livejournal.com - Date: 2014-08-13 01:47 pm (UTC) - Expand

(no subject)

From: [identity profile] veremeenko-alex.livejournal.com - Date: 2014-08-13 01:58 pm (UTC) - Expand

(no subject)

From: [identity profile] veremeenko-alex.livejournal.com - Date: 2014-08-13 02:34 pm (UTC) - Expand

(no subject)

From: [identity profile] orleanz.livejournal.com - Date: 2014-08-13 03:17 pm (UTC) - Expand

(no subject)

From: [identity profile] veremeenko-alex.livejournal.com - Date: 2014-08-13 03:30 pm (UTC) - Expand

Date: 2014-08-13 02:38 pm (UTC)
ext_615659: (Default)
From: [identity profile] akuklev.livejournal.com
Нет, я убеждён и знаю на примерах, что использовать выразительность Хаскелла можно во вред.

Хаскелл просто отшибает сколько-то слабокомпетентных программистов сложностью изучения. Только поэтому на нём редко делают лапшу. Зато на нём часто делают заумь, ещё чаще заумь делают на Агде и Идрисе. Заумь работает _только_ потому, что её писал один человек экстракласса компетентности. Разобраться в том, как оно работает, смотря на код — хорошая тема для курсовой или даже бакалаврской работы. Если кто-то попытается повторить этот трюк, не являясь джедаем 80-го уровня (их всех вместе человек 200 на земном шарике и все засвечены в соотв. мейллистах и известны по своим публикациям), он либо не додебажится, чтоб оно в принципе хоть когда-нибудь завелось, либо, если додебажится, то будет совсем печальный сценарий: там через три года обнаружат ошибку, и никто, включая давно работающего профессором в Австралии автора, не возьмётся её починить.

Date: 2014-08-13 02:47 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Это всё работает потому, что у джедая было море времени и не было других горящих задач.

Функциональные языки в принятой сейчас записи, особенно с хитрыми красивыми символами не из ASCII, по природе своей не стрессоустойчивы.

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 02:58 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 03:45 pm (UTC) - Expand

(no subject)

From: [identity profile] ailev.livejournal.com - Date: 2014-08-14 10:56 am (UTC) - Expand

(no subject)

From: [identity profile] anonim-legion.livejournal.com - Date: 2014-08-13 05:50 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 05:52 pm (UTC) - Expand

(no subject)

From: [identity profile] avkh.livejournal.com - Date: 2014-09-13 04:59 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-09-13 05:29 pm (UTC) - Expand

(no subject)

From: [identity profile] orleanz.livejournal.com - Date: 2014-08-13 03:25 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 03:49 pm (UTC) - Expand

(no subject)

From: [identity profile] orleanz.livejournal.com - Date: 2014-08-13 03:53 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 03:57 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 04:13 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 04:59 pm (UTC) - Expand

(no subject)

From: [identity profile] justy-tylor.livejournal.com - Date: 2014-08-14 09:13 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 03:56 pm (UTC) - Expand

(no subject)

From: [identity profile] orleanz.livejournal.com - Date: 2014-08-13 04:21 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 05:03 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 05:17 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 05:30 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 05:54 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 06:25 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 06:29 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 06:39 pm (UTC) - Expand

(no subject)

From: [identity profile] akuklev.livejournal.com - Date: 2014-08-13 06:42 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 04:25 pm (UTC) - Expand

Date: 2014-08-13 03:32 pm (UTC)
From: [identity profile] sab123.livejournal.com
В Перле все как раз прозрачно и понятно.

Date: 2014-08-13 08:33 am (UTC)
From: [identity profile] metaclass.livejournal.com
Clojure тоже функциональная, но типов там нет.
Код на ней без отдельного текстового описания размером раз в 5 больше чем код, понять невозможно :)

Date: 2014-08-13 02:58 pm (UTC)
From: [identity profile] jdevelop.livejournal.com
то есть вы таки мазохист и штрейкбрехер?

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-08-13 03:37 pm (UTC) - Expand

Date: 2014-08-13 06:34 am (UTC)
From: [identity profile] raydac.livejournal.com
гораздо большую роль в сегодняшнем говнософте играет не тот факт что его пишут на чем то схожем с брайнфаком потому что "вася решил полробовать", а потому что никто уже не проектирует софт, херовая архитектура превратит переписывание в ад даже если написано на самом многословном и типизированном языке, а проектировать сейчас это "для слабаков, для хлюпиков!" (С) эстонская реклама

Date: 2014-08-13 07:03 am (UTC)
From: [identity profile] vit-r.livejournal.com
В энтерпрайзе даже штатные аналитики есть.

Date: 2014-08-13 07:07 am (UTC)
From: [identity profile] raydac.livejournal.com
бывает даже два )) но это не значит что они как то используются по назначению и тем более что то умеют

Date: 2014-08-13 08:29 am (UTC)
From: [identity profile] metaclass.livejournal.com
Подтверждаю.
Переписал сейчас 500 строк хранимых процедур SQL на 500 строк Clojure в целях избавления от логики в БД.

Непонятно чуть менее чем все. В принципе. Оригинал на SQL чуть более читабельный, но нихрена не поддерживаемый и неудобный в деплойменте и обновлении, новая версия на Clojure - к ней нужно каждую строку комментировать двумя-тремя строками текста, причем не в коде, а отдельным сочинением, чтобы хоть кто-то понял, что там.

Date: 2014-08-13 08:34 am (UTC)
From: [identity profile] orleanz.livejournal.com
а можно пример одной такой непонятной строки на Кложе с сочинением? чтобы не быть голословным. Или это военная тайна? Чисто нейтрально спрашиваю, без подьебки, сам Кложу не знаю.

Date: 2014-08-13 09:02 am (UTC)
From: [identity profile] metaclass.livejournal.com
Да вот, одна функция:
https://gist.github.com/anonymous/a4111ae1f41e0bcea91c
Занимается тем, что сопоставляет расписанию общественного транспорта (список поездок с контрольными точками) реальное выполнение им этого расписания и полученные записи дополняет информацией из шапки расписания (информация о маршруте, транспортном средстве, итд)

исходный вариант хранимой процедуры, без шапки, только поездки
https://gist.github.com/anonymous/83eaa9e71eca09bdd508

(no subject)

From: [identity profile] zealer.livejournal.com - Date: 2014-08-13 10:26 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-08-13 10:33 am (UTC) - Expand

Ну facepalm же

From: [identity profile] ext_1684112 - Date: 2014-08-13 10:58 am (UTC) - Expand

(no subject)

From: [identity profile] zealer.livejournal.com - Date: 2014-08-13 11:04 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 11:29 am (UTC) - Expand

(no subject)

From: [identity profile] zealer.livejournal.com - Date: 2014-08-13 02:15 pm (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 02:44 pm (UTC) - Expand

(no subject)

From: [identity profile] zealer.livejournal.com - Date: 2014-08-13 11:06 am (UTC) - Expand

(no subject)

From: [identity profile] vit-r.livejournal.com - Date: 2014-08-13 10:52 am (UTC) - Expand

(no subject)

From: [identity profile] zealer.livejournal.com - Date: 2014-08-13 11:12 am (UTC) - Expand

(no subject)

From: [identity profile] ext_1684112 - Date: 2014-08-13 10:59 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2014-08-13 11:34 am (UTC) - Expand

Date: 2014-08-13 09:11 am (UTC)
From: [identity profile] metaclass.livejournal.com
Работает это примерно таким образом:
grouped-time-points - это список вида "поездка, начало по времени, конец по времени". Загружается sql-запросом+постобработка и передается в эту функцию
report-trips-dict - словарь "id отчета"->"список поездок в отчете", тоже загружается из результата sql запроса и передается в эту функцию.
ci_date - дата отчета, берется из текущей обрабатываемой шапки расписания
{:keys [itrep_xmlobj_id ci_enddt ci_xmlobj_id] :as car-itin} - запись назначенения расписания транспортному средству - сразу в параметрах функции раскладывается на интересующие нас поля

Потом происходит следующее: для каждой поездки из расписания (map ... grouped-time-points) выполняется поиск выполнения этой поездки в report-trips-dict, полученные данные обрабатываются в нужный формат, с значениями по умолчанию, если поездки нет и сливаются в одну запись (merge car-itin ... report-trip)

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

Date: 2014-08-13 09:09 am (UTC)
From: [identity profile] vit-r.livejournal.com
Комментировать так много надо потому, что выразительные свойства языка используются не правильно.

Всегда можно выбрать правильный стиль, хорошо сочетающийся с комментариями. Правда, не факт, что в этом случае останутся "преимущества" функционального языка.

Про студентов

Date: 2014-08-13 11:03 am (UTC)
From: [identity profile] theaspect.livejournal.com
Пять лет студентов учат предоставлять два раза в год единственный правильный ответ на заранее оговоренный вопрос при этом не сотрудничая с соседом. Какие еще противоречия есть?

Re: Про студентов

Date: 2014-08-13 11:28 am (UTC)
From: [identity profile] vit-r.livejournal.com
Мы о практике. Есть разные формы обучения. К тому же студенты постоянно списывают друг у друга и из Интернета.

Re: Про студентов

Date: 2014-08-13 03:09 pm (UTC)
From: [identity profile] theaspect.livejournal.com
нга практике списывают со StackOwerflow

Date: 2014-08-13 01:27 pm (UTC)
From: [identity profile] justy-tylor.livejournal.com
Java и Haskell это разные точки приложения усилий. В Java убогая аристотелевская база, но адаптированная под простой народ (куда в большей степени, чем предшествовавшие говны Objective-C, например). В Haskell - развитая система типов и полноценные контексты (через монады), но для академических целей, со своими узкоспецифичными знаниями и фетишами.

Можно ли сделать лучше, совмещая преимущества и избавляясь от существующих недостатков? Да. И здесь тоже есть варианты. Например, [livejournal.com profile] ailev предпочитает начинать с реализации набора мощных идей, постепенно развивая человекопригодность. А у меня всё начинается с человекопригодности выражения идей (включая не только хорошие, но и плохие, ведь с легаси тоже необходима интеграция).

В результате возможно появление новых языковых продуктов, с разной академической и практической ценностью. А что Java в каких-то нишах останется вечно как COBOL - это тоже ок.

Date: 2014-08-13 03:42 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Ява - это мощнейшая инфраструктура, созданная после того, как Сан вложил в рекламу технологии дикие кучи бабла. Идеи - это третично. Про Оберон 2 тут уже упоминали

Profile

vit_r: default (Default)
vit_r

February 2026

S M T W T F S
12 34 567
8 9 101112 1314
1516 171819 20 21
22 23 2425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 26th, 2026 09:27 am
Powered by Dreamwidth Studios