Програмування перетягування з перетягуванням - воно літатиме? [зачинено]


12

Усі мови програмування, які я знаю, написані - тобто вводяться так чи інакше як довжини тексту. Але мені цікаво, чи є мова програмування, де можна просто перетягнути всю програму; щоб отримати цикл, ви вибираєте це поле тут і перетягуєте його до того розділу "коду" там і так далі. І якби подібного немає, він би летів, якби його винайшли?

Особисто я не вірю, що це була б така гарна ідея, але я хотів би почути, що ви думаєте.


Ніколи не кажіть ніколи (ви сказали: "Я не вірю, що це було б такою хорошою ідеєю") - може виникнути дивна ситуація, коли найсмішніша ідея може успішно працювати.
ern0

6
"Він би літав?" Чесно кажучи, якби я подумав, що системи управління польотом у літаку, на якому я рухався, запрограмований хтось, хто програмував Drag-n-drop, я не міг би потрапити в цю площину. ; D
гленатрон

Дуже подобається це питання, хоча я хотів би, щоб деякі відповіді були довші та глибші.
Ніколь

1
Ironman скористається цим і полетить! Але його немає в реальному світі!
Маной Р

@glenatron - Отже, подорожуйте поїздом ... Системи управління польотом - це для однієї частини автоматичні автоматизовані автоматичні станції, які будуються графічно, а для іншої - керуючи інженерними системами, побудованими з основних блоків та зібраних в інтерфейси GUI. Решта - це UML.
mouviciel

Відповіді:


23

Багато нарядів зробили системи програмування перетягування.

Національні інструменти "Labview" - це, мабуть, найвідоміший і найкращий.

Основна проблема, з якою вони стикаються, полягає в тому, що невідомий спосіб перетворити Мавпу Літаючого коду в експертного програміста та інженера. Як ОДИН приклад, немає ніякої різниці для Flying Code Monkey між процесом O (N ^ 2) або O (N ^ 3) та процесом O (N log N), а це означає, що вони повинні бути забезпечені консервованими процедурами для алгоритми O (N log N), які можуть бути влаштовані на замовлення у графічні хити, які вони будуватимуть.

Друга проблема, з якою вони стикаються, полягає в тому, що, коли ви постачаєте блоки спеціального призначення, необхідні першою проблемою, накладні витрати, переміщені між блоками, починають дорожчати. Я працював з однією дуже приємною такою системою під назвою Rippen. Коли я профайлював, щоб побачити, куди ми болимо на високошвидкісному додатку для обробки сенсора, я був дуже занепокоєний, побачивши, що приблизно 20% мого процесорного часу збирається на переміщення даних. (Оскільки я займався обробкою зображень LADAR, роблячи неабиякий фрагмент обробки з плаваючою комою на кожному пікселі вхідного зображення, 20% процесора було ВЕЛИКОБОГО руху даних, що рухаються.)

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


Теоретично ви можете мати режим налагодження та режим випуску (оптимізований).
Робота

15

Проста відповідь - ні.

Що стосується програмування, то текстове введення значно перевищує з точки зору визначеної інформації, ніж її візуальну частину лічильника.


У міру того, як ви піднімаєтеся ще вище і вище, у вас стає все більше шансів сформулювати проблему графічно. Програмування потоків даних - це такий підхід (див. Мою відповідь на це запитання): компоненти задані, це чорні скриньки, завдання "програміста" (кращий термін: дизайнер додатків) - просто організувати їх у мережу.
ern0

12

LabVIEW досить графічний.

З веб-сайту LabVIEW :

LabVIEW


Так, це виглядає акуратно. Скільки ви можете зробити з цим? Це спеціалізоване лише для одного виду "програмування", наприклад фізики, чи ви можете використовувати його для чого-небудь?
габлін

2
Так, є професіонали LabVIEW: lavag.org . Форуми для обговорення: forums.ni.com . Ерланг порівняння: bit.ly/2yC0Tn . Опис Компілятор: bit.ly/c6quPK . Загальний приклад програмування: bit.ly/cSnt5D . Використання в LHC: bit.ly/9Yp4oo . Це ніша мова, яка використовується в усьому проклятому місці: ni.com/solutions . Це дорого, як пекло, протікає абстракцій ліворуч та праворуч, встановлює тонну незрозумілих служб та страждає від тонн аматурів. Це крос-платформний, простий для паралелізації і простий / важкий, як будь-яка інша мова там.
Джо Z

2
Він працює LEGO роботами. ni.com/academic/mindstorms
rwong

1
@ Zeke: Якщо VI (еквівалент програми LabVIEW програми або функції) вимагає прокрутки в декількох напрямках, він записаний неправильно.
oosterwal

1
@oosterwal: Ти маєш рацію, це звичайно. Крім того, мова досить навмисно продається вченим та інженерам, як легко вивчити. Тримався невеликих програм, це правда. Оскільки програми вимагають більшої складності, код, як правило, досить ефектно виходить з-під контролю. (Редагувати: Не через мову як таку, а на добронамерених користувачів. Повне розкриття інформації: Я кілька днів вчений :)
Джо Z

6

Yahoo! Труби - це, мабуть, прекрасний приклад графічної мови типу, який ви описуєте; ви перетягуєте примітиви (все від джерел даних, на які ви дієте, до циклів і умов), щоб створювати потік інформації через систему.

Це дуже доменне значення, але в основному в цьому справа; Труби орієнтовані на дані, що робить візуалізацію (а не експресію) першорядним. Аналогічно середовищі підручників, як Scratch або Sprog! акцентуйте увагу на візуалізації того, над чим працюєте, як навчального посібника; ефективність введення даних є значно нижчим пріоритетом у цій галузі.


Якби більше аматорських розробників веб-додатків знали про Труби, світ був би кращим місцем. +1
Спарр

3

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

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

Реальні дисципліни програмування - це стільки про те, як знати, як вирішувати проблеми, розуміти, як моделювати процеси та організовувати дані для використання. Навіть розуміння того, що взагалі можливо з комп’ютером.

Є докази (якщо суперечливі), що дозволяють припустити, що деяких людей не можна навчити мислити таким чином, що приводить мене до пари цікавих і релевантних думок. Для початку, якщо ви не можете так подумати, то навколо є багато програмістів, тож ви завжди можете найняти когось, щоб реалізувати ідею, якщо у вас є така, і ви думаєте, що за це варто заплатити. Якщо ви можете досить добре працювати з логікою програмування, то ви можете навчитися справжній мові, а не возитися з відносно простим середовищем перетягування.

Я тут думаю про загальне програмування. Те ж саме не обов'язково застосовується у більш обмеженому сценарії типу DSL, де перетягування може бути дійсно корисним користувачам процесу, який є спеціалістами в цьому домені, а не ІТ-спеціалістами.


Програмування - складний, важкий і тривалий процес, вимагає тонни роботи інженера. Ось чому галузь намагається зробити розробку додатків доступною для непрограмістів: зменшити витрати на розробку, оптимізувати використання людських ресурсів. Також, як програміст, я можу сказати, що існує багато завдань, які повинні виконувати непрограмісти, але у них немає інструментів для виконання цих завдань, тому це повинні робити програмісти, які 1. ненавиджу робити такі завдання 2. дорогі 3. не найкращі люди для цього. Отже, я щиро вітаю будь-яку ідею, яка вказує саме на це, наприклад, візуальне програмування.
ern0

1
Я знаю, чому галузь намагається це зробити. Але моя думка полягає в тому, що якщо ти можеш запрограмувати, ти програміст, і люди, які не можуть програмувати, не зможуть зробити це краще, оскільки є наочні інструменти для виконання тих же завдань, що інакше їм довелося б написати код для. Інструменти - це не проблема, у цьому ви маєте справу.
гленатрон

Я маю на увазі програмування більш ліберальне. Це також програмування, коли ви кажете вашій вишукувальній машині протягом 5 хв тривати прання, 10 хвилин сушити. Хтось повинен дати різну назву для різних програмувань "шарів". Чи програмування потоку даних програмування? Чи створюється електронна таблиця (без макросів)? Так, вони є, але також різного роду, як це роблять так звані програмісти. У будь-якому випадку є різкі відмінності між програмістами, тобто модулями перетягування в SuperIDE12 ++ з кодуванням модулів VS. Крім того, це просто велика різниця, якщо ваша платформа має GC. Або: компілятор сценарію VS. "Програмування" - занадто поширений термін.
ern0

3

Найкраща система програмування перетягування, яку я бачив, - це для роботів Lego Mindstorms NXT.

Це дозволяє робити деякі досить дивовижні речі, контролюючи деякі досить складні функції.

Однак у якийсь момент вона виходить з ладу, і вам потрібно повернутися до іншої системи.
Дивіться цю статтю: http://www.wired.com/geekdad/2007/11/the-best-progra/

Цілком можливо, що якби це було вдосконалено, і в різних сценаріях, де було б задоволено, потреба в цьому стане все менше і менше.


Любіть душевні бурі (які склалися з Лего Дакта, який мав більш традиційне кодування [мова, схожа на логотип / Лісп]), вивчав це у школі 15 років тому. Відмінний подарунок програмісту, щоб отримати своїх дітей, якщо вони мають їх.
Увімкнення

1
Насправді NXT - це LabVIEW. Що ж, LV, який трохи порізаний
Joe

Я ніколи цього не знав, дякую! Я дуже вражений цим.
Бравакс

2

Програмування потоків даних (також програмування на основі потоку) може бути своєрідним. Хоча програмування потоку даних не завершено Тьюрінга.

Програмування потоків даних - це метод створення додатків, коли ви розміщуєте на сцені екземпляри компонентів і підключаєте їх порти, щоб вони утворювали мережу обробки повідомлень. Компоненти можна вибрати з бібліотеки, у них є порти споживача (введення) та виробника (вихід), які готові з'єднатися з портами інших компонентів.

Ось прекрасний приклад, коли навіть миша не використовувалась для створення програми synth, а голими руками та маленькими кубиками: http://www.youtube.com/watch?v=0h-RhyopUmc

Статті з Вікіпедії - хороша відправна точка: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

Генерація звуку - типова область програмування потоків даних. Є кілька систем синтезування з відкритим кодом: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Якщо у вас Mac, можливо, у вас є заводський попередньо встановлений Quartz Composer: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Я також зробив систему DF з моїм другом, але у нас немає ніякого візуального редактора ще , тільки скрипт визуализатора.


3
Чому ви вважаєте, що програмування потоку даних не є Тюрінгом завершеним?
oosterwal

Планування навколо з'єднаннями коробки не закінчується. Написання компонентів завершено Тьюрінгом (зазвичай немає обмежень, просто рамка DF, яка повинна використовуватися для спілкування з іншими компонентами).
ern0

1
Основне обладнання будь-якого процесора - це потік даних. Як ця повна конструкція Тюрінга може призвести до комплектації Тюрінга?
mouviciel

@mouviciel Першою моєю реакцією було "ні, процесор не є потоком даних", але це так. У будь-якому випадку це поганий приклад для систем передачі даних; поганий дизайн. Є лише один вихідний компонент (зовнішній / внутрішній годинник), який запускає компонент процесора для обробки наступної інструкції. Навіть якщо ми вважаємо інші компоненти, наприклад аудіо, відеокарту, систему DMA і т.д., як компоненти, це все ж поганий дизайн: компоненти занадто великі і занадто спеціалізовані. Але ідея гарна, можливо, це спосіб підвищити продуктивність / універсальність, створити комп'ютери з меншими одиницями та з'єднати такі частини, як компоненти потоку даних? Пахне патентом :)
ern0

2

Система програмування MIT Scratch майже повністю перетягується.

Схоже, схожий (і зараховує Scratch) програму Google Inventor Google .

Я б не хотів кодувати щось велике ні в собі, але для навчання "програмістському мисленню", Scratch чудовий. Це справжнє програмування, але з миттєвим візуальним задоволенням і блокуванням з'єднань уникнути великої кількості розладів "синтаксичної помилки", які відтягують новачків (погляд, який я бачу, перегукується в цій статті ). Намагання захоплювати маленьких дітей командним рядком python не припиняє цього дня.


1

Це вже існує, хоч можливо і не у формі, про яку ви думаєте. Два приклади - Сімулінк та Аліса.

Simulink - це графічний засіб складання динамічних симуляцій системи. Хоча більшість конструкцій є більш складними, ніж те, що ви зазвичай вважаєте програмуванням, такі речі, як, і якщо висловлювання все ж можна побудувати графічно. Simulink має велику справу в аерокосмічних додатках, оскільки уряд і багато великих компаній роблять свої початкові проекти в Simulink, а потім застосовують певний тип теореми до «коду» Simulink.

Аліса, це інструмент для навчання програмуванню для дітей. Це дозволяє дітям отримувати задоволення від створення історій, перетягуючи дії та предмети на якусь дошку історії програмування.


1

Програф був класною мовою, яка все перетягувала. Також у Вікіпедії є стаття з переліком візуальних мов із хорошим розміром .


Ви б не хотіли трохи розширити те, що має кожен з цих ресурсів, і чому ви рекомендуєте їх відповідати на поставлене запитання? "Відповіді лише на посилання" не дуже вітаються на Stack Exchange
gnat

0

Існує досить багато мов візуального програмування. Телефонна система, якою я керував у великому телефонному центрі, була запрограмована за допомогою модулів перетягування. Мій дядько розробив систему Just-In-Time для проектування виробничих ліній, яка була повністю перетягнута, і це було 20 років тому.

Я навіть грав у бойову гру роботів на PS1, яка використовувала мову програмування перетягування.


Carnage Heart, була приголомшливою грою.
Ape-inago

Це один, я не міг згадати ім'я. Мені сподобалась та гра. Дуже розумний дизайн.

-1

Текстове програмування пройшло 50 років, але інженерія програмного забезпечення повинна перейти в графічну сферу, щоб вирішити наступний рівень складності. Наприклад, поява багатьохкорових процесорів та виклики паралельного програмування підштовхують модель нитки до своєї межі. Відверто кажучи, я вважаю, що програмне забезпечення просто зарозуміло, думаючи, що є щось принципово інше і особливе в програмуванні, яке не піддавалося б візуалізації, як і всі інші домени. Як і телефонні оператори та багато інших професій, правильна технологія автоматизації дозволить доменним експертам незабаром співпрацювати в багатих просторах моделювання систем, заснованих на знаннях. Програма програмного забезпечення давно назріла для зміни парадигми.


2
Я категорично не погоджуюсь тут: складність багатьох програм у реальному житті занадто висока, щоб бути повністю представленою графічно. Усі люди, яких я знаю, хто (1) знав, як програмувати, та (2) використовували LabView для більшого проекту, виявили, що графічне зображення за своєю суттю надто важке для продуктивної роботи над великими проектами. Звичайно, LabView дуже зручний, коли ваша програма розміщується на одному екрані; але коли ваша програма починає розростатися за межі одного екрану, LabView важко ефективно використовувати (не простий пошук тексту, блоки перестановки не є болючим,…).
Ерік О Лебігот
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.