Как стать Junior Backend - разработчиком
بسم الله الرحمن الرحيم
В этой статье я поделюсь своим опытом становления бэкенд-разработчиком. В качестве основного языка программирования для примера приведен JavaScript, работающий на сервере с помощью Node.js, но его можно заменить на любой другой язык, пригодный для написания веб-сервера. Остальная часть статьи с языком не связана. И еще, если ты вообще не в курсе, что это за бэкенд, советую сначала ознакомиться со статьей Микаила.
Содержание
- Предыстория
- JS/Node.js
- SQL
- Чистый код
- Git
- Web
- Командная строка
- Итого
Предыстория
В основе данной статьи лежит чеклист, выданный мне на первом месте работы бэкендером. Суть была в том, что фирма набирала неопытных людей, имеющих минимальный набор навыков в JavaScript(далее JS) и программировании, который выявлялся на собеседовании, и, если ты проходил, тебя брали в "Академию". Академия представляла из себя 3х месячный испытательный срок, в течение которого ты выполнял рабочие задачи и параллельно готовился к сдаче чеклиста - некоего экзамена на проверку теоретических знаний. Далее мы пройдемся по переработанной версии этого чеклиста и посмотрим, какие навыки нужно иметь начинающему бэкендеру и где их искать.
JS/Node.js
JavaScript - это язык программирования, изначально предназначенный для браузера. Но с появлением Node.js он стал относительно широко использоваться и для написания серверов. Если говорить простыми словами, раньше JS понимали только браузеры, а Node.js стал переводить JS на язык, понятный компьютеру, и вдобавок научил его новым речевым оборотам, без которых не обойтись на сервере.
Список вопросов
JS
- Чем отличается передача по ссылке от передачи по значению?
- Что такое область видимости, замыкание? Что такое коллбэк?
- Ключевые слова this, call, apply, bind
- var/const/let в чем различия?
- arrow functions - в чем особенности?
- Prototype - что это и как работает?
- ООП в JS: наследование, инкапсуляция
- Как устроена асинхронность в JS? EventLoop
- Что такое Promise? Основные методы: Promise.resolve, Promise.reject, Promise.all
- Ключевые слова Async/Await
Node.js
- Модульная система, как работают module.exports и require?
- Основные утилиты node (fs, path и тд)
- Для чего нужны middleware?
- Кластеризация и child_process - для чего нужно и как реализуется?
Где искать ответы?
Основной и бесплатный учебник по JS, там найдешь ответ на многое.
Для понимающих английский советую платный курс на udemy, который раскрывает многие моменты в языке, казавшиеся очень сложными. На момент написания статьи он стоит 1090р, что почти бесплатно для такого курса.
https://www.udemy.com/course/understand-javascript/
По Node.js бесплатно наверно только документация, гугл и ютуб.
Из платного:
- Курс того же автора на udemy https://www.udemy.com/course/understand-nodejs/
- Программа "Node.js-программист" на hexlet.io - https://ru.hexlet.io/programs/backend. В свое время учил там js. Подача материала и подход к обучению очень крутой, цены относительно невысокие и есть возможность попробовать другой язык.
SQL
SQL - это язык для работы с базами данных (реляционными, но об этом пока не парься). Точнее говоря, это стандарт, на который ориентируются системы управления базами данных(СУБД). Самые распространенные это: MySQL, PostgreSQL, Microsoft SQL Server, Oracle. Но не нужно пугаться, как я и сказал ранее, они все базируются на SQL, поэтому, изучив основы языка на примере одной СУБД, переключиться на другую не составит труда.
Список вопросов
- Основные типы данных (например в PostgreSQL)
- Связи между таблицами, первичные и внешние ключи
- CRUD (Create, Read, Update, Delete) операции
- JOIN’ы - их виды, чем отличаются.
- Группировка, агрегатные функции (SUM, MIN, MAX, AVG, COUNT)
- Сортировка, по одной колонке, по нескольким
- Ключевые слова distinct, having, returning
- Вложенные запросы, WITH
- Нормальные формы - без углубления и зазубривания, общее представление
- Транзакции - тоже общее представление, зачем нужно вообще и как обернуть в транзакцию
- Оконные функции - общее представление, простой пример какую проблему могут решить
- SQL-инъекции/экранирование
- Что знаешь о миграциях?
Где искать ответы?
Я начинал с курса на stepik, он бесплатный и на русском, но критики там хватает в комментариях, и довольно объективной. Все же советую пройти хотя бы 2 главы, чтобы познакомиться с основными понятиями и попробовать себя в упраженениях, а дальше можно переходить к гуглу и поиску ответов на конкретные вопросы из списка.
Там же есть интерактивный тренажер по SQL, отзывы прям восторженные, советую попробовать.
https://stepik.org/course/63054
Вот еще сайт для практики написания SQL запросов, сам я там не сидел, но часто встречал отсылки к нему.
Чистый код
Это общая глава про практики написания кода, который будет легко понимать, изменять и дополнять, причем не только тебе, но и твоим коллегам. Что-то из перечисленного может не быть в конкретном языке программирования, но иметь представление об этом все же стоит.
Список вопросов
- Статическое поле/метод
- Инкапсуляция: модификаторы доступа: public, private, protected. Геттеры и сеттеры свойств классов.
- Наследование, Абстрактный класс
- Связи между классами: Ассоциация, Агрегация, Композиция. Разница между ними.
- Плюсы и минусы наследования. В каких случаях стоит применять композицию, а в каких наследование.
- Интерфейсы, для чего нужны, какие плюсы. Полиморфизм подтипов.
- Множественное наследование, проблема ромбовидного наследования.
- Связность и связанность классов. Как повысить связность, как понизить связанность? Декомпозиция.
- Принципы SOLID, базовое понимание, без углубления.
- Паттерны проекторирования. Singleton, Фабричный метод, Абстрактная фабрика. Упарываться не нужно, просто иметь представление зачем это все нужно и как реализуется парочка основных.
Где искать ответы?
Ответы на многие вопросы ты найдешь в книге Чистый код Роберта Мартина, которую должен прочесть каждый программист, и чем раньше, тем лучше. Она прививает чистоплотное отношение к коду, которое, на мой взгляд, является одним из самых важных требований к программисту.
Также есть крутой сайт с наглядным разъяснением тем чистого кода, рефакторинга и паттернов.
Git
Git - распределённая система управления версиями, как гласит википедия. А если проще, ты пишешь код не один день и не два, ты постоянно меняешь его и иногда хочешь вернуться в то состояние кода, которое было вчера, потому что сегодня он у тебя не работает. А может хочешь сохранить рабочую версию отдельно и дальше развивать. А еще может вы с другом вместе работаете над одним кодом и вам нужно его как-то между собой делить. Эти и многие другие вещи легко организуются с помощью Git. Освоить его нужно обязательно, потому как этим инструментом ты будешь пользоваться каждый день практически на любой работе.
Список вопросов
- Как добавить файлы в коммит? Что плохого в добавлении файлов через звездочку?
- Чем опасен пуш с форсом?
- Как создать и удалить ветку, локально и в origin’е? Как привязать локальную ветку а1 к удаленной ветке b2 и пушить в нее? Как получить список коммитов из локальной ветки, которую ты только что удалил?
- Что такое мерж? Какие стратегии мержа бывают? Что такое ребейз?
- Что из себя представляет git pull?
- Как переименовать коммит? Как удалить последний? Как удалить коммит из середины и запушить его? В каких случаях так можно делать, а в каких нет? Как все же отменить коммит в удаленном репозитории?
- Что такое cherry-pick?
- Как пользоваться git reflog?
- Что такое git bisect?
- Что знаешь о git successful?
Где искать ответы?
Для начала советую пройти бесплатный курс на хекслете, а ответы на более сложные вопросы уже искать в гугле.
https://ru.hexlet.io/courses/intro_to_git
Так же в интернете множество тренажеров по гиту, вот один из них на английском https://learngitbranching.js.org
Web
В этом разделе представлены общие вопросы, с которыми ты скорее всего столкнешься, работая с веб-технологиями.
Список вопросов
- Сессии - зачем нужны, как работают?
- CORS, CSRF
- HTTP headers (cache, useragent, location)
- Cookie
- Rest API - в чем суть, зачем нужен, какие методы
- Из чего состоит HTTP - запрос?
- HTTP Status - какие типы кодов бывают?
- Что такое nginx и зачем он нужен?
- Что происходит, когда ты набираешь в браузере www.google.ru? Частый вопрос на собеседованиях, хотя бы общее представление нужно иметь, в подробности пока лучше не закапываться.
Где искать ответы?
Тут не посоветую какой-то курс или книгу, нужно гуглить каждый вопрос по-отдельности.
Зато посоветую крутой комикс с объяснением, как работает HTTPS.
Командная строка
Ну и напоследок, еще один инструмент из арсенала практически любого разработчика. Поначалу может показаться, что это что-то страшное, что используют хакеры для взлома пентагона, но, по сути, тот же Git обычно устанавливается и управляется через командную строку, так что возможно ты с ней уже познакомился. В зависимости от твоей операционной системы командная строка будет различаться, приведенные вопросы актуальны скорее для unix-систем, типа macOS или linux, знакомство с которыми нередко требуются на вакансиях.
Список вопросов
- Как создать файл/директорию, удалить, скопировать, переместить?
- chmod/sudo
- ssh/scp
- find/grep
- vim: создать файл, сохранить, отредактировать, выйти (с сохранением и без)
- top/kill
- Как узнать айдишник процесса, который крутится на заданном порту?
Где искать ответы?
Для старта на хекслете есть бесплатный курс, а дальше уже сам.
https://ru.hexlet.io/courses/cli-basics
Итого
Если ты дошел до конца статьи и уже передумал становиться бэкендером, то погоди, я тоже сомневался вначале.
По милости АллахIа, все это преодолевается без особых сложностей, а взамен ты получаешь профессию, которая позволит тебе самому решать, когда и над чем работать, и при этом будет приносить хорошие деньги, если пожелает того АллахI. АллахI аьттув боккхалб бусулб мел волчун!