Обложка статьи «Что нужно знать начинающему бэкенд-разработчику, кроме языка программирования»

Что нужно знать начинающему бэкенд-разработчику, кроме языка программирования

Лера Солодовникова

Лера Солодовникова, продакт-менеджер программы «Python-разработчик» в Яндекс.Практикуме

Некоторые новички считают, что достаточно выучить нужный язык программирования — и всё, это знание по умолчанию делает из вас отличного бэкендера. Помните подход «купил зеркалку — стал фотографом»? Но это далеко не так.

Меня зовут Лера Солодовникова, я продакт-менеджер на программе «Python-разработчик» в Яндекс.Практикуме, сегодня хочу обсудить необходимые для работы бэкендера смежные знания и умения. По большей части текст ориентирован на Python-разработчиков, но пригодится и тем, кто работает с другими языками, — принципы довольно общие, разница лишь в инструментах.

Ещё в посте — отношение различных компаний к вашим навыкам, их важность для прохождения собеседования, а также подборка полезных книг по теме.

Базис

Начнём с главного — с ОС. Хороший бэкендер должен быть знаком с unix-подобной операционной системой. Это могут быть не только разные Linux-дистрибутивы, но и macOS или FreeBSD, но общепринятым стандартом всё же является Linux. Работать вы можете на ПК или ноутбуке с любой ОС, но Linux нужно знать. Ведь вам придётся довольно активно взаимодействовать с серверами, а большая часть из них работает на Linux.

Из этого пункта плавно вытекает второй — работа с командной строкой. Это нужно для того, чтобы говорить с сервером на его языке. Нужно не просто знать, как нагуглить ту или иную команду и что она делает, а разбираться в командном интерфейсе. Опять же, допустимы варианты в зависимости от личных предпочтений или литературы, по которой вы учились: zsh, bash, fish, но стандарт — bash.

Следующее требование ― знание систем контроля версий. И тут уже без особых альтернатив: нужен именно Git, несмотря на наличие выбора. Изучите сам Git и механику взаимодействия с ветками, если собираетесь работать в команде. Впрочем, если вы интересуетесь бэкенд-разработкой и сейчас читаете этот текст, аккаунт на GitHub у вас уже наверняка есть (а если нет, вы знаете, что делать).

Очень пригодится базовое знание принципа работы Сети в целом. Мы сейчас не говорим о доскональном изучении HTTP и всех тонкостей DNS, но вы должны представлять, что именно происходит при попытке зайти на какой-то сайт. Что к чему подключается, какие работают связки, что грузится в первую очередь и тащит за собой остальное.

Дополнительным преимуществом для начинающего бэкенд-разработчика будет знание хотя бы одного веб-фреймворка — для Python это Django или Flask. Плюс базовые знания SQL. Никто не будет выставлять вас на ежемесячные соревнования SQL-программистов, но важно уметь самому проектировать БД, работать с ними через ORM, если мы говорим про Django, или через SQLAlchemy в случае с Flask.

Ну и, конечно, никуда без основ администрирования сервера, хотя бы на уровне «Я могу сам задеплоить свой проект по SSH, не отвлекая коллег от чтения Хабра».

Алгоритмы и тестирование

В плане базовых требований к кандидату и знания основ профессии компании делятся на два лагеря.

В первом сидят серьёзные практики, которых волнует только то, что вы умеете делать. У вас может быть любое образование, и, если вы докажете им, что на текущем жизненном этапе вы в состоянии выполнять все задачи, которые они взвалят на бэкендера, вы в деле.

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

Если вы хотите в Яндекс, то самое важное, на что будут смотреть HR и на техническом собеседовании — это на результаты прохождений самих секций собеседования и на то, насколько вы знаете алгоритмы. Ваш диплом и название вуза здесь как вишенка на торте. Вишенки может и не быть — без неё торт не перестанет быть тортом.

Примерно такое же отношение у работодателей к тестированию. Кто-то уверен, что джун должен заниматься тестированием, и это будет чуть ли не первым вопросом на собеседовании. Кто-то замечает, что для тестирования есть тестировщики. Кто-то вообще ничего не тестирует.

GitHub и хакатоны

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

Прежде всего на собеседованиях смотрят на практическое решение конкретных задач в рамках прохождения секций. Иногда дополнительно могут посмотреть ваш проект на GitHub, иногда — нет. Если вы идёте на мидла, то хакатонский опыт поможет вам быстрее и легче проходить секции собеседования. Для джуна опыт участия в хакатонах, даже без призовых мест, будет реальным подтверждением того факта, что человеку интересна профессия, он старается быть в курсе новых решений и инструментов, пытается самостоятельно прокачивать навыки. Да, это тоже плюс.

Командная работа

Про soft skills написано множество постов и, скорее всего, несколько книг, поэтому я не будут сильно вдаваться в их важность и необходимость — вы всё это уже читали много раз.

На мой взгляд, главное — уметь работать в команде. Это не значит, что условный интроверт не справится, никто не требует от вас быть душой компании и зажигать на тимбилдингах. В этом пункте речь о способности задавать вопросы. Вы не представляете, сколько проблем в проектах бывает связано с тем, что человек просто вовремя не спросил, не уточнил, не сообщил коллегам, что заметил потенциальный баг.

Разговаривайте, спрашивайте, уточняйте. Это нормально. Так же нормально, как пойти и усердно погуглить что-то, если не получается.

Говоря об отношениях в команде, стоит упомянуть дедлайны. Их важно соблюдать, особенно если они командные. Ситуации, в которых кто-то один просто забыл что-то сделать или не успел (и не сказал об этом), часто заканчиваются тем, что у всей команды съезжает график. Как это отражается на отношении к человеку, регулярно срывающему сроки, вы и без меня знаете.

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

Полезные книги

Марк Лутц, «Изучаем Python». Марк написал эту книгу по мотивам собственных курсов, которые ведёт уже более 10 лет. Здесь всё важное: обзор инструментов, типы объектов, функции плюс описания моделей и инструкции по обработке исключений.

Антонио Меле, «Джанго 2 в примерах». Книга делает упор на практическое создание приложений для реальных задач. Кроме непосредственной работы с компонентами самого фреймворка, рассматриваются также и возможности интеграции сторонних инструментов.

Лекции Тимофея Хирьянова по алгоритмам. Тимофей — один из преподавателей МФТИ. Лекций по алгоритмам множество, но эти наглядные. Особенно полезны для новичков, но и разработчику с опытом тоже пригодятся.

Если вы можете свободно читать профильную литературу на английском, то порекомендуем ещё и пару книг о разработке на основе тестов: Harry Percival, «Test-Driven Development with Python» и Kevin Harvey, «Test-Driven Development with Django».