jueves, 7 de mayo de 2015

¿QUÉ ES PROGRAMAR?

Si después de tantos años no soy capaz de responder a esta pregunta la cosa estaría muy complicada, pero es que no creáis que es una pregunta sencilla.

Programar es la acción de hacer un programa, y un programa es un conjunto de instrucciones que están escritas para poder ser interpretadas por una máquina. Y digo bien, máquina, porque no solo se programan ordenadores, sino también lavadoras, teléfonos, radios, casi cualquier cosa...




¿Programar una manzana? No, una manzana no es una máquina. Pero una manzana puede ser parte de un programa si lo que estamos haciendo es programar un pelador de manzanas.

Entonces, hacemos un programa directamente y ya... Ojalá fuera tan sencillo. Un programa es una solución para un ordenador determinado con un sistema operativo determinado en unas ciertas circunstancias y generalmente esta basado en un algoritmo.

Un algoritmo es algo más genérico, es la solución de un problema, y no tiene porque ser implementable (es decir, no tiene porque poderse hacer un programa para el en todos los entornos), porque por ejemplo ese algoritmo no sea computable o porque no trabaje con máquinas sino con pensamientos o acciones.

Por ejemplo, quiero pelar una manzana (ese es mi problema):

Para ello necesito:

  1.  la manzana
  2. el cuchillo
  3. dos manos
  4. la habilidad de usar el cuchillo con destreza
Esos son mis prerrequisitos básicos. Mi algoritmo podría ser algo así:

  1. Coger la manzana
  2. Situar el cuchillo en la parte superior de la manzana
  3. Empezar a pelar desde arriba y bajando en circulos
  4. Si la piel se corta y no estoy en la parte baja de la manzana volver a empezar a pelar desde el punto de corte
  5. Seguir hasta que ya no quede piel.
Daros cuenta de que ese algoritmo es mejorable, es decir, se puede optimizar, y en el fondo no tiene todos los prerrequisitos ni está completamente definido pero para lo que estamos mostrando nos valdría.

De echo, solo hay que hacer unas pocas variaciones para cambiar de un algoritmo a un programa para un pelador automático.

El pelador automático haría algo así:

  1. Verificar que la manzana está bien colocada entre los ejes
  2. Acercar la cuchilla hasta rozar la piel en la parte superior
  3. Aumentar la presión lo suficiente para poder empezar a cortar.
  4. Si la piel se rompe volver a  empezar a cortar donde se rompió
  5. Seguir cortando hasta pasar por toda la manzana
Es decir, lo que hacemos como humanos es muy similar a lo que hace la máquina, pero esto era previsible, ya que la máquina peladora de manzanas está basada en la observación de cómo lo hacemos los humanos.

¿Cómo se hace un programa?

Vamos a intentar ver cómo se hace un programa sencillo, intentaremos desvelar cuál puede ser un buen modo de proceder para hacerlo.

En primer lugar tenemos un Problema, es decir, algo que queremos solucionar usando un ordenador, puede ir desde algo nuevo, un cambio sobre otra cosa o una necesidad detectada.

Una vez visto esto, lo primero es detectar las necesidades, es decir, los prerrequisitos antes de comenzar a analizar el problema. Además, vamos a ir planteando un primer acercamiento al problema, intentando ver todo lo que vamos a necesitar.

Pongamos que queremos hacer un programa que diga hola mundo en Android:

Necesitamos: Un ordenador, un emulador de Android, un compilador o interprete que cambie nuestro programa por el código que usa la máquina.

Ahora tenemos que analizar el problema:

Queremos que en la pantalla del móvil aparezca el lenguaje "hola mundo". 

Es un problema que podría ser muy complicado si lo hiciéramos desde cero, es decir, vamos a imaginar que solo disponemos del sistema operativo Android, y que no tenemos más que un interprete de C.

Tendríamos que usar una técnica muy usada en resolución de problema que se llama divide y vencerás, es decir, trocearíamos el problema en otros más pequeños y más sencillos de arreglar.

Por ejemplo:

  1. Poner la pantalla en blanco.
  2. Hacer una función que escriba un carácter en la pantalla
  3. Usar la función anterior para reiterarla hasta que muestre en pantalla "Hola mundo"
  4. Hacer una función que espere hasta que se pulse en la pantalla del móvil.
Es decir, teníamos un problema y ahora tenemos cuatro. Esto permite varias cosas, en primer lugar permite ir recorriendo cada paso y solucionarlo hasta que terminemos todos los pasos.

Pero permite algo más importante, la división del trabajo pudiendo poner a grupos de trabajo a realizar cada parte. De esta manera el trabajo se realizará más rápido.

De echo la programación actual funciona de esta manera, y lo más complicado casi siempre es saber dividir el trabajo. En cualquier caso, lo primero que siempre hay que hacer es hacer el algoritmo y ver si es posible o no computarlo, es decir, saber si tiene solución en un tiempo finito.

Programación actual:

Cómo os he dicho actualmente la forma más efectiva de trabajar y la que se usa en las grandes empresas es la división del problema en partes que son solucionadas por grupos.

Pero siguen existiendo los llaneros solitarios, es decir, las personas que por si mismas intentan crear aplicaciones que luego puedan comercializar y ganar dinero con ellas.



Es esta la razón por la que sobre todo Google con su Android ofrece tanta formación online, y te da todos los recursos de forma gratuita para que hagas tus aplicaciones y las pongas en la tienda. Ellos vieron en seguida que las aplicaciones "de autor" siempre serían muy bien valoradas por la gente y así ha sido.

Por ello, Microsoft ha sacado y mantiene una versión gratuita de sus compiladores Visual Studio Express, para que la gente haga programas que se puedan usar en la tienda Windows... Pero Microsoft ha cometido varios errores, entre ellos el cobrar 14€ por ser desarrollador de aplicaciones.




Esta es la razón por la que como sabéis si seguís mi canal de youtube, me he embarcado en la odisea de intentar aprender a programar para Android, aunque se que no será un camino fácil intentaré realizar una aplicación decente.

Futuro:

"Juegos de guerra": "Bienvenido profesor Falken", una máquina que reconoce a su creador por una acción, ya no es futuro sino presente.

"Odisea en el Espacio": Una máquina que parezca tan humana en sus respuestas que pueda rebelarse no entra dentro de lo que no se haya emulado ya.

"Terminator": Una red que controle todas las redes... Una red que sea consciente de si misma y que pueda desear acabar con el creador... La autoconsciencia de momento no es computable, ya que de momento no tenemos un modelo computacional capaz de emular la conciencia, principalmente porque no existe un modelo que explique la conciencia de una manera completa.

El futuro quizás pase por la conquista de la tres dimensiones creíbles, por la conexión directa del pensamiento a la máquina y por tanto la posibilidad de la programación directa.

Pero es que en este presente ya todos somos programadores en cierta forma, ya que en las redes sociales ponemos las cosas de la mejor manera, y las ordenamos como queremos ordenarlas...

Cuando manejamos un móvil los clicks que hacemos, las pulsaciones que damos con los dedos hacen que el móvil responda de una manera determinada, es decir, estamos creando una respuesta determinada a partir de una hoja en blanco.

Al final nuestro móvil no es igual que el que compramos ya que le hemos programada para que tenga esto o lo otro, para que ejecute tal o cual aplicación, o lo hemos llenado de vídeos o de fotos, o de libros...

Es decir, ya estamos programando inconscientemente desde que adquirimos el móvil.

Espero que os haya sido de utilidad...

Que tengáis un buen día....



No hay comentarios:

Publicar un comentario