Коллекции

Во всём мире Python часто используют для работы с данными. Объём данных может быть небольшим — такой сможет обработать и один слабый компьютер. Но данных может быть и наcтолько много, что потребуются целые вычислительные кластеры (так называют несколько компьютеров, объединённых в сеть и решающих общую задачу), ибо только такие мощности способны переварить подобные объемы информации.

Есть даже такая отрасль — data science, наука о данных. И Python — один из основных инструментов, которые применяются в данной сфере. Машинное обучение, экспертные системы, интеллектуальный анализ данных — со всем этим работают питонисты!

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

Подробнее о возможностях языка и основах синтаксиса можно прочитать здесь

Ввод/вывод IO

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

Представим, что вы реализуете web-приложение, пользователь которого может загружать изображения и просматривать как в оригинальном размере, так и в виде галереи миниатюр (уменьшенных копий изображений). Не правда ли, задача вполне реалистична. Подумаем, какие виды взаимодействия будет использовать программа на Python, выступающая в роли сервера. Когда пользователь выберет файл в браузере и нажмёт кнопку отправить, программа

Это далеко не полный список операций ввода-вывода (Input-Output, IO), которые выполняет даже сравнительно простой сервер web-приложения.

HTTP

Популярный вопрос на собеседовании веб-разработчиков часто звучит так: «Что происходит после того, как в браузер ввели адрес сайта?». Подробный ответ на этот вопрос можно найти здесь. Главное, что хочет услышать собеседующий — ваш уровень понимания HTTP (Hyper-Text Transferring Protocol).

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

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

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

Вкратце:

HTTPS

Кроме http, в сети всё большее распространение получает https. Каждый пользователь сети должен знать, что нельзя выполнять действия, связанные с любыми секретными данными (например кредитками), на страницах, работающих по протоколу http. В таком случае любой человек, имеющий доступ к оборудованию, которое лежит между вами и сервером, обслуживающим сайт, сможет прочитать эти данные. Обратите внимание, что на популярных сайтах страницы оплаты всегда отдаются по https. В свою очередь, умение работать с https сразу добавляет новые понятия:

TCP/IP

http существует не сам по себе, а поверх стека протоколов TCP/IP. Базовое знание сетей важно по следующим причинам:

DNS

DNS, служба доменных имён. Каждый раз, когда мы вбиваем адрес в браузер, он выполняет DNS запросы к соответствующим серверам для выяснения того, какой ip-адрес принадлежит сайту. Дело в том, что соединение с сервером идёт по tcp/ip, а не по http. http начинает работать уже после того, как было установлено tcp соединение. Знание DNS важно по следующим причинам:

Тесты

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

Единственный по-настоящему действенный способ проверить, всё ли хорошо — автоматизированные тесты.

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

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

Двенадцать основных приёмов экстремального программирования (по первому изданию книги Extreme programming explained) могут быть объединены в четыре группы:

Анализ больших объёмов данных

Часто Python применяют для анализа больших объёмов данных. Это и машинное обучение, и нейронные сети. Python используется в статистических расчётах и в компьютерном зрении (Computer Vision, см. OpenVC), успешно помогает работать с естественными языками (Natural Language Processing).

Создание интерфейсов взаимодействия с пользователем.

Многие Python-программы предоставляет пользователю графический интерфейс (GUI, Graphical User Interface). Другие программы общаются с пользователями голосом (голосовые помощники) или текстом (чат-боты). В целом организация взаимодействия "человек-машина" — огромная отрасль со своими техниками, законами, научным фундаментом. И отрасль важная, ведь программа настолько успешна, насколько доволен её пользователь!

Инфраструктура

Пилить фичи — только полдела. Чтобы начать разрабатывать нужно для начала настроить окружение разработчика, используя Docker Compose. Затем, чтобы было куда выкладываться, нужно настроить production-окружение (то, где будет работать сайт) и в конце концов задеплоить (развернуть) туда сайт.

Современная инфраструктура — тоже код, и её нужно программировать. Вот список самых важных программ, созданных для этого: Ansible, Terraform, Docker.

Эксплуатация

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

Програмимист Алексей Пирогов, автор курса по которому я написал данный конспект, рекомендует начать с DataDog и Rollbar.