Lập trình kéo-n-drop - nó có bay không? [đóng cửa]


12

Tất cả các ngôn ngữ lập trình mà tôi biết đều được viết - tức là được gõ dưới dạng độ dài của văn bản theo cách này hay cách khác. Nhưng tôi tự hỏi liệu có ngôn ngữ lập trình nào mà bạn có thể kéo và thả toàn bộ chương trình không; để có được một vòng lặp, bạn chọn hộp này ở đây và kéo nó vào phần "mã" ở đằng kia, v.v. Và nếu không có cái nào như thế này, nó có bay được không nếu nó được phát minh?

Cá nhân tôi không tin rằng nó sẽ là một ý tưởng tốt, nhưng tôi muốn nghe những gì bạn nghĩ.


Đừng bao giờ nói không bao giờ (bạn nói: "Tôi không tin đó sẽ là một ý tưởng hay") - có thể có một tình huống kỳ lạ, nơi ý tưởng kỳ lạ nhất có thể thực hiện tốt.
ern0

6
"Nó sẽ bay?" Thành thật mà nói, nếu tôi nghĩ rằng các hệ thống điều khiển chuyến bay trên máy bay tôi đang đi được lập trình bởi một người nào đó đang lập trình Drag-n-drop, tôi có thể không lên máy bay đó. ; D
glenatron

Thực sự thích câu hỏi này, mặc dù tôi muốn một số câu trả lời dài hơn và sâu hơn.
Nicole

1
Người sắt sẽ sử dụng nó, và bay! Nhưng anh ta không tồn tại trong thế giới thực!
Manoj R

@glenatron - Vì vậy, di chuyển bằng tàu hỏa ... Các hệ thống điều khiển bay dành cho một phần tự động trạng thái hữu hạn được xây dựng bằng đồ họa và cho một hệ thống kỹ thuật điều khiển một phần khác được xây dựng từ các khối cơ bản và được lắp ráp trong giao diện GUI. Phần còn lại là UML.
mouviciel

Câu trả lời:


23

Rất nhiều trang phục đã thực hiện các hệ thống lập trình kéo và thả.

Công cụ quốc gia "Labview" có lẽ là nổi tiếng nhất và tốt nhất.

Vấn đề cơ bản mà tất cả họ gặp phải là không có cách nào để chuyển đổi Flying Code Monkey thành một lập trình viên và kỹ sư chuyên gia. Như MỘT ví dụ, không có sự khác biệt nào với Monkey Code Monkey giữa quy trình O (N ^ 2) hoặc O (N ^ 3) và quy trình O (N log N), có nghĩa là chúng phải được cung cấp các thói quen đóng hộp cho các thuật toán O (N log N), có thể được tùy chỉnh phù hợp với các loại đồ họa quickie mà chúng sẽ xây dựng.

Vấn đề thứ hai mà tất cả họ gặp phải là, khi bạn cung cấp các khối mục đích đặc biệt theo yêu cầu của vấn đề đầu tiên, chi phí áp đặt bằng cách di chuyển dữ liệu giữa các khối bắt đầu trở nên đắt đỏ. Tôi đã làm việc với một hệ thống rất hay như vậy gọi là Rippen. Khi tôi tìm hiểu sơ lược, để xem chúng tôi đang làm tổn thương ứng dụng xử lý cảm biến hiệu suất CAO!, Tôi đã khá bối rối khi thấy rằng khoảng 20% ​​thời gian CPU của tôi sẽ chuyển sang dữ liệu. (Vì tôi đang thực hiện xử lý hình ảnh LADAR, thực hiện một khối xử lý dấu phẩy động trên mỗi pixel của hình ảnh đầu vào, 20% CPU là RẤT NHIỀU chi phí di chuyển dữ liệu.)

Bạn có thể có thể đi xung quanh phần 2 bằng cách đi đến một hệ thống dựa trên trình biên dịch: bạn cung cấp cho nó hình ảnh của bạn và nó biên dịch thành một chương trình thực thi được tối ưu hóa mạnh mẽ, nhưng tôi không chắc chắn rằng nó thực sự sẽ khắc phục được sự cố và nó có thể bị tổn thương bản chất tương tác của công cụ.


Về lý thuyết, bạn có thể có chế độ Gỡ lỗi và Phát hành (tối ưu hóa).
Công việc

15

Câu trả lời đơn giản là không có.

Khi nói đến lập trình, đầu vào văn bản vượt xa về mặt thông tin được chỉ định so với phần truy cập trực quan của nó.


Khi bạn lên cấp cao hơn và cao hơn, nó sẽ ngày càng có nhiều cơ hội để nói rõ vấn đề bằng đồ họa. Lập trình Dataflow là một cách tiếp cận như vậy (xem câu trả lời của tôi cho câu hỏi này): các thành phần được đưa ra, chúng là hộp đen, nhiệm vụ của "lập trình viên" (thuật ngữ tốt hơn: thiết kế ứng dụng) là chỉ tổ chức chúng vào mạng.
ern0

12

LabVIEW là đồ họa khá.

Từ trang web LabVIEW :

LabVIEW


Huh, trông gọn gàng. Bạn có thể làm được bao nhiêu với nó? Là nó chuyên biệt cho chỉ một loại "lập trình", như vật lý, hoặc bạn có thể sử dụng nó cho bất cứ điều gì?
gablin

2
Vâng, có các chuyên gia LabVIEW: lavag.org . Diễn đàn thảo luận: forum.ni.com . So sánh Erlang: bit.ly/2yC0Tn . Mô tả trình biên dịch: bit.ly/c6quPK . Ví dụ lập trình chung: bit.ly/cSnt5D . Sử dụng trong LHC: bit.ly/9Yp4oo . Đó là một ngôn ngữ thích hợp được sử dụng trên tất cả các địa điểm chết tiệt: ni.com/solutions . Nó đắt như địa ngục, rò rỉ trừu tượng trái và phải, cài đặt một tấn dịch vụ không giải thích được, và chịu đựng hàng tấn người mê đắm. Đó là đa nền tảng, đơn giản để song song và dễ / khó như mọi ngôn ngữ khác ngoài kia.
Joe Z

2
Nó chạy robot LEGO. ni.com/academia/mindstorms
rwong

1
@Zeke: Nếu VI (tương đương LabVIEW của một chương trình hoặc chức năng) yêu cầu bạn cuộn theo nhiều hướng, thì nó đã không được viết chính xác.
oosterwal

1
@oosterwal: Bạn nói đúng, nó phổ biến. Ngoài ra, ngôn ngữ này được tiếp thị một cách có chủ ý cho các nhà khoa học và kỹ sư là dễ học. Giữ cho các chương trình nhỏ, điều này là đúng. Khi các chương trình đòi hỏi sự tinh tế hơn, mã có xu hướng leo lên khá ngoạn mục ngoài tầm kiểm soát. (Chỉnh sửa: Không phải do ngôn ngữ như vậy, mà là do người dùng có thiện chí. Tiết lộ đầy đủ: Tôi là nhà khoa học vài ngày :)
Joe Z

6

Yahoo! Ống có lẽ là một ví dụ hoàn hảo về ngôn ngữ đồ họa của loại bạn đang mô tả; bạn kéo và thả nguyên thủy (mọi thứ từ các nguồn dữ liệu mà bạn hành động, đến các vòng lặp và điều kiện) để tạo ra một luồng thông tin qua hệ thống.

Đó là đặc thù miền, nhưng đó chủ yếu là điểm; Ống là trung tâm dữ liệu, làm cho trực quan hóa (chứ không phải biểu hiện) là tối quan trọng. Tương tự, các môi trường hướng dẫn như Scratch hoặc Sprog! nhấn mạnh trực quan hóa những gì bạn đang làm như một trợ giúp học tập; hiệu quả nhập dữ liệu là một ưu tiên thấp hơn nhiều trong miền đó.


Nếu nhiều nhà phát triển ứng dụng web nghiệp dư biết về ống, thế giới sẽ là một nơi tốt hơn. +1
Sparr

3

Thỉnh thoảng ai đó nghĩ ra một công cụ thiết kế hoặc ngôn ngữ lập trình kéo và thả sẽ "chấm dứt lập trình như chúng ta biết" và biến mọi người sử dụng nó thành một lập trình viên.

Lý do mà chưa ai trong số họ thực sự hoàn thành công việc và khiến chúng tôi mất việc là vì thực tế, cho dù bạn có tạo ra bao nhiêu chức năng kéo và thả và cho dù bạn có thân thiện với người dùng đến đâu, thì thực tế đơn giản là lập trình khó.

Các ngành học thực sự của lập trình cũng nhiều như việc biết cách giải quyết vấn đề, hiểu cách mô hình hóa các quy trình và sắp xếp dữ liệu để có thể sử dụng được. Thậm chí hiểu những gì có thể với một máy tính.

Có bằng chứng (nếu gây tranh cãi) cho thấy rằng một số người không thể được dạy để nghĩ theo cách này dẫn tôi đến một vài suy nghĩ thú vị và có liên quan. Để bắt đầu, nếu bạn không thể nghĩ theo cách này thì có rất nhiều lập trình viên xung quanh, vì vậy bạn luôn có thể thuê ai đó để thực hiện ý tưởng nếu bạn có ý tưởng và bạn nghĩ rằng nó đáng để trả tiền. Nếu bạn có thể làm việc với logic lập trình đủ tốt thì bạn cũng có thể học một ngôn ngữ thực sự thay vì lộn xộn với môi trường kéo và thả tương đối đơn giản.

Tôi đang nghĩ về lập trình chung ở đây. Điều tương tự không nhất thiết phải áp dụng trong kịch bản loại DSL hạn chế hơn trong đó kéo và thả có thể là một người dùng quy trình thực sự hữu ích, là chuyên gia trong miền đó thay vì chuyên gia CNTT.


Lập trình là một quá trình phức tạp, khó khăn và lâu dài, đòi hỏi hàng tấn công việc của kỹ sư. Đó là lý do tại sao ngành công nghiệp đang cố gắng làm cho việc phát triển ứng dụng có sẵn cho những người không lập trình: giảm chi phí phát triển, tối ưu hóa việc sử dụng nguồn nhân lực. Ngoài ra, với tư cách là một lập trình viên, tôi có thể nói rằng, có rất nhiều nhiệm vụ nên được thực hiện bởi những người không phải lập trình viên, nhưng họ không có công cụ nào cho các nhiệm vụ đó, vì vậy nó phải được thực hiện bởi các lập trình viên, những người 1. ghét phải làm loại nhiệm vụ 2. đắt tiền 3. không phải là người tốt nhất để làm điều đó. Vì vậy, tôi nồng nhiệt chào đón bất kỳ ý tưởng nào chỉ ra theo cách đó, ví dụ như lập trình trực quan.
ern0

1
Tôi biết tại sao ngành công nghiệp đang cố gắng để làm điều đó. Nhưng quan điểm của tôi là nếu bạn có thể lập trình, bạn là một lập trình viên và những người không thể lập trình sẽ không thể làm điều đó tốt hơn bởi vì có những công cụ trực quan để làm những công việc tương tự mà nếu không họ sẽ phải viết mã cho Các công cụ không phải là vấn đề, điều bạn phải làm với chúng là vấn đề.
glenatron

Ý tôi là lập trình tự do hơn. Đó cũng là lập trình, khi bạn bảo máy vẫy của bạn chạy giặt trong 5 phút, khô trong 10 phút. Ai đó nên đặt tên khác nhau cho các "lớp" lập trình khác nhau. Là lập trình lập trình dataflow? Là tạo bảng tính (không có macro)? Vâng, họ là, nhưng cũng là loại khác nhau mà những người được gọi là lập trình viên làm. Dù sao, có ý nghĩa rất khác nhau về những gì các lập trình viên làm, ý tôi là, các mô-đun kéo và thả trong SuperIDE12 ++ với mã hóa lắp ráp VS. Ngoài ra, đó chỉ là sự khác biệt lớn, nếu nền tảng của bạn có GC. Hoặc: trình biên dịch VS script. "Lập trình" là thuật ngữ quá phổ biến.
ern0

3

Hệ thống lập trình kéo và thả tốt nhất mà tôi từng thấy là dành cho các robot Lego Mindstorms NXT.

Điều này cho phép bạn làm một số điều khá tuyệt vời, kiểm soát một số chức năng khá phức tạp.

Tuy nhiên, tại một số điểm, nó bị hỏng và bạn cần quay lại hệ thống khác.
Xem bài viết này: http://www.wired.com/geekdad/2007/11/the-best-progra/

Mặc dù có thể, nếu điều này được cải thiện và các kịch bản khác nhau được phục vụ, nhu cầu này sẽ ngày càng ít đi.


Do yêu Mindstorms (phát triển từ Lego Dacta, vốn có mã hóa truyền thống hơn [một ngôn ngữ tương tự Logo / Lisp]), đã nghiên cứu nó ở trường cách đây 15 năm. Món quà tuyệt vời cho một lập trình viên để có được con của họ, họ nên có một số.
Orble

1
NXT thực sự là LabVIEW. Chà, LV đã bị cắt bớt một chút: ni.com/academia/mindstorms
Joe Z

Tôi không bao giờ biết điều đó, cảm ơn! Tôi rất ấn tượng với nó.
Bravax

2

Lập trình Dataflow (còn gọi là lập trình dựa trên dòng chảy) có thể là loại. Rõ ràng, lập trình dataflow không hoàn thành.

Lập trình Dataflow là phương pháp tạo ứng dụng, khi bạn đặt các cá thể thành phần vào cảnh và kết nối các cổng của chúng, để chúng tạo thành một mạng xử lý tin nhắn. Các thành phần có thể được chọn từ thư viện, chúng có cổng người tiêu dùng (đầu vào) và nhà sản xuất (đầu ra), sẵn sàng kết nối với các cổng của các thành phần khác.

Đây là một ví dụ hay, trong đó thậm chí không phải là chuột được sử dụng để xây dựng ứng dụng synth, mà là tay trần và khối nhỏ: http://www.youtube.com/watch?v=0h-RhyopUmc

Các bài viết trên Wikipedia là một điểm khởi đầu tốt: http://en.wikipedia.org/wiki/Flow-basing_programming http://en.wikipedia.org/wiki/Dataflow_programming

Tạo âm thanh là một lĩnh vực điển hình của lập trình dataflow. Có một số hệ thống synth mã nguồn mở: http://www.synthedit.com/ http://alsamodular.sourceforge.net/

Nếu bạn có máy Mac, bạn có thể có Nhà soạn nhạc Quartz được cài đặt sẵn tại nhà máy: http://developer.apple.com/graphicsimaging/quartz/quartzcomposer.html

Tôi cũng đã thực hiện một hệ thống DF với một người bạn của tôi, nhưng chúng tôi không có soạn thảo trực quan chưa , chỉ có kịch bản visualizer.


3
Tại sao bạn coi lập trình luồng dữ liệu không phải là Turing hoàn chỉnh?
oosterwal

Xáo trộn xung quanh với các kết nối hộp không hoàn thành Turing. Viết các thành phần là Turing-Complete (thường không có hạn chế, chỉ có khung DF, phải được sử dụng để giao tiếp với các thành phần khác).
ern0

1
Phần cứng cơ bản của bất kỳ CPU nào về cơ bản là dataflow. Làm thế nào việc xây dựng hoàn chỉnh không Turing này có thể dẫn đến một hệ thống hoàn chỉnh Turing?
mouviciel

@mouviciel Phản ứng đầu tiên của tôi là "không, CPU không phải là dataflow", nhưng thực tế là vậy. Dù sao, đây là một ví dụ tồi cho các hệ thống dataflow; thiết kế xấu. Chỉ có một thành phần nguồn (đồng hồ bên ngoài / bên trong), kích hoạt thành phần CPU để xử lý lệnh tiếp theo. Ngay cả khi chúng ta tính các bộ phận khác, ví dụ như âm thanh, card màn hình, hệ thống DMA, v.v. làm thành phần, thì thiết kế vẫn tệ: các thành phần quá lớn và quá chuyên dụng. Nhưng ý tưởng là tốt, có lẽ đó là một cách để tăng hiệu suất / tính linh hoạt, để xây dựng các máy tính với các đơn vị nhỏ hơn và kết nối các bộ phận như các thành phần dataflow? Có
mùi

2

Hệ thống lập trình Scratch của MIT gần như hoàn toàn kéo và thả.

Nhà phát minh ứng dụng của Google dường như tương tự (và tín dụng Scratch).

Bản thân tôi sẽ không muốn viết mã bất cứ điều gì lớn lao, nhưng để dạy "tư duy lập trình viên", Scratch thật tuyệt vời. Đó là Lập trình thực, nhưng với sự hài lòng trực quan tức thì và các khối gắn kết với nhau sẽ tránh được nhiều sự thất vọng "lỗi cú pháp" khiến người mới gặp phải (một quan điểm tôi thấy được lặp lại trong bài viết này ). Cố gắng làm say mê những đứa trẻ bằng một dòng lệnh trăn không cắt được những ngày này.


1

Điều này đã tồn tại, mặc dù có thể không ở dạng mà bạn đang nghĩ đến. Hai ví dụ là Simulink và Alice.

Simulink là một phương tiện đồ họa để lắp ráp các mô phỏng hệ thống động. Trong khi hầu hết các cấu trúc phức tạp hơn những gì bạn thường nghĩ về lập trình, những thứ như và nếu các câu lệnh vẫn có thể được xây dựng bằng đồ họa. Simulink là một vấn đề lớn trong các ứng dụng Không gian vũ trụ khi chính phủ và nhiều công ty lớn thực hiện các thiết kế ban đầu của họ trong Simulink và sau đó áp dụng một số loại định lý định lý cho "mã" Simulink.

Alice, là một công cụ đào tạo lập trình kéo và thả cho trẻ em. Nó cho phép trẻ em có những câu chuyện xây dựng thú vị bằng cách kéo và thả các hành động và đồ vật trên một bảng câu chuyện lập trình.


1

Prograph là một ngôn ngữ tuyệt vời là tất cả kéo và thả. Ngoài ra, Wikipedia có một bài viết với một danh sách các ngôn ngữ hình ảnh có kích thước tốt .


bạn có muốn mở rộng một chút về những gì mỗi tài nguyên này có và tại sao bạn lại đề xuất những tài nguyên này khi trả lời câu hỏi không? "Câu trả lời chỉ liên kết" không được chào đón tại Stack Exchange
gnat

0

Có khá nhiều ngôn ngữ lập trình trực quan. Một hệ thống điện thoại tôi quản lý cho một trung tâm cuộc gọi lớn đã được lập trình bằng cách sử dụng các mô-đun kéo và thả. Chú tôi đã phát triển một hệ thống Just-In-Time để thiết kế các dây chuyền sản xuất hoàn toàn kéo và thả và đó là 20 năm trước.

Tôi thậm chí đã chơi một trò chơi chiến đấu robot trên PS1 sử dụng ngôn ngữ lập trình kéo và thả.


Carnage Heart, là một game tuyệt vời.
Ape-inago

Đó là một, tôi không thể nhớ tên. Tôi thích trò chơi đó. Thiết kế rất thông minh.

-1

Lập trình văn bản đã có 50 năm hoạt động tốt đẹp, nhưng công nghệ phần mềm phải chuyển sang lĩnh vực đồ họa để đối phó với mức độ phức tạp tiếp theo. Ví dụ, sự xuất hiện của nhiều bộ xử lý và các thách thức của lập trình song song đang đẩy mô hình luồng đến giới hạn của nó. Thành thật mà nói, tôi nghĩ rằng cộng đồng phần mềm chỉ ngạo mạn nghĩ rằng có một cái gì đó khác biệt và đặc biệt về lập trình mà nó sẽ không thể hình dung được như mọi miền khác. Giống như các nhà khai thác điện thoại và nhiều ngành nghề khác, công nghệ tự động hóa phù hợp sẽ cho phép các chuyên gia tên miền sớm hợp tác trong các không gian mô phỏng phong phú của các hệ thống dựa trên tri thức. Công nghiệp phần mềm đã quá hạn cho một sự thay đổi mô hình.


2
Tôi rất không đồng ý ở đây: sự phức tạp của nhiều chương trình thực tế là quá cao để được thể hiện đầy đủ bằng đồ họa. Tất cả những người mà tôi biết (1) biết cách lập trình và (2) đã sử dụng LabView cho một dự án lớn hơn đã phát hiện ra rằng biểu diễn đồ họa vốn đã quá nặng để làm việc hiệu quả cho các dự án lớn hơn. Chắc chắn, LabView rất thuận tiện khi chương trình của bạn nằm trên một màn hình duy nhất; nhưng khi chương trình của bạn bắt đầu phát triển vượt quá giới hạn của một màn hình, LabView khó sử dụng hiệu quả (không tìm kiếm văn bản đơn giản, sắp xếp lại các khối là đau đớn, trên mạng).
Eric O Lebigot
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.