Владимир Даниэлович, прошу прощения за то, что долго не отвечал.
Про работы Митькина и Тышова я уже в первом письме сказал, что отношусь к ним с очень большим уважением. Поэтому если что-то критическое и скажу, то, в любом случае, это будет доброжелательная критика.
ПРОГРАММЫ СТЕПАНА МИТЬКИНА
И ГЕННАДИЯ ТЫШОВАСобственно, вряд-ли я могу добавить что-то новое на эту тему. Уверен, обе программы обсуждены умными людьми на форумах тысячу раз и разобраны все их нюансы.
Очевидно, что у них немного разные ниши для применения, первая — для языков высокого уровня, вторая — идеально подходит для низкоуровневого программирования, близкого к аппаратному.
МНЕ ОЧЕНЬ НРАВИТСЯ,
ЧТО ОБЕ ПРОГРАММЫ РАЗВИВАЮТСЯ
Наверное, немного плохо, что Геннадий Тышнов держит код закрытым, но, как бы, имеет на то полное право.
Прекрасно, что Степан Митькин работает под лицензией public domain, и, насколько я понял, у него уже есть соратники. Еще более замечательно, что Степан пишет свой ДраконЕдитор (используя язык Дракон и сам же ДраконЕдитор. Подобный подход кроме уважения ничего не может вызвать.
То, что у обеих программ довольно своеобразные пользовательские интерфейсы (особенно у ИС Дракон) не так страшно. На первый взгляд, выглядит несколько непривычно, но оно прекрасно работает и представляет небольшую сложность только на стадии освоения.
Когда же привыкаешь, вполне даже удобно. И, по большому счёту, по-моему, всё у них, и у первой и у второй IDE более чем хорошо и отличные перспективы.
Однако, чем рассуждать о других работах, позвольте мне попробовать рассказать о своих скромных успехах. А они, кажется, есть.
БОЛЬШОЕ РАЗОЧАРОВАНИЕ Собственно, почему, Владимир, я так задержался с ответом. Дело в том, что Ваше письмо побудило меня вновь вернуться к работе над моей программой DrakonGen (DG).
В прошлом году я испытал большое разочарование по поводу моих попыток использовать Дракон в процессе написания программ. И это разочарование было весьма велико, поверьте.
В ЧЕМ ЗАКЛЮЧАЕТСЯ ИДЕЯ
ВИЗУАЛЬНОГО ПРОГРАММИРОВАНИЯ? В чём, собственно, для меня заключается идея визуального программирования вообще и использование Дракона для кодогенерации, в частности?
Во-первых, это уменьшение сложности понимания, восприятия программ, редуцирование её на порядки (и никак не меньше).
А второй момент, возможно даже гораздо более важный — получение эстетического удовольствия от процесса создания программ.
Понимаю, что если Вы выложите это письмо на форум, то второй пункт вызовет усмешку у многих людей. Однако же, надеюсь, кто-то поймет меня и правильно.
Я ПРЕКРАТИЛ РАБОТУ, НЕ ПОДОЗРЕВАЯ,
ЧТО ДО ПОБЕДЫ ОСТАВАЛСЯ
ВСЕГО ОДИН ШАГТак вот. В прошлом году, оказывается, я остановился в пол шаге от успеха, и если бы не Ваше письмо, там бы и стоял по сию пору.
Дело в том, что я зашел в тупичок, когда понял, что нужно переписать и перестроить значительную часть логики своей игрушки (которая фактически стала полигоном для DG, дракон-генератора). Делать мне это очень не хотелось, так как трудоемкость сего процесса весьма велика.
Понятно, что по сравнению с реальными коммерческими программами, которые приходится выполнять на работе, это чепуха. Но там подобные вещи мы делаем за хорошие деньги.
МОЗГИ НАИЗНАНКУ А тут-то ради чего мозги выворачивать наизнанку?
Если программирование не приносит удовольствия, то ну его нафиг, такое программирование.
Моя программа DG к тому времени была уже почти готова (по крайней мере, с тех пор, я добавил туда только иконку выбора и всё). Часть алгоритма программы была выражена в языке Дракон и несколько важных классов генерились из него.
ДВЕ СРЕДЫ Но это никак не облегчило мне жизнь. Я застрял между двух сред:
— средой разработки кода и
— средой рисования графов.
Каждая среда идеальна для своего круга задач, каждая закончена по своей функциональности, каждая по-своему прекрасна.
КАК СКРЕСТИТЬ УЖА С ЕЖОМ?Однако, попытаться совокупить "ужа" с "ежом" мог придумать только идиот.
На мне лежала утомительная и неблагодарная работа по согласованию изменений на верхнем уровне графических абстракций и одновременно на нижнем, — в реально работающей среде кода. Ничего хорошего не получалось...
Верхний, визуальный, уровень не давал понимания полной картины, так как, теперь это стало понятно, я кое-что упустил. Не перенес несколько маленьких, но важных кусочков алгоритма.
И это оказалась разрушительным моментом для понимания всей картины мироустройства моей игрушки.
А нижний уровень стал раздражать из-за того, что приходилось постоянно его переформатировать после кодогенерации, которая в этом смысле работает не идеально, хотя сегодня мне это всё равно.
ЖЕСТОКАЯ ОШИБКА Но главное даже не в этом, а в том, что я сам застрял между двух уровней!
Оба уровня я считал равноправными. Скорее, нижний уровень, по привычке, я полагал более главным, так как верхнему не вполне доверял.
А это была ошибка!
И ещё одно очень большое заблуждение тогда мне портило жизнь — это мысль, что ещё чертову кучу кода нужно переносить на верхний уровень и разрисовывать в диаграммы. О-ла-ла! Та ещё работка!
И, вполне закономерно, пришло разочарование.
РАЗОЧАРОВАНИЕ И БРЕД СИВОЙ КОБЫЛЫ Во-первых, я подумал, что невозможно так работать — враскоряку между двух сред. Я согласился с разумными доводами разумных людей, что в таком деле может использоваться только специализированная интегральная среда визуальной кодогенерации.
Во-вторых, я пришел к выводу, что сама эта идея визуальной кодогенерации (ВКГ) — это бред сивой кобылы. Алгоритмы представляют малую часть трудностей в процессе создания программ, куда больше проблем вызывают структуры данных, структуры построения кода и прочая лабудень. Поэтому, такая замечательная вещь как Дракон, здесь не катит. Так я думал совсем недавно...
СЕГОДНЯ Я ТАК НЕ ДУМАЮА сегодня я так не думаю. Сегодня я поступил так:
— перенес несколько недостающих важных кусочков на верхний уровень. После этого в мозгах многое встало своё место.
— очень быстро и просто перестроил весь алгоритм.
— понял, что вовсе не нужно и даже очень вредно разрисовывать весь код в виде диаграмм. Значительные его объемы инкапсулируются (используем это красивое слово) в маленьких квадратиках и не мешают глазам и мозгу.
— выбрал, назначил, навеки установил главным уровнем — верхний! И это, наверное, самое важное.
Работа по модификации, изменению, начинается на уровне диаграмм, на уровне абстракций. Кстати, это вовсе не абстракции, а вполне себе конкретности. Это вопрос замечательно интересный, хотя и философский.
На нижний уровень опускаемся только за деталями, за мелочами, за гайками и болтами.
ЧТО В РЕЗУЛЬТАТЕ?
НЕУЖЕЛИ Я ПРОЗРЕЛ?В результате, сбылась многовековая мечта идиота. Программирование превратилось в приятный, эстетический, легкий процесс передвигания квадратиков и связывания их проводками.
Я больше не боюсь своего кода. Я обрёл зрение. Я прозрел и больше не шарю руками в темноте по бесконечным логическим переходам, по всяким многомерным ифам и элсе (if и else).
И ещё. Я пришел к заключению, что идея работы на двух уровнях, использование двух независимых сред, не только имеет право на жизнь, но и при всех очевидных недостатках, имеет очень значительные преимущества.
На этом, Владимир Даниэлевич, остановлюсь, хотя много чего бы ещё можно было сказать. Например, хотя бы то, что картинка не так радужна, как может показаться. Но, боюсь, я и так злоупотребил Вашим вниманием,
Надеюсь, что немного развлёк своим длинным рассказом о написании маленькой игрушки на большом и могучем Драконе.
С искренним уважением,
Роман.
Прошу поделиться мыслями на эту тему. Высказать свои суждения и критические замечания.