Заключение

Дополнительные темы

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

Разработка графического интерфейса

Приложения, имеющие графический интерфейс пользователя (англ. Graphical User Interface, GUI), реализуются в виде настольных (англ. Desktop) или веб-приложений и, как правило, используют специальные фреймворки (англ. Framework - программные платформы, определяющие структуру программной системы).

Настольные приложения

Для создания приложения на Python с графическим интерфейсом используются либо специализированные библиотеки, либо фреймворки общего назначения, к которым существуют привязки (биндинги) для Python:

Веб-приложения

Для создания веб-приложений также обычно используются веб-фреймворки:

Программирование баз данных

База данных (БД, англ. Database) - совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных (совсем упрощенно - файл, хранящий данные и связи между ними).

Базы данных применяются для хранения больших объемов структурированной информации. Наиболее распространенный вид базы данных сегодня - реляционный (Рисунок 1).

_images/ch_concl_01.png

Рисунок 1 - Реляционные базы данных [1]

Для хранения данных эти системы используют таблицы (по своему строению подобные электронным таблицам), строки которых соответствуют записям, а столбцы - полям. Манипулирование данными, хранящимися таблицах, производится с помощью инструкций, написанных на языке SQL (англ. Structured Query Language - язык структурированных запросов):

--Вернуть все строки из таблицы Клиент, с заданными ФИ
SELECT FROM Клиент WHERE Фамилия="Иванов" AND Имя="Иван"

Python включает в себя API для работы с базами данных SQL и обычно распространяется с поддержкой базы данных SQLite 3. Кроме того, в каталоге пакетов Python Package Index можно найти множество пакетов, предназначенных для работы с различными базами данных, включая популярные клиент-серверные базы данных (DB2, Informix, Ingres, MySQL, ODBC и PostgreSQL и др.), а также базы данных других видов.

Процессы и потоки

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

На практике используются два основных подхода к распределению нагрузки:

  1. Одновременное выполнение нескольких потоков управления.

    Многопоточные программы распределяют работу между независимыми потоками выполнения (Рисунок 2).

    _images/ch_concl_02.png

    Рисунок 2 - Разница выполнения однопоточного и многопоточного приложения [2]

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

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

  2. Одновременное выполнение нескольких процессов.

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

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

На Рисунке 3 схематично приведено отличие различных подходов.

_images/ch_concl_03.png

Рисунок 3 - Отличие подходов к распределению нагрузки [2]

Рефакторинг и оптимизация кода

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

В связи с этим каждое программное обеспечение периодически проходит 2 процедуры:

  1. Рефакторинг.

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

    Признаком необходимости рефакторинга служит появление «кода с запашком» (англ. Code Smell), обозначающим проблемные места. Вот некоторые из таких проблем:

    • дублирование кода;
    • длинный метод;
    • большой класс;
    • длинный список параметров;
    • «жадные» функции - метод, который чрезмерно обращается к данным другого объекта;
    • избыточные временные переменные;
    • классы данных;
    • несгруппированные данные.
  2. Оптимизация производительности.

    Оптимизация производительности также не стремится изменить поведение программы, ее цель - ускорить работу программы.

    Оптимизация в основном фокусируется на одиночном или повторном времени выполнения, использовании памяти, дискового пространства, пропускной способности или некотором другом ресурсе. Это обычно требует компромиссов — один параметр оптимизируется за счет других.

    Для оптимизации требуется найти узкое место (англ. Bottleneck - бутылочное горлышко): критическую часть кода, которая является основным потребителем необходимого ресурса. Для поиска узких мест используются специальные программы — профайлеры.

    Часто оптимизация затрудняет понимание кода, поэтому между рефакторингом и оптимизацией должен быть найден компромисс.

Некоторые IDE сегодня умеют самостоятельно находить проблемные места и коде и даже осуществлять рефакторинг и оптимизацию.

Книги, материалы и курсы

Создание программного продукта - не просто умение программировать на языке X. Поэтому рекомендуется уделить внимание книгам, приведенным в следующих списках:

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

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

Работа

Если Вы собираетесь попробовать себя в роли разработчика (в частности, Python), обратите внимание на следующие источники: