Путь
Хронология поиска работы: от первого отклика до оффера. Сверху — самое начало пути.
Вчера я защитил диплом в Яндекс Практикуме. Сегодня я открыл IDE и понял, что ревьюера рядом нет, автотесты молчат, а я остался один на один с консолью. Как я переживаю первый день "после" и борюсь с синдромом самозванца — в моем новом посте.
Я открыл Zed, создал новый файл и начал пытаться написать лучше старый код.
Сел доработать эндпоинт в одном из своих пайплайнов — список записей об уязвимостях с фильтром по критичности. Задача звучала просто: вывести список, у каждой записи подтянуть связанный CVE и источник.
Первые отклики на вакансии
Берем только с опытом или олимпиадников
Первый живой ответ за неделю, а через час — позорный копипаст в чужую вакансию.
Когда поиск превращается в список, а не в чёрный ящик, становится легче дышать.
Почему я боялся JOIN и как перестал, увидев его за тем, что Django делает сам.
Без стажа я думал, что спросят всё. На деле проверяли, как я объясняю свой код.
Тихие вечера стали легче, когда у проекта появился README, деплой и тест.
Резюме v4: как я переписал «список курсов» в «то, что построил»
Медленный эндпоинт разозлил, а решение оказалось обычным select_related
Тихий вечер воскресенья: синдром самозванца и две таблицы рядом
FastAPI без шаблона: мой первый маршрут с моделью сломался, и это был лучший урок
Docker впервые «заработал» сразу — и почему подождать тоже бывает норм
Первый тест, который поймал настоящий баг: радость + озарение
Я испугался rebase, сломал историю и восстановил — лучше и не выучить
Вторая неделя поиска: тишина становится статистикой, а не приговором
Маленький Django-проект, который поднял настроение за вечер
Итоги первого месяца после курса: заметный сдвиг, если смотреть внимательно
Django ORM «лентивый»: загадка разгадана в момент, когда я меньше всего ждал
Как я понял REST: спроектировал мини-API и перестал бояться «архитектуры»
Окружения в Python: почему я боялся .venv и зря тратил время на «вечный конфликт»
Один тест, затем маленький набор: где на самом деле «хватает»
Миграции: как я накатал строчку не туда и чему научился
Резюме со «живыми» ссылками: один ответ перевернул моё отношение
Django и FastAPI: почему я не выбираю «один навсегда», а учу то, что рядом
Статус-коды перестали быть «цифрами из ошибок»: я научился выбирать их сам
Сессии или JWT: вечерняя битва и честное «моему проекту это не нужно»
Первое собеседование с задачками: как я спотыкался и учился говорить вслух
Само-ревью кода: три слабых места, которые я нашёл в собственных петах
GROUP BY для джуна: как я перестал получать «список» и начал агрегаты
FastAPI, а тут и Litestar: орёл ли я в новом фреймворке?
Деплой на VPS: после двух часов ругани systemd наконец слушает приложение
Reverse-proxy простыми словами: разобрался, зачем он между миром и приложением
Рефакторинг без боли: как я разделил «функцию-монстр» настройки не вслепую
Новая пачка откликов и правда про «требуется опыт 2 года»
Асинхронность в Python: понял async/await, когда увидел, что происходит во время ожидания
Тесты и покрытие: перестал гнаться за процентами и стал тестировать поведение
Формы с валидацией в Django: когда привычка «захардкодил» снова подвела
Я добавил пагинацию и перестал бояться «много данных на странице»
Двусмысленность — зло: научился обрабатывать ошибки, а не прятаться
CI в микропроекте: перестал делать вид, что тесты «для больших»
Асинхронные запросы пошли живее, когда я увидел зависимости между задачами
Личная страница-портфолио: решил собирать, пока «непрофессионально» по-своему
Ещё одна волна откликов и старый вопрос «где опыт» в другой форме
Тихий вечер подготовки: репетирую ответы на вопросы, пока никто не видит
На собеседовании я посыпался на async и потоках: боль, которая пошла на пользу
Спустя день после провала: как я превратил стыдные ответы в карту пробелов
Итоги июня: цифры, пойманные пробелы и три живых пета
Лето начинаю с глубины: один пет до «продакшена», а не десять новых тем
Структура кода джуна: договорённости внутри репо, а не „как попало“
Первая правка за пределами своего кода: я выучил вклад в open-source без страха
Как задать вопрос в тех-чате, чтобы ответили: сгорел, но выучил
ООП перестало быть страшным: класс как папка с данными и действиями
DRF против лёгкого FastAPI для пет: время показало, что удобнее по задаче
Аннотации типов сделали код честнее: раньше я прятал, что функция возвращает
Парсер, который сэкономил мне час: маленький Python ради рутины
На интервью думают вслух: как перестал «писать код молча»
Медиа в Django: понял, почему картинки «пропадали» при деплое
Мини-фриланс ради опыта: я взял задачу и понял цену «реальной» работы
Сверка середины лета: курс → инструмент, а не только «пройдено»
Тестовое задание на Python: я перестал писать код сразу и стал читать задачу
После тестового: куда записать обратную связь, чтобы она не потерялась
HTTP и метод-центричный код: как я сделал один view послушным четырём действиям
Live-кодинг без паники: где я терял время и как перестал
Мини-напоминатель откликов: как я автоматизировал «не забыть дописать»
Мини-глоссарий джуна: понятия, которые держу в голове, чтобы не спотыкаться
CRUD с админкой сделал пет живым: Django отдаёт готовый «пульт», и это не стыдно
«Вечерний деплой» чуть не сломал прод: как я ввёл правило тихой пятницы
Собеседование без теста стало честным разговором: я перестал играть роль
Интеграционный тест в Django: проверяю не только функцию, но и связку
«Опыт 2 года» против «что умеешь»: перестал застревать в цифре
Контекст-менеджеры: as-что на самом деле делает with, когда я открываю файл
Перерыв без экрана — не лень, а способ решить задачу быстрее
Фикстуры pytest убрали копипаст setup, чем упростили жизнь пета
Q-объекты в Django: сложный поиск из нескольких условий перестал быть «нагромождением»
Чек-лист деплоя перед «покажу людям»: почему list лучше памяти
«Сорри, опыт слабоват»: один отказ стал причиной пересобрать резюме
Июль в цифрах: без оффера, но с «вот этими» достижениями
Цель на август: собрать маленький тренажёр для повторения, чтобы самому учиться
Старт августа: утром план, вечером первые модели тренажёра
День, когда я просто выключил ноутбук и смотрел в потолок
После дня тишины вернулся с силами: дописываю админку тренажёра
Пишу view тренировки и впервые горжусь «это моё приложение»
Эндпоинт на случайный порядок: shuffle в базе или на сервере?
Кнопка «показать ответ» в вебе: верстаю переворот карточки
Двусторонние карты собраны: ставлю первый набор «Python-вопросы на интервью»
Тренажёр собрал первые строки базы: как я пробую себя в роли «автора контента»
Наборы растут: добавляю темы SQL, Docker и async после провалов
Захотел выбрать несколько тем: форма с чекбоксами, а не «кнопка на одну тему»
Тихий день поиска, зато тренажёр нашёл мне новую тему: обратная связь
Прогресс-бар в тренировке: понял, как показывать «ты сделал N из M»
Собрал по флэшкам первую фичу «все темы» и запнулся на дубликатах
Плохой вопрос в карточке смутил даже меня: редакция формулировок
Флэшка-«переворот» деплой: первая самостоятельная фича на моём сайте собирается к показу
Передаю карточки одной выдачей на страницу и экономлю запросы
Пустой выбор тем: обработал, чтобы тренажёр не «упал в пустоту»
Чекбоксы-плитки в выборе: кликабельная область крупнее — юзабельный вечер
Перелистывание карточек перестало перезагружать страницу
Тесты на фичу: небольшая сетка, чтобы смело менять код
День, когда тренажёр поехал на прод: чек-лист выкатки сработал
Смотрю на деплойную фичу глазами новичка и добавляю подсказки
Фича в проде пару дней: собираю живой отклик и не боюсь правок
Немного самопродажи на интервью-репетиции: тренажёр как история роста
Наполняю тренажёр глубже: карточки из «обычных» превращаются в обучающие
Короткая правда: за два месяца — никакого оффера, зато целая рабочая фича
Как отличить «прогресс» от «количества»: считаю по-честному
Знакомый написал: «у тебя рабочая штука». Так я понял цену законченного
Готовлю финальный рывок недели: тренажёр + разбор ответов на «вопрос культуры»
Август в цифрах: фича в проде, сотня карточек и честный «оффера нет»
Год под другим углом: перестал сравнивать себя с «идеальным junior в резюме»
Каким стал за этот путь: от растерянности в JOIN до автономной фичи
Финал серии: системный джун без первого оффера — и что я забрал с собой