October 7

Гайд по бэкенду на Python (полный)

Ребята, привет!

Мы создали этот гайд с целью дать вам понять что же нужно для становления крепким бэкенд-разрабом. И взяли за основу наш курс по бэку в Техниуме.

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

Дерзайте!

Что делать чтобы стать бэкенд-разработчиком?

Для того чтобы стать уверенным backend-разработчиком на Python, необходимо освоить широкий набор технологий и практик, от изучения основ языка до работы с архитектурными решениями и DevOps инструментами.

Вот подробная дорожная карта по этапам:

Изучение основ Python

  • Цель: Научиться писать код, работать с типами данных, структурой программы и использовать базовые библиотеки.
  • Задачи:
    • Основы синтаксиса Python: переменные, типы данных, операторы, условные выражения.
    • Работа с функциями и их аргументами.
    • Циклы и итерации.
    • Исключения и обработка ошибок.
    • Работа с файлами (чтение, запись).

Простым языком:

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

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

Основы языка программирования помогут вам:

  • Писать код. Вы сможете создавать программы, которые будут решать разные задачи: от простых вычислений до сложных алгоритмов.
  • Работать с типами данных. Это значит, что вы будете знать, как хранить информацию в компьютере: числа, строки, логические значения и т. д.
  • Понимать структуру программы. Вы узнаете, из каких частей состоит программа: переменные, функции, циклы, условия и др.
  • Использовать базовые библиотеки. Библиотеки — это готовые модули кода, которые можно использовать в своих программах. Они упрощают работу и экономят время.

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

Но не стоит бояться, если вы совсем ничего не знаете о программировании. Изучение основ языка программирования — это увлекательный процесс, который откроет перед вами новые горизонты и возможности. Главное — быть готовым к тому, что это потребует времени и усилий. Но результат того стоит!

ООП (Объектно-Ориентированное Программирование)

  • Цель: Понимание и применение принципов ООП в Python для написания масштабируемого и поддерживаемого кода.
  • Задачи:
    • Классы и объекты.
    • Инкапсуляция, наследование, полиморфизм.
    • Модули и пакеты.
    • Основные паттерны проектирования (например, Singleton, Factory).

Простым языком:

​​Объектно-ориентированное программирование (ООП) — это подход к написанию кода, при котором программа представляется в виде взаимодействующих друг с другом объектов.

Объекты содержат данные (свойства) и код (методы), который работает с этими данными. Объекты могут наследовать свойства и методы от других объектов, что позволяет создавать более сложные программы.

ООП позволяет разбивать программу на отдельные объекты, каждый из которых выполняет свою задачу. Это упрощает добавление новых функций и изменение существующих без изменения всего кода.

Ресурсы:

Алгоритмы и структуры данных

  • Цель: Развитие навыков решения сложных задач с помощью эффективных алгоритмов и структур данных для оптимизации производительности приложений и работы с большими объёмами данных.
  • Задачи:
    • Основные структуры данных:
      • Массивы (arrays): Понимание операций над массивами (доступ к элементам, добавление, удаление).
      • Связные списки (linked lists): Односвязные и двусвязные списки.
      • Стек (stack) и очередь (queue): Принципы работы с FIFO (first in, first out) и LIFO (last in, first out).
      • Хэш-таблицы (hash maps): Принципы хэширования и работы с хэш-таблицами.
      • Деревья и графы:
        • Деревья, бинарные деревья поиска (BST), обходы деревьев.
        • Графы, виды обходов (BFS и DFS).
      • Кучи (heaps): Максимальные и минимальные кучи, использование для работы с приоритетами.
    • Основные алгоритмы:
      • Поиск:
        • Линейный поиск.
        • Бинарный поиск (на отсортированных массивах).
      • Сортировка:
        • Пузырьковая сортировка, сортировка вставками.
        • Быстрая сортировка (Quick Sort), сортировка слиянием (Merge Sort).
        • Понимание временной сложности различных сортировок.
      • Жадные алгоритмы: Примеры задач и их решения (например, задача о рюкзаке).
      • Динамическое программирование: Оптимизация задач с помощью сохранения промежуточных решений (задача о рюкзаке, задачи на разбиение чисел и т.д.).
      • Алгоритмы работы с графами:
        • Поиск кратчайшего пути (алгоритм Дейкстры).
        • Поиск минимального остовного дерева (алгоритм Прима, алгоритм Краскала).
    • Анализ сложности алгоритмов:
      • Понимание временной и пространственной сложности алгоритмов (O(n), O(log n), O(n^2)).
      • Навыки оптимизации решения задач для минимизации использования ресурсов.

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

Изучение алгоритмов и структур данных помогает будущим программистам:

  • Решать сложные задачи. Алгоритмы позволяют разбить задачу на более простые шаги и найти эффективное решение.
  • Оптимизировать код. Выбор правильной структуры данных может ускорить выполнение программы.
  • Понимать принципы работы программ. Зная, как работают алгоритмы и структуры данных, можно лучше понять, что происходит внутри программы.
  • Справляться с нестандартными задачами. Алгоритмы и структуры данных помогают находить нестандартные решения и выходить за рамки привычных подходов.
  • Готовиться к собеседованиям. Вопросы об алгоритмах и структурах данных часто встречаются на собеседованиях в крупные компании.
  • Почему это важно для backend-разработчика:
    • Производительность: Понимание алгоритмов помогает разрабатывать решения, которые работают быстрее и более эффективно обрабатывают данные, что особенно важно для высоконагруженных приложений.
    • Работа с большими данными: Взаимодействие с большими базами данных или сложными системами часто требует знания эффективных алгоритмов и структур данных.
    • Подготовка к собеседованиям: Компании часто проверяют знания алгоритмов и структур данных на технических интервью, особенно для middle и senior позиций.
  • Ресурсы:
    • Книги:
      • "Грокаем алгоритмы" Адитьи Бхаргава — для понимания алгоритмов на простых примерах.
    • Онлайн-ресурсы и курсы:

Работа с базами данных

  • Цель: Научиться взаимодействовать с базами данных, как реляционными, так и нереляционными.
  • Задачи:
    • Основы SQL: SELECT, INSERT, UPDATE, DELETE.
    • Работа с реляционными БД (PostgreSQL, MySQL).
    • Использование ORM (например, SQLAlchemy или Django ORM).
    • Введение в нереляционные БД (MongoDB).

Базы данных — это организованные структуры для хранения, обработки и управления данными. Они используются в различных областях, таких как бизнес, наука, медицина и другие.

Существует два основных типа баз данных: реляционные и нереляционные (NoSQL).

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

Нереляционные базы данных, или NoSQL, не имеют фиксированной схемы и позволяют хранить данные в любом формате. Они обеспечивают высокую производительность и масштабируемость, но могут потребовать больше усилий при разработке и управлении. NoSQL базы данных подходят для проектов, где требуется гибкость и масштабируемость.

Ресурсы:

Основы работы интернета

Интернет — это глобальная сеть, которая объединяет компьютеры и другие устройства по всему миру. С помощью интернета люди могут обмениваться информацией, общаться, работать и развлекаться.

HTTP (HyperText Transfer Protocol) — это протокол передачи данных, который используется для обмена информацией в интернете. HTTP определяет формат запросов и ответов между клиентом (например, браузером) и сервером.

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

Изучение работы интернета, HTTP и клиент-серверной архитектуры поможет начинающим разработчикам:

  • Понимать, как работает интернет. Это позволит им создавать более надёжные и эффективные приложения.
  • Разрабатывать веб-приложения. Веб-приложения — это программы, которые работают в браузере и взаимодействуют с сервером через HTTP. Изучение HTTP и клиент-серверной архитектуры необходимо для разработки таких приложений.
  • Работать с API. API (Application Programming Interface) — это набор функций и процедур, которые позволяют программам взаимодействовать друг с другом. Многие сервисы предоставляют свои API, чтобы разработчики могли создавать приложения, использующие их данные и функции. Для работы с API необходимо понимать, как происходит обмен данными между клиентом и сервером.

Вот список ключевых тем, которые нужно изучить начинающему разработчику о работе интернета, HTTP и клиент-серверной архитектуре:

1. Основы работы интернета

  • Принципы работы сети (LAN, WAN).
  • IP-адресация (IPv4 и IPv6).
  • DNS (Domain Name System) и его роль в интернета.
  • Протоколы TCP/IP и UDP.
  • Работа маршрутизаторов и свитчей.

2. HTTP/HTTPS протокол

  • Что такое HTTP и его основные характеристики.
  • Разница между HTTP и HTTPS (шифрование, SSL/TLS).
  • Структура HTTP-запроса:
    • Методы HTTP (GET, POST, PUT, DELETE и т.д.).
    • Заголовки HTTP (что они делают и как используются).
    • Тело запроса (форматы данных, например, JSON, XML).
  • Структура HTTP-ответа:
    • Статус-коды (1xx, 2xx, 3xx, 4xx, 5xx) и их значения.

3. Клиент-серверная архитектура

  • Основные принципы клиент-серверной модели.
  • Как клиент взаимодействует с сервером (запросы и ответы).
  • Различия между тонким и толстым клиентом.
  • Архитектура RESTful API.
  • Микросервисы и их особенности.

4. DNS и маршрутизация

  • Как работают DNS-серверы и процесс разрешения доменных имен.
  • Принципы маршрутизации в интернете.
  • CDN (Content Delivery Network) и его роль.

5. WebSockets

  • Принципы работы WebSockets.
  • Различия между WebSocket и HTTP.
  • Применение WebSockets для обмена данными в реальном времени.

6. Работа браузеров

  • Как браузеры обрабатывают и отображают HTTP-запросы.
  • Рендеринг веб-страниц.
  • Кэширование браузера и его важность.
  • Инструменты разработчика (DevTools) для отладки.

7. API и веб-приложения

  • Понятие API (Application Programming Interface) и его назначение.
  • Разница между веб-приложением и API.
  • Как веб-приложения используют API для обмена данными.

ССЫЛКИ НА РЕСУРСЫ:

Фреймворки для веб-разработки

Цель: Изучение популярных фреймворков для разработки веб-приложений на Python.

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

Вот несколько популярных фреймворков для разработки веб-приложений на Python:

Flask

  • Цель: Изучение легкого и гибкого микрофреймворка для разработки веб-приложений.
  • Особенности:
    • Легковесный и гибкий.
    • Подходит для создания небольших и средних приложений.
    • Требует больше работы по настройке, но даёт гибкость в выборе инструментов и архитектуры.
  • Плюсы:
    • Легкость изучения, минимум "магии".
    • Большое сообщество и обширная документация.
    • Легкость интеграции сторонних библиотек и модулей.
  • Минусы:
    • Для больших приложений требуется больше ручной работы по настройке (ORM, миграции, авторизация).
    • Нет административной панели "из коробки".
  • Примеры применения:
    • API для небольших микросервисов.
    • Сайты-визитки, блоги, CMS.
    • Прототипы и MVP.
  • Ресурсы:

Django

  • Цель: Изучение мощного фреймворка для построения полнофункциональных веб-приложений.
  • Особенности:
    • "Батарейки включены" — много возможностей "из коробки".
    • Полная экосистема для создания больших приложений с минимальными усилиями по настройке.
  • Плюсы:
    • Встроенная административная панель.
    • Django ORM — мощный инструмент для работы с БД.
    • Структурированный подход (MVC архитектура).
    • Подходит для создания больших веб-приложений и корпоративных систем.
  • Минусы:
    • Сложнее освоить из-за большего объёма функционала.
    • Меньшая гибкость по сравнению с Flask — сложнее отойти от предложенных стандартов.
  • Примеры применения:
    • Интернет-магазины.
    • Социальные сети.
    • Внутренние корпоративные системы.
    • Проекты, где требуется быстрая разработка за счёт встроенных возможностей.
  • Ресурсы:

FastAPI

  • Цель: Изучение современного высокопроизводительного фреймворка для создания RESTful API.
  • Особенности:
    • Основан на асинхронности и высокой производительности.
    • Интуитивно понятный и мощный интерфейс для создания API.
    • Поддержка автодокументации через OpenAPI.
  • Плюсы:
    • Высокая скорость и производительность (идеален для API).
    • Автоматическая валидация данных.
    • Простой и чистый синтаксис.
    • Интеграция с асинхронными операциями (поддержка async/await).
  • Минусы:
    • Молодой фреймворк с менее развитыми экосистемами по сравнению с Django.
    • Более сложный для начинающих, чем Flask.
  • Примеры применения:
    • Высоконагруженные API.
    • Микросервисы с требованием к производительности.
    • Проекты, требующие интеграции с асинхронными сервисами.
  • Ресурсы:

Какой фреймворк выбрать?

  • Django. Это мощный фреймворк, который подходит для создания сложных приложений. Он имеет множество готовых функций и модулей, таких как система аутентификации пользователей, ORM (Object-Relational Mapping) для работы с базами данных и шаблонизатор для генерации HTML-страниц. Django также известен своей безопасностью и надёжностью.
  • Flask. Это более лёгкий и гибкий фреймворк, чем Django. Он предоставляет базовые инструменты для создания веб-приложения, такие как маршрутизация запросов, работа с шаблонами и базами данных. Flask позволяет разработчику самостоятельно выбирать нужные ему библиотеки и модули, что делает его более гибким и настраиваемым.
  • FastAPI. Этот фреймворк основан на библиотеке Starlette и предназначен для создания высокопроизводительных API. FastAPI использует Python-тип данных async/await для асинхронной обработки запросов, что позволяет ускорить работу приложения.

Выбор фреймворка зависит от ваших целей и задач:

  • Flask подойдет, если:
    • Вы хотите максимальной гибкости в разработке.
    • Проект небольшой или средний по размеру, и вам не нужны сложные встроенные механизмы.
    • Важно быстро создать минимальное работоспособное приложение (MVP).
  • Django подойдет, если:
    • Вам нужна полноценная система для быстрого запуска сложного веб-приложения с минимумом дополнительных настроек.
    • Важны такие вещи, как административная панель, встроенные механизмы авторизации и аутентификации, работа с ORM.
    • Вы создаете большой сайт с корпоративными требованиями.
  • FastAPI подойдет, если:
    • Важна высокая производительность, особенно для асинхронных операций.
    • Вы работаете над проектом, который будет активно взаимодействовать с API.
    • Вам важна поддержка современного стека технологий (OpenAPI, асинхронные запросы).

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

Разработка RESTful

API (Application Programming Interface) — это набор функций и процедур, которые позволяют программам взаимодействовать друг с другом. С помощью API можно создавать приложения, использующие данные и функции других сервисов.

Создание API — это процесс разработки программного интерфейса, который будет предоставлять доступ к определённым функциям или данным сервера. Это позволяет другим приложениям получать доступ к этим данным и использовать их в своих целях.

  • Цель: Научиться создавать API для обмена данными между клиентом и сервером.
  • Задачи:
    • Принципы REST API: маршрутизация, запросы и ответы, методы HTTP.
    • Авторизация и аутентификация
    • Валидация данных.
  • Ресурсы:

Тестирование и отладка кода

  • Цель: Научиться писать тесты для обеспечения стабильности кода и обнаружения ошибок.
  • Задачи:
    • Юнит-тестирование с помощью unittest или pytest.
    • Модульные, интеграционные тесты.
    • Принципы TDD (разработка через тестирование).
    • Использование инструмента отладки (pdb).
  • Ресурсы:

Git и GitHub

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

GitHub — это один из самых популярных сервисов для хостинга проектов на основе системы контроля версий Git. Он предоставляет инструменты для совместной работы над кодом, отслеживания ошибок и управления версиями.

  • Цель: Освоить систему контроля версий для командной работы над проектами и развертывания кода.
  • Задачи:
    • Основы Git:
      • Команды git init, git add, git commit, git push, git pull.
      • Ветвление и слияние (команды git branch, git merge).
      • Разрешение конфликтов при слиянии.
      • Работа с удалёнными репозиториями.
    • GitHub:
      • Создание и клонирование репозиториев.
      • Работа с pull-request и code review.
      • Использование GitHub Issues для отслеживания задач.
      • Настройка GitHub Actions для автоматизации процессов CI/CD.
    • Командная работа:
      • Стратегии ветвления (Git Flow, GitHub Flow).
      • Практики оформления коммитов (семантические коммиты).
  • Ресурсы:

Рекомендуемая практика: - Создать проект на GitHub, добавить в него код, практиковаться в создании Pull Requests. - Присоединиться к open-source проектам на GitHub, участвовать в разработке и ревью чужого кода.

Основы фронтенда и вёрстки для backend-разработчика

  • Цель: Понимание основ работы клиентской части веб-приложений для более эффективного взаимодействия с фронтенд-разработчиками и создания полноценного взаимодействия между клиентом и сервером.
  • Задачи:
    • HTML:
      • Структура HTML-документа.
      • Основные теги и их использование (заголовки, параграфы, списки, ссылки, формы).
      • Семантическая вёрстка для улучшения читаемости кода и SEO.
    • CSS:
      • Основные свойства CSS: отступы, размеры, цвета, шрифты.
      • Работа с Flexbox и Grid для создания гибкой компоновки элементов.
      • Медиа-запросы и адаптивная вёрстка (Responsive Web Design).
    • JavaScript (базовый уровень):
      • Основы работы с DOM (Document Object Model).
      • Обработка событий (например, клик, ввод данных).
      • Взаимодействие с API.
    • Frontend-фреймворки:
      • Понимание основ работы с популярными фреймворками (React, Vue.js, Angular) для того, чтобы лучше интегрировать backend с frontend.
    • Работа с API:
      • Настройка взаимодействия фронтенда с backend (AJAX-запросы).
      • JSON как формат обмена данными между клиентом и сервером.
  • Почему это важно:
    • Понимание полной картины: Backend-разработчик, знающий, как работает фронтенд, может лучше организовать API, учитывая потребности и особенности клиентской части.
    • Лучшая коммуникация с фронтенд-разработчиками: Обсуждение интеграционных моментов станет эффективнее.
    • Создание фуллстек приложений: Понимание фронтенда позволяет разработчику создавать полные приложения без необходимости привлекать отдельного специалиста для простой вёрстки или взаимодействия с API.
    • Инструменты для отладки: Возможность тестировать взаимодействие API через браузер или инструменты разработчика напрямую.
  • Ресурсы:

Освоение базовых навыков фронтенда и вёрстки позволит вам, как backend-разработчику, лучше понимать, как данные и интерфейсы взаимодействуют, а также легче создавать конечные продукты с гармоничным взаимодействием между серверной и клиентской частью.

Дополнительные темы

Многопоточность и мультипроцессинг

Многопоточность и мультипроцессинг — это два подхода к параллельному выполнению задач в программировании. Они позволяют ускорить работу программы за счёт одновременного выполнения нескольких операций.

  • Цель: Научиться эффективно управлять параллельными и конкурентными задачами для повышения производительности Python-приложений.
  • Задачи:
    • Многопоточность (Threading):
      • Работа с библиотекой threading.
      • Проблемы гонки данных и блокировки (deadlock).
      • Понимание GIL (Global Interpreter Lock) в Python и его влияние на многопоточность.
    • Мультипроцессинг (Multiprocessing):
      • Использование библиотеки multiprocessing для выполнения задач параллельно с помощью нескольких процессов.
      • Разделение данных между процессами.
      • Очереди и каналы для коммуникации между процессами.

Ресурсы:

Асинхронное программирование

  • Цель: Освоить асинхронные возможности Python для создания высокопроизводительных приложений.
  • Задачи:
    • Основы асинхронного программирования: async/await.
    • Работа с библиотеками asyncio и aiohttp.
    • Асинхронные запросы к базам данных.
  • Ресурсы:

Docker и контейнеризация

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

  • Цель: Научиться использовать Docker для разработки, тестирования и деплоя приложений.
  • Задачи:
    • Создание Docker-контейнеров для Python приложений.
    • Работа с Docker Compose для создания многокомпонентных систем.
    • Понимание основ оркестрации контейнеров с помощью Kubernetes (опционально).
  • Ресурсы:

Портфолио и пет-проекты

Вот несколько идей для пет-проектов, которые помогут начинающему бэкенд-разработчику поэтапно прокачивать навыки из предложенного roadmap и создать впечатляющее портфолио:

1. RESTful API для блога

  • Описание: Разработайте API для создания, редактирования и удаления постов в блоге.
  • Технологии:
    • Flask или Django для API.
    • PostgreSQL или SQLite для хранения данных.
    • JWT для аутентификации пользователей.
    • Flask-RESTful для организации архитектуры API.
    • SQLAlchemy для работы с БД.
  • Чему научитесь:
    • Основы создания RESTful API.
    • Работа с базами данных и ORM.
    • Авторизация и аутентификация.
    • Валидация данных.

2. Микросервис для обработки изображений

  • Описание: Создайте сервис, который принимает изображения, применяет фильтры (черно-белый, размытие, обрезка) и возвращает измененные изображения.
  • Технологии:
    • FastAPI для создания API.
    • Pillow или OpenCV для обработки изображений.
    • Redis для кеширования результатов.
    • Docker для контейнеризации.
    • MongoDB для хранения информации об обработанных изображениях.
  • Чему научитесь:
    • Асинхронное программирование с FastAPI.
    • Обработка медиафайлов.
    • Кеширование с Redis.
    • Работа с Docker и контейнерами.

3. Приложение TODO с веб-интерфейсом

  • Описание: Простое веб-приложение для управления списками задач с возможностью создания, редактирования и удаления задач, с авторизацией пользователей.
  • Технологии:
    • Django для бэкенда.
    • Django ORM для работы с БД.
    • HTML/CSS/JavaScript для фронтенда.
    • Bootstrap для быстрой вёрстки.
    • SQLite или PostgreSQL для хранения данных.
  • Чему научитесь:
    • Полноценная интеграция бэкенда и фронтенда.
    • Авторизация и аутентификация пользователей.
    • CRUD-операции.
    • Основы фронтенда (HTML, CSS, JS).

4. API для погодного сервиса

  • Описание: Разработка API, которое подключается к внешнему сервису погоды и возвращает пользователю прогноз по городу с возможностью кеширования запросов.
  • Технологии:
    • Flask или FastAPI для создания API.
    • Requests для взаимодействия с внешним API.
    • Redis для кеширования запросов.
    • SQLAlchemy для работы с базой данных (если хотите хранить историю запросов).
  • Чему научитесь:
    • Взаимодействие с внешними API.
    • Асинхронное программирование для оптимизации запросов.
    • Кеширование с Redis.

Резюме и отклики

Пример контента:

Еще примеры: https://drive.google.com/drive/folders/1yFv1O53-n5OrzsEobQohvUsvEofH-V6s?usp=share_link

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

Кратко об опыте. Пишем:

  • что за проект был
  • какой стек технологий на проекте
  • что вы конкретно делали
  • что было результатом вашей работы

Сопроводительное письмо, пример: https://docs.google.com/document/d/1Dlw4cTZj4pOp18VgKz1iCzgHPVJcwcIc9EpiAT75DPA/edit

Собеседования

Как всегда, лучше чем первые три страницы Гугла я не уверен, что что-то есть.

Пишите свое мнение в комментах!