Методологии программирования: основные понятия и определения

Вначале было много языков программирования. Выжили «правильные». Но нельзя сказать, что Fortran, Algol, C/C++ или Pascal чем-то качественно отличаются от Lisp или Prolog или других языков: заложены разные идеи, получены эквивалентные результаты. По сути, не важно, как называть программирование, функциональным или процедурным. Задача программы, которая может создать или как минимум прочитать саму себя, не такая уж и интересная. Но в далеких 80-х годах это все было живо, актуально и очень важно.

Соотношение начала и современного момента

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

Современный мир программирования не изменился по сути, но общественное сознание в этой области стало фундаментом понимания что делать, как делать, как сопровождать, обновлять и куда идти дальше. Сегодня сделать собственный компилятор – пара дней работы. Справится даже начинающий программист. По сути, ничего не изменилось, но умственные способности программистов стали производительнее, компетентнее, и мыслить они стали «одинаково». Принципиально в этом нет ничего нового. Каждое новое поколение (детей) превосходит умственными способностями предшествующее (родителей). В программировании наличие знаний, зафиксированных в программах, крайне важно.

Суть языка и методы работы

Методологии программирования развивались динамично, агрессивно по отношению друг к другу и эффективно по накапливаемым знаниям. Технологии разработки инструментального программного обеспечения – компиляторы, интерпретаторы, оболочки для разработки.

Технологии прикладного программирования существенно отличались, и им эта отрасль обязана понятиями:

  • пакет программ;
  • библиотека математических функций;
  • модуль;
  • компонент и пр.

Системное и прикладное старались не пересекаться, у каждого направления была свои философия, сфера и методология программирования. Однако термин «модуль» одинаково удобно использовать в компиляторах и графических редакторах. Библиотека математических функций не имеет ничего общего с функциональным программированием. Пакет программ с тем же успехом можно применить к разработкам под android, хотя популярнее термин «приложение».

Все перемешалось, а значит, систематизировалось. Действительно, нет разницы между компилятором C# и пасером HTML-кода, написанным на том же C#. В обоих случаях идет речь об обработке информации. Главное – качественный алгоритм, а не то, как он был изготовлен.

Характерная черта процесса развития программирования: все синтаксические конструкции, определенные еще на стихийном этапе развития, остались в современных языках программирования. Функциональное программирование должно быть признательно Lisp и Prolog за их идеи и головокружительные синтаксические конструкции. Но сегодня важнее представление о функциях как методах объектов.

Синтаксис языка программирования

С одной стороны, все, что используется, удобно. Все современные языки программирования предлагают эквивалентные синтаксические конструкции, но философия каждого языка отличается. Это именно тот случай, когда использование методологии программирования имеет реальное значение.

Блестящий пример: JavaScript – язык браузера. Это неотъемлемая часть DOM (дерева объектов) страницы, загруженной в браузер. Требовать подобия от языка PHP бессмысленно. Это язык сервера. Его забота работать со страницей с целью ее создания. JavaScript оживляет страницу, наполняя ее реальным функционалом в браузере, под влиянием действий конкретного посетителя.

Каждый программист волен формировать собственную методологию программирования. Сочетая качества JavaScript и PHP, можно пойти по проторенному пути использования JSON и AJAX, а можно сделать обмен страницы с сервером по-своему. Это другая философия, которая не имеет ничего общего с идеями разработчиков этих инструментов.

На самом низком, логическом уровне можно выделить императивное программирование. Когда эта парадигма была сформулирована, было важно понять, что такое программирование вообще. Формулировка:

  • исходный код – инструкции;
  • инструкции выполняются последовательно;
  • данные могут записываться/читаться в/из памяти.

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

Стадии развития программирования

Вспоминать, как развивалось программирование – дань памяти, любой курс по специальности начинается с уважительного перечисления:

  • стихийное;
  • императивное;
  • структурное;
  • процедурное;
  • функциональное;
  • объектно-ориентированное;
  • CASE-технологии и т. п.

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

Работы по интеллектуальным и экспертным системам затихли, все согласились, что программисты просто работают, создают программы, алгоритмы, обрабатывают информацию, именуя время от времени что-то знаниями. Суть не в этом. Важен синтаксис и семантика языка, который позволяет программисту создавать свою методологию программирования. Это существенно, ведь программист, а тем более коллектив программистов с течением времени накапливают арсенал модулей, библиотек, алгоритмов. Обмен знаниями, умениями и наработками позволяет формировать собственную философию и динамично адаптировать свои разработки к руслу общих тенденций развития.

Основные понятия области

Программный продукт, пакет программ или просто приложения – эти понятия сыграли свою роль, но используются даже сегодня. Приложение – более современное понятие. Облачная или виртуальная среда – это признак особенностей работы программного изделия.

Работа на физическом компьютере или в контейнере виртуальной машины отличается, но здесь возникает особая философия методологии программирования. Виды программ (услуг) приобрели своеобразный статус. Раньше просто купил программу, установил и используешь. Лицензирование доступа, приобретение подписки на срок или количество использований программы, неизвестно где и как установленной, – этого в прошлом даже не предполагалось.

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

Экспертные системы и базы знаний

Характерная черта некоторых языков (типа Prolog) – попытка создавать программы логического программирования. Насколько эта идея оказалась живучей, показывает динамика развития философии проектирования и программирования инфраструктуры больших компаний. Принятие ответственных решений, манипулирование огромными объемами информации сделало актуальным управление через доступные сторонние сервисы. По существу, программирования как такового нет, но без программиста задача не решается. Использование логических языков не афишируется, следовательно, логическая парадигма, дискретная математика и методология программирования в ограничениях не показала себя с лучшей стороны. Каждому методу положена своя сфера применения.

Здесь логика и философия методологии программирования – концептуальные представления конкретной компании о том, что и как следует обрабатывать. Знания о доступных сервисах и их функциональности укладываются в алгоритм манипулирования последовательностью их использования в зависимости от складывающейся информационной картины.

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

Некоторые философские проблемы

Развитие методологий программирования каждый опытный программист понимает по-своему. Классическое программирование существенно отличается, например, от:

  • программирования виртуальной среды;
  • управления доступом к внешнему приложению;
  • действий администратора службы безопасности.

В каждом конкретном случае своя философия, свои методики, технологии, приемы работы. Если подойти к истории развития «зеркала интеллекта» с позиций здравого смысла, то не суть, на чем написать что-то, важно, насколько удобно сделать это. Печально, что современное программирование многократно вынуждало программистов переписывать старый код.

Характерно: особенности «старых» языков программирования – совместимость снизу вверх (иногда и сверху вниз) ушла в историю. Показала свою живучесть идея нетипированных данных. Действительно, почему нужно в одном месте алгоритма говорить, что «X» – это число, а «Y» – это строка, и затем держаться этой идеи на всем протяжении алгоритма. Методологии программирования подошли к необходимости кардинально нового решения: программа должна быть независима от автора и разработана таким образом, чтобы автор мог ее развивать как совокупность актуальных знаний.

Статика и динамика

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

Динамика – следующий этап развития методологий программирования, но не динамика мыслей в голове программиста, а динамика написанного им кода.

Комментарии