10807

План самостоятельного обучения языку Python

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

Мы обсудим как начать изучение Python, и убедимся, что у вас есть все необходимые инструменты под рукой, прежде чем погрузиться в программирование.

Road map Python 10

 

Логирование времени

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

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

Не стоит углубляться в изучение Scrum или Kanban на этапе вхождения в мир разработки. Однако выработка привычки логировать своё время - это чрезвычайно важно.

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

 

Инструменты разработчика

Как разработчик Python, для успеха необходимы правильные инструменты. Есть несколько инструментов, которые могут помочь оптимизировать разработку и упростить кодирование.

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

Рекомендуем загрузить ISO-образ последней LTS (Long-term support) версии дистрибутива Ubuntu или Ubuntu Mate и последовать любой актуальной инструкции с интернета для установки линукса в качестве основной или второй операционной системы на ваше устройство. 

Работать на Windows крайне не рекомендуется. Ознакомление с принципиально новой ОС - это сложный, но необходимый процесс. После установки Linux - просмотрите несколько видео-уроков по основным командам терминала.

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

Community версия подойдет для разработки API, ботов или обычных скриптов. Для написания веб-приложений со статикой (HTML / JS / CSS) лучше использовать пробный период Professional-издания Pycharm. Скачать Pycharm вы можете по ссылке.

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

Рекомендуемый инструмент для построения архитектур приложений, схем баз данных, диаграмм классов. Проведите несколько дней за изучением UML Class diagrams и Entity Relationship Diagram (ERD), читая статью и смотря видео на ютубе. Не забудьте попрактиковаться. Несколько ссылок:

Github — это платформа с открытым исходным кодом, принадлежащая Microsoft, которая позволяет разработчикам хранить код в репозиториях и отслеживать изменения с течением времени.

В случае системой контроля версий лучше идти по таким шагам:

  1. Для начала вам необходимо зарегистрироваться на сайте Github.
  2. Установите Git на вашу операционную систему.
  3. Вам будет сложно начать работу с git-ом сразу с документации. Попробуйте посмотреть несколько уроков на ютубе, например этот. Повторяйте всё что изучаете в видео, это важно.
  4. Углубите свои знания прочитав документацию.
  5. Заучите основные команды с помощью шпаргалки. Многие из них вы уже должны были запомнить.

✅ Основы

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

Для начала рекомендуем прочитать книгу A Byte of Python (Укус Питона). Она позволяет изучить основы языка программирования Python и предоставляет пошаговые инструкции по созданию программ на этом языке.

🔘 Примеры задач

Задачи в этом разделе довольно просты. Создайте git-репозиторий, подключите его к гитхабу и создайте виртуальное окружение. Обязательно используйте .gitignore файл, данные виртуального окружения не должны отслеживаться гитом. Для каждой отдельной задачи создайте python-модуль. Обязательно добавьте обработку ошибок и логирование. Для вывода примеров исполнения функций используйте тесты.

🔵 Задача 1 - Пифагоровы штаны

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

Тесты:

[5, 3, 4] -> True
[6, 8, 10] -> True
[100, 3, 65] -> False

🟡 Задача 2 - Растения против Зомби

Создайте функцию, которая будет принимать в себя два массива несортированных чисел (первый - защищающийся массив растений, второй - атакующий массив зомби) и вернёт boolean значение в зависимость от того победили ли защитники.

➡️ Условия:

  • Каждый элемент массива атакует элемент другого массива с тем же индексом массива. Выживший - это число с наибольшим значением.
  • Если значение одинаковое, они оба погибают.
  • Если одно из значений отсутствует (различная длина массивов), солдат с непустым значением выживает.
  • Чтобы выжить, обороняющаяся сторона должна иметь больше выживших, чем атакующая сторона.
  • В случае, если с обеих сторон одинаковое количество выживших, побеждает команда с наибольшей начальной силой атаки. Если общая сила атаки обеих сторон одинакова, верните True.
  • Начальная сила атаки представляет собой сумму всех значений в каждом массиве.

Тесты:

zombies=[ 1, 3, 5, 7 ] plants=[ 2, 4, 6, 8 ] -> True
zombies=[ 1, 3, 5, 7 ] plants=[ 2, 4 ] -> False
zombies=[ 1, 3, 5, 7 ] plants=[ 2, 4, 0, 8 ] -> True
zombies=[ 2, 1, 1, 1 ] plants=[ 1, 2, 1, 1 ] -> True

🟣 Задача 3 - Генератор расписания

Создайте функцию, генерирующую расписание рабочих дней сотрудника.

➡️ Условия: 

  • Функция принимает количество дней на которые нужно составить расписание, количество дней работы, количество дней отдыха и дату начала расписания.

  • Функция возвращает расписание рабочих дней сотрудника, которое генерируется начиная с start_date на days дней вперед, учитывая что сотрудник чередует рабочие дни(work_days) и дни отдыха (rest_days).

  • Функция должна вернуть данные в формате List[datetime.datetime]

Тесты:

days: 5, work_days: 2, rest_days: 1, start_date: datetime(2020, 1, 30) ->
[
datetime.datetime(2020, 1, 30, 0, 0),
datetime.datetime(2020, 1, 31, 0, 0),
  datetime.datetime(2020, 2, 2, 0, 0),
datetime.datetime(2020, 2, 3, 0, 0)
]

✅ Базовый уровень

Вы прошли через свои первые шаги и приближаетесь к более прикладным задачам. Перед тем как приступить к задачам этого уровня - прочитайте Марка Лутца – Вивчаємо Python. 5-те видання в двух томах. Книги Лутца позволят вам поднять свой уровень программирования и позволят приблизиться к ООП-подходу к программированию.

Не питоном единым. Ваша цель - не просто знать python, а стать профессиональным веб-разработчиком. Самое время приступать к изучению сети и интернета. Особой нужды в чтении 600-страничных томов о принципах работы HTTP нет, однако основы стоит знать. Рекомендуем уделить несколько дней на поверхностное изучение видео и статей о HTTP, HTTPS, а также про такие технологии, такие как AJAX, XML, JSON и другие.

Особое внимание стоит проявить к HTML, CSS и JavaScript. Вы должны крепко знать их основы и статьями тут не отделаться, как минимум стоит посмотреть хорошие курсы на YouTube, а возможно и несколько. Базовые знания этих технологий должны быть и у бэкэнд-разработчика.

Несколько ссылок:

🔘 Примеры задач

Сейчас наша задача - углубиться в веб-разработку.

🔵 Задача 1 - Скрапер

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

🟡 Задача 2 - База данных сообщений

Ознакомьтесь с концепцией REST API и создайте новый проект. Используйте библиотеки fastapi (async handlers), httpx (async client), tortoise-orm (async interface), БД sqlite. Полезные ссылки:

➡️ Условия:

Ваша цель - создать сервис, который будет отдавать данные пользователей по запросам. Данные вы должны получить с API https://gorest.co.in/. При запуске сервера если ваша БД пуста - заполните ее данными (users, posts).

На fastapi создайте:

  • Хендлер, который асинхронно запросит данные из БД о всех пользователях.
  • Хендлер, который асинхронно запросит данные о пользователе с конкретным ID
  • Хендлер, который асинхронно запросит данные из БД о всех сообщениях пользователя с конкретным ID.

📚 Подтягиваем хвосты

Ниже перечисляются ряд терминов, которые вы должны прекрасно знать и понимать. Если что-то из этого вы не знаете - вперед подтягивать.

  • Изменяемые и неизменяемые типы данных. Различия между ними.
  • Генераторы и итераторы. Различия между ними.
  • Переменные передаются по ссылке или по значению?
  • Как работают контекстные менеджеры?
  • Как работают декораторы?
  • Различия copy и deepcopy.
  • Методы __new__, __init__, __call__.
  • Виртуальное окружение.
  • Пространства имён.
  • PYTHONPATH.
  • PEP8
  • O(n).
  • GIL.

✅ Объектно-ориентированное программирование

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

Вы уже должны были изучить второй том Лутца, где объектно-ориентированное программирование рассматривается весьма детально. Рекомендуем также уделить время укреплению знаний по ООП просмотром видео и статей на эту тему.

🔘 Примеры задач

🔵 Задача 1 - Паттерны ООП

Знаний недостаточно, если вы не понимаете как применить их на практике. Перейдите на сайт www.refactoring.guru и изучите каждый паттерн из каталога. 

➡️ Условия:

  • Создайте новый проект и в нём отдельные модули для каждого паттерна. Используя подходящие примеры из реальной жизни (кофемашины, пиццерии, телевизор и пульт, банк) реализуйте примеры кода с применением всех этих паттернов. В первую очередь попытайтесь понять не как реализовывать конкретный паттерн, а проблему которую он пытается решить и почему именно таким способом.
  • Для каждого примера спроектируйте диаграмму классов, обратите внимание на уже практически готовые примеры с сайта. Поскольку www.moqups.com в бесплатной версии имеет ограничения, можете воспользоваться www.draw.io.
  • Разместить в каждом модуле скриншот диаграммы классов и оригинальную ссылку(moqups)/файл(draw.io).
  • Выполнение данного задания у не знакомых с паттернами проектирования может занять от одной недели до нескольких. Главное - проявляйте усердие.

🟡 Задача 2 - API-клиенты на отдельных потоках

Ознакомьтесь с примерами использования библиотеки threading и теорией многопоточности на Python. Разберитесь в каких случаях стоит использовать асинхронное программирование на asyncio, а в каких - многопоточность.

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

➡️ Условия:

  • Библиотеки - threading, httpx (sync/async по желанию), yarl, logging, asyncio (по желанию), tortoise orm, redis.
  • Эндпоинт доступен по ссылке. 
  • Концептуальные отличия - один клиент должен записывать данные в sqlite DB, а другой - в redis. После каждого успешного получения данных первый клиент должен вывести в консоль текущее время до секунд, а другой - случайное число от 1 до 10. Клиенты должны запускаться в отдельных потоках методом start.
  • Конкретные реализации клиента должны работать с разными крипто-парами (например BTC/USDT и LTC/USDT), отправлять запросы с разной периодичностью.

Примерный клиентский код:

from clients.binance.db import BinanceDbClient
від clients.binance.redis import BinanceRedisClient

binance_btc_db_client = BinanceDbClient(
currency = "BTCUSDT", period = 2
)
binance_ltc_redis_client = BinanceRedisClient(
currency = "LTCUSDT", period = 3
)

binance_btc_db_client.start()
binance_ltc_redis_client.start()

👨🏻‍💻 Что дальше

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

Программирование открывает мир возможностей для творчества и навыков решения проблем. Теперь у вас есть основа, необходимая для дальнейшего изучения языков программирования, таких как Python. С каждым новым набором навыков вы будете становиться все более опытными в разработке решений для создания уже реальных приложений.

Следующим вашим шагом в python-разработке должна стать реализация своих первых пет-проектов. Попробуйте обратиться к нашему HR, предоставив ссылки на ваши github-репозитории с решением задач этого курса, чтобы попасть на курс Spacelab Python.