Код можно писать по-разному: быстро или медленно, понятно и читабельно или плохо и неподдерживаемо. Это зависит от предпочтений, навыков и бэкграунда. Использование фреймворков (англ. framework — «каркас, структура») помогает уравнять эти различия. Программист использует готовые шаблоны, дополняет их своим кодом и с их помощью вносит определённую логику решения задач и проблем бизнеса.
Представим, что нужно построить здание или корабль. Это трудно сделать так, чтобы вместо дома не получился шалаш, а вместо корабля — плот. В случае с кораблём фреймворк — это каркас, а с домом — фундамент. Фреймворк описывает начальную заготовку и свод инструкций, которые упрощают достижение конечной цели: каркас корабля и фундамент дома достроить проще, чем собирать с нуля.
Фреймворки в программировании подходят для решения многих задач: создания интернет-магазинов, блогов, приложений с множеством тысяч активных пользователей. Любая CMS-система — это framework, который достаточно наполнить контентом, и простой интернет-магазин готов.
При разработке фреймворка программист учитывает его структуру и ограничения. Во фреймворке есть реализованные классы, предопределённые переменные, константы и готовые решения отдельных функциональностей: валидация запросов, работа с БД, авторизация, работа с формами. Как в тетрисе, во фреймворке нужно взять нужные блоки, связать их и использовать.
Структура фреймворка FastAPI
Фреймворки подходят для решения многих задач: автоматизации, создания MVP (англ. minimum viable product — «минимально жизнеспособный продукт») или проверки идей. Обычно перед программистом стоят следующие задачи: уменьшить время разработки и последующей поддержки, обеспечить стабильность и защищённость приложения. Во всех этих случаях framework приходит на помощь: он протестирован, позволяет решать любую бизнес-задачу и выдерживать большие нагрузки. В отличие от CMS, фреймворк — это низкоуровневое решение, то есть он содержит некоторый базовый функционал, и многие компоненты придётся дорабатывать вручную.
Для чего нужен фреймворк:
● Увеличить скорость разработки.
За счёт переиспользования готовых модулей фреймворк уменьшает время релиза новой функции и разработки сервиса или приложения. Если бы пришлось разрабатывать с нуля, то затраченное время было бы колоссальным.
Это полезная функция для начинающих программистов. Если использовать готовый шаблон, лишь дополняя или связывая некоторые функциональные блоки, и наполнять его контентом, это уменьшает шансы ошибиться. На выходе получается «чистый» код, отвечающий стандартам разработки.
● Упростить работу.
Фреймворки похожи, поэтому программист сможет разобраться с любым проектом, созданным на базе фреймворка, если ранее работал с ним или с другим аналогичным.
Обычно фреймворк — это open-source-проект, то есть если чего-то не хватает, то всегда можно дополнить, а сообщество специалистов поможет советом. Над открытым проектом работают, например, в системах хранения GitHub или GitLab, и здесь нет каких-то строгих правил — дополнять и улучшать framework может любой специалист.
● Обеспечить безопасность.
Фреймворки защищены и протестированы. Самые распространённые уязвимости или способы получения конфиденциальных данных — SQL-инъекции, XSS-атаки, SSRF, брутфорс — учтены и не представляют угрозы. По уровню безопасности фреймворки превосходят самописные решения и помогают обезопасить приложения от взлома.
При использовании фреймворка код встраивается в заранее заложенную структуру приложения и дополняет каркас за счёт переиспользования готовых модулей.
1. Фронтенд-фреймворки
2. Бэкенд-фреймворки
Отвечают за возможность хранения, обработки и анализа больших массивов данных из различных баз данных и за работоспособность сайта или приложения, которые с ними работают.
Наиболее популярные фреймворки на Python для бэкенда:
● Django,
● Flask,
● FastAPI.
С помощью серверных фреймворков не получится разработать веб-приложение с поддержкой сложных интерфейсов, потому что они ограничены в своей функциональности. Зато есть возможность создавать статичные сайты или передавать нужные данные из БД для обработки на стороне веб-фреймворка.
3. Кроссплатформенные фреймворки
Кроссплатформенность позволяет запускать исходный код на различных операционных системах (Windows, Linux, macOS) или платформах (в вебе, на десктопных или мобильных устройствах).
Кроссплатформенные фреймворки для сайтов имеют преимущества и недостатки: выигрывая в скорости разработки по сравнению с нативным решением, приходится жертвовать качеством и скоростью работы. Эти фреймворки могут быть сложными для начинающих.
К кроссплатформенным фреймворкам относятся:
● Kivy (Python);
● React Native (JavaScript);
● Electron (JavaScript);
● Flutter (Dart);
● Xamarin (C#).
Фреймворки делят по типу выполнения задач на синхронные и асинхронные.
В синхронных необходимо дождаться ответа: выполнение следующей операции или задачи блокируется до момента, пока не будет завершена предыдущая. У асинхронных не нужно ждать завершения команд — программа продолжает своё выполнение.
Поведение фреймворков можно сравнить с перепиской в почте, когда отправитель не ждёт мгновенного ответа, а продолжает заниматься другими делами. К синхронным относятся фреймворки Flask, Bottle, Pyramid, Django (асинхронность для запросов и асинхронный ORM появились только в версии 4.1), к асинхронным — Tornado, Starlette, Sanic, FastAPI.
Фреймворки реализуют одну общую архитектуру Model–View–Controller, или MVC. Она подразумевает такое разделение структуры приложения, когда различные блоки отвечают за работу с данными, их отображение и бизнес-логику их взаимодействия.
Модель (Model) — этот блок отвечает за доступ к данным из базы, файлов или иных облачных сервисов. Например, при создании To-Do-приложения код компонента Model будет хранить список всех задач, информацию об отдельных задачах, различные статусы их изменения или некоторые комментарии.
Отображение (View) — определяет взаимодействие с пользователем. Код компонента отвечает за отображение данных, например, через шаблон, веб-страницу или экран телефона. От него зависит внешний вид и возможные действия.
Контроллер (Controller) — занимается связкой двух предыдущих сущностей, чтобы данные из хранилища передавались в отображение. Код и логика компонента проверяют, как сайт реагирует на действия пользователей: обрабатывает запросы и выдаёт результат.
Покупка кофе через MVC:
Модель: ингредиенты для приготовления напитка.
Контроллер: вендинговый аппарат, приготовивший напиток.
Отображение: чашка горячего эспрессо.
Фреймворков для сайтов много, поэтому начинающему разработчику легко запутаться. При выборе инструмента нужно обратить внимание на следующие критерии:
● Скорость разработки и уровень вхождения.
Главный критерий в разработке — это время. Наличие встроенных пакетов и готовых модулей упрощает и уменьшает время на разработку. Плюсом будет, если фреймворк содержит функциональность AAA (авторизации и аутентификации), ORM или SQL-генераторы для работы с базами данных, middleware для работы с cookie, запросами и ответами.
Большинство фреймворков для разработки сайтов хорошо документированы и содержат все необходимые подсказки по быстрому старту и использованию. Всегда можно обратиться за помощью к IT-сообществу. В программировании, скорее всего, уже кто-то сталкивался с данной проблемой или вопросом, поэтому можно поискать ответ на свой вопрос.
● Масштабируемость и последующая поддержка.
Периодически приложение нужно масштабировать из-за различных факторов: роста числа пользователей и увеличения нагрузки, в рамках A/B-тестов при улучшении и доработке сервисов, необходимости использования других серверов, хранилищ или облачных решений.
Если изначально кодовая база и архитектура фреймворка предполагают малую связность модулей друг с другом, то масштабирование не вызовет проблем и не займёт много времени.
● Производительность и популярность.
Важным критерием при выборе фреймворка является его производительность. Она определяет количество запросов, которые приложение на основе фреймворка может обработать в единицу времени, или RPS (от англ. Requests Per Second).
Решающим фактором для выбора фреймворка становится его популярность среди опытных программистов. Например, в Python популярен Django из-за своей простоты. Его архитектура позволяет быстро разрабатывать бэкенд для приложений, и есть графический интерфейс взаимодействия с БД, для которого не нужно отдельно писать код.
Django изначально был создан для отображения новостной ленты, поэтому на нём легко создать личный блог и быстро наполнить его контентом. Всё уже готово к запуску — достаточно выполнить пару команд, и проект запущен:
django-admin startproject my-blog
python my-blog/manage.py migrate
python my-blog/manage.py runserver localhost:8080
Посмотреть данные ежегодного опроса опытных разработчиков можно на портале Stack Overflow.
Архитектура и структура практически всех фреймворков одинаковы: можно разобраться в работе одного, чтобы понять, как работать с другими. Это можно сделать самостоятельно: попробовать написать небольшой проект вроде To-Do-приложения, создать планировщик или календарь, систему ведения бюджета, небольшой интернет-магазин, бот в телеграме. Главное — взяться за проект, который интересен, или рутинную задачу, которая отнимает много времени и потому требует автоматизации.
Другие варианты практики:
● Обучающие курсы.
Этот вариант поможет освоить азы, структурировать информацию и понять, как работает фреймворк. Выбор языка или технологии не столь важен — фреймворки есть в каждом. Нет смысла изучать framework, если непонятны особенности языка, на котором он написан. Поэтому сначала нужно разобраться в синтаксическом сахаре — командах, операциях, функциях, а затем в работе с памятью, стандартными библиотеками и сборщиком мусора.
Начинающим будет полезно разобраться в Computer Science: как работает компьютер и сеть, какие языки программирования бывают и какая между ними разница, как работать с базами данных, пользоваться консолью, деплоить приложения.
● Митапы.
Это неформальная встреча, где обсуждаются проблемы, с которыми IT-специалисты сталкиваются на работе, обмениваются опытом их решения, сравнивают альтернативные варианты или новые подходы, технологии, фреймворки и языки. Начинающему специалисту полезно отслеживать похожие встречи в своём городе. Многие крупные компании и веб-студии проводят митапы.
● Хакатоны.
Это соревнование, где за короткий срок нужно решить задачу для бизнеса или разработать прототип продукта. Интересная практика для продолжающих, с реальными проектами. Здесь можно окунуться в дух стартапа, где приходится работать в режиме нон-стоп, есть много фастфуда, пить энергетики и где все вокруг пытаются изменить мир или сделать его немного лучше. Отличительной чертой хакатонов является нетворкинг, знакомство с жюри, возможность получить оффер или выиграть денежный приз, получить гонорар на последующую доработку решения.
В самом начале пути лучше попробовать обойтись без фреймворка: написать код с нуля и только потом использовать фреймворк, чтобы проверить и сравнить, как реализованы различные блоки приложения, провести работу над ошибками.
1. Полюбить «Банду четырёх».
Так принято называть авторов книги «Приёмы объектно-ориентированного проектирования. Паттерны проектирования». Прочесть её для понимания SOLID и паттернов программирования, которые помогают писать понятный и поддерживаемый код — обязательное требование для разработчика в любой компании.
2. Быть в тренде.
Языки, как и технологии, очень динамичны. Чтобы не пропустить новую технологию или тренд, придётся много читать и фильтровать терабайты информации. Эффективный, но пассивный вариант — подписаться на еженедельную рассылку по нужному языку или технологии. Достаточно ввести в поисковике название языка или фреймворка с приставкой weekly, например python weekly. И следить, как он развивается. Для чтения статей подойдёт Habr, Medium или Яндекс Практикум, для общения — Reddit. Отличные учителя — документация и репозитории с открытым кодом на GitHub/GitLab.
3. Осваивать теорию и практиковать.
Расширять область знаний в ширину: например, изучать Computer Science, сеть, базы данных, шифрование. Улучшать свои познания в глубину: разбираться в особенностях языков программирования, реализации стандартных пакетов и библиотек или фреймворков. Теорию закреплять практикой.
Читать также: