10918

План самостійного вивчення мови 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.
  • Ендпоінт доступний за посиланням.
  • Концептуальні відмінності - один клієнт повинен записувати дані в SQLDB, а інший - в 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.