miércoles, 9 de octubre de 2019

Programación

Programación:
La programación es una de las áreas más importantes de las Ciencias de la Computación. Estas abordan el estudio de las computadoras desde los principios lógicos y formales que hacen posible su funcionamiento, es decir, más allá de los detalles que presentan las tecnologías concretas que utilizamos a diario. Como disciplina, la programación está orientada al desarrollo de una serie de habilidades de abstracción y operacionalidad. El primer tipo de habilidades incluye técnicas como la simplificación de problemas, la definición de soluciones generales aplicables a problemas similares y la asignación de nombres significativos a las distintas partes de una solución. El segundo tipo de habilidades, las operacionales, supone la definición de soluciones en términos de un conjunto de pasos que deben ejecutarse en un orden determinado para alcanzar un objetivo. 


PRINCIPALES CONCEPTOS ABORDADOS
Programas, legibilidad y estrategias de solución:

Un programa es una forma de expresar una solución a un problema de forma tal que una máquina pueda ejecutarlo. En este sentido, los programas no son más que un conjunto de símbolos –letras, números, etc.– que describen la solución que pensó alguien. Para poner efectivamente en funcionamiento un programa, tiene que haber una máquina que lo ejecute. La Programación, como área dentro de las Ciencias de la Computación, trabaja sobre los programas y la forma de construirlos y no sobre las máquinas que los ejecutan.

Una cuestión fundamental es que, además de ser ejecutados por una máquina, los programas tienen que poder ser leídos y entendidos por personas: para poder corregir, adaptar o modificar un programa, es imprescindible que pueda leerse y comprenderse con facilidad. Por ese motivo, la legibilidad de los programas es uno de los ejes fundamentales.

 Por otro lado, las máquinas solo pueden ejecutar un conjunto reducido de acciones simples. Para referirnos a ellas contamos con lo que llamamos comandos básicos. Sin embargo, al enfrentarnos a problemas complejos, resulta engorroso y complicado pensar formas de solucionarlos en términos de estos comandos. La Programación, como disciplina, provee herramientas para que podamos pensar programas considerando los elementos del problema abordado. En tal sentido, consiste en la construcción de estrategias de solución. Es decir, las ideas sobre cómo encarar la solución particular a un problema, qué elementos disponer para lograrla y de qué manera.

Un autómata es una máquina que se puede programar para realizar ciertas acciones de manera automática. Las computadoras y los robots son ejemplos de autómatas. Las instrucciones que puede ejecutar un autómata se denominan comandos. Cada autómata está provisto de determinados comandos, con una sintaxis rígida, y no reconoce otros diferentes. Los programas se construyen combinando de diversas maneras los comandos para hacer funcionar un autómata. Ejemplo de comandos: Dar un paso hacia adelante, Girar a la izquierda, Girar a la derecha, Estirar el brazo, Bajar la mano, Empujar con la mano, Agarrar el picaporte, Soltar el picaporte.

Otras conceptualizaciones
Procedimientos:
Los lenguajes de programación proveen diversas herramientas para expresar ideas al construir programas, por ejemplo, los comandos básicos, que podemos usar para indicarle a la computadora qué acciones básicas llevar a cabo. Sin embargo, en general, estos comandos resultan insuficientes para construir programas legibles y expresar soluciones con el vocabulario del problema abordado. Una de las herramientas fundamentales para construir programas son los procedimientos, que permiten que un programador defina sus propios comandos y decida su comportamiento. Si se les ponen nombres adecuados, los procedimientos pueden expresar soluciones en términos de los elementos que son propios del problema a resolver. Por lo tanto, contribuyen a la construcción de programas legibles. Además, se pueden usar para dividir la solución de un problema en partes más simples (o subproblemas) y luego combinarlas para resolver el problema original. De este modo, dan la posibilidad de plasmar en el programa la estrategia de solución escogida. 
En síntesis, es muy importante que cada vez que se busque resolver un problema se empiece por pensar cuáles son la estrategia de solución y las subtareas involucradas. Luego se deben utilizar estas ideas para definir los procedimientos que constituirán el programa. 

Otras herramientas de los lenguajes de programación:
Las herramientas que se estudian son transversales a todos los lenguajes de programación. Una vez que se conoce por ejemplo el lenguaje de programación Gobstones, se puede aprender rápidamente un nuevo lenguaje, investigando de qué forma aparecen en él esas mismas herramientas. Concretamente, además de los procedimientos, se trabaja sobre repetición simple, repetición condicional, alternativa condicional, parametrización, expresiones, operadores, tipo de datos, asignación, etc.

Representación de la información:
Todos los programas utilizan y transforman información. El texto, el sonido y las imágenes son algunos ejemplos de información que procesan las computadoras. Para poder escribir programas capaces de manipular estos datos, la información debe representarse de algún modo.
Internamente, las computadoras modernas representan la información utilizando dos estados que corresponden a la presencia o ausencia de corriente. Sin embargo, para referirnos a estos dos estados usamos los números 0 y 1. A esta unidad mínima de información se la denomina bit, y es la base de todas las representaciones de información de las computadoras actuales. No obstante, rara vez un programador piensa en términos de bits; en su lugar, se utilizan abstracciones que permiten razonar en términos de texto, imágenes, etc., y no tener que detenerse a pensar cómo se las representa con un sistema binario.

EL LENGUAJE DE PROGRAMACIÓN GOBSTONES:
Gobstones –que se pronuncia Góbstouns porque viene del inglés– es el lenguaje de programación que su nombre fue inventado por J.K. Rowling en las novelas de Harry Potter para denominar un juego de bolitas mágicas. Este lenguaje fue desarrollado por un equipo de la Universidad Nacional de Quilmes con el exclusivo propósito de servir como primer lenguaje de programación al aprender a programar, y se viene utilizando con éxito en diferentes ámbitos educativos.
Los programas se utilizan para operar sobre el cabezal de una máquina que trabaja sobre un tablero. En las celdas del tablero el cabezal puede colocar y retirar bolitas de colores. Además, puede desplazarse de una celda a celdas vecinas. 
Al ejecutar un programa, se comienza con un tablero particular, al que llamamos tablero inicial. El resultado final es otro tablero, denominado tablero final, que se obtiene luego de modificar el tablero inicial siguiendo las instrucciones del programa. En Gobstones, los programas siempre se usan para transformar un tablero inicial en un tablero final. 
El efecto del programa sobre el tablero es el conjunto de cambios entre un tablero inicial y uno final. Todos los desafíos que se presentan se expresan en términos del efecto esperado sobre el tablero. En muchos casos, los programas consisten en instrucciones para transformar un conjunto inicial de cosas –una biblioteca desordenada, los ingredientes para hacer pizza, etc.– en otro final –la misma biblioteca ordenada, la pizza lista–.
El entorno que usaremos para trabajar con Gobstones se llama Gobstones Jr., y puede utilizarse tanto en línea como sin conexión a Internet, luego de haberlo descargado e instalado en la computadora. En este entorno, las instrucciones se representan con bloques que pueden encastrarse y desencastrarse para formar programas, con lo que se evitan problemas de tipo sintáctico, que suelen ser muy frustrantes para aquellos que se inician en la programación.