🤔11👍7😁3
🤓 «Сначала выучу Python идеально, а потом пойду в ML»
Звучит логично, но на практике — ловушка.
Python огромный: фреймворки, библиотеки, нюансы синтаксиса. Учить «всё сразу» можно бесконечно.
В итоге — месяцы зубрёжки, а до ML руки так и не доходят.
На старте достаточно баз: типы данных, циклы, функции, работа с библиотеками. Всё остальное лучше подтягивать в процессе решения ML-задач.
⚠️ До 1 сентября курсы можно забрать по старым ценам. Это последние выходные, когда:
— ML идёт за 34 000 вместо 44 000 ₽ + Python в подарок,
— два в одном: оплатите курс по математике и получите второй доступ в подарок,
— и главное: можно купить все курсы до подорожания.
👉 ML для старта в Data Science
А для будущих Data Scientist’ов у нас ещё:
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (2-й поток скоро)
Звучит логично, но на практике — ловушка.
Python огромный: фреймворки, библиотеки, нюансы синтаксиса. Учить «всё сразу» можно бесконечно.
В итоге — месяцы зубрёжки, а до ML руки так и не доходят.
На старте достаточно баз: типы данных, циклы, функции, работа с библиотеками. Всё остальное лучше подтягивать в процессе решения ML-задач.
⚠️ До 1 сентября курсы можно забрать по старым ценам. Это последние выходные, когда:
— ML идёт за 34 000 вместо 44 000 ₽ + Python в подарок,
— два в одном: оплатите курс по математике и получите второй доступ в подарок,
— и главное: можно купить все курсы до подорожания.
👉 ML для старта в Data Science
А для будущих Data Scientist’ов у нас ещё:
— Базовые модели ML и приложения
— Математика для Data Science
— AI-агенты для DS-специалистов (2-й поток скоро)
🥱10❤2😢1
🌀 Заблуждения программистов: где логика даёт сбой
В разработке есть особый класс ошибок — falsehoods: заблуждения, в которые программисты верят, но которые на практике оказываются ложными.
Обычно это звучит логично. Например:
И многие пишут валидацию именно так. Но на деле email может содержать несколько @. Ваш код внезапно «ломается» в реальных условиях.
Таких примеров десятки. Все эти предположения — falsehoods, которые делают софт хрупким.
📚 Существуют целые подборки таких «ложных убеждений». Они помогают расширить взгляд и писать более надёжный код, учитывающий реальные данные и сценарии.
👉 Если хотите стать сильнее как инженер — изучите список falsehoods и держите их в голове.
🐸 Библиотека питониста
#междусобойчик
В разработке есть особый класс ошибок — falsehoods: заблуждения, в которые программисты верят, но которые на практике оказываются ложными.
Обычно это звучит логично. Например:
Email всегда содержит ровно один символ @.
И многие пишут валидацию именно так. Но на деле email может содержать несколько @. Ваш код внезапно «ломается» в реальных условиях.
Таких примеров десятки. Все эти предположения — falsehoods, которые делают софт хрупким.
📚 Существуют целые подборки таких «ложных убеждений». Они помогают расширить взгляд и писать более надёжный код, учитывающий реальные данные и сценарии.
👉 Если хотите стать сильнее как инженер — изучите список falsehoods и держите их в голове.
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔6❤4👍2🌚1
📢 Новости
— PyPIStats.org теперь под управлением PSF — сервис статистики PyPI официально перешёл под крыло Python Software Foundation.
— «Python: The Documentary» — свежий фильм о том, как создавался и развивался язык.
📦 Свежие релизы пакетов
— protovalidate 0.15.0 — валидация Protocol Buffers для Python.
— onnx 1.19.0 — Open Neural Network Exchange.
— cron-descriptor 2.0.x — перевод cron-выражений в человекочитаемый формат.
— rpaframework 31.0.0 — набор инструментов для RPA.
— litellm 1.76.0 — удобный доступ к API разных LLM-провайдеров.
— onnxscript 0.4.0 — написание функций и моделей ONNX на Python.
📝 Статьи и материалы
— Ожившие фото: стеганографический аудиоплеер на Python + PyQt6.
— Оптимизация Django под высокие нагрузки: кэш, SIMD и настройка GC.
— Полезные конструкции Python для работы с данными.
— Скрытая грамматика Python: почему
len()
— это полисемия.— PEP 723 + uv: однофайловые скрипты с зависимостями.
— Универсальный парсинг сайтов: requests vs headless, токены, куки, прокси и ротация IP.
— Иконки прямо в коде: как мы избавились от assets при портировании приложения.
📚 Книги
— Паттерны разработки на Python: TDD, DDD и событийно-ориентированная архитектура.
— Мощный Python: паттерны и стратегии современного программирования.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤3
ПОСЛЕДНИЙ ДЕНЬ❗
КУРСЫ ПОДОРОЖАЮТ ЗАВТРА‼️
— ML за 34к вместо 44к + Python в подарок
— Математика → второй доступ в подарок
— Ранний доступ к AI-агентам с 15 сентября
— И МОЖНО УСПЕТЬ КУПИТЬ ВСЁ ДО ПОДОРОЖАНИЯ
👉 Proglib Academy
КУРСЫ ПОДОРОЖАЮТ ЗАВТРА‼️
— ML за 34к вместо 44к + Python в подарок
— Математика → второй доступ в подарок
— Ранний доступ к AI-агентам с 15 сентября
— И МОЖНО УСПЕТЬ КУПИТЬ ВСЁ ДО ПОДОРОЖАНИЯ
👉 Proglib Academy
❤3💯1
Forwarded from Библиотека задач по Data Science | тесты, код, задания
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Forwarded from Библиотека задач по Data Science | тесты, код, задания
Что выведет код?
Anonymous Quiz
66%
Yielding 0, Yielding 1, Yielding 2, Done
13%
Done
10%
Error
10%
Empty
❤6👾2👍1
🐍 Рабочий лайфхак: начинаем использовать pytest с parametrize
Тестирование функций может быть утомительным и однообразным. В
Например, есть функция
Вместо того чтобы писать три почти одинаковых теста:
Можно использовать parametrize:
Как это работает:
✅ Декоратор
✅ Каждый набор данных из списка превращается в отдельный тест.
✅ Добавить новый случай — просто добавить ещё одну строку в список.
Результат: меньше дублирования, больше читаемости, легко расширять тесты.
🐸 Библиотека питониста
#буст
Тестирование функций может быть утомительным и однообразным. В
pytest
есть супер-фича parametrize, которая позволяет запускать один тест с множеством входных данных — без дублирования кода.Например, есть функция
add_nums()
:def add_nums(nums):
return sum(nums)
Вместо того чтобы писать три почти одинаковых теста:
def test_123():
assert add_nums([1, 2, 3]) == 6
def test_negatives():
assert add_nums([1, 2, -3]) == 0
def test_empty():
assert add_nums([]) == 0
Можно использовать parametrize:
import pytest
@pytest.mark.parametrize(
"nums, expected_total",
[
([1, 2, 3], 6),
([1, 2, -3], 0),
([], 0),
]
)
def test_add_nums(nums, expected_total):
assert add_nums(nums) == expected_total
Как это работает:
@pytest.mark.parametrize
говорит pytest
, какие аргументы подставлять.Результат: меньше дублирования, больше читаемости, легко расширять тесты.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8❤3👍3🥱1
🐍 Как ускорить Python в больших проектах: lazy imports в действии
Когда весь код живёт в одном монорепозитории и модули доступны отовсюду, количество импортов быстро превращается в тысячи.
Что начинает происходить со временем:
— скрипты стартуют по 30–40 секунд
— Jupyter-ноутбуки грузятся 10–15 минут
— распределённые jobs тратят больше времени на
💡 Решение → Lazy imports
Модуль не загружается при import’е, а подменяется объектом
Настоящий импорт происходит только тогда, когда имя реально используется в коде:
Что это даёт:
👌 мгновенный старт CLI-утилит
👌 быстрый запуск Jupyter даже с «тяжёлыми» внутренними библиотеками
👌 распределённые задачи не тратят время на лишние зависимости
→ Это не библиотека — это патч интерпретатора (форк CPython), но эффект огромный.
🔗 Полная статья (советуем сохранить)
🐸 Библиотека питониста
#буст
Когда весь код живёт в одном монорепозитории и модули доступны отовсюду, количество импортов быстро превращается в тысячи.
Что начинает происходить со временем:
— скрипты стартуют по 30–40 секунд
— Jupyter-ноутбуки грузятся 10–15 минут
— распределённые jobs тратят больше времени на
import
, чем на сами вычисления💡 Решение → Lazy imports
Модуль не загружается при import’е, а подменяется объектом
LazyImport
.Настоящий импорт происходит только тогда, когда имя реально используется в коде:
from foo import bar
# globals() now contains {"bar": LazyImport("foo", "bar")}.
# the foo module has not yet been resolved or evaluated
qux = bar()
# in the evaluation of the above statement, bar is retrieved
# from the globals() dict, causing foo to be imported and bar
# to be reassigned to foo.bar
Что это даёт:
→ Это не библиотека — это патч интерпретатора (форк CPython), но эффект огромный.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👍3
Гайд: где хостить Python-приложение
Вы написали веб-приложение на Django, Flask или FastAPI, но оно так и лежит на GitHub? Без продакшена код — это просто хобби.
Вот где Python-разработчики чаще всего размещают свои проекты:
✅ Heroku — классика, простой деплой, но дорого для серьёзных нагрузок.
✅ Fly.io — современная альтернатива Heroku, хорош для быстрых запусков.
✅ AWS ECS / Fargate — контейнеры, масштабируемость, но сложнее в настройке.
✅ DigitalOcean App Platform — баланс простоты и цены.
✅ Render — минимализм и понятный UX.
✅ Vercel / Netlify — больше про фронтенд, но FastAPI можно прикрутить.
В гайде сравниваются:
— Developer Experience
— Масштабируемость
— Производительность
— Стоимость
👉 Гайд для тех, кто выбирает, где запускать своё Python-приложение в 2025.
🐸 Библиотека питониста
#буст
Вы написали веб-приложение на Django, Flask или FastAPI, но оно так и лежит на GitHub? Без продакшена код — это просто хобби.
Вот где Python-разработчики чаще всего размещают свои проекты:
В гайде сравниваются:
— Developer Experience
— Масштабируемость
— Производительность
— Стоимость
👉 Гайд для тех, кто выбирает, где запускать своё Python-приложение в 2025.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁38🌚17❤5🎉4👾2⚡1
🌀 Что такое прыжок веры и зачем он нужен
Когда мы пишем рекурсивные функции, нас учат делать «прыжок веры» — доверять, что вызов функции с меньшим аргументом сработает правильно.
👉 Вместо того чтобы держать в голове всю цепочку вызовов, мы опираемся на результат подзадачи и сосредотачиваемся только на текущем шаге.
Пример — факториал:
Здесь мы не проверяем вручную все вызовы
Пять правил для «прыжка веры»:
1️⃣ Определите типы параметров и возвращаемого значения.
2️⃣ Сначала реализуйте базовый случай.
3️⃣ Сделайте «прыжок веры» — предположите, что рекурсивный вызов магически возвращает правильный результат, и напишите рекурсивный случай.
4️⃣ Ограничение 1: аргумент рекурсивного вызова не может быть исходным аргументом.
5️⃣ Ограничение 2: аргумент рекурсивного вызова всегда должен приближаться к базовому случаю.
Следуя этим правилам, рекурсия становится инструментом, которому можно доверять, а не головоломкой.
🔗 Полная статья о том, как писать рекурсивные функции эффективно.
🐸 Библиотека питониста
#буст
Когда мы пишем рекурсивные функции, нас учат делать «прыжок веры» — доверять, что вызов функции с меньшим аргументом сработает правильно.
👉 Вместо того чтобы держать в голове всю цепочку вызовов, мы опираемся на результат подзадачи и сосредотачиваемся только на текущем шаге.
Пример — факториал:
def factorial(n):
if n == 0:
return 1
# leap of faith: верим, что factorial(n-1) работает правильно
return n * factorial(n - 1)
print(factorial(5)) # 120
Здесь мы не проверяем вручную все вызовы
factorial(n-1)
. Мы просто верим, что они дадут верный результат, и используем его.Пять правил для «прыжка веры»:
Следуя этим правилам, рекурсия становится инструментом, которому можно доверять, а не головоломкой.
🔗 Полная статья о том, как писать рекурсивные функции эффективно.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤5⚡2👍1
Переворачиваем календарь — а там скидки, которые уже закончились.
Но мы их вернули на последний день 🤔
До 00:00 третьего сентября (цены как до 1 сентября):
▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽
👉 Хватаем скидки из прошлого
P.S. Машину времени одолжили у дяди Миши
Но мы их вернули на последний день 🤔
До 00:00 третьего сентября (цены как до 1 сентября):
▪️ Математика для Data Science — 35.199 ₽ вместо 44.900 ₽
▪️ Алгоритмы и структуры данных — 31.669 ₽ вместо 39.900 ₽
▪️ Основы IT — 14.994 ₽ вместо 19.900 ₽
▪️ Архитектуры и шаблоны — 24.890 ₽ вместо 32.900 ₽
▪️ Python — 24.990 ₽ вместо 32.900 ₽
▪️ ML для Data Science — 34.000 ₽ вместо 44. 000 ₽
▪️ AI-агенты — 49.000 ₽ вместо 59.000 ₽
👉 Хватаем скидки из прошлого
P.S. Машину времени одолжили у дяди Миши
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
⚒️ Cement Framework: мощная основа для Python CLI-приложений
Cement — это фреймворк для создания CLI-приложений на Python:
✅ подходит как для простых скриптов, так и для сложных многоуровневых систем.
✅ можно использовать как микро-фреймворк или как основу для масштабных проектов.
Установка:
Ключевые возможности:
— Система handlers & interfaces для гибкой кастомизации
— Поддержка конфигов из нескольких файлов
— Парсер аргументов + слияние с конфигом
— Поддержка плагинов и расширений
— Логирование (консоль + файлы)
— Кэширование для ускорения
— Zero external deps (кроме опциональных)
⚡️ Cement = быстрый старт + масштабируемость + стабильность.
Подходит и для дата-инженеров, и для Python-разработчиков, которым нужны надёжные CLI-инструменты.
🐸 Библиотека питониста
#буст
Cement — это фреймворк для создания CLI-приложений на Python:
Установка:
pip install cement
# или с CLI-расширениями
pip install cement[cli]
Ключевые возможности:
— Система handlers & interfaces для гибкой кастомизации
— Поддержка конфигов из нескольких файлов
— Парсер аргументов + слияние с конфигом
— Поддержка плагинов и расширений
— Логирование (консоль + файлы)
— Кэширование для ускорения
— Zero external deps (кроме опциональных)
⚡️ Cement = быстрый старт + масштабируемость + стабильность.
Подходит и для дата-инженеров, и для Python-разработчиков, которым нужны надёжные CLI-инструменты.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
🔥 Python Namespace Packages: боль разработчика
В Python есть странный зверь — namespace packages. По идее, они решают проблему разделения одного пакета на несколько директорий. На практике же это сплошная путаница и боль.
Почему так:
🚩 У нас есть два способа делать одно и то же: explicit (через __init__.py + костыли) и implicit (PEP 420, без __init__.py).
🚩 Zen of Python говорит: “There should be one– and preferably only one –obvious way to do it”, но тут явно нарушено.
🚩 Новички легко создают случайные namespace пакеты, просто забыв __init__.py.
🚩 Явные пакеты оказываются несовместимыми между собой, implicit — хрупкие и медленные.
⚡️ Сценарий:
Вывод (и личный совет):
✅ Всегда кладите __init__.py в каждую директорию.
✅ Избегайте осознанных namespace packages — они слишком ненадёжные.
🐸 Библиотека питониста
#буст
В Python есть странный зверь — namespace packages. По идее, они решают проблему разделения одного пакета на несколько директорий. На практике же это сплошная путаница и боль.
Почему так:
⚡️ Сценарий:
Представьте, вы в условном Gooble и хотите, чтобы все пакеты начинались с gooble.*.
Красиво, пока кто-то не решит, что gooble/__init__.py не нужен. Или наоборот, случайно добавит его. И всё — сломалось.
Вывод (и личный совет):
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
😎 Сколько баллов набрали вы?
Голосуйте, какой у вас уровень разработчика:
😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)
Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.
👉 Научим, как быстро прокачаться от стажера до сеньора
Голосуйте, какой у вас уровень разработчика:
😁 — 5-12 баллов (стажер)
👍 — 13-25 баллов (джуниор)
⚡️ — 26-40 баллов (джуниор+)
👏 — 41-60 баллов (миддл)
🔥 — 61-80 баллов (миддл+)
🎉 — 81-100 баллов (сеньор)
🤩 — 100+ баллов (тимлид)
Но вот в чем прикол — опытный разработчик набирает баллы не случайными косяками, а осознанными решениями.
👉 Научим, как быстро прокачаться от стажера до сеньора
🤩9👍2⚡1🌚1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁15💯2
This media is not supported in your browser
VIEW IN TELEGRAM
В 2015 году в Python 3.5 появились ключевые слова async/await. Казалось, что это станет новой эрой для конкурентного кода в Python. Сегодня — почти Python 3.14, десятилетие спустя. Но асинхронность так и не стала «дефолтом». Почему?
Основные наблюдения:
В Python 3.14 нас ждут две революции:
Вопрос: сделают ли они многопоточность и параллелизм по-настоящему популярными в Python — или через 10 лет мы будем обсуждать те же проблемы?
👉 Подробная статья по теме
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3
📊 Matplotlib шпаргалка для начинающих
Если только начинаете работать с визуализациями в Python — этот шпаргалка по Matplotlib станет отличной отправной точкой:
✅ основные функции для построения графиков,
✅ настройка осей, подписей и легенд,
✅ стили и оформление.
🐸 Библиотека питониста
#буст
Если только начинаете работать с визуализациями в Python — этот шпаргалка по Matplotlib станет отличной отправной точкой:
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
🎮 КВЕСТОВАЯ ЛИНИЯ: «Путь Data Scientist'а»
⮕ Твой стартовый набор искателя данных:
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес
⮕ Твой стартовый набор искателя данных:
Python — твое легендарное оружие (урон по багам +∞)
Математика — твой базовый интеллект (влияет на понимание алгоритмов)
Машинное обучение — твое дерево навыков (открывает новые способности)
⚡️ АКТИВЕН ВРЕМЕННЫЙ БАФФ: «Щедрость наставника»
Эффект: –30% к цене полного набора ДСника
Было: 121.800 ₽ → Стало: 84.900 ₽
☞ Что ждет тебя в этом квесте
— Получение артефактов: портфолио проектов и сертификаты— Прокачка от новичка до Senior Data Scientist— Босс-файты с реальными задачами из индустрии— Доступ к гильдии единомышленников
📎 Забрать бафф
Рассрочки: 3 мес | 6 мес | 12 мес