Язык Python – популярный инструмент среди наших разработчиков. Его применяют для проектирования web-сайтов, десктопных приложений, игр и пр. Наверное, единственное с чем он не сможет справиться – написание операционной системы. В этой сфере конкурентов у языка Си нет. Однако для задач, связанных с администрированием операционных систем на базе Linux, он подходит идеально. Возможно поэтому, Python включен по умолчанию в дистрибутив Ubuntu и активно используется системными администраторами как язык серверных сценариев, а также на нем написана основная масса серверных утилит.
Почему Python столь популярен среди разработчиков, сисадминов, а также людей, занимающихся различными математическими изысканиями: нейронными сетями, машинным обучением и пр.?
Прежде всего, стоит отметить простоту его синтаксиса и краткость. Коренным отличием Питона принято считать оформление блоковых конструкций кода: циклы, условия, содержимое классов, методов и функций. В традиционных языках для выделения таких блоков принято использовать фигурные скобки, что мешает в работе со сложно вложенными структурами, где необходимо определить начало и конец длинного блока. Довольно часто у меня возникало ощущение дискомфорта, когда пропустил или вставил лишнюю фигурную скобку.
В Питоне для этого используются отступы (пробелы или табуляция). За счет этого повышается читабельность, а разработчик дисциплинируется в использовании отступов как управляющих структур, а не только как стилистических элементов оформления. Это послужило появлению так называемого «питонического стиля» в программировании, и ряд языков переняли этот принцип.
Код в Питоне не содержит «лишних» символов. Например, знак доллара перед переменными или точки с запятой в конце каждой строки, или использование var в начале объявления переменных. Это радует т.к. текста набирать нужно меньше. Не приходится держать в голове элементы, что не влияют на логику кода, либо могут быть позиционно вычислены самим интерпретатором. После того как я привык к Питону (после PHP), подобные элементы начали вызывать дискомфорт. Зачем они? Ведь оказывается, без них можно было обойтись!
По своей природе Питон довольно демократичен, он позволяет использовать как процедурный так и объектный подход. В его синтаксис встроены многие традиционные и широко используемые паттерны проектирования: декораторы, генераторы, синглтоны и пр.
Присутствуют все концепции ООП, хоть и не отличаются особой изысканностью как в C# или Java.
Импортирование библиотек интуитивно понятно и максимально упрощено. Везде поддерживается принцип минимализма и явности конструкций (без всякой магии с бубном).
Где нужна навигация по файловой системе (при импорте) либо доступ к методам объекта, вы будете использовать только точку, а не слеши, стрелки и пр.
Конечно это все мелочи, но к ним очень быстро привыкаешь ведь это удобно и понятно.
Все вышеперечисленное обеспечивает довольно низкий порог входа в программирование на Питоне. Он широко используется в учебных заведениях в качестве первого языка программирования для технических специальностей. А наличие множества библиотек, в особенности математических, и простоты их использования делает Питон основным инструментом для быстрой разработки, прототипирования и применения всевозможных математических алгоритмов.
И конечно есть фреймворки, в том числе для веба. В отличие от PHP их не так много. Самым мощным из фреймворков для web-приложений принято считать Django, есть конечно еще Tornado или Flask. Но они позиционируются как микрофреймворки и не обладают такой обширной инфраструктурой и степенью абстракции.
Основная цель любого фреймворка – обеспечить наиболее высокий уровень абстракции для программиста. Чем меньше кода пишет программист для решения типовых задач, тем круче фреймворк. Он позволяет сосредоточиться исключительно на логике приложения и не думать про то, что «под капотом».
В этом Django переплюнул многих конкурентов из мира PHP. Некоторые фреймфорки PHP подражают архитектурным паттернам Django. Когда я впервые познакомился с этим инструментом, многое показалось очень знакомым, ведь перед этим я использовал PHP-фреймворк Symfony, лежащий в основе Laravel. Я был приятно удивлен, узнав что я изучаю инструмент, положивший основу для многих библиотек на PHP.
В чем заключается абстракция? Например. В сердце любого Django приложения ставится модель (база данных) – набор классов (таблиц) с атрибутами (полями таблиц) и их свойствами. Далее классы связываются между собой добавлением атрибутов внешних ключей, обеспечивая связи «один-ко-многим», «многие-ко-многим» и пр. Имея в наличии такие классы, вы без труда создаете, достаете и изменяете данные в БД, не вникая как строить для нее SQL-запросы.
Конечно, не без интерфейса командной строки, что делает работу еще более продуктивной.
Так же эта модель используется для скаффолдинга CRUD-модулей и админ. Интерфейса. Причем последнй может быть создан буквально двумя строчками кода: первой вы создадите свой админ-класс, унаследованный от админ-класса джанги «из коробки», во второй – «кормите» этому классу ваш класс модели. Все. Вы получите работоспособную админку для таблицы с возможностью добавить, удалить и изменить запись. Такой себе phpMyAdmin, но с возможностью кастомизации.
Еще строка кода – фильтр по полям.
Еще строка – поиск.
Еще – кастомизация полей в списке.
Существует множество тем для админ интерфейса, включая Bootstrap.
За полчаса, можно создать админку для заказчика, и не переживать что в самый неподходящий момент что-то отвалится.
И конечно, стоит упомянуть обилие плагинов под Django.
К примеру, плагин REST API позволяет построить API, который, используя вашу модель данных, предоставит красочный web-интерфейс для тестирования запросов.
Любая задача может быть решена в минимальные сроки установкой необходимого пакета Python, представляющего собой каталог со скриптами, необходимые части которых (функции, классы, методы или переменные) вы импортируете в свой клиетский код и используете.
И поверте, благодаря ООП код у вас будет на удивление кратким и расширяемым.
Поэтому я считаю, что Python в связке с Django – это достойный выбор для людей, которые ценят свое время и время своих клиентов.