Skip to content

Latest commit

 

History

History
341 lines (308 loc) · 33.8 KB

Roadmap-Python-v.0.md

File metadata and controls

341 lines (308 loc) · 33.8 KB

Roadmap

Дорожная карта по изучению Python v.0.

Данный документ закрыт
Из этого документа будут браться данные для заполнения текущей версии документа: Roadmap-Python-v.0.1.md

Для получения базовых знаний был выбран ресурс Stepik.org. В дальнейшем к нему добавился еще один ресурс PythonTutor.ru. Так же возможны ссылки и на другие ресурсы.

ADD [07.09.2017]: Вышел курс Программирование на Python Дорожная карта по изучению Python v.0.1


Оглавление:

[TOC]


Базовые знания языка.

Программирование на Python (ссылка)

О КУРСЕ: Курс посвящен базовым понятиям и элементам языка программирования Python (операторы, числовые и строковые переменные, списки, условия и циклы). Курс является вводным и наиболее подойдет слушателям, не имеющим опыта написания программ ни на одном из языков программирования.

    • Операторы. Переменные. Типы данных. Условия
    • Общая информация о курсе
    • Введение: программы и Python. Проверка заданий
    • Интерактивный режим Python. IPython
    • Установка Python на компьютер
    • Операции с целыми числами
    • Операции с вещественными числами
    • Типы данных
    • Переменные. Стандартный ввод/вывод
    • Логические операции, операции сравнения
    • Условия: if, else, elif. Блоки, отступы
    • Строки
    • Задачи по материалам недели
    • Циклы. Строки. Списки
    • Цикл while
    • Операторы break, continue
    • Цикл for
    • Строки и символы
    • Списки
    • Задачи по материалам недели
    • Функции. Словари. Интерпретатор. Файлы. Модули.
    • Функции
    • Словари
    • Интерпретатор: установка, запуск скрипта
    • Файловый ввод/вывод
    • Модули, подключение модулей
    • Установка дополнительных модулей
    • Задачи по материалам недели
    • Библиотеки для анализа данных. NumPy
    • Библиотека Matplotlib
    • Заключение

Сертификат


Интерактивный учебник языка Питон(ссылка)

О Курсе: Учитесь, решая серьёзные задачи прямо в браузере. Основные плюсы:

  • Удобный визуализатор
  • Не нужно ничего устанавливать на компьютер: пишите и исполняйте код прямо в браузере
  • Отлаживайте код по шагам и смотрите за значениями переменных
  • Проверяйте правильность решения на разных входных и выходных данных
  • Визуализатор переводит и объясняет ошибки в программах
  • После решения задачи ознакомьтесь с образцовым решением от нас Курс состоит из:
  • Занятие 1. Ввод и вывод данных
  • Занятие 2. Условия
  • Занятие 3. Вычисления
  • Занятие 4. Цикл for
  • Занятие 5. Строки
  • Занятие 6. Цикл while
  • Занятие 7. Списки
  • Занятие 8. Функции и рекурсия
  • Занятие 9. Двумерные массивы
  • Занятие 10. Множества
  • Занятие 11. Словари

Текущее состояние профиля, можно посмотреть по ссылке: Профиль


Python: основы и применение (ссылка)

О КУРСЕ: Курс посвящен базовым принципам языка Python и программирования в целом. Он хорошо подойдет тем, кто уже может писать простейшие программы на Python или тем, кто до этого программировал на других языках.

    • Базовые принципы языка Python
    • Введение
    • Модель данных: объекты
    • Функции и стек вызовов
    • Пространства имён и области видимости
    • Введение в классы
    • Наследование классов
    • Cтандартные средства языка Python
    • Ошибки и исключения
    • Работа с кодом: модули и импорт
    • Итераторы и генераторы
    • Работа с файловой системой и файлами
    • Работа с функциями: functool и лямбда функции
    • Стиль программирования: pep8 и документация
    • Применение Python: анализ текста
    • Стандартные методы и функции для строк
    • Регулярные выражения в Python
    • Обзорно об интернете: http-запросы, html-страницы и requests
    • Распространённые форматы текстовых файлов: CSV, JSON
    • API
    • XML, библиотека ElementTree, библиотека lxml
    • Заключение

Сертификат


Базы данных

Введение в базы данных (ссылка)

О КУРСЕ: Знакомство с методами структурированного хранения данных, основами SQL, принципами использования баз данных в приложениях, обзор не реляционных способов хранения данных.

    • Введение и базовые операции SQL
    • Термины и определения
    • Базовые операции SQL
    • Агрегация данных
    • Основы реляционных баз данных
    • Введение в реляционную модель данных
    • Архитектура ANSI/SPARC
    • Выборки из нескольких источников
    • Триггеры и хранимые процедуры
    • Проектирование баз данных
    • Задача проектирования баз данных
    • Концептуальное проектирование
    • Логическое и физическое проектирование
    • Инструмент проектирования MySQL Workbench
    • SQL-DDL
    • Нормализация реляционной базы данных
    • Термины нормализации
    • Основные нормальные формы: 1НФ, 2НФ, 3НФ, НФБК
    • Прочие нормальные формы: 4NF, 5NF, DKNF, 6NF
    • Использование ORM
    • Моделирование данных с использованием ORM
    • Администрирование MySQL и оптимизация запросов
    • Сложность выполнения запросов. EXPLAIN
    • Индексы
    • Практическая работа с индексами
    • Нереляционные СУБД
    • Термины и характеристики NoSQL
    • Обзор key-value СУБД Redis
    • Обзор документоориентированной СУБД MongoDB
    • Заключительный модуль
    • Финальный урок

Сертификат


Погружение в СУБД (ссылка)

О КУРСЕ: Курс для тех, кто имеет некоторый опыт общения с реляционными СУБД и желает знать больше про то, как они работают.

    • Форум курса
    • Общие вопросы
    • Схема БД. Одна лучше другой.
    • Введение
    • Декомпозиция
    • Функциональные зависимости
    • Домашнее задание №1
    • Схема БД. Ключи и связи.
    • Введение
    • Ключевые атрибуты
    • Связи между таблицами
    • Нормальная форма Бойса-Кодда
    • Ошибки при проектировании схемы
    • Суррогатные ключи
    • Что нужно запомнить про ключи, связи и нормальные формы
    • Домашнее задание №2
    • Разбор задач второго модуля
    • Разбор задач
    • СУБД и приложение. Разделение обязанностей. Часть I
    • Введение
    • СУБД тормозит
    • Жизнь простого запроса
    • Соединения таблиц
    • Физическое выполнение соединений
    • Приложение и сессии
    • Подведем итоги
    • Домашнее задание №3
    • СУБД и приложение. Разделение обязанностей. Часть II
    • Введение
    • Представления
    • Хранимые процедуры
    • Case Study: приложение, устойчивое к смене СУБД
    • Подведем итоги
    • Домашнее задание
    • Агрегатные и оконные функции
    • Введение
    • Агрегатные функции
    • Обобщенные табличные выражения
    • Оконные функции
    • Подведем итоги
    • Домашнее задание №5
    • Деревянные структуры и рекурсивные запросы
    • Введение
    • Списки смежности и рекурсивные запросы
    • Структурные метки
    • Нумерации вершин и вложенные множества
    • Сравнение производительности разных схем хранения дерева
    • Подведем итоги
    • Домашнее задание
    • Совместный доступ к данным
    • Введение
    • ACID транзакции
    • Чтение неподтвержденных данных
    • Чтение подтвержденных данных
    • Повторяемое чтение
    • Сериализуемые транзакции
    • Что делать, если транзакции не поддерживаются
    • Подведем итоги
    • Домашнее задание
    • Оптимизация выполнения запросов
    • Введение
    • Жизнь запроса
    • Важно ли, как записан запрос?
    • Индексы
    • Материализация и избыточная информация
    • Домашнее задание
    • Окончание курса
    • Церемония закрытия

Сертификат


Фреймворки

Web-технологии (ссылка)

О КУРСЕ: Курс посвящен разработке серверной части web-приложений, их архитектуре и протоколу HTTP. По итогам курса вы научитесь: разрабатывать приложения на языке python, использовать MVC фреймворки, изучите верстку HTML страниц, погрузитесь в тематику web разработки и сможете выбирать конкретные технологии.

    • Статический сайт
    • Вводный урок курса
    • Архитектура Web приложений
    • Web-клиенты
    • Язык разметки HTML
    • CSS - язык описания стилей
    • Сетевые протоколы
    • Протокол HTTP
    • Web-сервера
    • Архитектура frontend-backend
    • Динамический сайт
    • MVC фреймворки
    • MVC фреймворки (продолжение)
    • Работа с СУБД
    • Django модели
    • Отображение данных
    • Обработка форм
    • Сессии и авторизация
    • Дополнительные темы
    • Технология AJAX
    • Real-Time сообщения
    • Заключительный урок

Сертификат



Задачи

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

Веб:

    • Возьмите один из веб-фреймворков для изучаемого вами языка и напишите сайт, который выводит на главной странице надпись «Привет, мир!». В случае с Haskell, к примеру, таким фреймворком будет Yesod, Scotty, Happstack или Snap.
    • Добавьте форму для ввода имени пользователя, после отправки которой появляется надпись «Привет, (имя пользователя)!».
    • Добавьте сохранение информации о пользователе в кукисах, чтобы посетителю не приходилось каждый раз вводить свое имя при заходе на сайт. Сделайте кнопку «выход», при нажатии на которую кукисы удаляются.
    • Дайте пользователям возможность заливать аватарки.
    • Пусть у пользователей будет возможность выбирать язык интерфейса.
    • Одним пользователям нравится читать черный текст на белом фоне, а другим — белый текст на черном фоне. Дайте им возможность переключаться между несколькими шаблонами сайта.
    • Разверните написанное вами приложение в Амазоне или в ином облачном хостинге.

Базы данных:

    • Напишите телефонную книгу с использованием какой-нибудь реляционной СУБД, например, SQLite, MySQL или PostgreSQL. Телефонная книга — это приложение, которое хранит информацию о ваших знакомых и способах, которыми можно связаться с ними. Вы можете создавать, редактировать и удалять людей, а также различные их контакты — телефоны, скайпы, адреса блогов и так далее.
    • Существуют ли ORM для изучаемого вами языка программирования? Сделайте так, чтобы приложение из предыдущего пункта могло работать с любыми двумя РСУБД, используя один и тот же код.
    • Напишите телефонную книгу, используя для хранения информации одну из NoSQL баз данных, например, MongoDB, Couchbase, Cassandra или Riak;
    • Напишите небольшое веб-приложение, отображающее число пользователей, находящихся в данный момент онлайн. Для этого воспользуйтесь одним их key-value хранилищ, например, Memcached или Redis. Считается, что пользователь находится онлайн, если он запрашивал одну из страниц сайта в течение последних пяти минут.

Сети и протоколы:

    • Напишите программу, выводящую последние 10 твитов, содержащих указанный хэштэг. Используйте HTTP API социальной сети Twitter.
    • Напишите агрегатор блогов. Имеется список RSS- и Atom-лент. Программа должна генерировать файл index.html, содержащий ссылки на последние 50 постов, опубликованных в блогах из списка. Настройте автоматический запуск программы каждые 10 минут. Убедитесь, что файл index.html обновляется.
    • Добавьте в программу из предыдущего пункта возможность заливать index.html в указанный каталог на удаленном сервере по протоколу FTP. Используйте готовую библиотеку для работы с FTP.
    • Напишите программу, отправляющую электронное письмо на указанный адрес по протоколу SMTP с использованием готовой библиотеки. Затем прикрепите к письму несколько файлов. Сделайте так, чтобы в почтовых клиентах с поддержкой HTML отображалась HTML-версия письма с картинкой, а в клиентах без поддержки HTML — простая текстовая версия письма.
    • Напишите программу, уведомляющую пользователя о получении новых писем. Используйте протокол POP3. Затем добавьте в программу поддержку IMAP. Убедитесь, что программа поддерживает SSL. Для работы с POP3 и IMAP используйте готовые библиотеки.
    • Напишите простого ICQ-, IRC- или Jabber-бота с использованием готовой библиотеки для работы по выбранному протоколу.
    • Выберите протокол из следующего списка: DNS, FTP, POP3, SMTP, IRC, IMAP, Jabber, ICQ, ed2k, BitTorrent. Напишите собственную библиотеку для работы по выбранному протоколу со стороны клиента. Или напишите сервер.
    • Существуют ли для изучаемого вам языка программирования биндинги к libpcap? Если да, попробуйте написать простой HTTP-сниффер. Если нет, попробуйте написать простой аналог libpcap на raw-сокетах.

Многопоточность:

    • Напишите программу, которая в несколько потоков скачивает файлы по заданному списку URL-адресов. Используйте «традиционную» многопоточность с мьютексами, семафорами и так далее. Разумеется, если она поддерживается изучаемым вами языком.
    • Решите ту же задачу с использованием процессов операционной системы вместо потоков.
    • Можно ли в изучаемом вами языке использовать легковесные потоки, событийно-ориентированное программирование или транзакционную память? Попробуйте решить задачу с помощью одного из этих подходов.

Графика:

    • Напишите программу, рисующую диаграммы для некоторых данных. Программа должна уметь строить графики, гистограммы и круговые диаграммы.
    • Задан список пар однонаправленно связанных элементов. Напишите программу, отображающую эти данные в виде графа.
    • Напишите простую библиотеку для рисования Captcha. Используйте GD или аналогичную библиотеку на ваш выбор.
    • Напишите конвертер из одного графического формата в другой. Как минимум, программа должна поддерживать форматы bmp, jpeg, gif и png.

Некоторые алгоритмы:

    • Напишите программу, собирающую статистику поисковых запросов, по которым пользователи заходят на некоторый сайт. Для этого пропарсите при помощи регулярных выражений логи веб-сервера за месяц.
    • Напишите библиотеку для поиска на графах в глубину и в ширину, а также при помощи алгоритма A*. Реализуйте прямой, обратный и двунаправленный поиск;
    • Напишите генератор лабиринтов. Затем напишите программу, которая проходит лабиринты, сгенерированные предыдущей программой.
    • Найдите сайт, использующий как можно более простую Captcha. Напишите программу, распознающую символы на этой Captcha. Используйте многослойные нейронные сети.
    • Аппроксимируйте функцию синус на отрезке [0; pi/2] при помощи полинома четвертой степени. Для подбора коэффициентов воспользуйтесь генетическим алгоритмом. Повторите задачу для другой функции и другого отрезка.
    • Создайте библиотеку, реализующую алгоритм сжатия LZW. Затем протестируйте библиотеку на типичных данных. Насколько ее скорость и коэффициент сжатия отличаются от этих же параметров у других библиотек для сжатия данных без потерь?
    • Реализуйте алгоритм перевода римских цифр в арабские, а также алгоритм преобразования в обратную сторону.
    • Напишите библиотеку для работы с графами, матрицами, датами, комплексными числами или числами произвольной длины.
    • Напишите свою реализацию хэш-таблиц, АВЛ-деревьев, двусвязных и xor-связных списков, а также других структур данных на ваш выбор.
    • Придумайте простой язык программирования и напишите его компилятор или интерпретатор.

Криптография:

    • Найдите библиотеку для генерации криптостойких псевдослучайных чисел. Напишите на ее основе генератор паролей. Если такой библиотеки для изучаемого вами языка нет, напишите ее. Из литературы тут можно посоветовать Практическую Криптографию.
    • Напишите программу, считающую MD5, SHA1, SHA256 или иную хэш-функцию от заданной строки. Напишите программу, считающую ту же хэш-функцию от большого файла на диске.
    • Напишите программу, шифрующую файлы при помощи AES или иного симметричного шифра.
    • Найдите библиотеку, реализующую алгоритм RSA. Напишите с ее помощью программу для обмена ключами по открытому каналу (например, электронной почте) и передачи по этому же каналу зашифрованных и защищенных цифровой подписью сообщений.
    • Сделайте то же самое с использованием эллиптических кривых. Если для изучаемого языка нет готовой библиотеки для работы с эллиптическими кривыми, напишите ее.

Десктоп:

    • Напишите простое GUI-приложение с полем для ввода имени и кнопкой с надписью «ОК». При нажатии на кнопку должно появляться сообщение «Привет, (введенное имя)!». Продолжите работу над приложением. Пусть у программы будет иконка в трее и она будет уметь сворачиваться в этот трей. Научитесь выводить popup-сообщения.
    • Можно ли на изучаемом вами языке программирования сделать скриншот экрана и сохранить его в bmp-файл? Если да, то попробуйте написать программу, делающую это.
    • Напишите проигрыватель mp3-, ogg- и wav-файлов.
    • Создайте программу, которая рисует вращающийся куб с разноцветными гранями при помощи OpenGL или DirectX.
    • Напишите приложение, снимающую вебкамерой фото и/или видео.
    • Научитесь сканировать документы и отправлять их на печать.
    • Напишите программу, записывающую звук с микрофона в wav-файл.
    • Напишите генератор Excel-отчетов с графиками и гистограммами. Проверьте, что он нормально отображается в Microsoft Office, Libre Office и Google Docs.

Прочее:

    • Выполните любое задание из предыдущих пунктов. Убедитесь, что написанная программа работает как минимум под двумя операционными системами, например, под Windows и под Linux или под Linux и MacOS.
    • Напишите программу для рекурсивного поиска файлов на диске. Напишите менеджер процессов. Если вы пишите под Windows, напишите программу, добавляющую себя на автозапуск путем редактирования реестра. Напишите программу, перечисляющую заголовки всех открытых окон.
    • Попробуйте написать простую динамическую библиотеку. Затем напишите программу, подгружающую эту библиотеку и вызывающую функции из нее.
    • Как вызывать из изучаемого вами языка функции, написанные на Си? Можно ли написать программу на Си, вызывающую функции, написанные на изучаемом вами языке? Если вы изучаете Си, замените в предыдущих двух предложениях «Си» на «OCaml».
    • Можно ли писать на изучаемом вами языке под Android, iOS или Windows Phone? Попробуйте написать простое мобильное приложение.

Технологии связанный с Python или просто необходимые для работы

Вынесенно в отдельный файл: Technology.md


Коментарии:

Artem Malyshev: Очень популярная вешь у работадателей это моя любимая django. Штука большая, в основы въехать легко, научиться готовить правильно понадобиться много времени. После это обычно по популяности идёт flask и sqlalchemy. Скляночка учится за вечер, там вообще всё просто. Алхимия штука сопоставимая по размеру с самой джангой и умеет на порядок больше всего. Я бы не советовал за неё браться сразу. После этого ещё просят асинхронные веши типо tornado, twisted или asyncio. Штуки требуют развернуть мышление на 180 градусов. Их тоже лучше отложить подальше. Хотя при из знании ценник на специалиста увеличивается вдвое. Советую вцепиться в связку mvc framework + html + css + database В конце заметил упоминание desktop, ocaml и c. Для питониста эти вещи ещё менее обязательные чем вышеупомянутые специфичные решения. Их не все создатели питона-то знают.

Сергей Архипов: Только я бы, наверное, совершенно не стал бы останавливаться на моментах, связанных с GUI: традиционные GUI отмирают постепенно, сейчас приложение - это в каком-то смысле сайт (пока это, может быть, еще не очень очевидно, но почти все новое так и делается - оболочка на Electron, которая ходит на какой-то сайт за данными)