GitHub: Твой главный инструмент и цифровое резюме
❓ Что такое GitHub?
Это облачная платформа для хостинга IT-проектов и совместной разработки. Она построена на базе системы контроля версий Git, которая позволяет отслеживать каждое изменение в коде.
🛠 Зачем он нужен программисту?
• Контроль версий: Ты всегда можешь «откатиться» к работающей версии кода, если что-то сломалось. Больше никаких папок script_v2_final_v3.py.
• Совместная работа: Тысячи разработчиков могут работать над одним проектом одновременно, не мешая друг другу, благодаря системе веток (branches) и Pull Request'ам.
• Портфолио: Твой профиль на GitHub — это лучшее доказательство твоих навыков. Работодатели смотрят не на слова, а на твой «зеленый календарь» контрибуций и качество кода.
• Open Source: Ты можешь изучать код топовых библиотек, предлагать свои правки и учиться у лучших.
❓ Что такое GitHub?
Это облачная платформа для хостинга IT-проектов и совместной разработки. Она построена на базе системы контроля версий Git, которая позволяет отслеживать каждое изменение в коде.
🛠 Зачем он нужен программисту?
• Контроль версий: Ты всегда можешь «откатиться» к работающей версии кода, если что-то сломалось. Больше никаких папок script_v2_final_v3.py.
• Совместная работа: Тысячи разработчиков могут работать над одним проектом одновременно, не мешая друг другу, благодаря системе веток (branches) и Pull Request'ам.
• Портфолио: Твой профиль на GitHub — это лучшее доказательство твоих навыков. Работодатели смотрят не на слова, а на твой «зеленый календарь» контрибуций и качество кода.
• Open Source: Ты можешь изучать код топовых библиотек, предлагать свои правки и учиться у лучших.
❤3
Привет! Рад что вы здесь. Если вы заглянули в этот канал после видео про ИИ, значит понимаете одну штуку просто класть код в файлы сейчас может любая нейронка👌
Я создал этот канал чтобы показывать изнанку. Тут будут настоящие будни программиста на Python без фильтров и розовых очков💪 . Никакой душной теории из учебников, только живой опыт, странные ошибки и способы их костылять так, чтобы все работало👌 .
Мы будем учиться использовать нейронки🤖 на максимум, чтобы они были вашими личными рабами, а не конкурентами. Короче, собираем здесь банду тех, кто хочет реально шарить в разработке и автоматизации👍
Располагайтесь, дальше будет только интереснее. Погнали❤️
Я создал этот канал чтобы показывать изнанку. Тут будут настоящие будни программиста на Python без фильтров и розовых очков
Мы будем учиться использовать нейронки
Располагайтесь, дальше будет только интереснее. Погнали
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Python_Senior_CheatSheet_code_routine.pdf
48.2 KB
Как и обещал в TikTok 🤝
Ловите шпаргалку с фишками, которые сделают ваш код в Python👩💻 чище, читабельнее и быстрее.
Разбираем:
🟢 Почему range(len()) — это моветон.
🟢 Как f-строки спасают от путаницы.
🟢 Как считать элементы без for и if.
🎁 Плюс закинул бонусный прием для параллельных списков.
Сохраняйте себе и забудьте про велосипеды в коде!
Полезно было узнать?🤔
Ловите шпаргалку с фишками, которые сделают ваш код в Python
Разбираем:
Сохраняйте себе и забудьте про велосипеды в коде!
Полезно было узнать?
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Привет тем, кто пришел из TikTok 🤝
⭐️ По поводу «Ада туториалов». Я сам сидел в этой яме: прошел пару курсов по Python, смотрел индусов на YouTube часами. Думал, что всё понимаю. А потом открыл пустой файл main.py и... завис. Я даже не знал, с чего начать без подсказок.
💎 Мой первый самостоятельный проект был написан так криво, что сейчас мне за него физически больно. Там были глобальные переменные, бесконечные if/else и ни одной функции. Но он РАБОТАЛ. И именно этот костыльный код научил меня большему, чем 100 часов видео.
⚙️ Как и обещал, ловите подробный гайд по 5 пет-проектам, которые вытянут вас на уровень Junior+. Закрывайте YouTube и идите гуглить ошибки самостоятельно!
Внутри гайда🖋
⏹ Парсер цен (Scraper) — учимся работать с данными.
⏹ Личный ТГ-бот для финансов — база данных и Async.
⏹ Сортировщик файлов — автоматизация рутины.
⏹ API для To-Do на FastAPI — поймешь, как работает бэкенд.
⏹ Уведомитель о погоде — работа с внешними API.
👇 Забирай PDF ниже, выбирай проект и начни ломать уже СВОЙ код сегодня!
Внутри гайда
👇 Забирай PDF ниже, выбирай проект и начни ломать уже СВОЙ код сегодня!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
В чем секрет опытных разрабов?🤔
Они не помнят все библиотеки наизусть. Они знают правила «чистоты», которые делают код читаемым, стабильным и дорогим. Пока Джун пишет 50 строк костылей, Сеньор пишет 5 строк, которые работают вечно.
❗️ Чтобы вы не тратили годы на набивание шишек, я собрал «50 правил чистого кода» в один удобный PDF.
Что внутри:
🔸 Правила нейминга (чтобы не было data_v2_final).
🔸 Как писать функции, которые не хочется удалить.
🔸 Базовые принципы SOLID и KISS на понятном языке.
🔸 Чек-лист перед тем, как отправлять код на ревью.
👇 Забирай файл📁 , читай и внедряй в свой проект уже сегодня.
P.S. После прочтения этого списка твой тимлид начнет тебя подозревать в читерстве. Погнали!
Они не помнят все библиотеки наизусть. Они знают правила «чистоты», которые делают код читаемым, стабильным и дорогим. Пока Джун пишет 50 строк костылей, Сеньор пишет 5 строк, которые работают вечно.
Что внутри:
P.S. После прочтения этого списка твой тимлид начнет тебя подозревать в читерстве. Погнали!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
range(len(...) - 1, -1, -1).reversed() делает код декларативным ты говоришь «что» сделать, а не «как».reversed() создает итератор и не копирует список в памяти.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤🔥1
Судя по вашим ответам в опросе, я решил залить немного своей ежедневной рутины решения багов 👌
Немного контекста, над чем я вообще сейчас работаю. Пишу бота для органической накрутки. Суть такая: заливаешь в систему свои аккаунты, ставишь задачу ("подпишись на этот канал за такое-то время"). Бот управляет акками и имитирует живых людей плавно подписывается, читает посты, ставит лайки.
И тут вылез критический баг, который убивал весь «человеческий фактор» пока основная задача активна, боты смотрят и лайкают. Но как только задача завершается они тупо забывают про канал. Новые посты выходят, а ботам плевать.Полез чинить. Сделал независимый мониторинг каналов. Запускаю тесты... В консоли всё зелёное, логи пишут: Найдено X новых постов. Ни одной ошибки. А просмотры по факту стоят на нуле.Залез под капот бота и нашел глупейшую рассинхронизацию компонентов.
В чем была проблема? Парсер (
🛠Как решал проблему?
1. Направили данные по адресу Заменили создание объекта старой модели на новую. Теперь данные попадают куда надо и реально выполняются: Было:
Стало:
2. Исправили TypeError (неверный ключ) Сразу после замены вылезла ошибка: первый фикс по инерции использовал поле
3. Классика: NameError (забытые импорты) В файл забыл импортировать новые модели, которые мы только что добавили в запросы. Докинули
💡 Бонус: Очеловечиваем логику (Анти-фрод) Раз уж полезли в этот модуль, параллельно снес механическую накрутку. Снизили процент лайков до реалистичных 10–15%. Добавил "человечность": теперь 30% аккаунтов вообще не ставят лайки (режим "молчунов"). Это убрало шаблонную активность и сделало поведение ботов максимально естественным для алгоритмов.
Надеюсь, этот мини-разбор замотивировал кого-то сесть за старые, долго не решаемые баги. Иногда всё может быть гораздо легче, чем кажется пара измененных строк и правильная таблица спасают ситуацию
Всём удачного кодинга👍
КАНАЛ📱 ЧАТИК💬
Немного контекста, над чем я вообще сейчас работаю. Пишу бота для органической накрутки. Суть такая: заливаешь в систему свои аккаунты, ставишь задачу ("подпишись на этот канал за такое-то время"). Бот управляет акками и имитирует живых людей плавно подписывается, читает посты, ставит лайки.
И тут вылез критический баг, который убивал весь «человеческий фактор» пока основная задача активна, боты смотрят и лайкают. Но как только задача завершается они тупо забывают про канал. Новые посты выходят, а ботам плевать.Полез чинить. Сделал независимый мониторинг каналов. Запускаю тесты... В консоли всё зелёное, логи пишут: Найдено X новых постов. Ни одной ошибки. А просмотры по факту стоят на нуле.Залез под капот бота и нашел глупейшую рассинхронизацию компонентов.
В чем была проблема? Парсер (
SmartChannelMonitor) отрабатывал четко, но пушал взаимодействия в старую таблицу PostInteraction. А вот воркер (task_distributor), который эти просмотры должен выполнять, уже был переписан под новую таблицу IndependentPostInteraction (специально созданную, чтобы данные не удалялись при завершении задачи). Результат: записи стабильно создаются в БД, но лежат мертвым грузом их никто не обрабатывает.🛠Как решал проблему?
1. Направили данные по адресу Заменили создание объекта старой модели на новую. Теперь данные попадают куда надо и реально выполняются: Было:
db.add(PostInteraction(
interaction_type='view',
is_completed=False...
Стало:
db.add(IndependentPostInteraction(
monitoring_id=monitoring_id,
interaction_type='view',
is_completed=False...
2. Исправили TypeError (неверный ключ) Сразу после замены вылезла ошибка: первый фикс по инерции использовал поле
original_task_id, которого в новой таблице просто не существует. Решение: заменил на monitoring_id, предварительно вытащив его отдельным ORM-запросом:monitoring = db.query(IndependentChannelMonitoring).filter(
IndependentChannelMonitoring.account_id == acc_id,
IndependentChannelMonitoring.channel_url == channel_url
).first()
3. Классика: NameError (забытые импорты) В файл забыл импортировать новые модели, которые мы только что добавили в запросы. Докинули
IndependentChannelMonitoring и Subscription в импорты и всё завелось.Надеюсь, этот мини-разбор замотивировал кого-то сесть за старые, долго не решаемые баги. Иногда всё может быть гораздо легче, чем кажется пара измененных строк и правильная таблица спасают ситуацию
Всём удачного кодинга
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
В одном из постов я обещал показать, как делать нейронки своими рабами, а не конкурентами. Сейчас из каждого утюга кричат про «вайб-кодинг» типа, написал промпт, и ИИ всё собрал за тебя.
Спойлер на реальных фриланс-заказах это так не всегда может работать. Если ты попросишь нейронку «напиши мне бота для накрутки», она выдаст тебе нерабочий кусок устаревшего кода, который ляжет при первой же нагрузке.
Копипастите целыми файлами или чисто гуглите ошибки? Пишите в комменты интересно почитать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Будни программиста
Судя по опросу 57% за асинхронность так что выкатываю базу ⚡️
❌ Как обычно пишут джуны
✔️ Как сделать нормально: выкидываем requests, берем aiohttp и лупим всё одновременно через asyncio.gather. Мы не блочим поток, скрипт отправляет запросы и идет заниматься своими делами пока ответы не прилетят. Время выполнения равно самому долгому ответу сервера ⏱️
🔥 Но джун на этом радуется а сеньор понимает что если скормить скрипту 10 000 ссылок то gather выплюнет 10к коннектов вместе и мы либо положим чужой сервак либо словим бан или тупо кончится оперативка. Поэтому ставим asyncio.Semaphore чтобы контролировать поток как жесткий фейсконтроль на входе 🛡
⚙️ Но и это еще не всё. Сеньор знает, что сеть штука нестабильная. В реальном проде к этому коду нужно обязательно прикрутить
Всем удачного кодинга🧑💻
КАНАЛ📱 ЧАТИК💬
Но для начала давайте разрушим главный миф из-за которого ломается 90% проектов. В Python📱 нет настоящей параллельности. Вообще🤯 . Многие думают что если написать async def то код магическим образом начнет выполняться на разных ядрах процессора одновременно но забудьте про это. Ваш асинхронный код крутится в одном единственном потоке. Вся эта асинхронность это просто очень умная иллюзия где код умеет вовремя сказать что-то похожее на "бро я жду ответа от сервера иди пока делай другие таски я позову когда ответ придет"
Всем этим рулит Event Loop. И вот тут начинается боль потому что недавно ревьюил парсер который собирал данные с большого количества ссылок и бот тупо висел по две минуты не отвечая юзерам. А все потому что если внутрь асинхронной функции засунуть синхронную блокировку типа requests.get() то этот единственный поток тупо замирает и бот мертв
import requests
async def parse_urls(urls):
results = []
for url in urls:
# тут бот тупо стоит и ждет ответа
res = requests.get(url)
results.append(res.status_code)
return results
import asyncio
import aiohttp
async def fetch(session, url):
async with session.get(url) as response:
return response.status
async def parse_async(urls):
async with aiohttp.ClientSession() as session:
tasks = [fetch(session, url) for url in urls]
return await asyncio.gather(*tasks)
async def fetch_safe(semaphore, session, url):
async with semaphore:
async with session.get(url) as response:
return response.status
async def parse_senior(urls, limit=10):
semaphore = asyncio.Semaphore(limit)
async with aiohttp.ClientSession() as session:
tasks = [fetch_safe(semaphore, session, url) for url in urls]
return await asyncio.gather(*tasks)
aiohttp.ClientTimeout (чтобы скрипт не висел вечно если сервак тупит) и обернуть запросы в try/except. Иначе один упавший таск с ошибкой потянет за собой весь gather, и вы потеряете результаты всех остальных успешных запросов.В итоге луп жив код летит и чужие сервера не падают из-за твоих ошибокВсем удачного кодинга
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Найди баг джуна🤔
Вчера скинули на ревью вот такой кусок кода. Задача простейшая отфильтровать список пользователей по возрасту.
Скрипт вроде работает, ошибок не выдает. Но в продакшен я его не пустил.
Кто первым напишет в комменты💬 , почему этот код бомба замедленного действия и как он себя поведет на реальных данных?
Правильный ответ и то, как надо было сделать, закину вечером👌
КАНАЛ📱 ЧАТИК💬
Вчера скинули на ревью вот такой кусок кода. Задача простейшая отфильтровать список пользователей по возрасту.
def filter_adults(users):
for user in users:
if user['age'] < 18:
users.remove(user)
return users
Скрипт вроде работает, ошибок не выдает. Но в продакшен я его не пустил.
Кто первым напишет в комменты
Правильный ответ и то, как надо было сделать, закину вечером
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Будни программиста
Найди баг джуна🤔 Вчера скинули на ревью вот такой кусок кода. Задача простейшая отфильтровать список пользователей по возрасту. def filter_adults(users): for user in users: if user['age'] < 18: users.remove(user) return users Скрипт…
В чем суть проблемы джуна в этом посте
Удалять элементы из списка во время итерации по нему это выстрел себе в ногу. Когда
Итог на реальных данных: Если в списке идут два человека младше 18 лет подряд, цикл удалит первого, сдвинет список и просто "перепрыгнет" второго. В продакшене у вас в базе останется куча несовершеннолетних юзеров, а вы даже не узнаете об этом, потому что скрипт отработает без ошибок (тихий баг самый страшный баг).
✔️ Как надо было сделать (Выбор Сеньора)
Вариант 1 List Comprehension (База) Самый питонячий, читаемый и быстрый способ. Мы просто создаем новый отфильтрованный список, а не мучаем старый.
Вариант 2 Функция filter() Для тех, кто любит функциональный стиль. Работает так же отлично.
Вариант 3 Идем с конца (In-place) Если список весит гигабайт, и нам критически важно менять именно исходник, чтобы не жрать память вспоминаем мой недавний пост! Используем
Мораль никогда не мутируйте объект, по которому итерируетесь. Всем чистого кода 🤝
КАНАЛ📱 ЧАТИК💬
Удалять элементы из списка во время итерации по нему это выстрел себе в ногу. Когда
users.remove(user) удаляет элемент, все оставшиеся элементы списка сдвигаются на один индекс влево. Но внутренний указатель цикла for всё равно делает шаг вперед.Итог на реальных данных: Если в списке идут два человека младше 18 лет подряд, цикл удалит первого, сдвинет список и просто "перепрыгнет" второго. В продакшене у вас в базе останется куча несовершеннолетних юзеров, а вы даже не узнаете об этом, потому что скрипт отработает без ошибок (тихий баг самый страшный баг).
Вариант 1 List Comprehension (База) Самый питонячий, читаемый и быстрый способ. Мы просто создаем новый отфильтрованный список, а не мучаем старый.
def filter_adults(users):
return [u for u in users if u['age'] >= 18]
Вариант 2 Функция filter() Для тех, кто любит функциональный стиль. Работает так же отлично.
def filter_adults(users):
return list(filter(lambda u: u['age'] >= 18, users))
Вариант 3 Идем с конца (In-place) Если список весит гигабайт, и нам критически важно менять именно исходник, чтобы не жрать память вспоминаем мой недавний пост! Используем
reversed(). При удалении с конца сдвиг индексов не ломает оставшуюся итерацию.def filter_adults(users):
for user in reversed(users):
if user['age'] < 18:
users.remove(user)
return users
Мораль никогда не мутируйте объект, по которому итерируетесь. Всем чистого кода 🤝
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤🔥1
Разбавим немного код железной темой. Часто начинающие программисты или даже уже программисты могут задаться вопросом
Мой ответ: Кодить можно, но эффективно работать вряд ли. Бэкендер на Python это не просто редактор кода. Это одновременно запущенный Docker, локальная база данных, тяжелая IDE, пара десятков вкладок в браузере и в моем случае локальные тесты ИИ моделей или 10 окон Playwright для парсинга. Старое железо от такой нагрузки начинает просто дымиться.
Чтобы всё это летало и Event Loop не фризил систему, я использую вот такую конфигурацию.
Моя рабочая станция:
Короче, этот сетап позволяет мне не думать о ресурсах ещё долгое время и просто делать свою работу быстро и качественно.
А на чем кодите вы? Скидывайте фотки своих рабочих мест и конфиги железа в комменты, интересно посмотреть
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Будни программиста
Photo
Смех смехом, а мем-то страшный 😅
Вчера закинул вам картинку про требования к джунам, и на самом деле в ней только доля шутки. Рынок сейчас это мясорубка.
Раньше знал базовый синтаксис, мог написать простейшую функцию тебя отрывали с руками на позицию стажера. Сейчас из-за того, что базовый код за секунду пишет любая нейронка, планка входа улетела в космос. HR-ы требуют от джуна знать Python, Docker, CI/CD, асинхронность и иметь коммерческий опыт еще до окончания универа.
Как пробивать эту стену в 2026 году? Мой путь (и почему я вообще сижу на фрилансе) заказчику в телеграме или на бирже вообще плевать, как ты отцентрируешь div или знаешь ли ты алгоритмы сортировки бинарного дерева. Ему нужен РЕЗУЛЬТАТ, который сэкономит ему время и принесет деньги.
🤖 Нужен бот, который парсит конкурентов? Сделал -> получил оплату (я чаще всего беру криптой). ⚙️ Нужна автоворонка с базой данных? Собрал -> получил деньги.
Пока тысячи новичков штурмуют корпорации и проходят по 5 этапов собеседований ради неоплачиваемого тестового задания, на бэкенд-автоматизации для малого бизнеса можно спокойно зарабатывать.
Если тема интересна, дайте огня 🔥 в реакциях, и в следующем посте я разберу, как правильно «причесать» свои пет-проекты (тех же парсеров и ботов), чтобы клиенты на фрилансе хотели отдавать вам заказы
КАНАЛ📱 ЧАТИК💬 ГИТХАБ👨💻 СВЯЗАТЬСЯ СО МНОЙ❤
Вчера закинул вам картинку про требования к джунам, и на самом деле в ней только доля шутки. Рынок сейчас это мясорубка.
Раньше знал базовый синтаксис, мог написать простейшую функцию тебя отрывали с руками на позицию стажера. Сейчас из-за того, что базовый код за секунду пишет любая нейронка, планка входа улетела в космос. HR-ы требуют от джуна знать Python, Docker, CI/CD, асинхронность и иметь коммерческий опыт еще до окончания универа.
Как пробивать эту стену в 2026 году? Мой путь (и почему я вообще сижу на фрилансе) заказчику в телеграме или на бирже вообще плевать, как ты отцентрируешь div или знаешь ли ты алгоритмы сортировки бинарного дерева. Ему нужен РЕЗУЛЬТАТ, который сэкономит ему время и принесет деньги.
Пока тысячи новичков штурмуют корпорации и проходят по 5 этапов собеседований ради неоплачиваемого тестового задания, на бэкенд-автоматизации для малого бизнеса можно спокойно зарабатывать.
Если тема интересна, дайте огня 🔥 в реакциях, и в следующем посте я разберу, как правильно «причесать» свои пет-проекты (тех же парсеров и ботов), чтобы клиенты на фрилансе хотели отдавать вам заказы
КАНАЛ
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2