Предметно-ориентированное программирование направлено на программирование в уникальной и даже очень конкретной области. Под такое программирование разрабатывают уникальные языки с собственным синтаксисом — предметно-ориентированные (на английском DSL — «domain-specific language»). Такие языки являются полным противопоставлением языкам широкого назначения, которые могут применяться где угодно и решать разные миссии. Предметные языки могут решать небольшое количество проблем, а иногда даже только одну.
Предметно-ориентированное программирование имеет одну особенность — это его основной принцип. А принцип говорит, что нужно всегда фокусироваться на какой-то одной миссии, для которой разработан конкретный, специализированный язык программирования,используемый как раз для решения этой поставленной миссии лучше всех известных методов.
Предметно-ориентированное программирование
DSL-языки применяются в узкой сфере, учитывая все ее специфические моменты. Их основная задача — разрешение всех проблем области применения, для которой они были созданы. Поэтому предметно-ориентированное программирование — это довольно специфическая сфера разработки. Оно завязано вокруг какой-то определенной деятельности и с каким-то уникальным языком.
Сферы предметно-ориентированного программирования и его языки:
- Подготовка текстовой документации для десктопной верстки — языки TeX и LaTeX.
- Манипулирование текстами — язык Perl.
- Подготовка документов по аппаратному обеспечению — языки Verilog и VHDL.
- Вычисления значений различных символов — языки Mathematica и Maple.
- Компьютерное моделирование — язык AutoLisp.
- Для решения проблем, использующих понятия исчисления предикатов, — язык Prolog.
- Команды операционным системам — язык JLC.
- Структурирование информации — язык XML.
- Макетирование — языки UML и GPSS.
- И др.
Также к предметно-ориентированному программированию относятся языки, встроенные в администрирование средствами крупных компаний:
- АВАР;
- Парус;
- 1С;
- и др.
На самом деле, таких «микросфер», где применяется отдельный предметный язык программирования, очень много. В основном предметно-ориентированное программирование затрагивает сферы, куда «не добраться» языками широкого назначения или где просто нецелесообразно их использование. Очень часто ПОП применяется как дополнение к основным языкам программирования, расширяя их возможности и сферу влияния.
Достоинства и недостатки предметно-ориентированного программирования
Сложно давать определение достоинствам и недостаткам предметно-ориентированного программирования хотя бы потому, что оно функционирует в очень специфичных областях, где «по-другому» бы просто не получилось. Это то же самое, что оценивать достоинства хирургии или стоматологии как области медицины. То есть есть область применения, и без нее никуда не деться, и все, что можно оценивать, так это специалистов «внутри» самой области. В нашем случае мы можем провести анализ и сделать некий вывод о том, какие преимущества и недостатки даст вам изучение предметно-ориентированного программирования и языков DSL в частности, но не всему ПОП.
Преимущества от изучения предметно-ориентированного программирования:
- есть возможность применять программирование в «узких» и специфичных сферах и решать задачи, на которые языки общего назначения не способны;
- языки DSL проще в изучении и освоении;
- низкая конкуренция в специальности;
- высокая оплата труда из-за специфичности языков программирования и малого количества достойных специалистов;
- есть возможность реализовать себя в сфере, которая близка по духу, если «программирование» в широком смысле не сильно привлекает;
Недостатки от изучения предметно-ориентированного программирования:
- невысокая востребованность на знания конкретного языка DSL, поэтому тут изучение должно быть построено «от обратного», то есть сначала искать вакансию, а потом изучать соответствующий язык;
- нет возможности применять полученные знания в других сферах программирования, то есть если выучили какой-нибудь язык DSL, то вы вынуждены будете работать только в сфере, где он применяется;
- небольшое или полное отсутствие сообщества, то есть у некоторых DSL-языков напрочь отсутствует сообщество, а это значит, что с трудностями нужно будет справляться самостоятельно или используя официальную документацию языка.
Заключение
Предметно-ориентированное программирование — это широкое понятие со множеством мелких и уникальных сфер, где можно использовать собственные знания. Единственное — прежде чем приступить к изучению какого-нибудь предметного языка, нужно подыскать себе вакансию, чтобы иметь возможность сразу получить работу, а не ждать «свободного» места. Потому что в некоторых случаях ждать придется очень долго.
Другое