Mostrando entradas con la etiqueta programa. Mostrar todas las entradas
Mostrando entradas con la etiqueta programa. Mostrar todas las entradas

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....



domingo, 26 de abril de 2015

RECORDANDO EL SINCLAIR ZX SPECTRUM


Grandes recuerdos me trae el pensar en aquellos tiempos en los que llegó a mis manos el primer ordenador. Era una cosa pequeña, de un tamaño reducido, pero cuando lo enchufabas a la corriente y le conectabas el cable que lo unía a la televisión empezaba la magia.






Porque si, para mi en aquella época era casi mágico enchufarlo y ver el mensaje de presentación y las pantallas que podéis ver en el vídeo que he grabado,



Eran otros tiempos, en los que solo habían dos canales de televisión, donde solo te podías poner a leer o a escribir, o a escuchar música... Y entonces llegó el Spectrum.

Y llegó el Basic, y empezar a aprender lo que significaba programar.. bueno, realmente lo primero que aprendí fue el LOAD"".

Este comando lo que hacía era dejar el ordenador en modo escucha, esperando que llegara una señal de audio de un reproductor de cintas, o cassettes. Estas grabaciones eran siempre de la misma forma:

Primero un sonido corto, luego uno más largo, de modo que el primero era la cabecera y el segundo era el programa en sí. De hecho en aquellos momentos la gente que tenía una minicadena con doble pletina se dedicaba a copiar los programas de cassette a cassette, de forma que conseguía juegos gratis.

Los juegos eran bastante caros y bastante rudimentarios, pero en poco tiempo se empezaron a copiar cada vez mejor los juegos de las máquinas de salón, y todos queríamos los mejores juegos.

En el rastro se vendían copias ilegales cómo ahora se venden en el top manta, con fotocopia incluida de la carcasa original, lo malo es que muchas veces lo que te daban no era el juego que pensabas. Entonces fue cuando Erbe tubo su revelación, y puso los juegos a 875 pesetas (5,2 €), y todos nos lanzamos como locos a comprar juegos baratos en todas las tiendas (yo iba mucho al corte inglés de Castellana a la planta sótano).


Ese fue mi principio, luego vino el empezar a programar, el apuntarse a una academia, y empezar con los programas que solo hacían pequeñas cosas y los primeros proyectos, los primeros programas complejos, el programa biorritmos, y el juego que hicimos a final de curso.

Por otro lado estaban las revistas, donde venían listados enormes para hacer aplicaciones, complejas y no tan complejas, los juegos y el famoso "POKE USR", el poner una cosa en la memoria, el mover cosas por la pantalla, el diseñar las pantallas...


Así empecé en la informática, así comencé un viaje que debió llevarme a otros mundos pero que al menos fue un viaje alucinante en el que aprendí lo que era un microprocesador, la memoria y los periféricos, los datos...

Y cuando tuvimos el programa juego de invasión terminado, nos enseñaron la última cosa, algo que no recordaría hasta que luego llegara a los 8086, nos enseñaron que los programas de Spectrum se podían compilar, generando así directamente código máquina, y así el programa tardaba casi nada en ser guardado en una cinta, y lo mismo en cargarse en el ordenador.





MI VISIÓN DEL SPECTRUM



También en aquel tiempo fue cuando tuve mi primera impresora, y de ahí salía la segunda parte de hacer programas, el buscar los bugs, ya que los programas que hacías o copiabas a mano eran largos y los fallos se presentaban en cualquier lugar. 

Las sentencias if se anidaban con goto para hacer zonas de programa especificas, pero esos saltos eran complicados de controlar y más difíciles de seguir. Por eso la gente después odiará el Basic porque no era estructurado, porque realmente lo hacíamos desestructurado.

De echo el programa más loco y el más hecho era:

10 Print "hola"
20 Goto 10

Que generaba un bucle infinito, e imprimía una fila infinita de "hola".


Lo más frustrante era copiar un monton de lineas de código de una revista para que luego no fueras capaz de arrancarlo porque salía un error en una zona de programa que tuviera un POKE, es decir, una acceso a memoria directo, y tenías que saber mucho para poder corregirlo.


Paralelamente, seguía jugando, y empecé a querer un joystick, para jugar más cómodamente a los juegos. Pero el Spectrum necesitaba un periférico especial para conectarlo, y cuando lo fui a conectar pensé que lo había roto porque había un pedazo de placa en el periférico, hasta que descubrí que aquello era una guía para conectarlo.

En las revistas aprendimos lo que era un truco, en Micro Hobby y Micro Manía, aprendimos a poner vidas infinitas en nuestros juegos favoritos, aprendimos los trucos ocultos, las zonas que no se veían, y los regalos que los programadores nos dejaban.



Aprendimos también lo que era un volcado de memoria, y vimos el primer volcador que te permitía copiar el estado de la memoria en un momento dado y luego volver a cargarlo para poder hacer una partida perfecta.

Todos queríamos ese dichoso aparatito, pero yo además quería saber cómo funcionaba, y ahí empecé a leer más y más cosas sobre los Z80, sobre el código máquina...




Hasta que en un momento dado cambié de ordenador a un Amstrad, pero eso y es otra historia..