metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-03-06 08:17 pm

Better safe than sorry или О иммутабельности

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

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

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

[identity profile] tretiy3.livejournal.com 2012-03-06 07:03 pm (UTC)(link)
все же dependency injection может показаться оч мутной штукой когда пишешь на языке, в котором в функцию можно передать функцию.
эти языки, понятно, для тинейджеров. но тинейджеры дозреют когда-нить до мутного энтерпрайза с прикольными названиями тривиальных вещей, обернутых тучей xml конфигов.

[identity profile] dr-hyder.livejournal.com 2012-03-06 07:32 pm (UTC)(link)
Честно говоря мне думается что до ентерпрайза сложно дозреть, этому делу скорее заставляют. Хочешь денег - дозревай до ентегпрайза :-)

[identity profile] tretiy3.livejournal.com 2012-03-06 07:39 pm (UTC)(link)
вроде того, да. как в комсомол вступить :)

[identity profile] theiced.livejournal.com 2012-03-06 08:08 pm (UTC)(link)
быгыы. это верно только для говнокодеров.

[identity profile] dr-hyder.livejournal.com 2012-03-06 08:21 pm (UTC)(link)
Обоснуйте? А то у меня ощущение что меня только что говнокодером назвали, но не очень понятно почему. А может и не меня...

[identity profile] theiced.livejournal.com 2012-03-06 08:28 pm (UTC)(link)
ну вот я получаю примерно в 2 раза больше чем энтерпрайзчики с аналогичным опытом в аналогичной стране. при этом у нас там тотальная анархия и распиздяйство. нет манагеров-хуяегоров и прочей ненужной ёбани. ажайла тоже нет.

[identity profile] dr-hyder.livejournal.com 2012-03-06 08:39 pm (UTC)(link)
А о чем это мне должно говорить? Я не знаю что у вас там за зарплаты в "аналогичных странах", что у вас там за ентерпайзчики в этих странах, и лишь очень приблизительно представляю ваш уровень. Ну насколько я могу судить вы сильно экстраполируете свой опыт на окружающих. Ну и на случай если вы хотите собой похвалиться - я за вас очень рад, серьезно.

[identity profile] theiced.livejournal.com 2012-03-06 08:41 pm (UTC)(link)
я про "Хочешь денег - дозревай до ентегпрайза :-)". давайте переформулируем - " Тупой гондон и хочешь денег - дозревай до ентегпрайза :-)"

[identity profile] dr-hyder.livejournal.com 2012-03-06 09:01 pm (UTC)(link)
Ну, мне ваши оценочные суждения не очень интересны. Хотя вы вероятно и лучший программер беларуси, судя по вашим словам по крайней мере. Но сдаётся мне вы просто хотите посраться, что уже как бы косвенно намекает нам на то что есть и лучше.

[identity profile] theiced.livejournal.com 2012-03-06 09:06 pm (UTC)(link)
посраться всегда ок, но ещё раз - вы выдали уебланское утверждение "хочешь бабла - пили энтерпрайз". я его скорректировал под объективную реальность.

(no subject)

[identity profile] dr-hyder.livejournal.com - 2012-03-06 21:13 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-03-06 21:16 (UTC) - Expand

(no subject)

[identity profile] dr-hyder.livejournal.com - 2012-03-06 21:20 (UTC) - Expand

(no subject)

[identity profile] theiced.livejournal.com - 2012-03-06 21:40 (UTC) - Expand

(no subject)

[identity profile] dr-hyder.livejournal.com - 2012-03-06 21:44 (UTC) - Expand

Сарказм?

[identity profile] artureg.livejournal.com 2012-03-07 07:47 am (UTC)(link)
Вы только что обозвали языки с функциями высшего порядка - тинейжерскими?

[identity profile] artureg.livejournal.com 2012-03-07 07:55 am (UTC)(link)
вы :) хотя я допускаю то, что не правильно понял смысл вашего предыдущего сообщения

[identity profile] dr-hyder.livejournal.com 2012-03-07 07:57 am (UTC)(link)
Комментарий http://metaclass.livejournal.com/670899.html?thread=11475379#t11475379 - не мой.

[identity profile] artureg.livejournal.com 2012-03-07 07:59 am (UTC)(link)
промазал, прошу прощения :)

[identity profile] artureg.livejournal.com 2012-03-07 07:59 am (UTC)(link)
Вы только что обозвали языки с функциями высшего порядка - тинейжерскими?

[identity profile] tretiy3.livejournal.com 2012-03-07 09:04 am (UTC)(link)
Я так себе представляю точку зрения разработчика, который закопан в своих ioc контейнерах. Такие товарищи, как правило, свысока поглядывают на тех кто пилит на каком-нибудь жабоскрипте.

[identity profile] dr-hyder.livejournal.com 2012-03-07 09:45 am (UTC)(link)
У программеров очень большое эго. Очень! Поэтому они свысока поглядывают на всех, тут вопрос только в нахождении формального повода. Поглядите хотя бы на этот тред - это ж праздник какой то. Статически-тайпнутые свысока смотрят на динамически-тайпнутых называя их тинейджерами. Динамически-тайпнутые свысока смотрят на статически, называя тех "i hate those fucking cobol dinosaurs!"(дословная цитата моего старого коллеги, насколько я помню речь шла о джаве). Энтерпрайз vs не-энтерпрайз, пайтон vs руби ну и т.п. Эго программерское без всего этого чахнет и возвращается на землю, где нас ТАК НЕ ЦЕНЯТ, умных таких.
Edited 2012-03-07 09:50 (UTC)

[identity profile] bydl0coder.livejournal.com 2012-03-07 10:48 am (UTC)(link)
Вы так говорите, как будто это что-то плохое.
Мне кажется, что именно JS будет локомотивом прогресса, в том числе и потому, что он говно.

[identity profile] artureg.livejournal.com 2012-03-07 10:53 am (UTC)(link)
говно у вас в голове, если вы считаете такой замечательный язык как жаваскрипт - говном

[identity profile] bydl0coder.livejournal.com 2012-03-07 11:00 am (UTC)(link)
а у вас в голове органчик (из говна).
еще раз прочитайте комментарий, может догадаетесь, что имелось в виду.

[identity profile] artureg.livejournal.com 2012-03-07 11:01 am (UTC)(link)
научитесь толком выражать свои мысли

[identity profile] bydl0coder.livejournal.com 2012-03-07 11:02 am (UTC)(link)
айсед, залогиньтесь.

[identity profile] artureg.livejournal.com 2012-03-07 11:05 am (UTC)(link)
даю ещё одно попытку изложить ваши соображения доступно для окружающих

[identity profile] bydl0coder.livejournal.com 2012-03-07 01:25 pm (UTC)(link)
Действительно, с людьми, моск которых был поражен мозговой жабой, надо попроще.

Обясняю:
1. Для кучи народа JS - первый язык, им будет сложней засрать мозги паттернами-хуятернами.
2. Время server-side web forms приложений проходит, сейчас все ориентируются на single page, значит JS будет еще больше
3. Так как JS все-таки говно, то его лучше не писать самому, а генерить. Соответственно, в мейнстриме будет больше всякой функциональщины, которая, хоть и старье, но все равно прогресс по сравнению с.

(no subject)

[identity profile] artureg.livejournal.com - 2012-03-07 13:32 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2012-03-07 13:45 (UTC) - Expand

(no subject)

[identity profile] artureg.livejournal.com - 2012-03-07 13:46 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2012-03-07 13:49 (UTC) - Expand

(no subject)

[identity profile] artureg.livejournal.com - 2012-03-07 13:50 (UTC) - Expand

(no subject)

[identity profile] bydl0coder.livejournal.com - 2012-03-07 13:59 (UTC) - Expand

(no subject)

[identity profile] artureg.livejournal.com - 2012-03-07 14:19 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2012-03-07 14:11 (UTC) - Expand

(no subject)

[identity profile] artureg.livejournal.com - 2012-03-07 14:16 (UTC) - Expand

(no subject)

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

(no subject)

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