Sürükle ve bırak programlama - uçar mıydı? [kapalı]


12

Bildiğim tüm programlama dilleri yazılır - yani metin uzunlukları olarak şu veya bu şekilde yazılır. Ama merak ediyorum, tüm programı sürükleyip bırakabileceğiniz herhangi bir programlama dili var mı; bir döngü elde etmek için, bu kutuyu buraya seçip oradaki "kodun" bölümüne sürüklersiniz vb. Ve eğer böyle biri yoksa, icat edilmiş olsaydı uçar mıydı?

Şahsen bunun iyi bir fikir olacağını düşünmüyorum, ama ne düşündüğünü duymak istiyorum.


Asla asla deme ("Bu kadar iyi bir fikir olacağına inanmıyorum" dedin)) - en tuhaf fikrin iyi performans gösterebileceği garip bir durum olabilir.
ern0

6
"Uçar mıydı?" Dürüst olmak gerekirse, sürmekte olduğum uçaktaki uçuş kontrol sistemlerinin Drag-n-drop programlaması yapan biri tarafından programlandığını düşünürsem, o uçağa binemeyebilirim. ; D
glenatron

Gerçekten bu soru gibi, bazı cevapların daha uzun ve daha derin olmasını isterdim.
Nicole

1
Ironman kullanacak ve uçacak! Ama gerçek dünyada yok!
Manoj R

@glenatron - Trenle seyahat edin ... Uçuş kontrol sistemleri, grafiksel olarak inşa edilen bir kısım sonlu durum otomatları ve temel bloklardan inşa edilen ve GUI arayüzlerine monte edilen bir başka parça kontrol mühendisliği sistemleri içindir. Kalan UML'dir.
mouviciel

Yanıtlar:


23

Birçok kıyafet sürükle ve bırak programlama sistemlerini gerçekleştirmiştir.

National Instruments "Labview" muhtemelen en iyi bilinen ve en iyisidir.

Hepsinin karşılaştığı temel sorun, Uçan Kod Maymununu uzman bir programcıya ve mühendise dönüştürmenin bilinen bir yolu olmamasıdır. BİR örnek olarak, Uçan Kod Maymunu'nda O (N ^ 2) veya O (N ^ 3) işlemi ile O (N log N) işlemi arasında bir fark yoktur; inşa edecekleri quickie grafik kludlarına özel olarak sığabilecek O (N log N) algoritmaları.

Karşılaştıkları ikinci sorun, ilk sorunun gerektirdiği özel amaçlı blokları tedarik ettiğinizde, verilerin bloklar arasında taşınmasıyla yüklenen yükün pahalılaşmaya başlamasıdır. Rippen adında çok hoş bir sistemle çalıştım. YÜKSEK! Performans gerektiren bir sensör işleme uygulamasında nereye zarar verdiğimizi görmek için profillediğimde, CPU zamanımın yaklaşık% 20'sinin veri hareketine gittiğini görmek beni oldukça rahatsız etti. (LADAR görüntü işleme yaptığımdan, bir giriş görüntüsünün her pikselinde oldukça fazla kayan nokta işlemesi yaptığımdan, CPU'nun% 20'si çok fazla veri taşıma yüküydü.)

Derleyici tabanlı bir sisteme giderek muhtemelen 2. bölümden geçebilirsiniz: resminizi beslersiniz ve yoğun şekilde optimize edilmiş bir yürütülebilir programa derlenir, ancak sorunları gerçekten çözeceğinden emin değilim ve zarar verebilir aracın etkileşimli doğası.


Teorik olarak bir Hata Ayıklama ve Yayın (optimize edilmiş) moduna sahip olabilirsiniz.
Job

15

Basit cevap hayır.

Programlama söz konusu olduğunda, metinsel girdi, görsel sayaç kısmından çok, belirtilen bilgi açısından çok daha fazladır.


Daha da yükseğe çıktıkça, sorunu grafiksel olarak ifade etme şansı da artmaktadır. Veri akışı programlama böyle bir yaklaşımdır (bu soru için cevabım bakın): bileşenler verilir, kara kutulardır, "programcı" nın görevi (daha iyi terim: uygulama tasarımcısı) sadece bir ağ halinde organize etmektir.
ern0

12

LabVIEW oldukça grafikseldir.

Gönderen LabVIEW web :

LabVIEW


Ha, bu temiz görünüyor. Bununla ne kadar yapabilirsin? Fizik gibi sadece bir tür "programlama" için mi uzmanlaşmıştır, yoksa herhangi bir şey için kullanabilir misiniz?
gablin

2
Evet, LabVIEW uzmanları var: lavag.org . Tartışma forumları: forums.ni.com . Erlang karşılaştırması: bit.ly/2yC0Tn . Derleyici açıklaması: bit.ly/c6quPK . Genel programlama örneği: bit.ly/cSnt5D . LHC'de kullanın: bit.ly/9Yp4oo . Lanet olası her yerde kullanılan bir niş dil: ni.com/solutions . Cehennem gibi pahalı, sol ve sağ soyutlamaları sızdırıyor, bir ton açıklanamayan hizmet kuruyor ve tonlarca amatörden muzdarip. Platformlar arası, paralel olması basit ve diğer diller kadar kolay / zor.
Joe Z

2
LEGO robotları çalıştırıyor. ni.com/academic/mindstorms
rwong

1
@Zeke: VI (bir programın veya işlevin LabVIEW eşdeğeri) birden fazla yönde kaydırmanızı gerektiriyorsa, doğru yazılmamıştır.
oosterwal

1
@oosterwal: Haklısın, bu yaygın. Ayrıca, dil, bilim adamları ve mühendisler için öğrenmesi kolay bir şekilde kasıtlı olarak pazarlanmaktadır. Küçük programlara yöneltilen bu doğrudur. Programlar daha fazla karmaşıklık gerektirdiğinden, kod oldukça kontrolsüz bir şekilde kayma eğilimindedir. (Düzenleme: Bu dil nedeniyle değil, iyi niyetli kullanıcılar için. Tam açıklama: Birkaç gün bilim
Joe Z

6

Yahoo! Borular muhtemelen tanımladığınız türde bir grafik dilin mükemmel bir örneğidir; sistem üzerinden bir bilgi akışı oluşturmak için temel öğeleri sürükleyin ve bırakın (üzerinde çalıştığınız veri kaynaklarından döngülere ve koşullara kadar her şey).

Oldukça alana özgüdür, ancak asıl mesele budur; Borular veri merkezlidir ve görselleştirmeyi (ifade yerine) çok önemli hale getirir. Benzer şekilde, Scratch veya Sprog! bir öğrenme yardımı olarak üzerinde çalıştığınız şeyin görselleştirilmesini vurgulamak; veri giriş verimliliği bu alanda çok daha düşük bir önceliktir.


Daha fazla amatör web uygulaması geliştiricisi Pipes'i bilseydi, dünya daha iyi bir yer olurdu. +1
Sparr

3

Arada sırada birisi "bildiğimiz gibi programlamaya son verecek" ve onu kullanan herkesi programcıya dönüştürecek bir sürükle ve bırak programlama dili veya tasarım aracı ile geliyor.

Hiçbirinin henüz işi henüz yapmamış olmasının ve bizi işten çıkarmamasının nedeni, ne kadar sürükle ve bırak işlevselliği oluşturursanız ve ne kadar kullanıcı dostu olursanız olun, basit gerçek şu ki programlama zor.

Programlamanın gerçek disiplinleri, problemlerin nasıl çözüleceğini bilmek, süreçlerin nasıl modelleneceğini anlamak ve verileri kullanılabilir olacak şekilde düzenlemekle ilgilidir. Bir bilgisayarla neyin mümkün olduğunu bile anlamak.

Bazı insanlara bu şekilde düşünmeyi öğretemediğimi gösteren kanıtlar var ( beni tartışmalı) ve bu da beni birkaç ilginç ve alakalı düşünceye götürüyor. Başlamak için, bu şekilde düşünemiyorsanız, o zaman etrafta çok sayıda programcı var, bu yüzden her zaman bir fikrinizi uygulamak için birini işe alabilir ve ödemeye değer olduğunu düşünüyorsunuz. Programlama mantığı ile yeterince iyi çalışabilirseniz, nispeten basit bir sürükle ve bırak ortamıyla uğraşmak yerine gerçek bir dil öğrenebilirsiniz.

Burada genel programlamayı düşünüyorum. Aynı şey, sürükle bırak özelliğinin BT uzmanları yerine o alanda uzman olan gerçekten kullanışlı bir işlem kullanıcısı olabileceği daha sınırlı bir DSL türü senaryoda mutlaka geçerli değildir.


Programlama karmaşık, zor ve uzun bir süreçtir, tonlarca mühendisin çalışmasını gerektirir. Bu nedenle endüstri, uygulama geliştirmeyi programcı olmayanlar için kullanılabilir hale getirmeye çalışıyor: geliştirme maliyetini azaltın, insan kaynakları kullanımını optimize edin. Ayrıca, bir programcı olarak, programcı olmayanlar tarafından yapılması gereken birçok görev olduğunu söyleyebilirim, ancak bu görevler için hiçbir araçları yok, bu yüzden yapmaktan nefret eden programcılar tarafından yapılmalıdır. bu tür görevler 2. pahalı 3. bunu yapmak için en iyi insanlar değildir. Bu şekilde, örneğin görsel programlama gibi herhangi bir fikri sıcak bir şekilde karşılarım.
ern0

1
Endüstrinin neden bunu yapmaya çalıştığını biliyorum. Ama benim açımdan, eğer programlayabiliyorsanız, bir programcısınız ve program yapamayan insanlar bunu daha iyi yapamazlar çünkü aksi takdirde kod yazmak zorunda kalacakları aynı işleri yapmak için görsel araçlar var için. Araçlar sorun değil, onlarla yapmanız gereken şey sorun.
glenatron

Daha liberal programlama demek istiyorum. Ayrıca, waching makinenize 5 dakika boyunca yıkama çalıştırmasını söylediğinizde, 10 dakika boyunca kurulayın. Birisi farklı programlama "katmanları" için farklı bir ad vermelidir. Veri akışı programlama programlama mı? Elektronik tablo oluşturma (makrolar olmadan) mı? Evet, onlar, ama aynı zamanda sözde programcıların yaptığı gibi farklı türler. Her neyse, programcıların yaptıkları gibi keskin farklılıklar var, yani, VSIDE kodlama eklentileri ile SuperIDE12 ++ 'da sürükle ve bırak modülleri. Ayrıca, platformunuzda GC varsa, bu sadece büyük bir farktır. Veya: betik VS derleyici. "Programlama" çok yaygın bir terimdir.
ern0

3

Gördüğüm en iyi sürükle ve bırak programlama sistemi Lego Mindstorms NXT robotları için.

Bu, oldukça karmaşık bazı işlevleri kontrol etmenizi ve oldukça karmaşık bazı işlevleri kontrol etmenizi sağlar.

Ancak bir noktada arızalanır ve başka bir sisteme geri dönmeniz gerekir.
Bu makaleye bakın: http://www.wired.com/geekdad/2007/11/the-best-progra/

Bununla birlikte, eğer bu gelişirse ve ihtiyaç duyulduğu farklı senaryoların, buna olan ihtiyacın gittikçe azalması mümkündür.


(Daha geleneksel kodlama [Logo / Lisp'e benzer bir dil] olan Lego Dacta'dan evrimleşen) Mindstorms'u 15 yıl önce okulda inceledi. Bazıları varsa, bir programcının çocuklarını alması için mükemmel bir hediye.
yörüngede

1
NXT aslında LabVIEW. Biraz kesilmiş LV: ni.com/academic/mindstorms
Joe Z

Bunu hiç bilmiyordum, teşekkürler! Çok etkilendim.
Bravax

2

Veri akışı programlama (akış tabanlı programlama olarak da bilinir). Yine de, veri akışı programlama Turing-complete değildir.

Veri akışı programlama, bileşen örneklerini sahneye koyduğunuzda ve bağlantı noktalarını bağladığınızda bir ileti işleme ağı oluşturdukları uygulama oluşturma yöntemidir. Bileşenler bir kitaplıktan seçilebilir, diğer bileşenlerin bağlantı noktalarına bağlanmaya hazır tüketici (giriş) ve üretici (çıkış) bağlantı noktalarına sahiptir.

İşte bir synth uygulaması oluşturmak için farenin bile kullanılmadığı, çıplak eller ve küçük küplerin kullanıldığı güzel bir örnek: http://www.youtube.com/watch?v=0h-RhyopUmc

Wikipedia makaleleri iyi bir başlangıç ​​noktasıdır: http://en.wikipedia.org/wiki/Flow-based_programming http://en.wikipedia.org/wiki/Dataflow_programming

Ses üretimi, veri akışı programlamanın tipik bir alanıdır. Bazı açık kaynaklı synth sistemleri vardır: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Mac'iniz varsa, fabrikada önceden yüklenmiş bir Quartz Composer olabilir: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Bir arkadaşımla bir DF sistemi de yaptım, ancak henüz görsel bir editörümüz yok , sadece senaryo görselleştiricisi var.


3
Neden veri akışı programlamanın Turing'in tamamlanmadığını düşünüyorsunuz?
oosterwal

Kutu bağlantıları ile uğraşmak tamamlanmadı. Bileşen yazmak Turing-complete'tur (genellikle herhangi bir kısıtlama yoktur, sadece diğer bileşenlerle iletişim için kullanılması gereken DF çerçevesi).
ern0

1
Herhangi bir CPU'nun temel donanımı temelde veri akışıdır. Bu Turing olmayan komple yapı nasıl bir Turing complete sistemine yol açabilir?
mouviciel

@mouviciel İlk tepkim "hayır, CPU veri akışı değil", ama öyleydi. Her neyse, bu veri akışı sistemleri için kötü bir örnektir; kötü tasarım. CPU bileşenini bir sonraki talimatı işlemek için tetikleyen yalnızca bir kaynak bileşen (harici / dahili saat) vardır. Bileşen olarak ses, video kartı, DMA sistemi vb. Gibi diğer parçaları saysak bile, yine de kötü tasarım: bileşenler çok büyük ve çok özel. Ancak fikir iyi, belki de performansı / çok yönlülüğü artırmanın, daha küçük birimlere sahip bilgisayarlar inşa etmenin ve veri akışı bileşenleri gibi parçaları bağlamanın bir yolu? Patent gibi kokuyor :)
ern0

2

MIT'nin Scratch programlama sistemi neredeyse tamamen sürükle ve bırak yöntemidir.

Google'ın Uygulama Mucidi benzer görünüyor (ve kredi Scratch).

Ben de büyük bir şey kodlamak istemem, ama "programcı düşünme" öğretmek için Scratch mükemmel. Gerçek Programlama, ancak anında görsel tatmin ve geçmeli bloklar , yeni gelenleri ortaya çıkaran "sözdizimi hatası" hayal kırıklığının çoğunu önler ( bu makalede yankılandığını gördüğüm bir görünüm ). Küçük çocukları bir python komut satırı ile şaşırtmaya çalışmak bu günlerde kesmiyor.


1

Muhtemelen düşündüğünüz biçimde olmasa da bu zaten var. İki örnek Simulink ve Alice.

Simulink, dinamik sistem simülasyonlarını birleştirmenin grafiksel bir yoludur. Yapıların çoğu genellikle programlama olarak düşündüğünüzden daha karmaşık olsa da, ve gibi ifadeler grafiksel olarak oluşturulabilir. Hükümet ve birçok büyük şirket Simulink'te ilk tasarımlarını yaptıktan sonra Simulink "koduna" bir çeşit teorem kanıtlayıcı uyguladığında Simulink, Havacılık ve Uzay uygulamalarında biraz önemli.

Alice, çocuklar için sürükle ve bırak programlama programıdır. Çocuklara, bir tür programlama hikaye panosundaki eylemleri ve nesneleri sürükleyip bırakarak eğlenceli bina öyküleri yapmalarını sağlar.



0

Çok az görsel programlama dili var. Büyük bir çağrı merkezi için yönettiğim bir telefon sistemi sürükle ve bırak modülleri kullanılarak programlandı. Amcam, tamamen sürükle ve bırak olan ve 20 yıl önce olan üretim hatlarını tasarlamak için Just-In-Time sistemini geliştirdi.

PS1'de sürükle ve bırak programlama dili kullanan bir robot savaş oyunu bile oynadım.


Carnage Heart, harika bir oyundu.
Ape-inago

İşte bu, adını hatırlayamadım. O oyunu çok sevdim. Çok akıllı tasarım.

-1

Metinsel programlama 50 yıllık güzel bir çalışma geçirdi, ancak yazılım mühendisliği bir sonraki karmaşıklık düzeyiyle başa çıkmak için grafiksel alana taşınmalıdır. Örneğin, çok çekirdekli işlemcilerin ortaya çıkışı ve paralel programlamanın zorlukları, iplik geçirme modelini sınırlarına zorluyor. Açıkçası, yazılım topluluğunun programlama konusunda temelde farklı ve özel bir şey olduğunu ve diğer tüm alanlar gibi görselleştirmeye uygun olmayacağını düşünen küstah olduğunu düşünüyorum. Telefon operatörleri ve diğer birçok meslek gibi, doğru otomasyon teknolojisi de alan uzmanlarının yakında bilgi tabanlı sistemlerin zengin simülasyon alanlarında işbirliği yapmalarını sağlayacaktır. Yazılım endüstrisi, paradigma değişimi için gecikmiştir.


2
Burada kesinlikle katılmıyorum: birçok gerçek yaşam programının karmaşıklığı, grafiksel olarak tam olarak temsil edilemeyecek kadar yüksek. (1) Programlamayı kimin bildiğini ve (2) daha büyük bir proje için LabView kullandığını bildiğim tüm insanlar, grafik sunumun daha büyük projelerde üretken çalışmak için doğal olarak çok ağır olduğunu keşfettiler. Elbette, programınız tek bir ekrana sığdığında LabView çok uygundur; ancak programınız tek bir ekranın sınırlarının ötesine geçmeye başladığında, LabView'in verimli bir şekilde kullanılması zordur (basit bir metin araması yok, blokları yeniden düzenlemek acı vericidir…).
Eric O Lebigot
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.