Programowanie metodą „przeciągnij i upuść” - czy będzie latać? [Zamknięte]

12

Wszystkie języki programowania, które znam, są napisane - tzn. Wpisane w taki czy inny sposób jako fragmenty tekstu. Ale zastanawiam się, czy jest jakiś język programowania, w którym można po prostu przeciągnąć i upuścić cały program; aby uzyskać pętlę, zaznacz to pole tutaj i przeciągnij je do tej sekcji „kodu” i tak dalej. A jeśli nie ma takiego takiego, to czy leciałby, gdyby został wymyślony?

Osobiście nie wierzę, że byłby to dobry pomysł, ale chciałbym usłyszeć, co myślisz.

gablin
źródło
Nigdy nie mów nigdy (powiedziałeś: „Nie sądzę, by to był taki dobry pomysł”) - może zdarzyć się dziwna sytuacja, w której najdziwniejszy pomysł może zadziałać dobrze.
ern0
6
„Czy poleciałby?” Szczerze mówiąc, gdybym pomyślał, że systemy sterowania lotem w samolocie, na którym lecę, zostały zaprogramowane przez kogoś, kto programuje metodą przeciągnij i upuść, może nie dostanę się do tego samolotu. ; D
glenatron
Naprawdę podoba mi się to pytanie, chociaż chciałbym, aby niektóre odpowiedzi były dłuższe i głębsze.
Nicole,
1
Ironman użyje go i poleci! Ale on nie istnieje w prawdziwym świecie!
Manoj R
@glenatron - Więc podróżuj pociągiem ... Systemy sterowania lotem są z jednej strony automatami skończonymi, które są budowane graficznie, a z drugiej systemy inżynierii kontroli części, które są zbudowane z podstawowych bloków i zmontowane w interfejsach GUI. Pozostała część to UML.
mouviciel

Odpowiedzi:

23

Wiele zestawów stworzyło systemy programowania typu „przeciągnij i upuść”.

„Labview” firmy National Instruments jest prawdopodobnie najbardziej znany i najlepszy.

Podstawowym problemem, z którym wszyscy się spotykają, jest to, że nie ma znanego sposobu na przekształcenie Flying Code Monkey w eksperta programistę i inżyniera. Jako JEDEN przykład, nie ma różnicy w Flying Flying Monkey między procesem O (N ^ 2) lub O (N ^ 3) a procesem O (N log N), co oznacza, że ​​muszą być dostarczane z procedurami standardowymi dla algorytmy O (N log N), które można dopasować do tworzonych przez nich szybkich graficznych kludges.

Drugim problemem, z którym wszyscy się spotykają, jest to, że kiedy dostarczasz bloki specjalnego przeznaczenia wymagane przez pierwszy problem, narzut związany z przenoszeniem danych między blokami zaczyna być drogi. Pracowałem z jednym bardzo fajnym takim systemem o nazwie Rippen. Kiedy profilowałem, aby zobaczyć, gdzie boli nas aplikacja do przetwarzania czujników o WYSOKIEJ WYDAJNOŚCI, byłem raczej zaniepokojony, widząc, że około 20% mojego czasu procesora idzie na przenoszenie danych. (Odkąd zajmowałem się przetwarzaniem obrazu LADAR, przetwarzając zmiennoprzecinkowe dane na każdym pikselu obrazu wejściowego, 20% procesora stanowiło DUŻO ruchu danych.)

Prawdopodobnie możesz obejść część 2, przechodząc do systemu opartego na kompilatorze: podajesz mu swoje zdjęcie i kompiluje się ono w mocno zoptymalizowanym programie wykonywalnym, ale nie jestem pewien, czy naprawiłoby to problemy, a to mogłoby zaszkodzić interaktywny charakter narzędzia.

John R. Strohm
źródło
Teoretycznie możesz mieć tryb debugowania i zwolnienia (zoptymalizowany).
Job
15

Prostą odpowiedzią jest: nie.

Jeśli chodzi o programowanie, wprowadzanie tekstu znacznie przewyższa pod względem określonych informacji niż część wizualna.

Ciemna noc
źródło
W miarę wchodzenia na coraz wyższy poziom staje się coraz większa szansa na graficzne przedstawienie problemu. Programowanie przepływu danych jest takim podejściem (patrz moja odpowiedź na to pytanie): podane są komponenty, są to czarne skrzynki, zadaniem „programisty” (lepszy termin: projektant aplikacji) jest po prostu uporządkowanie ich w sieć.
ern0
12

LabVIEW jest dość graficzny.

Ze strony LabVIEW :

LabVIEW

Zeke
źródło
To wygląda na porządne. Ile możesz z tym zrobić? Czy specjalizuje się tylko w jednym rodzaju „programowania”, takim jak fizyka, czy można go używać do czegokolwiek?
gablin
2
Tak, są specjaliści LabVIEW: lavag.org . Fora dyskusyjne: forums.ni.com . Porównanie Erlanga: bit.ly/2yC0Tn . Opis kompilatora: bit.ly/c6quPK . Ogólny przykład programowania: bit.ly/cSnt5D . Użyj w LHC: bit.ly/9Yp4oo . To niszowy język używany w całym tym cholernym miejscu: ni.com/solutions . Jest drogi jak diabli, przecieka abstrakcje po lewej i prawej stronie, instaluje mnóstwo niewyjaśnionych usług i cierpi z powodu mnóstwa amatorów. Jest wieloplatformowy, prosty do zrównoleglenia i tak łatwy / trudny, jak każdy inny język.
Joe Z
2
Obsługuje roboty LEGO. ni.com/academic/mindstorms
rwong
1
@Zeke: Jeśli VI (odpowiednik programu lub funkcji LabVIEW) wymaga przewijania w więcej niż jednym kierunku, oznacza to, że nie został poprawnie napisany.
oosterwal
1
@ oosterwal: Masz rację, to powszechne. Ponadto język jest celowo sprzedawany naukowcom i inżynierom jako łatwy do nauczenia. To prawda, jeśli chodzi o małe programy. Ponieważ programy wymagają bardziej wyrafinowania, kod ma tendencję do pełzania dość spektakularnie poza kontrolą. (Edycja: Nie z powodu języka jako takiego, ale z dobrymi intencjami użytkowników. Pełne ujawnienie: Jestem naukowcem kilka dni :)
Joe Z
6

Wieśniak! Rury to prawdopodobnie doskonały przykład języka graficznego opisywanego typu; przeciągasz i upuszczasz prymitywy (wszystko, od źródeł danych, na których działasz, po pętle i warunki warunkowe), aby wytworzyć przepływ informacji przez system.

Jest bardzo specyficzny dla domeny, ale o to głównie chodzi; Pipe koncentruje się na danych, dlatego najważniejsza jest wizualizacja (a nie wyrażenie). Podobnie środowiska samouczków, takie jak Scratch lub Sprog! podkreśl wizualizację tego, nad czym pracujesz jako pomoc w nauce; wydajność wprowadzania danych jest w tej dziedzinie znacznie niższym priorytetem.

esm
źródło
Gdyby więcej amatorskich twórców aplikacji internetowych wiedziało o Pipes, świat byłby lepszym miejscem. +1
Sparr
3

Od czasu do czasu ktoś wymyśla język programowania „przeciągnij i upuść” lub narzędzie do projektowania, które „położy kres programowaniu, jakie znamy” i sprawi, że każdy, kto go użyje, stanie się programistą.

Powodem, dla którego żaden z nich nie wykonał jeszcze tej pracy i nie wyłączył nas wszystkich z pracy, jest to, że tak naprawdę, bez względu na to, ile tworzysz funkcji przeciągnij i upuść, i bez względu na to, jak przyjazny dla użytkownika jest, to prosty fakt, że programowanie jest trudne.

Prawdziwe dyscypliny programowania polegają na wiedzy na temat rozwiązywania problemów, na tym, jak modelować procesy i organizować dane, aby były przydatne. Nawet zrozumienie, co w ogóle jest możliwe z komputerem.

Istnieją dowody (jeśli są kontrowersyjne) sugerujące, że niektórych ludzi nie można nauczyć tak myśleć, co prowadzi mnie do kilku interesujących i istotnych myśli. Na początek, jeśli nie możesz myśleć w ten sposób, to jest wielu programistów, więc zawsze możesz zatrudnić kogoś do realizacji pomysłu, jeśli go masz, i uważasz, że warto za to zapłacić. Jeśli potrafisz wystarczająco dobrze pracować z logiką programowania, równie dobrze możesz nauczyć się prawdziwego języka, zamiast bawić się w stosunkowo proste środowisko przeciągnij i upuść.

Mam tu na myśli ogólne programowanie. To samo niekoniecznie ma zastosowanie w bardziej ograniczonym scenariuszu typu DSL, w którym przeciąganie i upuszczanie może być naprawdę przydatnym procesem użytkowników, którzy są specjalistami w tej dziedzinie, a nie specjalistami IT.

glenatron
źródło
Programowanie jest złożonym, trudnym i długim procesem, wymaga mnóstwa pracy inżyniera. Właśnie dlatego branża stara się udostępnić tworzenie aplikacji dla nie-programistów: zmniejszyć koszty opracowania, zoptymalizować wykorzystanie zasobów ludzkich. Jako programista mogę powiedzieć, że jest wiele zadań, które powinni wykonać nie-programiści, ale nie mają do nich żadnych narzędzi, więc muszą to zrobić programiści, którzy 1. nienawidzą tego robić tego rodzaju zadania 2. są drogie 3. nie są najlepszymi ludźmi do tego. Dlatego z zadowoleniem przyjmuję każdy pomysł, który wskazuje w ten sposób, np. Programowanie wizualne.
ern0
1
Wiem, dlaczego przemysł próbuje to zrobić. Ale chodzi mi o to, że jeśli potrafisz programować, jesteś programistą, a ludzie, którzy nie potrafią programować, nie będą mogli zrobić tego lepiej, ponieważ istnieją narzędzia wizualne do wykonywania tych samych zadań, które w przeciwnym razie musieliby pisać kod dla. Narzędzia to nie problem, to, co musisz z nimi zrobić, to problem.
glenatron,
Mam na myśli programowanie bardziej liberalne. Programuje także, gdy każesz swojej maszynie wach, aby uruchamiała pranie przez 5 minut, suszenie przez 10 minut. Ktoś powinien podać inną nazwę dla różnych „warstw” programowania. Czy programuje się przepływ danych? Czy tworzenie arkuszy kalkulacyjnych (bez makr)? Tak, są, ale także różnego rodzaju, co robią tak zwani programiści. W każdym razie istnieją wyraźne różnice w tym, co robią programiści, mam na myśli przeciąganie i upuszczanie modułów w SuperIDE12 ++ z kodowaniem wtyczek VS. To duża różnica, jeśli twoja platforma ma GC. Lub: skrypt VS kompilator. „Programowanie” jest zbyt powszechnym terminem.
ern0,
3

Najlepszy system programowania metodą przeciągnij i upuść, jaki widziałem, jest dla robotów Lego Mindstorms NXT.

Pozwala to robić niesamowite rzeczy, kontrolując dość skomplikowane funkcje.

Jednak w pewnym momencie się psuje i musisz wrócić do innego systemu.
Zobacz ten artykuł: http://www.wired.com/geekdad/2007/11/the-best-progra/

Możliwe jest jednak, że jeśli to zostanie poprawione, a różne scenariusze zostaną zaspokojone, potrzeba tego będzie coraz mniejsza.

Bravax
źródło
Do love Mindstorms (który wyewoluował z Lego Dacta, który miał bardziej tradycyjne kodowanie [język podobny do Logo / Lisp]), studiował go w szkole 15 lat temu. Doskonały prezent dla programisty, aby dostać swoje dzieci, jeśli mają trochę.
Orbling
1
NXT to właściwie LabVIEW. Cóż, LV został nieco przycięty: ni.com/academic/mindstorms
Joe Z
Nigdy tego nie wiedziałem, dzięki! Jestem pod wrażeniem tego.
Bravax,
2

Programowanie przepływu danych (inaczej programowanie oparte na przepływie) może być swego rodzaju. Chociaż programowanie przepływu danych nie jest kompletne w Turingu.

Programowanie przepływu danych to metoda tworzenia aplikacji, gdy umieszczasz instancje komponentów na scenie i łączysz ich porty, aby tworzyły sieć przetwarzania komunikatów. Komponenty można wybierać z biblioteki, mają porty odbiorcze (wejściowe) i produkcyjne (wyjściowe), które są gotowe do połączenia z portami innych komponentów.

Oto ładny przykład, w którym nawet mysz nie została użyta do zbudowania aplikacji syntezatora, ale gołe ręce i małe kostki: http://www.youtube.com/watch?v=0h-RhyopUmc

Artykuły w Wikipedii są dobrym punktem wyjścia: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

Generowanie dźwięku jest typowym obszarem programowania przepływu danych. Istnieje kilka systemów syntezatorów typu open source: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Jeśli masz komputer Mac, możesz mieć fabrycznie zainstalowany program Quartz Composer: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Ja również system DF z moim przyjacielem, ale nie mamy wizualny edytor jeszcze , tylko skryptu wizualizera.

ern0
źródło
3
Dlaczego uważa Pan, że programowanie przepływu danych nie jest ukończone przez Turinga?
oosterwal
Zabawa z połączeniami nie jest zakończona. Pisanie komponentów jest zakończone przez Turinga (zwykle nie ma żadnych ograniczeń, tylko framework DF, którego należy użyć do komunikacji z innymi komponentami).
ern0
1
Podstawowym sprzętem każdego procesora jest w zasadzie przepływ danych. Jak ta niekompletna konstrukcja Turinga może prowadzić do kompletnego systemu Turinga?
mouviciel
@mouviciel Moją pierwszą reakcją było „nie, procesor to nie przepływ danych”, ale tak jest. W każdym razie jest to zły przykład dla systemów przepływu danych; zły projekt. Jest tylko jeden komponent źródłowy (zegar zewnętrzny / wewnętrzny), który uruchamia komponent CPU w celu przetworzenia następnej instrukcji. Nawet jeśli liczymy inne części, np. Audio, kartę graficzną, system DMA itp. Jako komponenty, jest to jednak zły projekt: komponenty są zbyt duże i zbyt wyspecjalizowane. Ale pomysł jest dobry, może to sposób na zwiększenie wydajności / wszechstronności, budowanie komputerów z mniejszymi jednostkami i łączenie części takich jak komponenty przepływu danych? Pachnie jak patent :)
ern0
2

System programowania Scratch MIT jest prawie całkowicie metodą „przeciągnij i upuść”.

Wygląda na to, że Google App Inventor jest podobny (i przypisuje Scratch).

Nie chciałbym kodować w sobie niczego wielkiego, ale do nauczania „myślenia programisty” Scratch jest znakomity. To jest prawdziwe programowanie, ale z natychmiastową satysfakcją wizualną i blokowaniem zatrzasków unika się dużej części frustracji związanej z „błędem składni”, która zniechęca przybyszów (pogląd, który widzę powtórzony w tym artykule ). Próba oczarowania małych dzieci za pomocą wiersza polecenia w języku Python nie kończy tego dnia.

czas
źródło
1

To już istnieje, choć być może nie w formie, o której myślisz. Dwa przykłady to Simulink i Alice.

Simulink to graficzny sposób składania dynamicznych symulacji systemowych. Podczas gdy większość konstrukcji jest bardziej złożona niż to, co zwykle uważa się za programowanie, rzeczy takie jak for i jeśli instrukcje mogą być nadal tworzone graficznie. Simulink jest czymś wielkim w aplikacjach lotniczych i kosmicznych, ponieważ rząd i wiele dużych firm wykonuje swoje wstępne projekty w Simulink, a następnie stosuje pewien rodzaj dowodu twierdzenia do „kodu” Simulink.

Alice, to narzędzie do przeciągania i upuszczania, programujące dla dzieci. Pozwala dzieciom bawić się budowaniem opowieści poprzez przeciąganie i upuszczanie akcji i obiektów na rodzaj planszy do programowania.

John Berryman
źródło
1

Prograph to fajny język, w którym wszystko przeciągało się i upuszczało. Ponadto Wikipedia ma artykuł z dobrą listą języków wizualnych .

Blaszany Człowiek
źródło
czy mógłbyś rozwinąć nieco treść każdego z tych zasobów i dlaczego polecasz je jako odpowiedź na zadane pytanie? „Tylko odpowiedzi” nie są mile widziane na Stack Exchange
gnat
0

Istnieje wiele wizualnych języków programowania. System telefoniczny, którym zarządzałem dla dużego centrum telefonicznego, został zaprogramowany za pomocą modułów przeciągnij i upuść. Mój wujek opracował system Just-In-Time do projektowania linii produkcyjnych, który był całkowicie przeciągany i upuszczany i to było 20 lat temu.

Grałem nawet w grę walki robotów na PS1, która używała języka programowania typu przeciągnij i upuść.


źródło
Carnage Heart, była niesamowita gra.
Ape-inago,
To jest to, nie mogłem zapamiętać nazwy. Kochałem tę grę. Bardzo sprytna konstrukcja.
-1

Programowanie tekstowe trwa 50 lat, ale inżynieria oprogramowania musi przejść do dziedziny graficznej, aby poradzić sobie z kolejnym poziomem złożoności. Na przykład pojawienie się procesorów manycore i wyzwania związane z programowaniem równoległym przesuwają model wątków do granic możliwości. Szczerze mówiąc, myślę, że społeczność programistów jest po prostu arogancka, myśląc, że w programowaniu jest coś zupełnie innego i specjalnego, co nie byłoby możliwe do wizualizacji, jak każda inna domena. Podobnie jak operatorzy telefoniczni i wiele innych zawodów, odpowiednia technologia automatyzacji pozwoli ekspertom w dziedzinie wkrótce współpracować w bogatych przestrzeniach symulacyjnych systemów opartych na wiedzy. Branża oprogramowania od dawna spóźnia się ze zmianą paradygmatu.

użytkownik9196
źródło
2
Zdecydowanie się z tym nie zgadzam: złożoność wielu rzeczywistych programów jest zdecydowanie zbyt duża, aby można je było w pełni przedstawić graficznie. Wszystkie osoby, które znam, które (1) wiedziały, jak programować i (2) korzystały z LabView do większego projektu, odkryły, że graficzna reprezentacja jest z natury zbyt ciężka, aby produktywnie pracować nad większymi projektami. Jasne, LabView jest bardzo wygodny, gdy twój program mieści się na jednym ekranie; ale kiedy Twój program zaczyna rosnąć poza granice jednego ekranu, LabView jest trudny w użyciu (nie ma prostego wyszukiwania tekstu, przestawianie bloków jest bolesne…).
Eric O Lebigot,