Заключение¶
Содержание
Дополнительные темы¶
Ряд тем не был включен в данный курс, однако представляют собой не меньший интерес и не меньшую значимость для разработки приложений.
Разработка графического интерфейса¶
Приложения, имеющие графический интерфейс пользователя (англ. Graphical User Interface, GUI), реализуются в виде настольных (англ. Desktop) или веб-приложений и, как правило, используют специальные фреймворки (англ. Framework - программные платформы, определяющие структуру программной системы).
Настольные приложения¶
Для создания приложения на Python с графическим интерфейсом используются либо специализированные библиотеки, либо фреймворки общего назначения, к которым существуют привязки (биндинги) для Python:
Tkinter:
Официальный сайт: https://wiki.python.org/moin/TkInter
Qt Framework:
Официальный сайт: http://www.qt.io/
GTK:
Официальный сайт: http://www.gtk.org/
wxWidgets:
Официальный сайт: https://www.wxwidgets.org/
kivy:
Официальный сайт: https://kivy.org
Веб-приложения¶
Для создания веб-приложений также обычно используются веб-фреймворки:
Flask:
Официальный сайт: http://flask.pocoo.org
Вики: https://ru.wikipedia.org/wiki/Flask_(веб-фреймворк)
Django:
Официальный сайт: https://www.djangoproject.com/
Pyramid:
Официальный сайт: http://www.pylonsproject.org/
Вики: https://ru.wikipedia.org/wiki/Pyramid_(программный_каркас)
Программирование баз данных¶
База данных (БД, англ. Database) - совокупность данных, хранимых в соответствии со схемой данных, манипулирование которыми выполняют в соответствии с правилами средств моделирования данных (совсем упрощенно - файл, хранящий данные и связи между ними).
Базы данных применяются для хранения больших объемов структурированной информации. Наиболее распространенный вид базы данных сегодня - реляционный (Рисунок 1).
Для хранения данных эти системы используют таблицы (по своему строению подобные электронным таблицам), строки которых соответствуют записям, а столбцы - полям. Манипулирование данными, хранящимися таблицах, производится с помощью инструкций, написанных на языке SQL (англ. Structured Query Language - язык структурированных запросов):
--Вернуть все строки из таблицы Клиент, с заданными ФИ
SELECT FROM Клиент WHERE Фамилия="Иванов" AND Имя="Иван"
Python включает в себя API для работы с базами данных SQL и обычно распространяется с поддержкой базы данных SQLite 3. Кроме того, в каталоге пакетов Python Package Index можно найти множество пакетов, предназначенных для работы с различными базами данных, включая популярные клиент-серверные базы данных (DB2, Informix, Ingres, MySQL, ODBC и PostgreSQL и др.), а также базы данных других видов.
Процессы и потоки¶
С появлением многоядерных процессоров актуальной стала проблема распределения вычислительной нагрузки программы так, чтобы получить максимальную отдачу от всех имеющихся ядер.
На практике используются два основных подхода к распределению нагрузки:
Одновременное выполнение нескольких потоков управления.
Многопоточные программы распределяют работу между независимыми потоками выполнения (Рисунок 2).
Преимущество данного подхода - простота совместного использования данных (если при этом гарантируется, что в каждый конкретный момент времени доступ к данным имеет только один поток выполнения), но на плечи программиста ложится бремя разрешения конфликтов.
В языке Python имеется отличная поддержка создания многопоточных программ, позволяющая свести к минимуму работу, которую нам необходимо выполнить самостоятельно. Однако, многопоточные программы намного сложнее однопоточных программ и требуют значительно большей аккуратности при их создании и сопровождении.
Одновременное выполнение нескольких процессов.
Выполнение нескольких процессов - запуск автономных программ, которые взаимодействуют между собой. В данном варианте бремя разрешения конфликтов ложится на операционную систему.
Минус данного подхода заключается в неудобстве организации взаимодействий и совместного использования данных между вызывающей программой и отдельными процессами. Наиболее гибкое решение, существенно упрощающее двусторонний обмен данными, заключается в использовании механизмов сетевых взаимодействий, однако во многих ситуациях в таком взаимодействии нет никакой необходимости и достаточно запустить одну или более программ с помощью управляющей программы.
На Рисунке 3 схематично приведено отличие различных подходов.
Рефакторинг и оптимизация кода¶
При написании любой программы наступает момент, когда затрудняется понимание ее работы, а также уменьшается скорость выполнения какой-либо ее части.
В связи с этим каждое программное обеспечение периодически проходит 2 процедуры:
Рефакторинг.
Рефакторинг - процесс изменения внутренней структуры программы, не затрагивающий ее внешнего поведения и имеющий целью облегчить понимание ее работы.
Признаком необходимости рефакторинга служит появление «кода с запашком» (англ. Code Smell), обозначающим проблемные места. Вот некоторые из таких проблем:
дублирование кода;
длинный метод;
большой класс;
длинный список параметров;
«жадные» функции - метод, который чрезмерно обращается к данным другого объекта;
избыточные временные переменные;
классы данных;
несгруппированные данные.
Оптимизация производительности.
Оптимизация производительности также не стремится изменить поведение программы, ее цель - ускорить работу программы.
Оптимизация в основном фокусируется на одиночном или повторном времени выполнения, использовании памяти, дискового пространства, пропускной способности или некотором другом ресурсе. Это обычно требует компромиссов — один параметр оптимизируется за счет других.
Для оптимизации требуется найти узкое место (англ. Bottleneck - бутылочное горлышко): критическую часть кода, которая является основным потребителем необходимого ресурса. Для поиска узких мест используются специальные программы — профайлеры.
Часто оптимизация затрудняет понимание кода, поэтому между рефакторингом и оптимизацией должен быть найден компромисс.
Некоторые IDE сегодня умеют самостоятельно находить проблемные места и коде и даже осуществлять рефакторинг и оптимизацию.
Книги, материалы и курсы¶
Создание программного продукта - не просто умение программировать на языке X. Поэтому рекомендуется уделить внимание книгам, приведенным в следующих списках:
Топ-5 самых впечатляющих книг, которые должен прочесть каждый разработчик ПО. URL: https://habrahabr.ru/post/135897/;
Школа системного анализа: Книги. URL: http://systems.education/books;
Какие книги надо прочитать разработчику: Обсуждение в Facebook. URL: https://apptractor.ru/info/articles/kakie-knigi-nado-prochitat-razrabotchiku-obsuzhdenie-v-facebook.html;
7 книг, которые стоит прочесть для изучения Python. URL: https://proglib.io/p/7-python-books/;
Идеальная подборка книг для разработчиков. URL: https://proglib.io/p/ultimate-reading-list/;
Reading List: Fog Creek Software Management Training Program. URL: https://www.joelonsoftware.com/2005/11/22/reading-list-fog-creek-software-management-training-program/.
Полезным будет ознакомиться с философией свободного программного обеспечения:
Свободное программное обеспечение. URL: https://ru.wikipedia.org/wiki/Свободное_программное_обеспечение;
Философия проекта GNU. URL: https://www.gnu.org/philosophy/philosophy.html;
Free software, free society: Richard Stallman at TEDxGeneva 2014. URL: https://www.youtube.com/watch?v=Ag1AKIl_2GM.
Среди онлайн-курсов рекомендуется самостоятельно изучить популярные онлайн-площадки (зарубежные и отечественные), а также сайты известных IT-компаний, которые имеют собственные сертификационные программы.
Работа¶
Если Вы собираетесь попробовать себя в роли разработчика (в частности, Python), обратите внимание на следующие источники:
Preparing for a Python Interview: 10 Things You Should Know. URL: https://youtu.be/DEwgZNC-KyE;
Что нужно знать каждому программисту по версии Google. URL: http://lifehacker.ru/2014/11/27/kursy-ot-google/;
Как стать профессиональным веб-разработчиком: практическое руководство. URL: https://habrahabr.ru/post/303896/;
10 приемов, разрушающих хрупкую красоту кода. URL: https://habrahabr.ru/post/59570/.
Удачной разработки и освоения экосистемы Python!¶
- 1
Реляционные базы данных: http://ok-t.ru/life-prog/baza1/1559881779802.files/image008.jpg.
- 2(1,2)
Thread vs Process: https://sites.google.com/site/sureshdevang/thread-vs-process.