У нас в Тинькофф как-то junior принес похожий код с чанками для обработки выгрузки транзакций. Работало до первого JOIN'а с другой таблицей — тут вся экономия памяти и полетела) В проде для действительно больших объемов всё равно приходишь либо к PostgreSQL с window functions (если агрегация), либо к Apache Spark (если ETL). Pandas хорош для прототипа, но scaling у него грустный. А оптимизация типов данных — да, ОБЯЗАТЕЛЬНО, только лучше через categorical для строк, экономия памяти до 95% на реальных данных.
У нас в Тинькофф на внутренних pentest-воркшопах тоже гоняли подобные сценарии (SQL injection через формы авторизации). Забавно, но в реальном коде чаще всего дыры вылезают НЕ в явных input'ах, а в фильтрах типа ordering/sorting в Django ORM, где разработчики напрямую подставляют параметры из request.GET в .order_by(). За три года code review нашел таких мест штук пять у junior'ов. А с CTF основная проблема — они учат искать дыры, но не учат правильно закрывать их в production-коде (prepared statements и ORM вместо string concatenation).
Хорошая история, но есть ОБРАТНАЯ сторона. В разработке слишком частое применение этого принципа ("а вдруг есть другая реальность?") приводит к analysis paralysis — когда команда бесконечно обсуждает edge cases вмесьо того чтобы просто написать код. У нас в Тинькофф на код-ревью регулярно видю ситуацию: junior начитался про выживших и требует покрыть каждый метод кейсами с вероятностью 0.001%, в итоге простая фича растягивается на спринт. Критическое мышление — да, но без фанатизма и с привязкой к реальным метрикам (логи, мониторинг, данные с прода).
У нас в Тинькофф как-то junior принес похожий код с чанками для обработки выгрузки транзакций. Работало до первого JOIN'а с другой таблицей — тут вся экономия памяти и полетела) В проде для действительно больших объемов всё равно приходишь либо к PostgreSQL с window functions (если агрегация), либо к Apache Spark (если ETL). Pandas хорош для прототипа, но scaling у него грустный. А оптимизация типов данных — да, ОБЯЗАТЕЛЬНО, только лучше через categorical для строк, экономия памяти до 95% на реальных данных.
У нас в Тинькофф на внутренних pentest-воркшопах тоже гоняли подобные сценарии (SQL injection через формы авторизации). Забавно, но в реальном коде чаще всего дыры вылезают НЕ в явных input'ах, а в фильтрах типа ordering/sorting в Django ORM, где разработчики напрямую подставляют параметры из request.GET в .order_by(). За три года code review нашел таких мест штук пять у junior'ов. А с CTF основная проблема — они учат искать дыры, но не учат правильно закрывать их в production-коде (prepared statements и ORM вместо string concatenation).
Хорошая история, но есть ОБРАТНАЯ сторона. В разработке слишком частое применение этого принципа ("а вдруг есть другая реальность?") приводит к analysis paralysis — когда команда бесконечно обсуждает edge cases вмесьо того чтобы просто написать код. У нас в Тинькофф на код-ревью регулярно видю ситуацию: junior начитался про выживших и требует покрыть каждый метод кейсами с вероятностью 0.001%, в итоге простая фича растягивается на спринт. Критическое мышление — да, но без фанатизма и с привязкой к реальным метрикам (логи, мониторинг, данные с прода).