metaclass: (Default)
[personal profile] metaclass
Сегодня с утра устроили с [livejournal.com profile] artureg срачь на тему "почему мутабельные структуры данных это плохо".
Вообще все началось с того что он пишет некую хитрую штуку на кложури, но при этом использует ее не в идиоматическом стиле, в то с мысле, что вместо кошерных иммутабельных структур использует 100500 ref которые ссылаются на структуры внутри которых еще ref и в итоге у него это все автоматически не сериализуется в json. То есть закат солнца вручную и изготовление из кложури перла и цэ-с-крестиками и поселение там ядовитых жаб и пауков. И все это внутри Software Transactional Memory, т.е. (dosync ...)
Два дня на пару с [livejournal.com profile] theiced пытались ему объяснить почему ему не нужно столько ref, особенно вложенных, и как кошерно пользоваться иммутабельными структурами данных. Но артурег отнекивается, не желая менять парадигму.
Впрочем, ему там и структуры такой сложности не нужны, посколько достаточно хранить обновления для этих структур в виде списка, а текущее состояние интегрировать исходя из них.

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

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

Date: 2012-03-06 05:20 pm (UTC)
From: [identity profile] falcrum.livejournal.com
Паранойя - нашефсё!

Date: 2012-03-06 05:29 pm (UTC)
From: [identity profile] victor bolshakov (from livejournal.com)
Хорошая трава. Отсыпь...

Date: 2012-03-06 05:43 pm (UTC)
From: [identity profile] avnik.livejournal.com
Не, когда у всех "своя копия" жить спокойнее (ну кроме тех случаев, когда мы работает с persistent объектом)

PS Это я за ядовитых питонов скажу

Date: 2012-03-06 06:23 pm (UTC)
From: [identity profile] dr-hyder.livejournal.com
Религиозные нотки detected.

Date: 2012-03-06 06:33 pm (UTC)
From: [identity profile] theiced.livejournal.com
иммутабельные данные это то что сохраняет моск от впадения в тотальное безумие.

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 06:36 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:26 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 08:30 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:38 pm (UTC) - Expand

Date: 2012-03-06 06:39 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Элемент религиозности есть, да.
Просто когда годами используешь самоочевидно полезную вещь, а потом ее подвергают сомнению - с ходу рациональные аргументы не придумываются.

Date: 2012-03-06 06:24 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
А я так уже устал спорить. Если человек хочет научиться чему-то новому, он разует уши и будет слушать умных людей. А учиться каждый может найти чему. Если же человек не хочет учиться, да ты хоть кол на голове теши, у него другие мысли, и всё. Так что встать и пойти.

Date: 2012-03-06 06:32 pm (UTC)
From: [identity profile] dr-hyder.livejournal.com
Я недавно пытался обьяснить одному человеку смысл dependency injection на примере в guice. У него было(и осталось, по моему) твёрдое убеждение что это какая то дикая не понять зачем нужная overengineered фича. Просто до некоторых вещей нужно самому как то дозреть, осознать смысл и необходимость. А то вроде как понятно и зачем и как использовать, но не понятен смысл "а я вот так делаю всю жизнь и всё нормально, зачем мне это?".

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-06 06:40 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-03-06 06:44 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 07:44 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_windwalker_/ - Date: 2012-03-07 10:34 pm (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_aive_/ - Date: 2012-03-06 06:54 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 07:28 pm (UTC) - Expand

(no subject)

From: [identity profile] tretiy3.livejournal.com - Date: 2012-03-06 07:03 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 07:32 pm (UTC) - Expand

(no subject)

From: [identity profile] tretiy3.livejournal.com - Date: 2012-03-06 07:39 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:08 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 08:21 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:28 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 08:39 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:41 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 09:01 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 09:06 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 09:13 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 09:16 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 09:20 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 09:40 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-06 09:44 pm (UTC) - Expand

Сарказм?

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 07:47 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 07:53 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 07:55 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 07:57 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 07:59 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 07:59 am (UTC) - Expand

(no subject)

From: [identity profile] tretiy3.livejournal.com - Date: 2012-03-07 09:04 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 09:45 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 10:48 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 10:53 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 11:00 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 11:01 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 11:02 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 11:05 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 01:25 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 01:32 pm (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 01:45 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 01:46 pm (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 01:49 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 01:50 pm (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 01:59 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 02:19 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-07 02:11 pm (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-07 02:16 pm (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-08 09:35 am (UTC) - Expand

(no subject)

From: [identity profile] artureg.livejournal.com - Date: 2012-03-08 09:40 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 06:35 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 06:42 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 07:54 am (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 10:26 am (UTC) - Expand

(no subject)

From: [identity profile] tonsky.livejournal.com - Date: 2012-03-07 10:01 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 10:19 am (UTC) - Expand

(no subject)

From: [identity profile] tonsky.livejournal.com - Date: 2012-03-07 12:46 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 01:02 pm (UTC) - Expand

(no subject)

From: [identity profile] bydl0coder.livejournal.com - Date: 2012-03-07 01:30 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 01:42 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-07 10:49 am (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 11:30 am (UTC) - Expand

(no subject)

From: [identity profile] levgem.livejournal.com - Date: 2012-03-08 09:06 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-08 09:09 pm (UTC) - Expand

(no subject)

From: [identity profile] anatoly borodin - Date: 2012-03-09 12:52 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-09 05:57 am (UTC) - Expand

Date: 2012-03-07 09:06 am (UTC)
From: [identity profile] sorhed.livejournal.com
С другой стороны, я чему-то научился во многом говоря тому, что умные люди постоянно твердили о хороших вещах, и не сдавались перед моим идиотизмом. :)

Date: 2012-03-06 06:45 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
Откажитесь от банков и автоматической телефонной связи.

Date: 2012-03-07 01:21 pm (UTC)
From: [identity profile] sorhed.livejournal.com
Связь на эрланге делают (местами), там всё хорошо. А банки да. Вообще удивляюсь, как там хоть что-то работает.

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-03-07 01:25 pm (UTC) - Expand

(no subject)

From: [identity profile] sorhed.livejournal.com - Date: 2012-03-07 01:27 pm (UTC) - Expand

(no subject)

From: [identity profile] plumqqz.livejournal.com - Date: 2012-03-07 01:31 pm (UTC) - Expand

Date: 2012-03-06 06:47 pm (UTC)
From: [identity profile] plumqqz.livejournal.com
И вдогонку. "Срач" же вроде как мужского рода.

Date: 2012-03-06 07:37 pm (UTC)
From: [identity profile] denisioru.livejournal.com
я кстати иногда подрачиваю на STM и лелею надежду что .NET framework enabled for STM все таки выйдет из инженерных проектов в релиз...

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:25 pm (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-03-07 04:54 am (UTC) - Expand

(no subject)

From: [identity profile] http://users.livejournal.com/_navi_/ - Date: 2012-03-07 06:30 am (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-07 10:39 am (UTC) - Expand

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-03-07 10:55 am (UTC) - Expand

Date: 2012-03-06 07:41 pm (UTC)
From: (Anonymous)
Ребяты, примерно треть инженеров имеет проблемы с использовние const и написания простых циклов в С. И чем больше компания тем больше там инженеров и этой трети.

Date: 2012-03-06 08:25 pm (UTC)
From: [identity profile] theiced.livejournal.com
и чо. если дибилушки не могут жопу подтереть, перестать выпускать туалетную бумагу?

(no subject)

From: [identity profile] blackyblack.livejournal.com - Date: 2012-03-07 04:56 am (UTC) - Expand

Date: 2012-03-06 08:02 pm (UTC)
From: [identity profile] djuffin.livejournal.com
>> а это автоматом означает иммутабельность и статические типы

Clojure?

Date: 2012-03-06 08:14 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Не, срач про статик типизацию был давно, еще до того, как я активно в кложурь ударился.

(no subject)

From: [identity profile] djuffin.livejournal.com - Date: 2012-03-06 08:31 pm (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-03-06 08:39 pm (UTC) - Expand

(no subject)

From: [identity profile] n16bs.livejournal.com - Date: 2012-03-07 05:18 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-07 04:42 am (UTC) - Expand

Date: 2012-03-06 08:39 pm (UTC)
From: [identity profile] vit-r.livejournal.com
Это не паранойя - это опыт.

Date: 2012-03-06 10:00 pm (UTC)
From: [identity profile] noop.livejournal.com
Самая надежная и сопровождаемая программа - программа не написанная вообще )

Date: 2012-03-07 12:40 am (UTC)
From: [identity profile] antontsau.livejournal.com
а потом ребе Б удивляется "что это за каменновековые релюшки и ебонитовые панельки образца 1935 года". А это всего лишь полный аналог подобного стиля, но в хардвари. Только чугун, только провернные решения, только логика на релюшках! Никаких новомодных транзисторов внутри которых жабы и электроны, поди пойми как оно работает! вот подадут туда 800 вольт - релюшкам нихрена не будет, а транзисторы все мигом сдохнут!


Date: 2012-03-07 06:35 am (UTC)
From: [identity profile] vp.livejournal.com
Ви не поняли. Я как только узнал, что это не штука для включения-выключения освещения, а для поезда, сразу же пришел в восторог.

(no subject)

From: [identity profile] measles.livejournal.com - Date: 2012-03-07 07:53 am (UTC) - Expand

Date: 2012-03-07 05:34 am (UTC)
From: [identity profile] nivanych.livejournal.com
> на кложури

Ударение на последний слог делает название изящным!

Date: 2012-03-07 05:35 am (UTC)
From: [identity profile] nivanych.livejournal.com
> не нужно столько ref, особенно вложенных

Видимо, память экономить..........
From: [identity profile] pingback-bot.livejournal.com
User [livejournal.com profile] mdajoke referenced to your post from (ворчливо) ... Опять всякой фигни притащил ... (http://mdajoke.livejournal.com/72938.html) saying: [...] (http://metaclass.livejournal.com/670899.html [...]

Про іммутабельність

Date: 2012-03-07 06:55 am (UTC)
From: [identity profile] pingback-bot.livejournal.com
User [livejournal.com profile] madf referenced to your post from Про іммутабельність (http://madf.livejournal.com/223848.html) saying: [...] уровня паранойи, ограничиваю себя в возможности отстрелить себе ногу, так как не верю даже себе." [...]

Date: 2012-03-07 09:09 am (UTC)
From: [identity profile] sorhed.livejournal.com
Янепонял.

[livejournal.com profile] antilamer же уже давно написал исчерпывающую статью про иммутабельность (на Кровавой Энтерпрайзной Джаве, чтобы уж совсем для тупых), ссылку на которую я и предлагаю давать всем заинтересованным лицам для окончательного решения вопроса.

Ну, а кто не просветился — тот сам себе злобный буратино, и ConcurrentModificationException ему в горбатую спину.

Date: 2012-03-07 01:15 pm (UTC)
From: [identity profile] dr-hyder.livejournal.com
А в чём заключается окончательное решение вопроса? Надо везде юзать immutable types и все проблемы решатся? Не пора ли товарищу антиламеру нобелевскую давать за окончательное решение еврейского concurrency вопроса?
Edited Date: 2012-03-07 01:17 pm (UTC)

(no subject)

From: [identity profile] sorhed.livejournal.com - Date: 2012-03-07 01:19 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-03-07 01:54 pm (UTC) - Expand

(no subject)

From: [identity profile] acerv.livejournal.com - Date: 2012-03-07 03:47 pm (UTC) - Expand

Date: 2012-03-07 05:25 pm (UTC)
From: [identity profile] n16bs.livejournal.com
А вот я ещё за nonullable переменные по дефолту. Если поле или переменная должны уметь хранить нулл - так их и помечаем. Жаль в мейнстримных языках такого нет.

Date: 2012-03-07 06:12 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да, это ж еще кто-то из отцов-основателей про это писал, что решение "разрешить null в указателях" было дикой ошибкой)

Date: 2012-03-07 09:18 pm (UTC)
From: [identity profile] maholet.livejournal.com
Канадские линуксоиды - новый мем, да?

Конечно можно согласится, что это продуктивно использовать написанный в угаре 10 лет назад код, при этом заботливо окружив его try{}catch{} блоками.
Но с другой стороны, скелеты из шкафов желательно периодически вынимать и внимательно пересчитывать кости.

Я может уже изрядно подзаебал напоминанием того, что просто программист знает, что надо написать, а ХОРОШИЙ программист знает что нужно переписать.

Это как мне кажется Yet Another Good Reason (YAGR) чтобы ператрахивать свои байты.

Date: 2012-03-08 05:31 pm (UTC)
develop7: (Default)
From: [personal profile] develop7
side note: нанимателю/зоказчегу это вовсе ни разу не reason, пушо оно и так работает. и программист, который займётся ператрахиванием, если не получит канделябром, то как минимум удостоится вопроса «а зачем собссно?».

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-03-08 05:43 pm (UTC) - Expand

(no subject)

From: [personal profile] develop7 - Date: 2012-03-08 08:25 pm (UTC) - Expand

(no subject)

From: [identity profile] maholet.livejournal.com - Date: 2012-03-08 08:40 pm (UTC) - Expand

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 12th, 2025 09:41 am
Powered by Dreamwidth Studios