metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2015-08-12 10:56 am

Запретить жабу, дотнет, пхп, перл и крестики, только ФП, только хардкор

https://medium.com/@yelbota/%D0%BA%D1%80%D1%83%D0%B3%D0%BE%D0%B2%D0%BE%D1%80%D0%BE%D1%82-%D1%83%D0%BD%D1%8B%D0%BB%D1%8B%D1%85-%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%BE%D0%B2-612c72738d04

Пройдет время, некоторым не повезет, и они встретят кризис среднего возраста в одиночестве, платя алименты ушедшей жене. Когда-то давно она прочитала в Космо, что программисты — это новые рок-звезды, но ушла, когда узнала что ее муж, унылый похапешник, не комитит на гитхаб. Другим повезет: они смогут проскочить в тимлиды, и руководство заткнет ими купленный слот на отраслевой конференции. Там они самоутвердятся, рассказав молодым, что унылыми быть круто. И спираль уныния выйдет на новый виток, засосав еще больше классных ребят.

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

[identity profile] veremeenko-alex.livejournal.com 2015-08-13 06:59 am (UTC)(link)
1 . В нормальной компании за попытку начать новый проект на новом языке больно бьют.
За чужие деньги - пожалуйста, а за свои - идите лесом.
Кто будет развивать проект, когда ты в отпуске или уволился? Или проект пошел и надо добавить 100500 фич?
На рынке программистов на новом языке практически нет.

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

Edited 2015-08-13 06:59 (UTC)

[identity profile] metaclass.livejournal.com 2015-08-13 07:08 am (UTC)(link)
Первый пункт при неосмысленном применении за 5-10 лет приводит компанию в болото, с доисторическими жабами, коболами, дельфи и фокспро. Я понимаю, тупым дедам удобнее, "всегда так делали", но технический долг надо бы разгребать.

Функциональщина в имеющихся языках - это уныние. Макросы в C#? LINQ в жабе? Алгебраические типы данных хотя бы в одном из мейнстримных языков?

[identity profile] thesz.livejournal.com 2015-08-13 11:48 am (UTC)(link)
Не то слово.

Я недавно словил "выход за границы массива" в коде вида for (int i=0;i < s.Length; i++) { var p = QQ(c => c == s[i],p); }

Замыкания в C# замыкают не значения, а ссылки на переменные!

Исходил дерьмом минут двадцать, пока не понял, что это как Питоне.

Ужас. Даже в Лиспе нормальные замыкания с 1983 года. Куда эти плагиаторы смотрят?

(с другой стороны, tie the knot по другому в семантике C# не сделать, а он мне нужен)

[identity profile] metaclass.livejournal.com 2015-08-13 04:56 pm (UTC)(link)
>Замыкания в C# замыкают не значения, а ссылки на переменные!

Ооо, это известный прикол. "Вышел из цикла, и все переменные указывают на значение в последней итерации".
причем что-то вроде int j=i; внутри цикла от этого помогает.

[identity profile] thedeemon.livejournal.com 2015-08-13 04:57 pm (UTC)(link)
А где замыкания с _мутабельными_ переменными работают иначе?
Разве что в С++, где можно явно выбирать между ссылкой и копией.

[identity profile] metaclass.livejournal.com 2015-08-13 05:12 pm (UTC)(link)
Там же и работают. Только переменную внутри тела цикла или делегата переприсвоить надо :)

[identity profile] thedeemon.livejournal.com 2015-08-13 05:20 pm (UTC)(link)
Это не "иначе", необходимость в ручном копировании есть следсвие замыкания-по-ссылке.

[identity profile] pupsikk.livejournal.com 2015-08-14 10:48 am (UTC)(link)
Мне кажется (только кажется, наверняка я не знаю) это следствие более тяжелой проблемы - Компиляция (она же Оптимизация) Головного Мозга.
Это такая парадигма в языкостроении, когда возможности языка подгоняются под ограничения компилатора.
То есть вот сидит такой изобретатель языка и пытается впихнуть него замыкание по всем правилам, вдруг его озаряет: а как же блин я эту фичу переложу на ассемблер? Это ж получится жутко сложно и неэффективно, да? А такое ж немыслимо. Нунах, лучше возьму молоточек и щас у меня замыкание станет другим. и тогда в ассемблер влезет. А пользователю что? Он даже не заметит. Сожрет и похвалит, и добавки попросит.

[identity profile] lispnik.livejournal.com 2015-08-14 06:00 am (UTC)(link)
В лиспе точно такие же замыкания.

[identity profile] thesz.livejournal.com 2015-08-14 06:52 am (UTC)(link)
Я срочнейшим образом поменял своё мнение о Лиспе на "никогда вообще". Питон со скобками, блин.

[identity profile] lispnik.livejournal.com 2015-08-14 07:00 am (UTC)(link)
Дело твоё, какое мнение о чём иметь, конечно, но это единственная вменяемое поведение для языка с присваиванием.

[identity profile] thesz.livejournal.com 2015-08-14 07:16 am (UTC)(link)
Нет, и Haskell тому пример.

(no subject)

[identity profile] lispnik.livejournal.com - 2015-08-14 07:21 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2015-08-14 07:25 (UTC) - Expand

(no subject)

[identity profile] lispnik.livejournal.com - 2015-08-14 07:31 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2015-08-14 08:58 (UTC) - Expand

(no subject)

[identity profile] lispnik.livejournal.com - 2015-08-14 09:03 (UTC) - Expand

(no subject)

[identity profile] thesz.livejournal.com - 2015-08-14 09:46 (UTC) - Expand

[identity profile] lispnik.livejournal.com 2015-08-14 07:29 am (UTC)(link)
Да, а что случилось в 1983 году? Я просто плохо помню это время :)

[identity profile] thesz.livejournal.com 2015-08-14 08:54 am (UTC)(link)
Приняли стандарт Common Lisp, куда попали замыкания из MacLisp.

[identity profile] lispnik.livejournal.com 2015-08-14 09:00 am (UTC)(link)
А, Common Lisp (http://clhs.lisp.se/Body/03_ad.htm), понятно. Правда, Википедия врёт, что появился он в 1984, а стандарт приняли в 1994, но это мелочи. Я к оговоркам не придираюсь.

(no subject)

[identity profile] thesz.livejournal.com - 2015-08-14 09:44 (UTC) - Expand

(no subject)

[identity profile] lispnik.livejournal.com - 2015-08-14 09:55 (UTC) - Expand

[identity profile] rashid80.livejournal.com 2015-08-20 09:36 am (UTC)(link)
>for (int i=0;i < s.Length; i++) { var p = QQ(c => c == s[i],p); }
простите, что это за х_йня. Для чего тут цикл? что мешало вместо него сделать (for)each с лямбдой?

[identity profile] thesz.livejournal.com 2015-08-20 10:28 am (UTC)(link)
В оригинале проход по строке идёт в обратном порядке.

Поскольку это критическое по времени место (именно так), преобразовывать в IEnumerable и разворачивать для прохода через foreach смысла не имело.

[identity profile] thedeemon.livejournal.com 2015-08-13 07:30 am (UTC)(link)
Зачем ходить на рынок за "программистами на языке"? Берешь уже имеющихся в компании программистов и говоришь, что теперь им разрешено писать на том, о чем они давно мечтали. Тех, кто мечтал о джаве или похапе, гнать ссаными тряпками. :)
Edited 2015-08-13 07:35 (UTC)

[identity profile] worm-ii.livejournal.com 2015-08-13 09:27 am (UTC)(link)
... только от задачи поддержки старого никто вас не освобождал, приятного кодинга!

[identity profile] thedeemon.livejournal.com 2015-08-13 04:16 pm (UTC)(link)
Я потому и говорю про новые проекты. Если не превращать их в легаси с первого дня, то постепенно жить станет проще. А сейчас, в эпоху микросервисов, многие "приложения" можно и вовсе по частям обновлять, на другие языки переводить.

[identity profile] pupsikk.livejournal.com 2015-08-14 06:15 am (UTC)(link)
В таком случае рискуете остаться в гордом одиночестве.
Или в компании яваскриптодрочеров, что ненамного лучше.

[identity profile] northas.livejournal.com 2015-08-15 02:22 am (UTC)(link)
А потом ты закрываешься потому что понанисали говна в котором никто разобраться не может. Оно может на самом деле не говно, но никто в этом всё равно разобраться не может. По сути такой подход есть способ для обеспечения своей job security - если только ты понимаешь как оно работает то фиг тебя уволишь, пусть ты хоть в доту на работе режешься в открытую.

[identity profile] thedeemon.livejournal.com 2015-08-15 05:00 am (UTC)(link)
А почему не может? С проектами на плюсах как-то разбираются, а на более простом языке не могут? Не верю. Не бывает таких программистов, которые могут читать только джаву или там только питон. Ибо это не программисты.

[identity profile] thedeemon.livejournal.com 2015-08-13 07:48 am (UTC)(link)
>Зачем новый язык если многое есть в текущем или скоро будет :)?

Если подумать, очень правильный вопрос!
ML старше чем C++. Хаскель старше Питона. Окамл старше чем C#. Незачем со старой проверенной функциональщины переходить на эту новомодную хрень. :)

[identity profile] etoeos.livejournal.com 2015-08-13 08:43 pm (UTC)(link)
> 1 . В нормальной компании за попытку начать новый проект на новом языке больно бьют.

Ну так и не работайте в нормальных компаниях, если хотите функциональщину продвигать. В чем проблема?