Почти все новые языки программирования являются языками общего назначения. И это проблема. Независимый аналитик Кристофер Тоцци рассказывает на портале ITPro Today, почему разработчикам по-прежнему нужны предметно-ориентированные языки.

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

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

Позвольте мне объяснить это, обсудив различия между языками общего назначения и предметно-ориентированными и объяснив, почему нам нужно больше последних.

Языки программирования общего назначения vs. предметно-ориентированные

Все языки программирования относятся к одной из двух категорий: общего назначения и предметно-ориентированные.

Как следует из самого термина, языки общего назначения — это языки, которые могут легко поддерживать широкий спектр сценариев использования. Java, Cи и C# являются популярными примерами таких языков.

В отличие от них, предметно-ориентированные языки рассчитаны на определенные ниши или потребности — такие как наука о данных, работа с текстом или веб-разработка. Примерами таких языков являются SQL, gawk и HTML. (Строго говоря, не все они языки программирования; некоторые являются языками разметки.)

Медленный упадок предметно-ориентированных языков

Если вы посмотрите на большинство языков программирования, которые появились относительно недавно — например, Swift и Go — вы заметите, что почти все они являются языками общего назначения. Единственным возможным исключением является Rust, который дебютировал в 2013 г. Кто-то может сказать, что Rust является предметно-ориентированным языком, поскольку он разработан для программирования, ориентированного на безопасность. Но это натяжка, потому что Rust может поддерживать самые разные сценарии разработки. По большинству определений, это язык общего назначения.

Если вы оглянетесь на историю языков программирования, то увидите, что многие исторические языки были предметно-ориентированными. Наиболее важные такие языки, которые широко используются и сегодня, например SQL, gawk и XML, существуют уже несколько десятилетий.

Кроме того, некоторые из языков, которые сегодня являются языками общего назначения, изначально имели более узкую сферу применения. Python изначально был создан в основном для задач системного администрирования в Amoeba, хотя сейчас он используется практически во всех сценариях программирования. Аналогично, язык Cи изначально был создан для разработки под Unix, а не для широкого спектра приложений и операционных систем, в которых Cи применяется сегодня,

Я упомянул все это, чтобы показать, что в последние несколько десятилетий мы наблюдаем упадок предметно-ориентированных языков программирования. Если раньше было принято создавать языки, специфичные для конкретной области, то почти все языки, созданные в последние годы, являются языками общего назначения. А некоторые из тех, которые изначально не были универсальными, были адаптированы для этого.

Доводы в пользу предметно-ориентированных языков

Плохо ли жить в мире, где доминируют языки программирования общего назначения?

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

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

В конце концов, разработчики, которые специализируются в определенных нишах, активно используют предметно-ориентированные языки. Например, большинство программистов, работающих в области науки о данных, используют R, который практически во всех смыслах является специализированным языком. Если бы языки общего назначения были идеальными, то в контексте науки о данных R должен был бы быть полностью заменен, скажем, на Python.

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

Заключение: для предметно-ориентированных языков определенно все еще есть место

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

Но, скорее всего, разработчики создадут более эффективные, надежные и безопасные специализированные приложения, если будут использовать преимущества специализированных языков — и если экосистема разработки ПО в целом будет проявлять к таким языкам больше внимания, чем они получили за последние несколько десятилетий.