Инструкции
March 29, 2021

Как стать Junior Backend - разработчиком

Photo by Dayne Topkin on Unsplash

بسم الله الرحمن الرحيم
В этой статье я поделюсь своим опытом становления бэкенд-разработчиком. В качестве основного языка программирования для примера приведен JavaScript, работающий на сервере с помощью Node.js, но его можно заменить на любой другой язык, пригодный для написания веб-сервера. Остальная часть статьи с языком не связана. И еще, если ты вообще не в курсе, что это за бэкенд, советую сначала ознакомиться со статьей Микаила.

Содержание

  • Предыстория
  • JS/Node.js
  • SQL
  • Чистый код
  • Git
  • Web
  • Командная строка‌
  • Итого

Предыстория

В основе данной статьи лежит чеклист, выданный мне на первом месте работы бэкендером. Суть была в том, что фирма набирала неопытных людей, имеющих минимальный набор навыков в JavaScript(далее JS) и программировании, который выявлялся на собеседовании, и, если ты проходил, тебя брали в "Академию". Академия представляла из себя 3х месячный испытательный срок, в течение которого ты выполнял рабочие задачи и параллельно готовился к сдаче чеклиста - некоего экзамена на проверку теоретических знаний. Далее мы пройдемся по переработанной версии этого чеклиста и посмотрим, какие навыки нужно иметь начинающему бэкендеру и где их искать.

Ты на новом месте работы

JS/Node.js

JavaScript - это язык программирования, изначально предназначенный для браузера. Но с появлением Node.js он стал относительно широко использоваться и для написания серверов. Если говорить простыми словами, раньше JS понимали только браузеры, а Node.js стал переводить JS на язык, понятный компьютеру, и вдобавок научил его новым речевым оборотам, без которых не обойтись на сервере.

Английски ишколе Iомбе безар

Список вопросов

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, там найдешь ответ на многое.

https://learn.javascript.ru/

Для понимающих английский советую платный курс на 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 главы, чтобы познакомиться с основными понятиями и попробовать себя в упраженениях, а дальше можно переходить к гуглу и поиску ответов на конкретные вопросы из списка.

https://stepik.org/course/551

Там же есть интерактивный тренажер по SQL, отзывы прям восторженные, советую попробовать.

https://stepik.org/course/63054

Вот еще сайт для практики написания SQL запросов, сам я там не сидел, но часто встречал отсылки к нему.

https://sql-ex.ru/

Чистый код

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

Список вопросов

  • Статическое поле/метод
  • Инкапсуляция: модификаторы доступа: public, private, protected. Геттеры и сеттеры свойств классов.
  • Наследование, Абстрактный класс
  • Связи между классами: Ассоциация, Агрегация, Композиция. Разница между ними.
  • Плюсы и минусы наследования. В каких случаях стоит применять композицию, а в каких наследование.
  • Интерфейсы, для чего нужны, какие плюсы. Полиморфизм подтипов.
  • Множественное наследование, проблема ромбовидного наследования.
  • Связность и связанность классов. Как повысить связность, как понизить связанность? Декомпозиция.
  • Принципы SOLID, базовое понимание, без углубления.
  • Паттерны проекторирования. Singleton, Фабричный метод, Абстрактная фабрика. Упарываться не нужно, просто иметь представление зачем это все нужно и как реализуется парочка основных.

Где искать ответы?

Ответы на многие вопросы ты найдешь в книге Чистый код Роберта Мартина, которую должен прочесть каждый программист, и чем раньше, тем лучше. Она прививает чистоплотное отношение к коду, которое, на мой взгляд, является одним из самых важных требований к программисту.

Также есть крутой сайт с наглядным разъяснением тем чистого кода, рефакторинга и паттернов.

https://refactoring.guru/ru

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.

https://howhttps.works/ru/

Командная строка

Ну и напоследок, еще один инструмент из арсенала практически любого разработчика. Поначалу может показаться, что это что-то страшное, что используют хакеры для взлома пентагона, но, по сути, тот же Git обычно устанавливается и управляется через командную строку, так что возможно ты с ней уже познакомился. В зависимости от твоей операционной системы командная строка будет различаться, приведенные вопросы актуальны скорее для unix-систем, типа macOS или linux, знакомство с которыми нередко требуются на вакансиях.

Список вопросов

  • Как создать файл/директорию, удалить, скопировать, переместить?
  • chmod/sudo
  • ssh/scp
  • find/grep
  • vim: создать файл, сохранить, отредактировать, выйти (с сохранением и без)
  • top/kill
  • Как узнать айдишник процесса, который крутится на заданном порту?

Где искать ответы?

Для старта на хекслете есть бесплатный курс, а дальше уже сам.

https://ru.hexlet.io/courses/cli-basics

Итого

Если ты дошел до конца статьи и уже передумал становиться бэкендером, то погоди, я тоже сомневался вначале.

По милости АллахIа, все это преодолевается без особых сложностей, а взамен ты получаешь профессию, которая позволит тебе самому решать, когда и над чем работать, и при этом будет приносить хорошие деньги, если пожелает того АллахI. АллахI аьттув боккхалб бусулб мел волчун!