Простыми словами: Какие стили программирования существуют
Кроме объектно-ориентированного программирования (ООП), существует несколько других видов программирования, каждое из которых применяется в различных областях и имеет свои особенности.
1. Процедурное программирование
Используется для решения задач, разбиваемых на последовательности шагов или процедур. C, Pascal, и даже большинство языков высокого уровня поддерживают процедурное программирование.
Плюсы:
— простота и понятность, особенно для небольших программ;
— широкая база знаний и большое количество примеров.
Минусы:
— сложность управления большими проектами;
— меньшая гибкость и повторное использование кода по сравнению с ООП.
Такой стиль можно встретить в системном программировании, встраиваемых системах и приложениях с простой структурой.
2. Функциональное программирование
Оно используется для работы с вычислениями, которые можно описать как набор математических функций. В таком стиле часто пишут на Haskell, Lisp, Erlang, Scala, и даже JavaScript.
Плюсы:
— выраженная математическая чистота и вероятностное отсутствие побочных эффектов;
— лёгкость тестирования и отладки.
Минусы:
— меньшая распространённость и сложность освоения для новичков;
— ограниченность инструментов и библиотек в сравнении с ООП.
Применяется в научных вычислениях, обработке данных, параллельных и асинхронных задачах.
3. Логическое программирование
Используется для задач, которые можно описать логическими выражениями и правилами. Используется в языке Prolog.
Плюсы:
— способность выразить сложные логические задачи и поиск решений на высоком уровне абстракции;
— полезность в областях, требующих анализа данных и логических заключений.
Минусы:
— сложность понимания и отладки;
— ограниченные области практического применения.
Такой стиль можно встретить при программировании искусственного интеллекта, а также при автоматическом доказательстве теорем.
4. Декларативное программирование
Используется для описания желаемого результата, а не шага к его достижению. Используется в SQL (для запросов к базам данных), HTML (для веб-разметки), XSLT (для трансформации XML).
Плюсы:
— ясность и простота синтаксиса;
— фокус на описании задачи, а не способе её решения.
Минусы:
— ограниченность в универсальности решения задач;
— зависимость от конкретных исполнительных сред.
Применение: Встроенные системы управления данными, веб-разработка, трансформация данных.
5. Мультипарадигменное программирование
Этот стиль предполагает объединение нескольких парадигм программирования (например, ООП и функционального программирования) в одном языке или приложении. Может быть реализовано на многих языках, включая Python, JavaScript, Kotlin, Scala, Swift и т.д.
Плюсы:
— гибкость и способность адаптироваться к различным задачам;
— возможность использовать лучшие стороны разных парадигм.
Минусы:
— потенциальная сложность освоения всего спектра возможностей языка;
— возможность несогласованных паттернов кода.
Используется в ниверсальных языках программирования, больших проектах, требующие разных подходов.
Какая парадигма сейчас более популярна?
Сегодня сложилось так, что объектно-ориентированное программирование остаётся одной из самых популярных парадигм, особенно в разработке крупных и сложных систем. Однако функциональное программирование набирает обороты, особенно в области обработки данных и параллельных вычислений. Мультипарадигменные языки, такие как Python и JavaScript, также стали очень популярны благодаря своей гибкости и широким возможностям.
Каждая парадигма имеет свои сильные и слабые стороны и находит свое применение в различных областях. Выбор подходящей парадигмы зависит от конкретной задачи и требований проекта.
🤯 — не знал, что их так много
🤔 — а можно теперь подробнее про каждую?
❤️ — зачем что-то придумывать, если есть ООП?
#простымисловами
Кроме объектно-ориентированного программирования (ООП), существует несколько других видов программирования, каждое из которых применяется в различных областях и имеет свои особенности.
1. Процедурное программирование
Используется для решения задач, разбиваемых на последовательности шагов или процедур. C, Pascal, и даже большинство языков высокого уровня поддерживают процедурное программирование.
Плюсы:
— простота и понятность, особенно для небольших программ;
— широкая база знаний и большое количество примеров.
Минусы:
— сложность управления большими проектами;
— меньшая гибкость и повторное использование кода по сравнению с ООП.
Такой стиль можно встретить в системном программировании, встраиваемых системах и приложениях с простой структурой.
2. Функциональное программирование
Оно используется для работы с вычислениями, которые можно описать как набор математических функций. В таком стиле часто пишут на Haskell, Lisp, Erlang, Scala, и даже JavaScript.
Плюсы:
— выраженная математическая чистота и вероятностное отсутствие побочных эффектов;
— лёгкость тестирования и отладки.
Минусы:
— меньшая распространённость и сложность освоения для новичков;
— ограниченность инструментов и библиотек в сравнении с ООП.
Применяется в научных вычислениях, обработке данных, параллельных и асинхронных задачах.
3. Логическое программирование
Используется для задач, которые можно описать логическими выражениями и правилами. Используется в языке Prolog.
Плюсы:
— способность выразить сложные логические задачи и поиск решений на высоком уровне абстракции;
— полезность в областях, требующих анализа данных и логических заключений.
Минусы:
— сложность понимания и отладки;
— ограниченные области практического применения.
Такой стиль можно встретить при программировании искусственного интеллекта, а также при автоматическом доказательстве теорем.
4. Декларативное программирование
Используется для описания желаемого результата, а не шага к его достижению. Используется в SQL (для запросов к базам данных), HTML (для веб-разметки), XSLT (для трансформации XML).
Плюсы:
— ясность и простота синтаксиса;
— фокус на описании задачи, а не способе её решения.
Минусы:
— ограниченность в универсальности решения задач;
— зависимость от конкретных исполнительных сред.
Применение: Встроенные системы управления данными, веб-разработка, трансформация данных.
5. Мультипарадигменное программирование
Этот стиль предполагает объединение нескольких парадигм программирования (например, ООП и функционального программирования) в одном языке или приложении. Может быть реализовано на многих языках, включая Python, JavaScript, Kotlin, Scala, Swift и т.д.
Плюсы:
— гибкость и способность адаптироваться к различным задачам;
— возможность использовать лучшие стороны разных парадигм.
Минусы:
— потенциальная сложность освоения всего спектра возможностей языка;
— возможность несогласованных паттернов кода.
Используется в ниверсальных языках программирования, больших проектах, требующие разных подходов.
Какая парадигма сейчас более популярна?
Сегодня сложилось так, что объектно-ориентированное программирование остаётся одной из самых популярных парадигм, особенно в разработке крупных и сложных систем. Однако функциональное программирование набирает обороты, особенно в области обработки данных и параллельных вычислений. Мультипарадигменные языки, такие как Python и JavaScript, также стали очень популярны благодаря своей гибкости и широким возможностям.
Каждая парадигма имеет свои сильные и слабые стороны и находит свое применение в различных областях. Выбор подходящей парадигмы зависит от конкретной задачи и требований проекта.
🤯 — не знал, что их так много
🤔 — а можно теперь подробнее про каждую?
❤️ — зачем что-то придумывать, если есть ООП?
#простымисловами
Простыми словами: Процедурное программирование
В прошлом посте рубрики я вкратце рассказал про разные парадигмы программирования. Пришло время углубится в одну из них
Процедурное программирование остаётся важной парадигмой, особенно в областях, где требуется высокая производительность и прямой контроль над вычислениями. Несмотря на свои ограничения в моделировании больших и сложных систем, оно продолжает играть ключевую роль в разработке софта, требующего простоты и эффективности.
#простымисловами #парадигмыпрограммирования
В прошлом посте рубрики я вкратце рассказал про разные парадигмы программирования. Пришло время углубится в одну из них
Процедурное программирование остаётся важной парадигмой, особенно в областях, где требуется высокая производительность и прямой контроль над вычислениями. Несмотря на свои ограничения в моделировании больших и сложных систем, оно продолжает играть ключевую роль в разработке софта, требующего простоты и эффективности.
#простымисловами #парадигмыпрограммирования
Точка входа в программирование
Простыми словами: Процедурное программирование В прошлом посте рубрики я вкратце рассказал про разные парадигмы программирования. Пришло время углубится в одну из них Процедурное программирование остаётся важной парадигмой, особенно в областях, где требуется…
Простыми словами: Функциональное программирование
Про процедурное программирование мы уже рассказали. Теперь поговорим о функциональном.
Функциональное программирование — мощный и полезный инструмент, особенно для задач, где важны надёжность и предсказуемость. Несмотря на сложность овладения, оно предлагает значительные преимущества в поддержке и разработке устойчивых и масштабируемых систем, особенно при работе с большими объёмами данных и сложными вычислениями.
#простымисловами
Про процедурное программирование мы уже рассказали. Теперь поговорим о функциональном.
Функциональное программирование — мощный и полезный инструмент, особенно для задач, где важны надёжность и предсказуемость. Несмотря на сложность овладения, оно предлагает значительные преимущества в поддержке и разработке устойчивых и масштабируемых систем, особенно при работе с большими объёмами данных и сложными вычислениями.
#простымисловами
Forwarded from Zen of Python
Простыми словами: Паттерн «Одиночка»
Про «Фасад» поговорили. Теперь расскажу про другой популярный паттерн.
«Одиночка» (Singleton) полезен, когда необходимо гарантировать существование единственного экземпляра объекта в системе. Но использовать его следует с осторожностью. Хотя он полезен для управления ресурсами и обеспечения согласованности данных, это может привести к сложностям при тестировании и многопоточности. Каждое использование Singleton должно быть тщательно обосновано, чтобы избежать потенциальных проблем и антипаттернов.
#простымисловами #паттерны
Про «Фасад» поговорили. Теперь расскажу про другой популярный паттерн.
«Одиночка» (Singleton) полезен, когда необходимо гарантировать существование единственного экземпляра объекта в системе. Но использовать его следует с осторожностью. Хотя он полезен для управления ресурсами и обеспечения согласованности данных, это может привести к сложностям при тестировании и многопоточности. Каждое использование Singleton должно быть тщательно обосновано, чтобы избежать потенциальных проблем и антипаттернов.
#простымисловами #паттерны
Точка входа в программирование
Простыми словами: Функциональное программирование Про процедурное программирование мы уже рассказали. Теперь поговорим о функциональном. Функциональное программирование — мощный и полезный инструмент, особенно для задач, где важны надёжность и предсказуемость.…
Простыми словами: Логическое программирование
Продолжаем тему парадигм программирования. В прошлый раз говорили про известное многим функциональное программирование. Теперь же поговорим про то, о чем многие не слышали.
Логическое программирование — мощный инструмент для задач, требующих логического вывода и анализа. Оно предоставляет декларативный подход к решению задач, работая с фактами и правилами. Несмотря на ограничения, оно незаменимо в областях, где требуется высокая степень абстракции и интеллектуальный анализ.
🤯 — никогда не слышал про такое
❤️ — хочу писать на Prolog
#простымисловами
Продолжаем тему парадигм программирования. В прошлый раз говорили про известное многим функциональное программирование. Теперь же поговорим про то, о чем многие не слышали.
Логическое программирование — мощный инструмент для задач, требующих логического вывода и анализа. Оно предоставляет декларативный подход к решению задач, работая с фактами и правилами. Несмотря на ограничения, оно незаменимо в областях, где требуется высокая степень абстракции и интеллектуальный анализ.
🤯 — никогда не слышал про такое
❤️ — хочу писать на Prolog
#простымисловами
Точка входа в программирование
Простыми словами: Логическое программирование Продолжаем тему парадигм программирования. В прошлый раз говорили про известное многим функциональное программирование. Теперь же поговорим про то, о чем многие не слышали. Логическое программирование — мощный…
Простыми словами: Декларативное программирование
Декларативное программирование — это подход, ориентированный на результат, который позволяет сосредотачиваться на целях, а не на способах их достижения. Оно упрощает разработку и поддержку кода, однако может ограничивать гибкость в уникальных ситуациях. Такой вариант подходит для задач, где важна высокая абстракция и минимизация ручного вмешательства.
❤️ — если использовал декларативное программирование
#простымисловами
Декларативное программирование — это подход, ориентированный на результат, который позволяет сосредотачиваться на целях, а не на способах их достижения. Оно упрощает разработку и поддержку кода, однако может ограничивать гибкость в уникальных ситуациях. Такой вариант подходит для задач, где важна высокая абстракция и минимизация ручного вмешательства.
❤️ — если использовал декларативное программирование
#простымисловами
Точка входа в программирование
Простыми словами: Декларативное программирование Декларативное программирование — это подход, ориентированный на результат, который позволяет сосредотачиваться на целях, а не на способах их достижения. Оно упрощает разработку и поддержку кода, однако может…
Простыми словами: Мультипарадигменное программирование
Следующее на очереди после декларативного программирования у нас программирование, которое объединяет в себе сразу несколько парадигм. Оно позволяет использовать их сильные стороны, обеспечивая гибкость и расширяемость кода. Этот подход особенно подходит для сложных проектов, где разные задачи требуют разных решений. Однако разработчики должны быть внимательны, чтобы избежать чрезмерного усложнения и сохранить читаемость кода.
#простымисловами #парадигмы
Следующее на очереди после декларативного программирования у нас программирование, которое объединяет в себе сразу несколько парадигм. Оно позволяет использовать их сильные стороны, обеспечивая гибкость и расширяемость кода. Этот подход особенно подходит для сложных проектов, где разные задачи требуют разных решений. Однако разработчики должны быть внимательны, чтобы избежать чрезмерного усложнения и сохранить читаемость кода.
#простымисловами #парадигмы
Точка входа в программирование
Простыми словами: Паттерн «Одиночка» Про «Фасад» поговорили. Теперь расскажу про другой популярный паттерн. «Одиночка» (Singleton) полезен, когда необходимо гарантировать существование единственного экземпляра объекта в системе. Но использовать его следует…
Простыми словами Паттерн «Factory Method»
Продолжаем тему паттернов. Паттерн Factory Method упрощает создание различных объектов, избегая прямой зависимости от их классов. Он особенно полезен, когда вы работаете с семействами похожих объектов, которые могут изменяться или добавляться. Это повышает гибкость и делает проект более масштабируемым.
Подробнее о нём можно узнать в карточках.
#простымисловами #паттерны
Продолжаем тему паттернов. Паттерн Factory Method упрощает создание различных объектов, избегая прямой зависимости от их классов. Он особенно полезен, когда вы работаете с семействами похожих объектов, которые могут изменяться или добавляться. Это повышает гибкость и делает проект более масштабируемым.
Подробнее о нём можно узнать в карточках.
#простымисловами #паттерны
#простымисловами: Различия между MVC, MVP, MVVM, MVVM-C, и VIPER
Эти архитектурные паттерны являются одними из наиболее часто используемых при разработке приложений, как на платформах iOS, так и Android.
MVC (Model-View-Controller) — один из самых широко используемых архитектурных шаблонов. Он разделяет приложение на три основных компонента: модель (представляет данные и бизнес-логику), представление (отвечает за отображение интерфейса) и контроллер (действует как посредник между моделью и представлением).
MVP (Model-View-Presenter) отчасти похож на MVC, но имеет немного другой подход. В MVP посредником между моделью и представлением является презентер , а не контроллер. Презентер отвечает за обновление представления данными из модели и обработку пользовательского ввода и событий.
MVVM (Model-View-ViewModel) — архитектурный шаблон, набирающий популярность и используемый в приложениях со сложными пользовательскими интерфейсами. Он похож на MVP, но с добавлением модели представления (view model), которая отвечает за управление состоянием представления и за предоставление данных из модели в представление.
MVVM-C (Model-View-ViewModel-Coordinator) — это вариация MVVM, с добавлением координатора, который отвечает за управление навигацией между различными экранами или представлениями в приложении. Этот шаблон полезен для приложений, в которых есть несколько управляемых экранов или представлений.
VIPER (View-Interactor-Presenter-Entity-Router) — относительно новая архитектурный шаблон, который похож на MVC, но с добавлением нескольких новых компонентов, включая интерактор (отвечает за обработку бизнес-логики), сущность (представляет данные) и маршрутизатор (обрабатывает навигацию между различными экранами и представлениями).
#паттерны
Эти архитектурные паттерны являются одними из наиболее часто используемых при разработке приложений, как на платформах iOS, так и Android.
MVC (Model-View-Controller) — один из самых широко используемых архитектурных шаблонов. Он разделяет приложение на три основных компонента: модель (представляет данные и бизнес-логику), представление (отвечает за отображение интерфейса) и контроллер (действует как посредник между моделью и представлением).
MVP (Model-View-Presenter) отчасти похож на MVC, но имеет немного другой подход. В MVP посредником между моделью и представлением является презентер , а не контроллер. Презентер отвечает за обновление представления данными из модели и обработку пользовательского ввода и событий.
MVVM (Model-View-ViewModel) — архитектурный шаблон, набирающий популярность и используемый в приложениях со сложными пользовательскими интерфейсами. Он похож на MVP, но с добавлением модели представления (view model), которая отвечает за управление состоянием представления и за предоставление данных из модели в представление.
MVVM-C (Model-View-ViewModel-Coordinator) — это вариация MVVM, с добавлением координатора, который отвечает за управление навигацией между различными экранами или представлениями в приложении. Этот шаблон полезен для приложений, в которых есть несколько управляемых экранов или представлений.
VIPER (View-Interactor-Presenter-Entity-Router) — относительно новая архитектурный шаблон, который похож на MVC, но с добавлением нескольких новых компонентов, включая интерактор (отвечает за обработку бизнес-логики), сущность (представляет данные) и маршрутизатор (обрабатывает навигацию между различными экранами и представлениями).
#паттерны
#простымисловами: Паттерн Observer (Наблюдатель)
Observer отлично подходит для систем, где есть необходимость в автоматическом уведомлении об изменениях. Однако его следует использовать вдумчиво, чтобы избежать излишнего усложнения логики. Паттерн помогает создать динамичные и масштабируемые приложения, такие как системы уведомлений, финансовые инструменты или игровые события.
Подробнее в карточках.
Observer отлично подходит для систем, где есть необходимость в автоматическом уведомлении об изменениях. Однако его следует использовать вдумчиво, чтобы избежать излишнего усложнения логики. Паттерн помогает создать динамичные и масштабируемые приложения, такие как системы уведомлений, финансовые инструменты или игровые события.
Подробнее в карточках.
Что такое стек и куча?
Стек — это область памяти, где хранятся временные данные, например, локальные переменные и параметры функций. Он работает по принципу «последним пришёл — первым ушёл". Когда функция завершается, её данные автоматически удаляются. Стек быстрый, но его размер ограничен.
Куча — это область памяти для данных, которые живут долго, например, объекты или массивы. Данные в куче выделяются вручную или автоматически (например, с помощью сборщика мусора). Она гибче стека, но доступ к ней медленнее.
Пример использования стека:
Пример использования кучи:
Стек используется для временных данных, куча — для долгоживущих объектов. Знание этих областей памяти помогает оптимизировать программы и избегать утечек памяти.
#простымисловами #основы
Стек — это область памяти, где хранятся временные данные, например, локальные переменные и параметры функций. Он работает по принципу «последним пришёл — первым ушёл". Когда функция завершается, её данные автоматически удаляются. Стек быстрый, но его размер ограничен.
Куча — это область памяти для данных, которые живут долго, например, объекты или массивы. Данные в куче выделяются вручную или автоматически (например, с помощью сборщика мусора). Она гибче стека, но доступ к ней медленнее.
Пример использования стека:
def add(a, b):
result = a + b # Локальные переменные хранятся в стеке
return result
Пример использования кучи:
class User:
def __init__(self, name):
self.name = name # Объект "User" хранится в куче
user = User("Alex")
print(user.name)
Стек используется для временных данных, куча — для долгоживущих объектов. Знание этих областей памяти помогает оптимизировать программы и избегать утечек памяти.
#простымисловами #основы
Как работают хэш-функции
Хэш-функция — это алгоритм, который принимает произвольные данные (например, строку или файл) и преобразует их в фиксированную строку определенной длины, называемую хэш-значением.
Два ключевых свойства:
1. Для одного и того же ввода всегда возвращается одинаковый хэш.
2. Невозможно восстановить исходные данные по хэшу (обратное преобразование).
Давайте рассмотрим пример
Возьмём строку
Хэш будет одинаковым для
Пример кода на Python
Результат:
Где используется:
1. Для хранения паролей: Вместо хранения пароля
2. Для ускорения поиска данных: Например, в хэш-таблицах (словарях Python). При добавлении ключа
3. В хэш-таблицах: Структура данных для хранения пар «ключ-значение». Хэш-функция вычисляет индекс, где хранится значение, что ускоряет доступ к данным.
#простымисловами
Хэш-функция — это алгоритм, который принимает произвольные данные (например, строку или файл) и преобразует их в фиксированную строку определенной длины, называемую хэш-значением.
Два ключевых свойства:
1. Для одного и того же ввода всегда возвращается одинаковый хэш.
2. Невозможно восстановить исходные данные по хэшу (обратное преобразование).
Давайте рассмотрим пример
Возьмём строку
"password123"
и пропустим её через хэш-функцию (например, SHA-256). Она вернёт хэш-значение:password123 → ef92b778bae11c00c8cc0d9525c7f90631ad9e11cdec095c9c3af7b06ecf90fc
Хэш будет одинаковым для
"password123"
, сколько бы раз вы его ни рассчитывали. Но если изменить хотя бы один символ, хэш станет совершенно другим.Пример кода на Python
import hashlib
# Пример строки
text = "password123"
# Использование SHA-256 для получения хэша
hash_object = hashlib.sha256(text.encode())
hash_value = hash_object.hexdigest()
print("Хэш:", hash_value)
Результат:
ef92b778bae11c00c8cc0d9525c7f90631ad9e11cdec095c9c3af7b06ecf90fc
Где используется:
1. Для хранения паролей: Вместо хранения пароля
"password123"
его хэш сохраняют в базе данных. Когда пользователь вводит пароль, хэш снова рассчитывается и сравнивается с сохранённым хэшем.2. Для ускорения поиска данных: Например, в хэш-таблицах (словарях Python). При добавлении ключа
"text"
его хэш помогает найти место для хранения значения.3. В хэш-таблицах: Структура данных для хранения пар «ключ-значение». Хэш-функция вычисляет индекс, где хранится значение, что ускоряет доступ к данным.
#простымисловами
Зачем нужны контейнеры в программировании
Контейнеры, такие как Docker, нужны, чтобы создавать лёгкие и изолированные окружения для запуска приложений. Проще говоря, это как коробка, в которую вы кладёте ваше приложение вместе со всем, что ему нужно для работы (например, библиотеки, зависимости, настройки), а потом можете запустить эту коробку где угодно.
Зачем это нужно?
1. «Работает у меня». У вас есть приложение, которое отлично работает на вашей машине. Но на сервере оно не запускается из-за разных версий библиотек или зависимостей. С контейнером такие проблемы исчезают, потому что всё, что нужно приложению, идёт с ним в одном «пакете».
2. Универсальная упаковка. Контейнеры работают одинаково на любом компьютере или сервере, будь то ваш ноутбук, облако или чужая инфраструктура. Это экономит время и нервы.
3. Изоляция. Каждый контейнер полностью изолирован. Если в одном контейнере что-то сломалось или идёт нагрузка, это не повлияет на другие.
Пример из реальной жизни
Представьте, что вы повар и вам нужно приготовить блюдо в чужой кухне. Но в чужой кухне может не быть нужных продуктов, посуды и приборов. Контейнер — это коробка, в которой вы привозите всё, что вам нужно: продукты, кастрюли, специи. Теперь вы можете готовить это блюдо в любой кухне, не беспокоясь о том, что чего-то будет не хватать.
Где это используется?
В разработке: программисты создают контейнер с приложением, и каждый в команде может работать в одинаковых условиях.
В тестировании: легко запускать копии приложения с разными настройками для проверки.
В продакшене: легко развернуть приложение на реальном сервере без сюрпризов.
#простымисловами
Контейнеры, такие как Docker, нужны, чтобы создавать лёгкие и изолированные окружения для запуска приложений. Проще говоря, это как коробка, в которую вы кладёте ваше приложение вместе со всем, что ему нужно для работы (например, библиотеки, зависимости, настройки), а потом можете запустить эту коробку где угодно.
Зачем это нужно?
1. «Работает у меня». У вас есть приложение, которое отлично работает на вашей машине. Но на сервере оно не запускается из-за разных версий библиотек или зависимостей. С контейнером такие проблемы исчезают, потому что всё, что нужно приложению, идёт с ним в одном «пакете».
2. Универсальная упаковка. Контейнеры работают одинаково на любом компьютере или сервере, будь то ваш ноутбук, облако или чужая инфраструктура. Это экономит время и нервы.
3. Изоляция. Каждый контейнер полностью изолирован. Если в одном контейнере что-то сломалось или идёт нагрузка, это не повлияет на другие.
Пример из реальной жизни
Представьте, что вы повар и вам нужно приготовить блюдо в чужой кухне. Но в чужой кухне может не быть нужных продуктов, посуды и приборов. Контейнер — это коробка, в которой вы привозите всё, что вам нужно: продукты, кастрюли, специи. Теперь вы можете готовить это блюдо в любой кухне, не беспокоясь о том, что чего-то будет не хватать.
Где это используется?
В разработке: программисты создают контейнер с приложением, и каждый в команде может работать в одинаковых условиях.
В тестировании: легко запускать копии приложения с разными настройками для проверки.
В продакшене: легко развернуть приложение на реальном сервере без сюрпризов.
#простымисловами