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

🔴Часто джуны пытаются вручную управлять индексами через 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
Будни программиста
Смех смехом, а мем-то страшный 😅 Вчера закинул вам картинку про требования к джунам, и на самом деле в ней только доля шутки. Рынок сейчас это мясорубка. Раньше знал базовый синтаксис, мог написать простейшую функцию тебя отрывали с руками на позицию стажера.…
Как упаковать пет-проект, чтобы вам доверяли реальные заказы🤔

Вчера пообещал выложить, так что выкатываю базу.

🤔 Многие из вас, возможно, сидят и думают: «Я же хороший специалист, постоянно развиваюсь, да вроде и делаю нормально. Почему тогда мои отклики игнорят, а заказы не берут?» Раскрою секрет: бизнесу вообще плевать, как красиво вы написали парсер или отцентрировали кнопку. Бизнесу важны готовый результат и ваша ответственность

💡 И еще один важнейший момент, прежде чем мы перейдем к правилам. Иногда нужно отвечать и помогать клиентам абсолютно бесплатно: подсказать по серверу, быстро поправить мелкий баг или проконсультировать. Именно это делает из вас крутого специалиста, который реально любит свое дело, а не кодера, который делает всё исключительно ради денег.
Чтобы ваш кейс на GitHub или отклик на заказ продавал вас как профи, транслируйте эти три принципа:

⚡️ 1. Вы продаете спокойствие, а не скрипты Джун сдает проект и пропадает это клиентов пугает. Опытный разраб сдает систему и показывает, что он отвечает за свои решения. В описании кейсов делайте акцент на стабильность. Клиент должен видеть: если завтра целевой сайт поменяет верстку или база ляжет от нагрузки вы не сольетесь, вы заложили это в архитектуру и знаете, как починить и всегда готовы помочь и подсказать даже если клиент не заплатит

⚙️ 2. Тотальная самостоятельность (Работа под ключ) Никто не хочет нянчиться с программистом и сутками висеть с ним на созвонах. Настоящая ценность это когда вы берете проблему и приносите готовое решение. Я выстраиваю процессы так, чтобы клиенту было максимально комфортно: мы четко утверждаем всё в текстовом формате, я ухожу работать и возвращаюсь с готовым продуктом. Экономия времени заказчика ваш главный козырь.

📈 3. Ответственность важнее денег Если вы берете заказ, вы берете ответственность за кусок чужого бизнеса. Умение сказать «я не успею в эти сроки» или «эта архитектура тут не сработает» еще до старта работы это признак профессионала. На фрилансе репутация строится на том, как вы ведете себя, когда что-то идет не по плану.

Настоящий Senior начинается не там, где он выучил все библиотеки, а там, где он готов нести полную ответственность за написанный им код

Всем удачного кодинга😓

КАНАЛ
📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Как я написал свой антидетект на Playwright⚡️

🤔Недавно на фрилансе прилетел заказ: нужно было настроить автоматическое скачивание медиа с сайта. Загвоздка в том, что ресурс был намертво закрыт Cloudflare Turnstile. Защита стояла такая, что даже я руками через обычный браузер не всегда мог пробиться с первого раза.
Обычный requests тут летит в мусорку сразу. Голый Selenium или Playwright отлетают на первой же проверке navigator.webdriver. Сайт анализирует всё: твою видеокарту, движения мыши, отпечатки канваса и ИНОГДА даже аудио-контекст.

✔️Решение: Пишем свой класс-Bypasser Я собрал кастомную антидетект-систему поверх Playwright. Бот, которого я написал, начал пробивать Cloudflare с первого раза там, где я руками ловил бесконечные капчи.
За счет чего работает обход:

🟢Тотальная подмена железа (Stealth-инъекция) Скрипт внедряет JS-код до загрузки страницы. Мы скрываем маркеры автоматизации и подменяем характеристики. Сайт думает, что к нему зашел юзер с NVIDIA RTX 3060, 16 ГБ оперативки и стандартными плагинами вроде PDF Viewer. Добавляем уникальный шум в Canvas и WebGL, чтобы отпечаток выглядел естественно.

🟢 Поведенческая эмуляция Боты кликают мгновенно и в центр кнопки. Мой Bypasser генерирует случайные кривые движения мыши с человеческими таймингами и кликает по чекбоксу Cloudflare со смещением (offset).

🟢Умная навигация и траст Использую подмену Referer на google.com (Cloudflare гораздо лояльнее к трафику с поисковиков) и подключаюсь к живому профилю Chrome через CDP (Chrome DevTools Protocol). Это дает нам реальные куки и историю, что повышает траст до небес.

📷Что на скриншоте? Это кусок моего класса, отвечающий за систему отладки (_dump_watch_artifacts). Когда ты воюешь с защитой, важно понимать, на каком этапе бот спалился. Если обход не прошел, скрипт автоматически дампит скриншот и HTML страницы. Без таких логов дебажить антибот-системы просто невозможно.

🤝Мораль такая на фрилансе бизнесу нужен результат. Заказчику плевать сколько тебе лет,или насколько сложная там капча, ему нужны данные. И если вы умеете писать такие байпассеры, у вас всегда будут жирные заказы.

КАНАЛ 📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Почему я перестал стремиться к «идеальному» коду 🤯

📈На старте карьеры я был фанатом чистоты. Вылизывал каждый класс, тратил часы на паттерны проектирования, чтобы всё было по SOLID, DRY и прочим святым книгам. Казалось, что если код выглядит как произведение искусства, я бог программирования.

🤩А потом пришел фриланс. И рынок показал мне настоящую жизнь. Заказчику плевать на красоту твоего async def. Ему плевать, используешь ты Dependency Injection или нет. Ему нужно, чтобы бот работал сейчас, приносил лиды сегодня, а скрипт не падал, когда на сайт налетает поток парсинга.Я видел сеньоров с 10-летним стажем, которые тонули в «идеальных» архитектурах, переписывая проекты месяцами, пока их конкуренты на «грязном», но работающем коде забирали все деньги с бирж.

👌Моя позиция сейчас: Код это просто инструмент. Если ты написал систему за 3 дня, она стабильна, легко масштабируется и приносит прибыль это идеальный код. Даже если внутри там «костыль», который ты покрасил в белый цвет.

Профессионализм это не умение красиво расставить отступы. Это умение понимать, где можно срезать углы, а где это убьет проект.
Когда ты понимаешь бизнес-логику, ты перестаешь быть просто "кодером". Ты становишься тем, кто решает проблемы. И вот за это платят в разы больше, чем за знание всех библиотек Python наизусть


КАНАЛ 📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Будни программиста
Разбор реального заказа от отвалившихся прокси до Windows Server Core за 24 часа

Вы проголосовали за этот формат, так что выворачиваю карманы и показываю изнутри, как проходит рабочий день Python-разработчика📱. Никакой успешной успешности только чистый опыт, кодинг и скорость

1️⃣Этап 1. ТЗ и моментальный апселл
Клиент пришел с задачей: нужно было доработать логику уже существующего софта по автоматизации (скрипт для Дайвинчика) и добавить жесткий лимит на итерации (лайки), чтобы аккаунты не улетали в бан.
Любое расширение ТЗ = расширение бюджета. Мы быстро согласовали доплату за внедрение счетчика и лимитов. Это классический пример правильного апселла: цените свое время и не делайте правки за спасибо.

2️⃣ Этап 2. Проблема с прокси и мое решение
Софт у клиента крутился на старой Windows 8.1, и в какой-то момент сеть просто легла прокси наглухо отвалились. Бот начал зависать на состояниях.
Чтобы реанимировать поток, я сам предложил и настроил связку через v2rayN. Это помогло временно прилепить прокси обратно, но стало очевидно: старая ОС это мина замедленного действия. Я выступил инициатором переезда на нормальный VPS.
Вывод для разработчика Не бойтесь вести клиента за собой. Если видите, что инфраструктура ложится предлагайте решение первыми. Клиенты ценят проактивность

3️⃣Этап 3. Главный факап (Классика хостингов)
Мы приняли решение переезжать. Клиент идет покупать Windows Server, но случайно берет версию Core (это которая управляется чисто через консоль, вообще без графического интерфейса). Для десктопного софта и быстрой настройки абсолютно мимо.
Время шло, но паники не было. Оперативно поменяли тариф, накатили нормальный Windows Server в Лондоне, и я зашел на чистый сервер.

4️⃣Этап 4. Финал: 3 софта за 1 день
В итоге вся задача от разбора старого кода до полной сдачи заняла ровно 1 день. За это время я:
Перенес и настроил 3 разных софта/скрипта на новый сервер.
Привязывать прокси не пришлось ведь сервер теперь в лондоне, просто проверил лимиты чтобы убедиться что всё работает штатно.Ну и передал клиенту готовую работу.
Успешно закрыл сделку и получил оплату в USDT🪙 чеком в CryptoBot 💸

😎Главный инсайт: Почему программирование это НЕ про код?
Этот кейс идеальный маркер того, чем Junior-разработчик отличается от Middle/Senior специалиста.
Новички часто думают: «Я научусь писать синтаксис Python, циклы, функции и мне начнут платить тысячи долларов». Нет, не начнут. За код как таковой платят копейки. Платят за решение бизнес-проблем.
В этом заказе написание самого кода (счетчика лимитов) заняло от силы 10–15% времени. Всё остальное это сопутствующий стек и soft-skills, без которых проект бы умер

⏺Понимание сетей и Linux/Windows администрирования. Мало написать бота. Нужно уметь развернуть его на удаленном сервере, настроить сетевые интерфейсы, разобраться с v2rayN, прокси, протоколами шифрования и маршрутизацией. Если ваш софт работает только на вашем локальном ПК вы еще не разработчик.

⏺Стрессоустойчивость и менеджмент. Когда клиент покупает Windows Server Core вместо GUI, джун падает в обморок или начинает винить клиента. Профи спокойно берет контроль в свои руки, координирует действия, меняет тариф и решает проблему за полчаса.

⏺Продуктовое мышление. Вы должны смотреть на код глазами конечного пользователя. Я мог бы просто впилить лимит, забрать деньги уйти и сказать "Сервер твой решай сам". Но я понимал, что на старой ОС софт продолжит падать, а клиент продолжит терять деньги. Инициатива переезда это забота о бизнесе клиента, которая окупается долгосрочным доверием.
Запомните: Умение гуглить синтаксис библиотек это база. Но реальная ценность инженера складывается из его автономности. Когда вы можете взять «голую» идею заказчика, протащить её через адские настройки серверов, кривые прокси, технические факапы хостингов и выдать под ключ работающую экосистему вот тогда вы становитесь незаменимым специалистом.


Развивайте инфраструктурное мышление, учитесь администрировать то, что пишете, и никогда не бойтесь брать на себя ответственность за конечный результат

КАНАЛ 📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Будни программиста
Когда я делал этот опрос я думал "Да кто этого не знает"

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

🔍Где тут ловушка, которая обманывает глаза?
Посмотрим на этот код еще раз:
a = (1)
b = (1,)

print(type(a) == type(b))


👀Джун смотрит на первую строчку и думает: «Ну тут же круглые скобки, значит это точно кортеж (tuple)». А вот и нет.
Для интерпретатора круглые скобки здесь это просто приоритет операции, как в обычной школьной математике (например, (2 + 2) * 2). Они не создают структуру данных. В итоге переменная a становится обычным числом (int).

👌А теперь факт, который реально переворачивает мышление: в Python кортежи создают ЗАПЯТЫЕ, а не круглые скобки!

Строка b = (1,) благодаря одной лишь висячей запятой превращается в полноценный tuple. Более того, если ты напишешь c = 1, вообще без скобок Python всё равно послушно создаст кортеж. Скобки вокруг него нужны исключительно нам разработчикам просто для читаемости.

🚨Как этот баг стреляет в реальном продакшене?

Пока ты пишешь простые скрипты для себя, это кажется пустяком. Но давай перенесемся в реальный заказ. Представь, что тебе нужно сделать запрос к базе данных (через sqlite3, psycopg2 или asyncpg) и вытащить инфу по одному конкретному ID пользователя:
Пример:
# Момент, когда софт ложится колом
user_id = 777
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id))```

Ты запускаешь готового асинхронного бота, клиент заливает трафик, и сервер намертво падает со знакомым матом в логах: TypeError: 'int' object is not iterable. База данных ждала кортеж или список параметров для подстановки, а ты подсунул ей чистый инт.
И ты сидишь, часами смотришь на этот кусок, видишь круглые скобки вокруг user_id и искренне не понимаешь, почему Python считает это числом. А цена простоя бизнеса один пропущенный символ. Стоит дописать висячую запятую (user_id,) и всё начинает лететь.
Вывод для прокачки: Всегда контролируйте запятые, когда передаете один-единственный элемент туда, где архитектура проекта ждет итерируемый объект будь то SQL-запросы, отправка JSON-payload в сторонние API или параметры для фоновых воркеров.


КАНАЛ 📱 ЧАТИК💬ГИТХАБ👨‍💻СВЯЗАТЬСЯ СО МНОЙ❤
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Великий плач по «настоящему коду», или почему в 2026 году глупо писать руками

В последнее время в комментах и чатах регулярно всплывает одна и та же предъява: «Ой, да у него код из Курсора/Клода», «Да ты всё через ChatGPT делаешь», «Настоящий инженер пишет сам».
Слушайте, этот бесконечный плач «олдов» и душных теоретиков уже даже не смешит. Давайте один раз детально разберем тему ИИ в разработке

1️⃣МИФ . «Писать всё руками это признак профессионализма»

Мы в 2026 году ии сейчас буквально в каждой микроволновке. Писать сейчас каждую строчку кода, каждый импорт, базовый роутинг или бойлерплейт вручную в голом блокноте это как пахать поле лошадью, когда рядом стоит трактор. Да, ты задолбаешься сильнее. Да, ты сможешь гордо сказать: «Я сделал это сам!». Но зачем, если трактор сделает это за 5 минут, а ты в это время займешься реальной архитектурой?

👤Илон Маск говорил что программирование пропадет, но пропадет в таком виде в котором оно было. Программирование перестало быть про «заучивание синтаксиса». Синтаксис это копеечная рутина. Ценность разработчика сегодня это:
Понимание, как связать три разных софта между собой.
Умение выстроить логику базы данных так, чтобы она не легла при первой тысяче юзеров.
Знание инфраструктуры: как поднять сервак, настроить сеть, если всё падает.
ИИ забирает на себя механическую работу. Я отдаю нейронке скучную рутину, а сам думаю головой над логикой проекта. Это не «лень», это оптимизация процессов.

2️⃣МИФ 2. «ИИ пишет всё за тебя, ты просто жмешь кнопку»

Так думают только те, кто дальше запроса «напиши калькулятор на пайтоне» в ChatGPT ни разу не заходил. ведь такие простые скрипты коды он давно заучил и выдает их не думая.
Любой, кто пробовал собирать на нейронках сложные асинхронные системы или кастомные парсеры, обходящие защиту, знает: что ИИ тупит. Постоянно. Он путает контекст, забывает про лимиты, выдает устаревшие библиотеки и генерирует баги.
И вот тут как раз и включается твое «инженерное мышление»:
Тебе нужно понимать, что именно пошло не так.
Тебе нужно уметь прочитать сгенерированный код, найти там косяк (например, кривой кортеж или не ту обработку ошибок) и исправить её руками.
Тебе нужно составить такой промпт чтобы твоя ии-шка поняла контекст проблемы и так декомпозировать задачу на мелкие куски, чтобы модель вообще выдала что-то вменяемое.

❗️ИИ это не замена программиста. Это безумно мощный, но слепой инструмент. Если у тебя в голове пусто, никакой Cursor не соберет тебе рабочий коммерческий продукт, который купят. Он просто выдаст тебе красивую кашу из букв, которая упадет при первом запуске.

3️⃣МИФ. Бизнес-реальность: Время = Деньги (владельцу бизнеса) абсолютно плевать, сколько часов вы страдали над циклом for и использовали ли вы Claude.
Клиенту нужно:
Чтобы софт работал стабильно.
Чтобы задача была сделана быстро.
Чтобы продукт решал его бизнес-проблему (приносил деньги / экономил время).
И самое главное я всегда это говорю, ВЫ ОТВЕСТВЕННЫ ЗА КОД А НЕ ИИ и если код упадет то только тебе за это отвечать, клиент если бы доверял нейронке сам бы загрузил пару промтов

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

☝Ну и про «тексты от ИИ»

На днях в коментах написали "ТЫ ПИШЕШЬ ТЕКСТ С ПОМОЩЬЮ ИИ🥴" . Это совсем отдельный рофл когда грамотный, структурированный текст в постах называют «генерацией ChatGPT». Я иногда на посты для вас трачу по 2-3 дня, ну и я за это время не могу его оформить? Ребят, если текст разбит по пунктам, в нем нет кучи орфографических ошибок и его банально удобно читать это называется «базовая редактура» и уважение к своей аудитории. Извините, конечно, что не пишу посты сплошной стеной текста с кучей матов через слово. Если для кого-то нормальный стиль это маркер нейронки, то у меня для вас плохие новости, это совсем не так

Всем хорошого вечера, и удачного кодинга без багов👍

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