Better safe than sorry или О иммутабельности
Сегодня с утра устроили с
artureg срачь на тему "почему мутабельные структуры данных это плохо".
Вообще все началось с того что он пишет некую хитрую штуку на кложури, но при этом использует ее не в идиоматическом стиле, в то с мысле, что вместо кошерных иммутабельных структур использует 100500 ref которые ссылаются на структуры внутри которых еще ref и в итоге у него это все автоматически не сериализуется в json. То есть закат солнца вручную и изготовление из кложури перла и цэ-с-крестиками и поселение там ядовитых жаб и пауков. И все это внутри Software Transactional Memory, т.е. (dosync ...)
Два дня на пару с
theiced пытались ему объяснить почему ему не нужно столько ref, особенно вложенных, и как кошерно пользоваться иммутабельными структурами данных. Но артурег отнекивается, не желая менять парадигму.
Впрочем, ему там и структуры такой сложности не нужны, посколько достаточно хранить обновления для этих структур в виде списка, а текущее состояние интегрировать исходя из них.
Аналогичным образом я спорил с канадскими линуксоидами, которые обвиняли меня в том, что я, используя статически типизированные языки и иммутабельные структуры данных, возвожу защитное программирование до уровня паранойи, ограничиваю себя в возможности отстрелить себе ногу, так как не верю даже себе.
То же самое и здесь: я использую языки с иммутабельностью, потому что НЕ верю сторонним либам, которые вызываю я, не верю сторонним фреймворкам, которые вызывают мой код, и более всего я не верю самому себе, когда я пишу код, который вызывает мой собственный код, написанный 10 лет назад. Потому что я помню, что всю жизнь писал код в чаду угара, в дедлайнах, на основе отсутствующих или неполных спек и вообще наугад.
Артурег же считает, что что-то полученное из черного ящика, будет хотя бы документировано, если его нельзя менять, а то что он отдает из своего кода, он нигде больше не использует и соответственно, дальше пользователи его либ могут делать с данными что хотят. Все бы хорошо, но только иммутабельные данные, ссылочная прозрачность и персистентные структуры данных - это и есть тот же самый принцип, но возведенный на уровень теоретического обоснования и реализации в языке.
Я не желаю ничего ни помнить, ни знать ни про свой код, ни про сторонние либы, кроме того, что они теоретически не способны сделать что-то плохое, а это автоматом означает иммутабельность и статические типы.
Есть некоторые узкие места, где мутабельные данные хороши, но их можно изолировать действительно в виде черного ящика, и снаружи видеть только иммутабельность.
В любом другом случае иммутабельность автоматически освобождает мозг от нагрузки по удерживанию в памяти лишней информации о состояния.
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Вообще все началось с того что он пишет некую хитрую штуку на кложури, но при этом использует ее не в идиоматическом стиле, в то с мысле, что вместо кошерных иммутабельных структур использует 100500 ref которые ссылаются на структуры внутри которых еще ref и в итоге у него это все автоматически не сериализуется в json. То есть закат солнца вручную и изготовление из кложури перла и цэ-с-крестиками и поселение там ядовитых жаб и пауков. И все это внутри Software Transactional Memory, т.е. (dosync ...)
Два дня на пару с
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Впрочем, ему там и структуры такой сложности не нужны, посколько достаточно хранить обновления для этих структур в виде списка, а текущее состояние интегрировать исходя из них.
Аналогичным образом я спорил с канадскими линуксоидами, которые обвиняли меня в том, что я, используя статически типизированные языки и иммутабельные структуры данных, возвожу защитное программирование до уровня паранойи, ограничиваю себя в возможности отстрелить себе ногу, так как не верю даже себе.
То же самое и здесь: я использую языки с иммутабельностью, потому что НЕ верю сторонним либам, которые вызываю я, не верю сторонним фреймворкам, которые вызывают мой код, и более всего я не верю самому себе, когда я пишу код, который вызывает мой собственный код, написанный 10 лет назад. Потому что я помню, что всю жизнь писал код в чаду угара, в дедлайнах, на основе отсутствующих или неполных спек и вообще наугад.
Артурег же считает, что что-то полученное из черного ящика, будет хотя бы документировано, если его нельзя менять, а то что он отдает из своего кода, он нигде больше не использует и соответственно, дальше пользователи его либ могут делать с данными что хотят. Все бы хорошо, но только иммутабельные данные, ссылочная прозрачность и персистентные структуры данных - это и есть тот же самый принцип, но возведенный на уровень теоретического обоснования и реализации в языке.
Я не желаю ничего ни помнить, ни знать ни про свой код, ни про сторонние либы, кроме того, что они теоретически не способны сделать что-то плохое, а это автоматом означает иммутабельность и статические типы.
Есть некоторые узкие места, где мутабельные данные хороши, но их можно изолировать действительно в виде черного ящика, и снаружи видеть только иммутабельность.
В любом другом случае иммутабельность автоматически освобождает мозг от нагрузки по удерживанию в памяти лишней информации о состояния.
no subject
no subject
no subject
no subject
no subject
no subject
А есть дураки от разработки, что испоганят и первое и второе.
no subject
no subject
no subject
эти языки, понятно, для тинейджеров. но тинейджеры дозреют когда-нить до мутного энтерпрайза с прикольными названиями тривиальных вещей, обернутых тучей xml конфигов.
no subject
no subject
no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
Сарказм?
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
(no subject)
no subject
Мне кажется, что именно JS будет локомотивом прогресса, в том числе и потому, что он говно.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
это правда. ну, понятно, зачем нужно, но совершенно точно overengineered.
no subject
OldShittyService = NewShinyService
все.
(no subject)
(no subject)
no subject
Я как-то читал статью про депенденси инжекшн, как раз от авторов гуйса, кажется, и вот там в самый решительный момент, когда они честно признались, что скорее всего вам придется все ваше приложение переписать, утверждали, что this is a good thing. Тогда-то я и понял, что серьезных аргументов у них за него нет.
Сама концепция IOC как бы вырастает из простой функциональной декомпозиции, я против ничего не имею, но непонятно, зачем этому придумали аж два новых названия. А вот зачем нужны специальные библиотеки для него, для меня остается загадкой и по сей день.
no subject
Вам чувствую очень хочется пообсуждать с кем нибудь свои мысли по поводу dependency injection. "Я против ничего не имею", но мне не очень интересно, все эти вещи уже сто раз разжёваны везде где только можно. А он не дозрел а не я просто потому что вы не знаете никакого контекста, но пытаетесь его угадать.
> А вот зачем нужны специальные библиотеки для него, для меня остается загадкой и по сей день.
А вы пойдите поработать в банк или хедж-фонд или ещё в какую нибудь крупную финансовую контору, хотя бы годик. И вот через годик-другой у нас с вами состоится примерно тот же разговор что и у меня с тем коллегой. И возможно вы увидите что некоторые из тех типовых проблем что у вас были этот годик, можно решить немного проще. А пока пусть это будет для вас загадкой. Как я уже говорил - надо дозреть. Ну а не дозреете значит либо в тех тулзах что вы используете это не надо, либо вам и так не плохо, в колодце.
Самое смешное что мы guice не использовали и вообще старались от всех энтерпрайзных тулзов держаться подальше, но "это надо знать".
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
no subject
no subject
no subject
no subject
no subject