Хотя я довольно новичок в концепции буквального программирования (и, следовательно, вполне вероятно, что я скучаю по лодке целиком), кажется, что она в значительной степени согласуется с концепцией DSL .
Идея DSL состоит в том, чтобы разделить область проблем на простую, ориентированную на естественный язык грамматику, которую можно использовать для построения алгоритмов для решения этих проблем.
Для меня та же самая идея, или, по крайней мере, ее основа, такая же или, по крайней мере, тесно связана с грамотным программированием.
Например, в мире Groovy существует сильный стимул для более регулярного использования DSL и создания новых DSL для решения общих проблем. Этот толчок исходит как от инструментов в языке (простые сборщики), так и от базовых библиотек, поддерживающих API на основе DSL.
Учитывая, что тенденция, по крайней мере в этом уголке мира, заключается в грамотному программированию, я бы сказал, что это хорошая методология, к которой нужно стремиться.
К сожалению, уровень мышления необходим для создания хорошего dsl, часто выходит за рамки того, что я видел у большинства программистов. Я знаю, что лично я борюсь с некоторыми концепциями, необходимыми время от времени. Возможно, именно эта трудность помешала таким методам получить более широкое распространение.
Это ваш классический случай, когда использование инструмента - это одно, а создание - на совершенно другом уровне.
Чтобы немного расширить мою точку зрения, не так много, что DSL - это то же самое, что и грамотное программирование, а скорее то, что они делают грамотное программирование гораздо более возможным . Особенно, когда они являются DSL на естественном языке .
В версии 1.8 groovy возможности DSL на естественном языке были значительно улучшены с добавлением более мощных цепочек команд.
Например, следующие строки кода являются программированием , а не просто псевдо-предложениями:
drink tea with sugar and milk
move left by 30.centimeters
sendFrom "Guillaume" to "Jochen"
send from: "Jochen" to "Lidia"
Email.from "Lidia" to "Guillaume" withBody "how are you?"
contact.name "Guillaume" age 33
move left by 30.centimeters
sell 100.shares of MSFT
take 2.pills of chloroquinine in 6.hours
blend red, green of acrylic
artist.paint "wall" with "Red", "Green", and: "Blue" at 3.pm
wait 2.seconds and execute { assert true }
concat arr[0] with arr[1] and arr[2]
developped with: "Groovy" version "1.8-beta-2"
Примечание: пример кода взят из блога Гийома Лафоржа
Основная идея, лежащая в основе грамотного программирования, заключается в том, что естественный язык более понятен людям, и именно это имеет значение. На мой взгляд, возможности DSL на языке Groovy делают эту реальность намного ближе. Особенно, когда эти DSL используются для создания бизнес-правил для приложения.
Способность «кодировать» критические компоненты системы с использованием естественного языка является самой сутью грамотного программирования. Необходимость перемежать естественный язык с кусками кода - ублюдочная форма грамотного программирования. Хотя это полезно, я считаю, что DSL на естественном языке позволяют использовать естественный язык в качестве самого кода , - огромный шаг вперед.
Расширение возможностей программирования в целом является следующим шагом в этом процессе, но в значительной степени инструменты для этого уже существуют. Да, пока нет «общего» DSL, но для небольших доменов такая возможность есть.
Для большего количества примеров этого в действии (без определенного порядка):