# Programación visual

El término programación visual (Visual programming language, VPL) refiere a la programación en la que se utiliza más de una dimensión para expresar la semántica. Los lenguajes de programación visual permiten a los usuarios crear programas mediante la manipulación de elementos gráficos, en lugar de especificarlos exclusivamente de manera textual. Este tipo de lenguajes son muy utilizados en ámbitos educativos a través de los denominados entornos de programación por bloques (entre los que se destaca Scratch) que permiten reducir las dificultades que enfrentan los principiantes cuando empiezan a programar. HyperCard de Apple fue probablemente el primer ejemplo de un entorno de programación visual.

## Características

Este estilo de programación presenta las siguientes características:
* Visual: los elementos se arrastran y sueltan en el flujo del programa para integrarlos.
* Orientado a acontecimientos: cada paso del programa comienza cuando ocurre un acontecimiento previamente definido.
* Imperativo: la programación consiste en una secuencia de comandos.
* Orientado a objetos: hay objetos individuales con tareas definidas asignadas.
Los programadores suelen utilizar elementos de programación ya definidos, según el lenguaje de programación visual que utilicen. Los elementos de programación están diseñados para encajar como las piezas de un puzle. Si los elementos no encajan lógicamente, el editor lo detecta. Los elementos de programación suelen agruparse en grupos de colores, lo que orienta al usuario a la hora de elegirlos.
Estos pueden registrar textos e imágenes, organizarlos de forma lógica y modificar su apariencia o su expresión. Los elementos de control permiten insertar acciones que dependen de ciertas condiciones.

## Programación orientada a objetos

* Define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos), comportamiento (esto es, procedimientos o métodos) e identidad (propiedad del objeto que lo diferencia del resto). La programación orientada a objetos (OOP) expresa un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas.
* La OOP facilita el uso de características de un programa en otros, de modo que los programadores no tengan que empezar de cero con cada nuevo programa.
* La técnica de programación orientada a objetos, se basa en fundamentos de diseño, técnicas y metodologías unificadas (UML).
* Lenguajes visuales como Visual Basic.Net, Borland Delphi, incorporan una completa implementación de la programación orientada a objetos y permiten aprovechar al máximo toda la funcionalidad que ofrecen estos lenguajes para el desarrollo de aplicaciones de gestión.

## Programación por bloques

La programación por bloques o programación orientada a bloques usa una metáfora de "primitiva de programación como pieza de rompecabezas" como una forma de dar indicios visuales al usuario acerca de cómo y dónde pueden ser usadas las instrucciones del lenguaje. Escribir un programa en un entorno basado en bloques consiste entonces en arrastrar y soltar las instrucciones una junto a otra. Si las dos instrucciones no pueden unirse en una declaración válida, entonces el entorno evita que puedan encastrar juntas. De esta forma, los entornos de programación por bloques pueden prevenir errores de sintaxis reteniendo la práctica de crear programas ensamblando las instrucciones una por una.
En estos ambientes predomina el uso del ratón, que se usa para encastrar las instrucciones con otras. Generalmente se da un feedback visual o auditivo informando al usuario si la construcción es válida. Además, hay indicios visuales de cómo usar el bloque: la forma sugiere dónde puede encajar (al principio, dentro de otro, etc), el color indica la categoría de bloque (por ejemplo en Scratch: control, movimiento, etc) y a veces se cuenta con una etiqueta en lenguaje natural que indica qué hace el bloque.

### Librerías y entornos de programación por bloques

Existen librerías como Blockly que permiten la creación de herramientas de edición de código por bloques. No deben confundirse con los lenguajes de programación por bloques, ya que las librerías son las que aportan la funcionalidad para editar, mientras que los lenguajes definen el conjunto de instrucciones posibles, su sintaxis, etc.
Los editores por bloques son un subconjunto de los llamados "editores estructurados", donde la unidad de trabajo mínima es un nodo del árbol de sintaxis del lenguaje. Esto brinda más flexibilidad que usar bloques funcionales completos y es menos proclive a errores que operar con unidades menores como caracteres.
Algunos entornos de programación por bloques que tienen sus propios lenguajes son Scratch, Scratch Jr, Snap! y StarLogo.
Otros editores ayudan a la generación de código para hacer más accesibles plataformas como Android (App Inventor) o Arduino (Hello Blocks!, Ardublock, ArduinoBlocks). Open Roberta permite generar código para múltiples plataformas de programación de robots (Arduino, Lego Mindstorms, Micro Bit).
Otra librería de programación por bloques, basada en Blockly, es Roboblocks, un repositorio de bloques para hacer editores de Arduino.

### Programación por bloques en educación

En un curso de programación, el objetivo es desarrollar habilidades de resolución de problemas usando programación. Sin embargo, los estudiantes suelen presentar grandes dificultades para entender y aplicar conceptos abstractos en problemas concretos.
Algunas de las razones son las siguientes:
* La programación demanda un alto nivel de abstacción
* La programación necesita un buen nivel tanto de conocimientos como de técnicas prácticas de resolución de problemas
* La programación requiere un estudio muy intensivo y práctico, a diferencia de muchos otros cursos, que son más teóricos
* Debido a la cantidad de participantes de las clases, es difícil tener un seguimiento personalizado
* La programación es algo dinámico, pero se enseña con materiales estáticos
* Cada estudiante puede tener un estilo de aprendizaje diferente
* La sintaxis de los lenguajes de programación es muy compleja y no está pensada para fines pedagógicos.
La programación basada en bloques fue creada para evitar estos problemas en el aprendizaje, ya que evitan los errores sintácticos, permiten al estudiante desarrollar pensamiento lógico y creativo a través de diversas actividades (juegos, música), y permiten la visualización de la ejecución de los algoritmos.
Existen entornos completos que favorecen el aprendizaje acompañado por secuencias didácticas, como PilasBloques.

### Programación por bloques en videojuegos

La programación por bloques es un desafío que se ha usado como tema para videojuegos de lógica, como es el caso de Human Resource Machine, y su secuela 7 Billion Humans de Tomorrow Corporation.
En los juegos mencionados se requiere resolver desafíos en una versión en bloques de un lenguaje similar al lenguaje ensamblador que se usa para programar procesadores, en una empresa donde los robots hacen trabajar a los humanos siguiendo instrucciones.