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

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

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

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

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

Парадигма автомобиля (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. И он сильно отличается от того, к чему мы привыкли

Читать »
Фото Как сделать свою middleware в Django (с примерами)

Как сделать свою middleware в Django (с примерами)

Middleware или "промежуточное программное обеспечение" - элегантный способ установить общие правила обработки запросов и ответов приложения. Давайте напишем парочку middleware, чтобы понять, как они работают.

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

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

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

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

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

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

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

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

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

Фото Нет слов, одни... однострочники

Нет слов, одни... однострочники

На днях вышел пост со списком полезных однострочников для JavaScript программистов. Памятуя Perl-овую молодость, заглянул туда.

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

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

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

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

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

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

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

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

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