LINUX.ORG.RU

Графическое представление структур данных (включая работу с ними)?

 


2

3

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

Но есть еще одна область, где визуальное представление востребовано - это структуры данных. Мы рисуем диаграмки из квадратиков и стрелочек на презентациях когда объясняем сложные структуры данных коллегам и студентам, смотрим на диаграмки в статьях про структуры данных и т.д. (спасибо @Siborgium - это он меня натолкнул на мысль;-)).

Есть два предельных случая.

  1. Программа минимум - хотелось бы иметь утилиту, способную построить в рантайм диаграмму отображающую существующую в программе структуру данных. Например для отладки. Наверное это должно быть что то вроде valgrind, но которая заданной точке трассы исполнения рисует объекты (квадратики) соединенные стрелочками (пойнтерами). Хотя возможна же косвенная адресация, когда используется не пойнтер а индекс в массиве… Но для отладки это было бы круто, мы делали такое для питона - выглядит феерично и местами очень наглядно. Соответственно вопрос - есть ли сейчаc такие утилиты? Я бы такую хотел (для плюсов).

  2. Программа максимум - именно программирование. То есть мы берем структуру данных (точнее ее фрагмент) и мышкой перебрасываем стрелочки. Что то подобное я делаю на доске когда объясняю студентам что такое список. Утилита в которой это делается запоминает историю переброса стрелочек и генерит на основе этой истории код какого то метода (например list::insert). Историю можно промотать туда/сюда и отредактировать. Наверное неплохо иметь возможность делать текстовые вставки в историю. Это чисто императивный стиль программирования. Не знаю кто как, а я когда велосипедю сложные структуры данных такую картинку в голове/на доске/на бумажке держу.

Пока что п.2 это чисто фантазии, в ближайшие полгода у меня до такого точно руки не дойдут, да и не очень пока понятно насколько оно вообще надо/удобно.

@hobbit, @abcq, @provaton зацените;-)

★★★★★

Последнее исправление: AntonI (всего исправлений: 2)

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

DDD, gdbgui (https://i.redd.it/h6vex7l2k8bz.png). См Есть ли современный аналог DDD?

Программа максимум - именно программирование. То есть мы берем структуру данных (точнее ее фрагмент) и мышкой перебрасываем стрелочки.

Попытки так делать были.
Неюзабельно.

SZT ★★★★★
()
Ответ на: комментарий от SZT

А, еще для хаскеля есть ghc-vis, и есть еще какой-то Sourcetrail и какие-то плагины для каких-то IDE, (напр. для Eclipse есть STAN - Structure Analysis for Java, есть всякие построители диаграмм классов), но я это не использовал

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)

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

menangen ★★★★★
()
Ответ на: ответ от ShlaMima

Э… я не очень понял как то что по ссылке относится к теме этого топика. Не могли бы Вы раскрыть свою мысль?

AntonI ★★★★★
() автор топика

Вы меня забыли добавить в топике.

Да. Теперь я тут всё увидел и ощутил.

Очень познавательно и умилительно.

HIS
()
Ответ на: комментарий от RazrFalcon

Уже проходили - неудобно. Текст намного компактнее и нагляднее.

А если с помощью Opengl/Vulkan да ещё и в VR шлеме?

torvn77 ★★★★★
()
Ответ на: комментарий от torvn77

Та тю… Я и сам программирую такое и вообще фанат 3д видео и фото. У меня и фотки есть 3Д и телек и моник. И 3Д насадку собираюсь к камере купить :) ну и т.п.

HIS
()

Это всё фигня. Вот что было бы полезно - это рисование структур из кода, а не кода из структур, при этом как-то надо в зависимости от момента времени это делать и чтобы навигация удобная была, иначе утонуть в этом говне мгновенно можно

peregrine ★★★★★
()
Ответ на: комментарий от pon4ik

Проектирование это хорошо, но реальность заставляет вносить костыли и через пару лет то что было в проекте красиво нарисовано и то что есть по факту - 2 большие разницы.

peregrine ★★★★★
()
Ответ на: комментарий от HIS

. У меня и фотки есть 3Д и телек и моник.

Он там в VR шлеме сидит и этого как я погимаю ты не делал.

Так что найди и посмотри видео.

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от Uncle_Bobby

Методологию в таком понимании можно в попу засунуть. Она у тебя про хотелки. Вот у меня есть хотелки в виде велосипеда, который на луну возит, когда педали крутишь, а реализации нет или она невозможна в принципе. А методология по типу «вжух» есть :)

peregrine ★★★★★
()
Ответ на: комментарий от torvn77

Сам сабж странненький. Если бы он шёл на диалог - было бы нормально.

У меня есть много разработок например по ИИ… Но меня банили. Обидно что чувак что меня банил порешил себя отсюда (может понял что не прав был).

Недавно решил поднять вопрос про энергию. Не успел договорить опять в минус вкатили.

Да. Я говорю не общепринятые вещи. Но я могу обосновать. Никто не хочет здесь слушать.

Да. Про распознавание вполне прога уже доделывается и есть тестовый экземпляр. (Это на счёт нейросетей по визуальному распознаванию) У меня не нейросети (не те что приняты на ЛОРе как суть дефакто)

HIS
()
Ответ на: комментарий от HIS

Сам сабж странненький. Если бы он шёл на диалог - было бы нормально.

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

Да. Про распознавание вполне прога

Кто про что, а грязный про баню.

torvn77 ★★★★★
()
Последнее исправление: torvn77 (всего исправлений: 1)
Ответ на: комментарий от torvn77

Забавно что с его «лёгкой» руки тут немного подзабанили людей (судя по этому треду), в том числе и меня. У него связи с модерами что ли?

HIS
()
Ответ на: комментарий от torvn77

Кто про что, а грязный про баню.

Смешно :)

HIS
()

Я вот как-то подумал, а будут ли при моей жизни какие-то изменения, которые я не смогу понять своей устоявшейся логикой? Какие-то устройства, которые мой мозг не сможет понять в принципе…

HIS
()
Ответ на: комментарий от torvn77

Афигеть! Мне только что ещё 2 бала срезали за то что я сказал анонимному пользователю, что он своим говорением ни о чём отнимает время.

HIS
()

Ерунда с этой всей суетой.

Давайте с Вами поговорим про термин, который используется в науке - Физика.

Я про термин - Энергия.

Есть у Вас время?

HIS
()
Ответ на: комментарий от pon4ik

Ну в нормальных командах да. А в ненормальных у меня в TODO висит уже который год длинный список апдейтов для документации, сейчас я кажется и в TODO их писать перестал;-(

Ты когда нить пробовал литературное программирование в реальных проектах?

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Литературное в смысле с документацией?

Регулярно практикую если речь об этом, секрет успеха не отделять задачи по коду и задачи по доке, а сделать доку частью чеклиста на задачу по реализации или исследованию.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

Литературное в смысле Дональда нашего Кнута. То есть пишется документация с фрагментами кода, а дальше из этого собирается собственно код.

Меня в свое время выбешивала необходимость вносить согласованные изменения в 4 файла сразу - .hpp, .cpp, .py (там верхний слой был на питоне) и .tex (доки). Я сделал утилиту которая файл с некоторыми спецсимволами разметки распихивала по этим четырем, что бы одна функция была в одном файле, да еще и запускала тесты. Было прикольно но потом как то не прижилось.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от pon4ik

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

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

pon4ik ★★★★★
()
Ответ на: комментарий от AntonI

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

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

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

Ротом рассказать, потыкать в код, порисовать картиночек? Буквально вот в сб этим занимался. Более того, у нас как то документацию обычно не пишут, хотя бы потому что ее не читают (проще спросить у автора). Коллега вон пару месяцев написала документацию для третьих лиц (речь об отчуждении алгоритмов) и пристает ко всем что бы прочитали, а народ как то уворачивается… Хотя во парадокс, это все при том что у нас отчетностью являются статьи в журналах а не код.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Ротом рассказать, потыкать в код, порисовать картиночек?

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

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

Ну по-крайней мере это моё мнение о вопросе привитое мне ранее старшими товарищами его разделявшими. Отсылать в доку и постоянно прояснять непонятные для читающего её моменты.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

AntonI ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Интересно. А что еще есть? Что бы именно под работу по анализу кода?

AntonI ★★★★★
() автор топика
Ответ на: комментарий от HIS

Если сообщение анонимуса тоже удалили, то могли и за это, да (п. 7.1 правил).

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

Но меня банили.

И какой же был твой ник в прошлой жизни (если не секрет, конечно)?

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

По стилю общения сей гражданин весьма похож на метапрога (давай объясняй мне быстро и понятно - почти дословно). По степени неадекватности местами даже метапрога переплевывает

"Ну-ну и когда оно поглотило убрав противоположный вектор энергии в ноль, дальше что? Частота-то дальше энергию закачивает. Тоесть оно должно расшатывать в обратную сторону.

Как будет время, специально для тебя и Лив создам в саенс ветке тему про резонанс и поглощение энергии с примерами и разъяснениями.

Ну к примеру про рессоры и амортизаторы. Можешь предварительно читнуть что такое турбулентность и зачем нужны амортизаторы.

Благодарить не нужно, это будет бесплатный ликбез.

"(c) @HIS

Теперь вот жду эту тему с нетерпением.

AntonI ★★★★★
() автор топика
Ответ на: комментарий от AntonI

Да @metaprog, по-моему, куда адекватнее. Он, как это ни странно, на конкретных людей первым почти никогда не агрится (хотя на подколку или резкую критику может среагировать неадекватно резко). А этот в теме по ссылке сразу взял и Рината обгадил, хотя тот ещё даже не успел в тему зайти.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

Ну у него может старые счеты с Ринатом. Ко мне он тоже неравнодушен, кличет прохВессором и все пристает с вопросом зачем в научных расчетах принудительное округление (по его мнению оно там никогда не используется). С векторной энергией тоже видимо будет теперь приставать…

AntonI ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Ну ты либо выясняешь у него, либо убеждаешь его что оно хочет именно то, что в документе? Я х3 как ещё работу за деньги делать:) Ну только по принципу «нам чёто надо» - «мы чёто сделали».

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

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

Академический софт обычно пишется в одно лицо, гораздо реже вдвоем-троем, причем люди уже идеально притерты друг другу а связность в задаче очень низкая, каждый делает свою почти незаивисимую часть. Так что большей части проблем работы в команде, которые стоят (насколько я понимаю) в больших конторах тут, просто нет. Минус - bus-фактор равен единице, замена кого либо из членов команды почти невозможна. И дело даже не в отсутствии доков - слишком специфические проблемы каждый решает.

AntonI ★★★★★
() автор топика
Последнее исправление: AntonI (всего исправлений: 3)
Ответ на: комментарий от AntonI

Это не значит, что кто-то выше не ведёт доку про то зачем нужны эти реализации и как они будут использоваться. Хотя и не значит, что ведёт.

Я работал по такой схеме правда софт был не совсем академический, но декомпозиция проектов была именно на этом уровне так что бы человек законченное решение делал в одно лицо, максимум в 2-3. Но справедливости ради, мне на вход подавались доки с описанием ожидаемого входа, выхода и контрольным примером. Т.е. кто-то выше хоть как-то но проектировал место этого кирпичика в системе. И там как раз проекты были на 5-20 строк кода.

Так что, вполне вероятно, что у тебя просто нет представления в насколько сложном проекте ты на самом деле участвуешь, и, если это так, то это проявление мастерства его руководителей :)

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Ответ на: комментарий от peregrine

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

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

мне на вход подавались доки с описанием ожидаемого входа, выхода и контрольным примером.

Это же халява;-)

Так что, вполне вероятно, что у тебя просто нет представления в насколько сложном проекте ты на самом деле участвуешь, и, если это так, то это проявление мастерства его руководителей :)

Кхе-кхе… к сожалению есть;-( если ты конечно не имеешь ввиду что то библейское, экзистенциальное. Проект Генезис и вот это все.

Еще одна «изюминка» научного софта - ты делаешь код, получаешь на нем результаты, пишешь статью/цикл статей, после чего код можно выбрасывать. Ну или переписать джаст фор фан с нуля;-)

Код который используется много лет это скорее исключение, если только задачей не было написать именно код для заказчика который им че то там сам потом будет делать - но это еще большая редкость.

AntonI ★★★★★
() автор топика
Последнее исправление: AntonI (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.