Будни программиста
1.97K subscribers
30 photos
1 video
4 files
37 links
Тут будут описанная жизнь программиста, и будет показано много чего кто не скажет о программистах
(Если не переходит нажмите ••• и открыть в браузере)
Download Telegram
делаю игру день 1
❤1👍1
GitHub: Твой главный инструмент и цифровое резюме

❓ Что такое GitHub?
Это облачная платформа для хостинга IT-проектов и совместной разработки. Она построена на базе системы контроля версий Git, которая позволяет отслеживать каждое изменение в коде.

🛠 Зачем он нужен программисту?
• Контроль версий: Ты всегда можешь «откатиться» к работающей версии кода, если что-то сломалось. Больше никаких папок script_v2_final_v3.py.

• Совместная работа: Тысячи разработчиков могут работать над одним проектом одновременно, не мешая друг другу, благодаря системе веток (branches) и Pull Request'ам.

• Портфолио: Твой профиль на GitHub — это лучшее доказательство твоих навыков. Работодатели смотрят не на слова, а на твой «зеленый календарь» контрибуций и качество кода.

• Open Source: Ты можешь изучать код топовых библиотек, предлагать свои правки и учиться у лучших.
❤3
Привет! Рад что вы здесь. Если вы заглянули в этот канал после видео про ИИ, значит понимаете одну штуку просто класть код в файлы сейчас может любая нейронка👌

Я создал этот канал чтобы показывать изнанку. Тут будут настоящие будни программиста на 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.

🎁 Плюс закинул бонусный прием для параллельных списков.
Сохраняйте себе и забудьте про велосипеды в коде!

Полезно было узнать?🤔
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 ниже, выбирай проект и начни ломать уже СВОЙ код сегодня!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
В чем секрет опытных разрабов?🤔
Они не помнят все библиотеки наизусть. Они знают правила «чистоты», которые делают код читаемым, стабильным и дорогим. Пока Джун пишет 50 строк костылей, Сеньор пишет 5 строк, которые работают вечно.

❗️Чтобы вы не тратили годы на набивание шишек, я собрал «50 правил чистого кода» в один удобный PDF.

Что внутри:
🔸 Правила нейминга (чтобы не было data_v2_final).
🔸 Как писать функции, которые не хочется удалить.
🔸Базовые принципы SOLID и KISS на понятном языке.
🔸Чек-лист перед тем, как отправлять код на ревью.

👇 Забирай файл📁, читай и внедряй в свой проект уже сегодня.

P.S. После прочтения этого списка твой тимлид начнет тебя подозревать в читерстве. Погнали!
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Senior_Clean_Code_Checklist.pdf
20.6 KB
50 правил, которые отличают профи от новичка
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
❌ Ошибка новичка

🔴Часто джуны пытаются вручную управлять индексами через range(len(...) - 1, -1, -1).

🔴Сложность Легко ошибиться на единицу (Off-by-one error).

🔴Читаемость: Мозгу нужно 2-3 секунды, чтобы просто понять направление цикла.

✔️Выбор сеньора (Clean Code)

🟢Использование reversed() делает код декларативным ты говоришь «что» сделать, а не «как».

🟢Эффективность: reversed() создает итератор и не копирует список в памяти.

🟢Безопасность: Никаких манипуляций с индексами вручную.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3❤‍🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Судя по вашим ответам в опросе, я решил залить немного своей ежедневной рутины решения багов 👌

Немного контекста, над чем я вообще сейчас работаю. Пишу бота для органической накрутки. Суть такая: заливаешь в систему свои аккаунты, ставишь задачу ("подпишись на этот канал за такое-то время"). Бот управляет акками и имитирует живых людей плавно подписывается, читает посты, ставит лайки.
И тут вылез критический баг, который убивал весь «человеческий фактор» пока основная задача активна, боты смотрят и лайкают. Но как только задача завершается они тупо забывают про канал. Новые посты выходят, а ботам плевать.Полез чинить. Сделал независимый мониторинг каналов. Запускаю тесты... В консоли всё зелёное, логи пишут: Найдено 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 в импорты и всё завелось.

💡Бонус: Очеловечиваем логику (Анти-фрод) Раз уж полезли в этот модуль, параллельно снес механическую накрутку. Снизили процент лайков до реалистичных 10–15%. Добавил "человечность": теперь 30% аккаунтов вообще не ставят лайки (режим "молчунов"). Это убрало шаблонную активность и сделало поведение ботов максимально естественным для алгоритмов.

Надеюсь, этот мини-разбор замотивировал кого-то сесть за старые, долго не решаемые баги. Иногда всё может быть гораздо легче, чем кажется пара измененных строк и правильная таблица спасают ситуацию

Всём удачного кодинга👍

КАНАЛ 📱 ЧАТИК💬
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🤖Почему твой код от ChatGPT не работает, или Как реально использовать ИИ

В одном из постов я обещал показать, как делать нейронки своими рабами, а не конкурентами. Сейчас из каждого утюга кричат про «вайб-кодинг» типа, написал промпт, и ИИ всё собрал за тебя.
Спойлер на реальных фриланс-заказах это так не всегда может работать. Если ты попросишь нейронку «напиши мне бота для накрутки», она выдаст тебе нерабочий кусок устаревшего кода, который ляжет при первой же нагрузке.


🤔 Как я использую Cursor и LLM-модели, чтобы писать бэкенд в разы быстрее:

🔴Не прошу архитектуру. Большинство ИИ моделей ужасно видит проект целиком. Базы данных, связи таблиц, распределение тасок (как в моем вчерашнем баге) это придумываю и контролирую я

❤️Делегирую рутину. Написать регулярку для парсинга, набросать boilerplate-код для FastAPI, сгенерировать фейковые данные для тестов вот тут нейронка экономит мне часы в этих случаях можно спокойно пользоваться

❗️Не кидаю ошибки вслепую. Вместо «почини мне TypeError», я кидаю конкретную функцию и пишу В этой async функции контекст теряет ID канала, перепиши обращение к ORM»

🚨Главное правило: ИИ это твой очень быстрый, но в моментах туповатый джун-помощник. Тимлидом в вашем тандеме должен оставаться ты. Если ты не понимаешь, как работает код, который сгенерировала нейронка ты не сможешь его дебажить ведь это по факту не твой код тогда

🖥 А как вы юзаете нейронки?
Копипастите целыми файлами или чисто гуглите ошибки? Пишите в комменты интересно почитать 👇
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Будни программиста
Судя по опросу 57% за асинхронность так что выкатываю базу ⚡️

Но для начала давайте разрушим главный миф из-за которого ломается 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

✔️Как сделать нормально: выкидываем requests, берем aiohttp и лупим всё одновременно через asyncio.gather. Мы не блочим поток, скрипт отправляет запросы и идет заниматься своими делами пока ответы не прилетят. Время выполнения равно самому долгому ответу сервера ⏱️
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)

🔥 Но джун на этом радуется а сеньор понимает что если скормить скрипту 10 000 ссылок то gather выплюнет 10к коннектов вместе и мы либо положим чужой сервак либо словим бан или тупо кончится оперативка. Поэтому ставим asyncio.Semaphore чтобы контролировать поток как жесткий фейсконтроль на входе 🛡
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 Скрипт…
В чем суть проблемы джуна в этом посте

Удалять элементы из списка во время итерации по нему это выстрел себе в ногу. Когда 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
⚡️На чем я запускаю код или тяжелые скрипты: Мой актуальный сетап 🖥⚙️

Разбавим немного код железной темой. Часто начинающие программисты или даже уже программисты могут задаться вопросом 🤔«Какой комп нужен бэкендеру в 2026 году? Можно ли кодить на ноуте 10 летней давности?»

Мой ответ: Кодить можно, но эффективно работать вряд ли. Бэкендер на Python это не просто редактор кода. Это одновременно запущенный Docker, локальная база данных, тяжелая IDE, пара десятков вкладок в браузере и в моем случае локальные тесты ИИ моделей или 10 окон Playwright для парсинга. Старое железо от такой нагрузки начинает просто дымиться.
Чтобы всё это летало и Event Loop не фризил систему, я использую вот такую конфигурацию.

Моя рабочая станция:
🟢Проц: Ryzen 5 5600X (3.7 ГГц). Проверенная временем мощная база, которая отлично справляется с мультипоточностью и кучей фоновых процессов, тем более он у меня сейчас в разгоне и стабильно выдает 4.2ГГц

🟢Материнка: Asus TUF GAMING B550-PLUS. Надежный фундамент под это всё.

🟢ОЗУ: 32GB (2x16GB/3600) G.Skill Ripjaws V Black. Это сейчас просто гигиенический минимум. С 16 ГБ вы будете постоянно ловить Out Of Memory при работе с Docker или тяжелыми скриптами обработки данных, и тем более если вы ещё и любитель (как и я) держать по 50 вкладок в браузере то с 16 ГБ будет не очень комфортно

🟢Видюха: RTX 5060 Ti 16GB. Брал версию именно с 16 гигами видеопамяти специально под локальные тесты ИИ агентов и запуск LLM (для нормального фриланса сейчас это мастхэв)

🟢Накопитель: SSD 1TB (быстрое чтение/запись логов и БД).
Короче, этот сетап позволяет мне не думать о ресурсах ещё долгое время и просто делать свою работу быстро и качественно.

А на чем кодите вы? Скидывайте фотки своих рабочих мест и конфиги железа в комменты, интересно посмотреть👀

КАНАЛ 📱 ЧАТИК💬
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Будни программиста
Photo
Смех смехом, а мем-то страшный 😅

Вчера закинул вам картинку про требования к джунам, и на самом деле в ней только доля шутки. Рынок сейчас это мясорубка.
Раньше знал базовый синтаксис, мог написать простейшую функцию тебя отрывали с руками на позицию стажера. Сейчас из-за того, что базовый код за секунду пишет любая нейронка, планка входа улетела в космос. HR-ы требуют от джуна знать Python, Docker, CI/CD, асинхронность и иметь коммерческий опыт еще до окончания универа.

Как пробивать эту стену в 2026 году? Мой путь (и почему я вообще сижу на фрилансе) заказчику в телеграме или на бирже вообще плевать, как ты отцентрируешь div или знаешь ли ты алгоритмы сортировки бинарного дерева. Ему нужен РЕЗУЛЬТАТ, который сэкономит ему время и принесет деньги.

🤖Нужен бот, который парсит конкурентов? Сделал -> получил оплату (я чаще всего беру криптой). ⚙️ Нужна автоворонка с базой данных? Собрал -> получил деньги.
Пока тысячи новичков штурмуют корпорации и проходят по 5 этапов собеседований ради неоплачиваемого тестового задания, на бэкенд-автоматизации для малого бизнеса можно спокойно зарабатывать.

Если тема интересна, дайте огня 🔥 в реакциях, и в следующем посте я разберу, как правильно «причесать» свои пет-проекты (тех же парсеров и ботов), чтобы клиенты на фрилансе хотели отдавать вам заказы

КАНАЛ 📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥2