как создать сложность
Вот я только что придумал.
Предположим, у нас есть код, который по каким-то описаниям пользователя говорит "да" или "нет" (можно ему или нет).
MVP: fn allow_user(...) -> bool
Теперь мы начинаем его выносить в отдельный сервис. Но, вместо того, чтобы завернуть bool в HTTP, мы ... чуть-чуть увеличиваем вычурность.
Пусть у нас будет не bool а лямбда, причём с частичным замыканием. Лямбда может захватывать параметры, в том числе, переданные в описании пользователя, откладывая момент принятия решения. Часть параметров захватывается в момент формирования лямбды, но часть параметров остаётся свободной и должна быть передана в момент evaluate. Поскольку evaluate не хочет знать про сигнатуру лямбды, мы делаем отдельную систему глобальных переменных, которые захватываются по ссылке, и которые могут меняться (т.е. захват неполный).
Поскольку это всё происходит через сеть, наша лямбда - это RPC, причём RPC вызов allow_user возвращает объект, являющийся RPC (от сервера, исполняющего allow_user в сторону сервера, отправившего запрос за allow_user). Разумеется, нам нужен портабельный механизм описания сериализации RPC-запросов.
И может быть, даже, через XML, с глобальным реестром определений для сущностей в запросах.
(И назад этот фарш не провернуть)
Предположим, у нас есть код, который по каким-то описаниям пользователя говорит "да" или "нет" (можно ему или нет).
MVP: fn allow_user(...) -> bool
Теперь мы начинаем его выносить в отдельный сервис. Но, вместо того, чтобы завернуть bool в HTTP, мы ... чуть-чуть увеличиваем вычурность.
Пусть у нас будет не bool а лямбда, причём с частичным замыканием. Лямбда может захватывать параметры, в том числе, переданные в описании пользователя, откладывая момент принятия решения. Часть параметров захватывается в момент формирования лямбды, но часть параметров остаётся свободной и должна быть передана в момент evaluate. Поскольку evaluate не хочет знать про сигнатуру лямбды, мы делаем отдельную систему глобальных переменных, которые захватываются по ссылке, и которые могут меняться (т.е. захват неполный).
Поскольку это всё происходит через сеть, наша лямбда - это RPC, причём RPC вызов allow_user возвращает объект, являющийся RPC (от сервера, исполняющего allow_user в сторону сервера, отправившего запрос за allow_user). Разумеется, нам нужен портабельный механизм описания сериализации RPC-запросов.
И может быть, даже, через XML, с глобальным реестром определений для сущностей в запросах.
(И назад этот фарш не провернуть)
no subject
Ты, в сияющих доспехах, имея намерение переписать, даже списка проблем не имеешь, чтобы решать. Это одна из причин, почему кажется, что переписать просто.
Более того, у переписывания есть фатальная проблема: написанный "переписанный" код не работает, потому что он не выполняет все требования, то есть вне зависимости от своего изящества, он хуже старого.
Чтобы сделать лучше старого, нужно для начала проникнуться уважением к старому коду и понять почему он делает что-то странное. Потому что писала криворукая обезьяна или потому что в тот момент терминология была другая, и ты смотришь на старый код, работающий в предыдущей модели, который забыли отрефакторить? А если не забыли, а это закодированное двоемыслие, которое нарушает модель, но обеспечивает жизненно важный процесс?
Без уважения к труду предыдущего поколения ты не сможешь получить уважение к своему коду. Недавний студент может наивно думать, что он в одно горло может воспроизвести работу трёх человеколет за две недели (потому что что тут делать я же знаю как оно должно быть). На то он и джун.
Сеньёр же должен понимать, что даже если из этих трёх человеколет реального кода осталась 1/3, это не означает, что его можно написать заново за человеко-год. Вполне может быть, что переписать этот код займёт 10 человеколет, просто потому, что с тех пор требования стали сложнее, и старые компромиссы, живущие на правах дедушкиных оговорок, больше не приемлимы для нового кода.
Повторю: уважай чужой продакшен, и будут уважать тебя.
no subject
Нет.
Он решил не ВСЕ проблемы. Он решил достаточно проблем достаточно хорошим образом, чтобы его можно было задеплоить и продать развертывание проджект-менджеру. Это совершенно не значит, что он решил все проблемы и даже не значит, что он решил их хорошо.
Я хорошо понимаю, что лучшее - враг хорошего, но здоровые амбиции - вещь достаточно полезная.
>Повторю: уважай чужой продакшен, и будут уважать тебя.
Продакшн - не человек, а вещь. Нечего там уважать.
no subject
Уважать результаты чужого труда - часть уважения к людям.
Моё наблюдение в индустрии, что люди, которые с уважением относятся к чужому продакшену, обычно делают больше хорошего, чем плохого. Люди, которые с неуважением относятся к чужому продакшену, обычно делают больше разрушительного и плохого, чем хорошего.
Это моё личное наблюдение. Возможно, у тебя есть другие наблюдения (например, пришёл в существующую команду рыцарь на белом коне и в одно горло переписал 3 человекогода так, что все окружающие это признали). Мне мой опыт говорит, что в такой ситуации "переписавший" будет горд собой, а вот окружающие довольны не будут и будут постоянно всякую ерунду подкладывать. С точки зрения рыцаря на белом коне это будет признак идиотизма окружающих.
Проекты переписывают, иногда успешно, иногда даже более успешно, чем ожидали, но я ни разу не видел успешно переписанного проекта, в отношении которого не было бы уважения.
no subject
А два - по ссылке не было критики продакшна, если что. Там была критика некоторых подходов и одного случая, который до продакшна не дошел из-за врожденных косяков.
no subject
Тут есть нюансы. Есть Чужой Наш продакшн, его — уважай и уважаем будешь. И есть Чужой Чужой продакшн. Это вот тот, который успел первым и занимает (наше) место в мире, и его не грех и попробовать подвинуть.
no subject
no subject
Начну с бездоказательных утверждений.
Айти последних 20-30 лет является дрянью, которая должна быть уничтожена. Особенно это касается последних 15 лет. Эта отрасль возродила уникальное явление прошлого: дописьменную культуру, где знания передавались песнями, сказаниями и танцами. Эпос племени Ыга-ыга-ыга-ыц. Отсутствие документации принимается как должное, а надзорных органов, органичивающих любителей понаписать дряни, попросту не существует.
Обычно области человеческой деятельности порождают некую культуру, фольклор. Айти последних десятилетий не породило ничего вообще, а энтокультурные особенности народов, широкими копчёными потоками хлынувшие в айти в последние годы, не позволяют им создавать культуру. Была вот Махабхарата, да и ту непонятно кто написал, может не они.
У врачей есть своё сообщество. У юристов есть. Что есть у программистов? Нечто было - в годы Дейкстры с Кнутом. Сейчас люди той культуры полностью задавлены новоприбывшими, из тех регионов, где по земляному полу в тапочках бегают и алюминий из ведра разливают. В айти у них тоже получается земляной пол и тапочки.
Что создал ты, помимо работы на работе? Как минимум один бывший известный сайт по аниме и не только, блоги, записи на Хабре и Лоре. Это соответствует образу жизни просвящённого европейца, человека науки, или хотя бы стоящего рядом. Что сделали эти?
Теперь, отвечу именно на сообщение.
Зачастую уже существующий проект решил предыдущие проблемы не полностью, зато окончательно отсёк даже мысли о решении оставшихся проблем, лишил людей рабочих мест, переусложнил решение простых вопросов, обеспечил закостенение старых бизнес-практик, потому что они прописаны в коде, который написал неким образом хрен знает почему, нигде не написано. Люди дописьменной культуры слишком заняты работой, чтобы объяснять себя и свою работу. А особенно это касается трудолбивых народностей.
Жизненно важный процесс не должен был быть реализован на говне и палках. А простые вещи не должны быть переусложнены до такой степени, что требуются какие-то особенные гении для обычной поддержки.
От того, что за проект заплатили деньги, он не становится полезным. Химпром с Буркиным (гуглится) вот тоже сложный и прибыльный. Проект дал власть над людьми другим людям, без образования и отбора, находящихся в другой юрисдикции. Проект создал кормушку для неких людей, которые могли бы жить на свои. Большую часть проектов уважать не за что.
Оставлю здесь набор ссылок по теме беседы. Из французского финтеха пишут:
https://t.me/mixail_kain/1832
https://t.me/mixail_kain/1930
https://t.me/mixail_kain/1931
https://t.me/mixail_kain/1932
https://t.me/mixail_kain/1936
no subject
Моё наблюдение: это не ведёт к успеху ни в каком смысле слова успех (если не считать секундного чванства).