Определение парадигм

Согласно Google OxfordLanguages, первое определение парадигмы выглядит следующим образом: «par·a·digm — существительное —1.типичный пример или образец чего-либо; модель". Однако в мире программирования парадигмы более конкретно относятся к подходам, которые мы используем для решения проблем, и стратегиям, реализуемым различными языками программирования для решения этих проблем. Существует множество языков программирования и множество различных парадигм (или методов), используемых этими разными языками для решения проблем. Этот блог предназначен для быстрого ознакомления с парадигмами и различиями каждой из них.

Декларативный и императивный

Первое место, где языки расходятся, находится в декларативном и императивном. Каждый язык считается тем или иным, а затем оттуда разветвляются парадигмы. Декларативное программирование — это, по сути, концепция программирования высокого уровня, в которой написанные программы описывают или «декларируют» желаемый результат, а язык программирования обеспечивает его достижение. Он включает в себя популярные языки, такие как HTML, CSS, SQL и т. д. Императивное программирование часто называют противоположностью декларативному, когда вы должны кодировать каждый шаг, который программа должна предпринять для решения ваших проблем. Вы, как программист, должны сообщать императивным языкам каждый шаг, который необходимо предпринять, чтобы получить конечный результат, который вы ищете.

Как упоминалось выше, остальные парадигмы программирования попадают в одну из этих двух парадигм, декларативную или императивную. Итак, давайте посмотрим, как они разветвляются отсюда:

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

Декларативные парадигмы

  1. Логическое программирование. Как следует из названия, логическое программирование в значительной степени основано на формальной логике и на том, как эту логику можно использовать для представления знаний, фактов и правил о задачах, с которыми приходится работать. Эта парадигма сообщает модели, как решать проблемы в системе, а не что именно решать. Часто используется для диагностики неисправностей, планирования, обработки естественного языка и машинного обучения. Некоторые из самых популярных языков логического программирования включают Prolog, LISP, Clojure, Absys, Cycle, Alice, ALF (язык функционального программирования алгебраической логики) и т. д.
  2. Функциональное программирование. Опять же, название довольно ясно, поскольку функциональное программирование обычно делает все с помощью функций или использует функции в качестве основы. Основное внимание уделяется использованию функций для создания удобного в сопровождении и чистого программного обеспечения. Функциональные языки предназначены для обработки и/или управления приложениями обработки списков и символьными вычислениями (или вычислениями, обрабатывающими нечисловые значения, например, в алгебре). Некоторые языки, используемые для логического программирования, также используются для функционального программирования, но некоторые из наиболее популярных функциональных современные языки включают Clojure, Elixir, LISP, Erlang, Haskell, OCaml и т. д.

Императивные парадигмы

  1. Процедурное программирование. Согласно названию, процедурное программирование основано на концепции использования определенных «процедур» для решения проблем. «Процедуры» (также известные как подпрограммы, подпрограммы или функции) содержат ряд шагов или инструкций, которые компьютер должен выполнить для решения проблем. Когда программа выполняется, процедуры могут вызываться в любой момент и в любом порядке, могут вызываться другими процедурами или сами по себе. Примеры популярных процедурных языков включают C/C++, Pascal, Fortran, Java, COBOL, BASIC и т. д.
  2. Структурное программирование. Подход к структурированному программированию заключается в том, что программа создается как единая структура. Код будет выполнять одну инструкцию за другой по порядку и не поддерживает переход к инструкциям не по порядку. В структурированных программах используются элементы с одним входом и одним выходом. Структурированная программа обычно считается хорошо поддерживаемой, аккуратной и чистой программой. Структурированное программирование также считается более простым для чтения, понимания, обслуживания и отладки, а также в целом более удобным для пользователя. Некоторые языки, популярные для структурированного программирования, включают C, C++, C#, Java и т. д.
  3. Объектно-ориентированное программирование. Объектно-ориентированное программирование, также называемое ООП, организовано вокруг сущностей реального мира в виде данных или «объектов», обладающих определенными уникальными атрибутами и поведением. Эти атрибуты и поведение для каждого «объекта» могут быть доступны и изменены с помощью процедур, прикрепленных к этому объекту. Объекты — это экземпляры класса, который представляет собой тип данных, состоящий из данных-членов и функций-членов, которые можно использовать, создавая экземпляр этого класса (этот экземпляр является «объектом»). Объектно-ориентированное программирование также поддерживает наследование или возможность для одного класса «наследовать» свойства «родительского класса». Например, родительским классом может быть класс «Млекопитающее», а парой дочерних классов могут быть классы «Собака» и «Кошка», потому что и собаки, и кошки являются млекопитающими, которые наследуют черты млекопитающих. Вы можете видеть, как это может сэкономить значительное количество времени, когда многие классы относятся к одному и тому же «Родительскому классу», и все они должны наследовать многие схожие черты или атрибуты. Существует много языков, используемых для объектно-ориентированного программирования, включая Python, Java, C++, Ruby, JavaScript, PHP и т. д.

Какой из них использовать?

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

  • Если вы работаете над интерфейсным проектом, прекрасно подойдут HTML, JavaScript и CSS.
  • Если вы занимаетесь бэкенд-разработкой, популярными вариантами являются Python, JavaScript или C#.
  • Для программ, посвященных научным вычислениям и математике, ознакомьтесь с Matlab, Fortran, ALGOL, APL, Julia, R, C++ и т. д.
  • Если вы изучаете науку о данных/машинное обучение/аналитику, попробуйте что-нибудь вроде Python, R, Clojure или Julia.
  • Чтобы создать 2D-игру, вы можете использовать JavaScript или C#.
  • Для проектов Разработка 3D-игр C# или C++ вполне подходят.
  • Когда вы работаете с большими данными: вам может подойти Java, Python, R, Scala или Clojure.
  • Для распределенных систем или общего доступа к ресурсам: C, Go и Rust — хорошие места для начала.
  • Если вы пытаетесь создать или изменить операционные системы, обычно используются C и C++.

Приведенный выше список включает в себя лишь несколько простых предложений о том, с чего вы можете начать поиск каждого типа проекта, или в зависимости от того, что вам интересно научиться делать. Однако есть еще много-много вариантов. Если вы слышали или интересуетесь языком программирования, не включенным в этот список, продолжайте исследовать! Как только вы узнаете больше о разных языках и попрактикуетесь с ними, вам будет легче решить, какие языки вы предпочитаете использовать для каких задач/проектов.

Ресурсы

Перейдите по ссылкам ниже, чтобы получить более подробную информацию по темам, которые мы обсуждали здесь.