Программы
Парадигмы автомобиля и часов в программировании

Парадигмы автомобиля и часов в программировании

Бывает, что сложно понять, вырос ли человек в программировании. Вот ещё один качественный признак

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

Раньше мне было довольно сложно понять причины этого, различия: где уютная синтетическая задача, а где суровая "реальная". На днях в одном из чатов подсказали очень интересные формулировки двух парадигм программирования. Да, это очередная "ненужная" классификация, но мне она помогла. Возможно, поможет ещё кому-нибудь. Тем более, что в русскоязычных источниках такой классификации не нашёл. Итак,

Парадигма автомобиля (Car paradigm) – программирование в стиле "из точки А в точку Б". Объекты (в широком смысле) используются единожды, мы просто движемся по трассе, не особо заботясь об окружающей среде: возвращаться не придётся – да гори оно огнём.

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

Примеры:

  • скрипт по перегонке из cp1251 в utf8;
  • программа-установщик;
  • cgi/php-страничка

– все те программы, рождённые, чтобы умереть.

И это прекрасно – чем быстрее программа завершится, тем меньше ресурсов она съест, меньше ошибок наделает и т.д. Однако, реальность нас ведёт к сервисам, демонам и fastcgi-подобным скриптам. Отсюда мы имеем и вторую парадигму:

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

Здесь те самые не освобождённые ресурсы приведут к падению программы от рук Out-Of-Memory Killer-а. А те самые незакрытые дескрипторы вскоре закончатся. А уж сколько радости принесут глобальные переменные...

Примеры:

  • сервер видео/аудио - стримминга;
  • интерактивная игра;
  • HTTP-серверы для работы, а не разработки.

Именно переход от попустительства в плане ресурсов к заботе о чистоте окружения и может быть одним из качественных показателей роста программиста.

Также может быть вам интересно:

Решение проблемы с недостающими GPG ключами (NO_PUBKEY) при установке с помощью apt-get

При установке пакетов в дистрибутивах, основанных на Debian, и использующих пакетный менеджер apt, могут возникать ошибки, например, проверки подлинности пакетов.

Читать »

SQLite приняли Code of Conduct, основанный на Уставе святого Бенедикта

Проект SQLite приняли новый Code of Conduct. И он сильно отличается от того, к чему мы привыкли

Читать »
Фото Как настроить отправку почты из Django

Как настроить отправку почты из Django

Письма об ошибках, отчёты на почту, восстановление паролей - всё это полезно при работе с сайтом. Django предоставляет удобный способ это сделать с минимумом настроек!

Фото Добавляем поддержку медиа-файлов в Django проект

Добавляем поддержку медиа-файлов в Django проект

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

Фото Настройка журналирования (логирования) в Python с примерами

Настройка журналирования (логирования) в Python с примерами

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

Фото Шаблон разработки ПО — Model View Controller (MVC)

Шаблон разработки ПО — Model View Controller (MVC)

MVC - один из самых распространённых архитектурных шаблонов разработки. Часто используется в различных фреймворках. В том числе и в Django.

Фото Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

Добавляем переменные в контекст Django шаблонов (свой контекст-процессор)

В Django вы можете передавать данные в шаблоны посредством контекстов. Контекст передаётся из контроллера (view в терминах Django), однако, если одни и те же данные нужны в разных местах, лучше сделать свой контекст-процессор.

Фото Пример своей консольной команды в Django проекте

Пример своей консольной команды в Django проекте

Если вы работали с Django проектом, то, скорее всего, запускали команды из консоли (manage.py). В Django есть простой способ писать свои команды для управления проектом.

Фото Разграничение прав доступа на Django сайте

Разграничение прав доступа на Django сайте

Почти на любом веб-сайте необходимо разделять пользователей на группы и предоставлять им разные возможности. В Django есть довольно серьёзная система прав доступа для пользователей - давайте её рассмотрим!

Фото Пользователи и их создание в Django - своя регистрация на сайте

Пользователи и их создание в Django - своя регистрация на сайте

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