О целях проекта

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

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

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

Итак, основные качества, которыми, по нашему мнению, должна обладать хорошая среда программирования в далёком будущем.

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

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

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

  4. Система должна не давать проектировщику ошибаться и должна подсказывать типичные правильные решения для конкретной предметной области. Решения различных типовых “тактических” задач система должна быть в состоянии предложить автоматически. В идеале система не должна позволять создать неработающую или неэффективную программу, причём она должна именно не обнаруживать ошибки, а даже не давать их допустить.

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

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

Как в проекте QReal планируется этих качеств достичь.

  1. Использованием визуальных предметно-ориентированных языков программирования и реализацией средств для их быстрого создания и поддержки.

  2. Максимально удобным как для новичков, так и для профессионалов пользовательским интерфейсом, основанным, в том числе, и на нестандартных способах человеко-машинного взаимодействия. Рисовать программы в QReal должно быть удобнее, проще и быстрее, чем писать их в существующих текстовых средах. Должна использоваться “абстракция компьютерного экрана”, которая, в отличие от “абстракции листа бумаги”, предписывает высокую степень интерактивности во взаимодействии с пользователем.

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

  4. QReal должен до некоторой степени “понимать” то, что на нём пишут. Должна быть реализована поддержка разработки на уровне синтаксиса и семантики: часть правил, которым должны соответствовать корректные программы, должна быть заложена на уровне метамоделей и проверяться непосредственно в процессе рисования, часть вынесена в отдельные методы проверки, запускаемые лишь время от времени. Была бы желательна также поддержка переиспользования на уровне прагматики переиспользуемых элементов.

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

Самостоятельную ценность представляют и знания, полученные в ходе работы над QReal. QReal предназначен для борьбы с концептуальной сложностью в крупных и очень крупных системах, а эта проблема становится всё более актуальной с ростом сложности и степени интеграции существующих систем, и с ростом потребностей в новых таких системах. Мы полагаем, что существующие технологии разработки уже сейчас не способны удовлетворить растущим потребностям, и требуется переход на качественно новый уровень технологий. Исследования и эксперименты в рамках проекта QReal могут внести свой вклад в создание технологий будущего.