Путь программиста. The server side

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

Основы Питона

Пишем консольные утилиты для работы с файлами. По ходу решения задач осваиваем:

  • базовые синтаксические конструкции: отступы, if, for, def
  • типы данных dict, list, tuple, int, float, string
  • стандартные модули os, collections, argparse и unittest
  • regular expressions
  • list comprehensions
  • JSON
  • разбиение программы на модули
  • работа с исключениями

Задача #11. Поиск дубликатов

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

Нужен скрипт, который принимает на вход папку, просматривает все файлы в ней (и всех подпапках и под-под-...папках) и сообщает, если находит дубликаты. Дубликаты – это два файла с одинаковым именем и размером.

пример задачи

Сторонние модули

Создаем простые парсеры, работаем с API вКонтакте и другими публичными сервисами. По ходу решения задач осваиваем:

  • PYPI + pip
  • virtualenv + requirements.txt
  • API вКонтакте
  • GitHub API
  • библиотеки requests, Pillow, BeautifulSoup

Задача #17. Мониторинг сайтов

Сайт недостаточно сделать и запустить. Нужно также обеспечить его работоспособность.

Добиться этого не всегда просто, здесь не обойтись без средств мониторинга. Давай создадим утилиту для проверки состояния наших сайтов. На входе - текстовый файл с URL адресами для проверки. На выходе - статус каждого сайта по результатам следующих проверок:

  • сервер отвечает на запрос статусом HTTP 200;
  • доменное имя сайта проплачено как минимум на 1 месяц вперед.
пример задачи

Фронтенд

Знакомимся с HTML и CSS. Создаем простые сайты.

  • общая структура HTML док-та
  • подключение CSS и JS
  • browser dev tools
  • основные HTML теги
  • адаптивная верстка на Bootstrap
  • экранирования спец.символов в HTML и URL
  • jQuery
  • browser events
  • DOM scripting
  • GitHub Pages

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

Задача #19. Генератор сайтов
Сайт со статьями в формате Markdown
Задача #20. Сайт-вдохновение
Поднимаем настроение, травим анекдоты
Задача #31. Агентство Недвижимости
Сайт для риэлторской компании

Базы Данных

Погружаемся в особенности реляционных баз данных

  • SQLite и PostgreSQL
  • pgAdmin
  • ORM SQLAlchemy
  • Миграция структуры данных Alembic

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

Задача #27. Скорость колл-центра
Отслеживаем обработку звонков

Гит

Узнаём про хуки, мерджи, ветки, ребейзы, черипики. Не пушим с форсом.

  • git clone, pull, commit, push
  • git branche
  • git merge
  • git hooks
  • git rebase
  • pull requests

Задача #30. Столкновение верстальщиков

Случился форс-мажор. Иван и Петр не смогли договориться и одновременно взялись за реализацию фич нового лендинга. Петру повезло, он успел закоммитить первым. А вот Иван уже час как бьется с vimdiff в попытках закрыть его в консоли. Носится по офису в панике.

Помоги им провести мердж. Уложи все в один коммит, так поступают настоящие ниндзя.

пример задачи

Тестирование

Осваиваем базовые приёмы тестирования. Узнаём про юнит-тесты и интеграционные тесты. Считаем покрытие. Рефакторим со спокойной душой.

  • unittest
  • mock
  • selenium
  • coverage

Задача #31. Что делать когда ответственность высока

На предприятии внедряют свою систему по управлению проектами. Чтобы спать по ночам спокойно нужны интеграционные тесты.

Необходимо покрыть тестами основные сценарии использования сервиса:

  • Загрузка с сервера и отображение списка актуальных задач
  • Перетаскивание задачи из одного столбца в другой
  • Редактирование существующей задачи
  • Пометка задачи как решенной
  • Создание новой задачи
пример задачи

Девопс

Создаём архитектуру. Отправляем исходники, конфигурируем сервера и устанавливаем библиотеки одной командой. Смотрим свысока на всех, кто делает это руками.

  • ssh, ssh keys
  • scp
  • Nginx
  • uWSGI и Gunicorn
  • systemd
  • VirtualBox
  • Docker, docker-compose
  • Fabric
  • Ansible

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

Задача #25. Что в кино
Создаем сайт-афишу, размещаем на Heroku

Джанго

Знакомимся с Джанго, осваиваем этот новый мир. Создаем сайты и API.

  • manage.py and custom commands
  • routing
  • Templates, Context Processors, Custom tags and filters
  • ORM, migrations
  • Middlewares
  • caching
  • django.contrib.admin
  • Django REST framework
  • Celery
  • sorl-thumbnail
  • python-social-auth
  • GeoDjango

НоуЭскуэль

Осваиваем Монгу и Редис, сравниваем с привычным Посгресом

  • MongoDB
  • Redis
  • Memcached

Фронтенд+

Узнаём больше фреймворков. Знакомимся с Ангуляром и Реактом. Осваиваем Энпээм. Понимаем, что Яваскрипт не так плох. Отказываемся от этой мысли.

  • AngularJS
  • React, Vue.js
  • node.js, npm
  • Browserify
  • Webpack
  • SASS
  • Pug

Асинхронность

Пишем неблокирующий код. Осваиваем новую парадигму.

  • asyncio
  • aiohttp
  • aio-что-угодно