¿Hay alguna buena herramienta de piratería visual?

Estoy definiendo “piratería” como programación. Mis disculpas si te refieres a algo diferente por el término.

Cualquier sistema de lenguaje utilizado para la informática de propósito general debe ser altamente expresivo y, sin embargo, ser fácilmente decodificable a través de un proceso tonto. El lenguaje tiene que ser expresivo, porque el objetivo es que los humanos puedan decir: “Computadora, necesito que hagas esto exactamente y no otra cosa”.

El problema con los lenguajes gráficos es que tienden a ser demasiado limitados para ser muy expresivos o demasiado caóticos para ser analizados fácilmente por una máquina no sensible.

Los lenguajes gráficos pueden funcionar cuando las aplicaciones que creas con ellos están limitadas a realizar tareas similares, como combinar imágenes en protectores de pantalla o hacer música sintetizada: conecta el oboe y el fagot en el mezclador, sube el volumen y luego parchea en la pista 2 …

Pero, ¿qué sucede si solo quieres que el oboe toque el miércoles? ¿Qué sucede si desea que el oboe toque una octava dos veces, luego haga una pausa durante dos segundos, luego vuelva a tocarlo y luego espere a que el usuario presione una tecla? Imagina contar esa historia con fotos.

En algún momento, el lenguaje se llenaría de pictogramas, exigidos por los programadores que seguían queriendo más y más expresividad.

Por supuesto, podría dibujar con bastante facilidad (usando lápiz y papel) lo que quiero que haga la computadora. Evitaría la falta de símbolos inventando el mío sobre la marcha. Para permitir que el oboe solo toque los miércoles, dibujaría un calendario y tacharía todos los días que no sean miércoles. Pero, ¿cómo se supone que una computadora entiende lo que significa ese dibujo? Alguien tendría que tomar cada dibujo arbitrario que haga y enseñar a las computadoras a comprender sus símbolos únicos.

Las palabras funcionan mucho mejor cuando se trata de mezclar restricciones de análisis y expresividad, y una analogía es “¿Por qué no escribimos novelas en imágenes?” Supongo que, con las novelas gráficas, a veces lo hacemos, pero en general, si estás tratando de contar una historia compleja, es más fácil hacerlo con palabras.

En cada lenguaje de programación que he usado, el orden de las palabras es significativo (como lo está en inglés). Por ejemplo, en LISP, agrega tres y cuatro juntos de esta manera:

(+ 3 4)

Lo que significa agregar un tres y un cuatro.

NO PUEDES hacer esto:

(3 + 4)

Lo que básicamente le indicaría a la computadora un tres más y un cuatro, lo que no tiene sentido. Obviamente, eso es una restricción: el signo más DEBE aparecer antes de los dígitos. ¡Por otro lado, esta construcción permite una gran expresividad!

(+ 3 5)
(+ 6 99 1 4 12 1001)
(- 14 3)

etc.

La restricción del orden de las palabras ayuda enormemente a la computadora al eliminar la ambigüedad.

Supongo que podrías hacer lo mismo con los gráficos. La ventaja podría ser una máquina sumadora, las tres podrían ser una mano que sostenga tres dedos, las cuatro podrían ser un perro con flechas apuntando a sus cuatro patas …

Pero si luego comenzaste a forzar el orden de secuencia …

DEBE ser máquina sumadora, mano, perro y nunca mano, máquina sumadora, perro.

… Estarás avanzando hacia un lenguaje basado en palabras (básicamente usando jeroglíficos). En ese punto, ¿por qué no solo usar palabras, que son fáciles de escribir con un teclado?

ACTUALIZAR:

El objetivo de los lenguajes gráficos generalmente es facilitar la programación para los no especialistas, con el supuesto de que las imágenes son más fáciles de usar que las palabras arcanas y los símbolos matemáticos. Esto es un poco como tener el objetivo de simplificar la escritura de novelas o la composición sinfónica. Puedes hacerlo, pero la compensación está limitando la complejidad de la sinfonía o de qué trata la novela.

Una vez jugué un juego en el que los jugadores construían historias colocando cartas con imágenes en ellas. Si quisieras contar la historia de un caballero que cruzó un puente, colocarías una tarjeta de caballero y una tarjeta de puente. Pero, ¿y si quisieras que el caballero fuera un enano? ¿Y si quisieras que tuviera un resfriado? Simplemente no podía agregar esos detalles. Esa fue la compensación por poder usar tarjetas en lugar de prosa.

Elige tu propia aventura Las historias son un tipo de programación. El lector es el programador, y su programa son instrucciones para el libro, informándole cómo contar su historia. El programador puede elegir hacer que el héroe entre por la puerta roja o la puerta verde. Pero, ¿y si quiere que el héroe tome un hacha y rompa ambas puertas? Para eso, necesita usar la prosa y escribir su propia historia desde cero. Nuevamente, vemos una compensación entre simplicidad y expresividad.

A veces, los diseñadores de lenguaje de programación intentan alcanzar el objetivo de simplicidad no con imágenes sino con prosa similar al inglés. En lugar de …

(+ 3 4)

… inventarán un idioma en el que sumes tres y cuatro juntos escribiendo …

AGREGAR JUNTOS TRES Y CUATRO.

Esto parece muy atractivo, una especie de santo grial. De hecho, es una corta distancia entre eso y simplemente poder hablar con una computadora: “HAL, sírveme un trago”.

Pero estos lenguajes tienden a evolucionar con el tiempo, llegando a ser cada vez menos similares al inglés y más formalizados en lenguajes de programación típicos. Vi esto jugar con dos idiomas, ambos inventados por Macromedia (que posteriormente se convirtió en parte de Adobe). El primero fue Lingo y el segundo fue Actionscript.

Ambos fueron concebidos como “idiomas para principiantes” o “idiomas para no programadores”. Entonces estaba bien para ellos limitar la expresividad. La idea, supongo, era que si querías un poder verdaderamente expresivo, deberías contratar a un programador “real” y hacer que usara un lenguaje “real”. El problema es que los principiantes y los “no programadores” tienden a convertirse en programadores reales tan pronto como comienzan a programar.

Cuando solía enseñar Actionscript, la gente venía a mis clases y decía: “No quiero ser programador. Solo quiero saber cómo hacer cosas simples como hacer que aparezca un mensaje en la pantalla cuando el usuario presiona un botón.” Pero una vez que les enseñé cómo hacer esto, comenzaron a preguntar cosas como: “¿Puedo hacer que el mensaje varíe, dependiendo del día de la semana?” (Compare esto con: ¿Puedo hacer que el héroe del libro Elija su propia aventura rompa ambas puertas con un hacha?) Las personas tienden a juzgar mal la cantidad de expresividad que necesitan.

Pero como el inglés es muy expresivo, ¿por qué no podemos simplemente agregar más vocabulario a

AGREGA TRES Y CUATRO JUNTOS

para conseguir cosas como

AGREGAR TRES Y CUATRO JUNTOS EL MARTES?

Recuerde, las computadoras son tontas. Necesitan que sigas reglas gramaticales simples para que puedan analizar fácilmente tus comandos. Es mucho esperar que una computadora entienda ambos

AGREGA TRES Y CUATRO JUNTOS EL MARTES

y

EL MARTES, AGREGAR TRES Y CUATRO JUNTOS

Pero también es demasiado esperar que los humanos, cuando se les entrega un sistema tan laxo como el inglés, recuerden que las versiones anteriores están permitidas pero las últimas no.

A medida que los “principiantes” comenzaron a exigir más y más expresividad de Lingo y Actionscript, Macromedia tuvo que imponer más y más reglas sobre cómo se expresaban las personas, solo para que las computadoras pudieran entender. Finalmente, el sistema se derrumbó, estaba claro que esto era más simple para todos:

Si (día = martes) resultado = 3 + 4

Lo anterior no es Lingo real o Actionscript, pero le da la idea de cómo imponer el orden y las restricciones permite la expresividad sin confusión.

Lingo ya no se usa mucho, pero lo vi pasar del pseudo-inglés a algo más como Javascript. Y, al final, estaba empezando a ser reemplazado por Javascript. Actionscript pasó de ser de tipo inglés a Javascript a Java. (Java es un lenguaje de programación muy formal, que no parece inglés en absoluto).

Puedo responder por el hecho de que si estás tratando de hacer algo complejo en una computadora, es MUCHO más fácil hacerlo en Java que en inglés. Al principio no lo parece, porque hay una curva de aprendizaje inicial. El objetivo de los idiomas gráficos y similares al inglés es evitar la curva de aprendizaje. Pero, en última instancia, esto es como preguntar cómo puedes contar una historia a un niño que solo entiende francés sin aprender francés. Puede usar pantomima y gestos con las manos, pero eso limitará en gran medida el tipo de historias que puede contar.

Nota: hay un lenguaje llamado Inform, que se usa para programar ficción interactiva (juegos de aventura). La versión 7 del lenguaje, la última versión, ha tomado la decisión audaz de ir en la dirección opuesta a Lingo y Actionscript. Ha cambiado de ser un lenguaje de programación típico a uno similar al inglés, con, una vez más, la idea de que será más fácil para los no programadores. Es un experimento fascinante, que predigo que fallará. Pero tal vez me equivoque. Será interesante ver cómo se desarrolla.

http://www.inform-fiction.org/I7…

En el mundo de la música / artes digitales, hay Max / MSP ( http://www.cycling74.com ) y una implementación con licencia BSD del paradigma llamado Pure Data ( http://puredata.info ). Estos son sistemas en los que puede componer visualmente diferentes objetos (osciladores, contadores, botones, etc.), agregar lógica y procesar sonidos o videos.

Además de las respuestas de Marcus Geduld y Joe Emison, que profundizan en las limitaciones y ventajas de los lenguajes gráficos y la sintaxis de los lenguajes de texto, ofrezco un ejemplo simple de lo que sucede en general con el “pirateo”:

Digamos que necesito agregar 10 números para un informe que creo. Mi herramienta de “programación” es Excel o cualquier otra hoja de cálculo. Todo lo que realmente necesito hacer es colocar los números en diferentes celdas y luego crear una fórmula para agregarlos. Esta es la forma más rápida y sencilla de hacerlo, y los hackers siempre tenderán a hacerlo de esta manera.

Para una persona que no está familiarizada con las hojas de cálculo, podemos crear formularios o incluso una aplicación que permita ingresar diez números y luego proporcionar un resultado. Sin embargo, crear una herramienta de este tipo complica el problema exponencialmente: ahora el programador tiene que verificar la entrada, asegurarse de que no bloqueará el formulario / aplicación, formatear los números ingresados ​​como el usuario lo esperaría, permitir editar entradas anteriores, compruebe si faltan entradas, etc. La mayoría de los piratas informáticos nunca llegan a esa parte, porque es mucho trabajo armar algo así. Es más fácil rechazar a cualquier usuario que no pueda descubrir cómo usar la hoja de cálculo simple desde el principio.

Los piratas informáticos siempre responderán a los usuarios que exigen las características adicionales con algo como: “la respuesta original hace lo que necesita (agregue diez números), ¿quiere que sea bonita? Lo hace”.

Ahora, considere que muchos de los problemas resueltos por los “hackers” son muy complejos. Serán muy reacios a agregar cualquier complejidad adicional a su problema y las cosas siempre se hacen de la manera más rápida. La optimización y las GUI se dejan para que otros se ocupen de ellas. En la mayoría de los casos, cualquiera que ponga los recursos detrás de un producto más fácil de usar querrá que le paguen por su esfuerzo. Si no hay mercado para tal solución, nunca se logrará más allá de la implementación más simple posible.

Es más fácil para alguien que tiene una necesidad real de aprender un lenguaje de programación de bajo o alto nivel que para un grupo de personas encontrar una forma gráfica de programar.