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

sábado, 20 de junio de 2015

PROGRAMANDO EN C#: Eligiendo las herramientas

En la primera entrada del blog os he señalado las razones por las que he elegido estudiar C#, y ahora voy a mostraros la herramienta que voy a utilizar.

Evidentemente ya sabemos todos que detrás de este lenguaje está Microsoft, de manera que para empezar vamos a descargar el Visual Studio que está ahora mismo como gratuito en la página de Microsoft.

Podéis elegir entre la versión Express para windows Desktop o la Community. Lo bueno de la Community es que os permitirá más adelante crear programas para la web y para la tienda windows. A cambio el peso, es decir, el tamaño del archivo será mucho mayor y os llevará más tiempo la descarga.

Una vez descargado, lo único que tenéis que hacer es arrancarlo, y darle a crear un nuevo proyecto. Este nuevo proyecto lo vais a elegir dentro de visual C#, en windows desktop, una Console Aplication, y le vais a poner un nombre, el que queráis, por ejemplo proyectoconsola1, o lo que más os guste.

Esto os va a generar el primer programa de vuestra carrera de programadores, el programa más sencillo de todos, y el que menos hace pero el más interesante:



using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Aplicacionvacia
{
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}


Ahora solo tenéis que darle a empezar o Start y se lanza vuestro primer programa... ¿Y qué hace? Abre un segundo una ventana y la cierra, es decir, no hace nada... ¿O hace algo?

Este programa hace muchas cosas que no veis, este programa se compila y se crea un ejecutable, un fichero que luego se puede volver a usar en cualquier máquina con Windows que tengáis, este programa que no es el que se suele mostrar como primer programa tiene muchas lineas que en próximas entregas os iré explicando....

Si no sabes nada de programación estarás deseando pasar a la siguiente entrega del blog para saber que es ese nada que son muchas cosas, pero lo que tienes que saber de momento es que el programa crea un proceso, es decir, abre un hueco en la zona de memoria donde se pueden ejecutar los programas y le dice al controlador de programas que el existe.

Además le dice al sistema que es un programa de consola y que prepare una ventana de consola para la ejecución...


Como ves si hace muchas cosas... Ahora veremos lo que hace cada línea...



martes, 2 de junio de 2015

MI HISTORIA DESDE EL LENGUAJE C A C# : Un recorrido por el tiempo...

Si mal no recuerdo mi primer contacto con el lenguaje C fue en un curso que estaba dando sobre el basic del Zx Spectrum. El profesor que entonces tenía, Eduardo Gonzalez Granda, sacó un libro de su bolsa, y nos dijo: Este será del futuro de la programación.



Estamos hablando del momento en que los primeros PC estaban entrando en España, y en aquel momento apenas sabíamos nada más que lo que era el Basic y a lo sumo el códico máquina. De manera que aquello fue para mi una gran novedad.

La pena fue que esto fue a final de curso y nunca más supe de él. Por el contrario, mi camino como ya os he contado en otra parte del blog siguió por el camino del Basic, y solo cuando me compré el Amstrad Pc 1512 y fui de nuevo a una academia fue cuando aprendí lo que era un compilador de C...

Aquello era genial, primero hacías el programa, luego lo compilabas y obtenías un programa .obj, y posteriormente lo linkabas y te salia un programa ".exe", es decir, un programa ejecutable desde msdos.

En aquellos tiempos, uno se lo hacía todo, primero la idea, luego el algoritmo, más tarde el diseño para mostrar en pantalla, y si la cosa pintaba bien, le añadías un ".bat", para optimizar el arranque del programa, darle un toque profesional y añadirle unas opciones.

Por ejemplo, podías añadirle el lugar donde querías que se ejecutara en el ordenador, si ibas a usar un disco virtual, o si ibas a cambiar los colores... Si además disponías de alguna herramienta podías hacer con todo el programa un fichero de instalación que se ejecutara cuando tu cliente lo recibiera...


Turbo C:


En estos tiempos es cuando empieza a integrarse todo en programas, ya que era complicado saber todas las opciones de compilación y de linkado se creó un gran programa que permitía elegir las opciones sin tener que ponerlas todas en la linea de comandos.



Pero Turbo C permitía más cosas, igual que los programas de proceso de texto Turbo C te revisaba la ortografía mientras escribías los programas y te decía si habías cometido algún error mientras ponías :

printf("Hola mundo");

Esto permitía que se acortaran los tiempos de programación, compilación y linkado...

Pero aún estábamos en C, y este era ya el mundo de los punteros, y empezaba el lío de las memorias y C se empezó a convertir en el lenguaje de los atajos y del caos.

Borland C++:




Es entonces cuando me volví loco, haciendo un curso de IBM de programación, y me gasté mis ahorros en comprar el Borland  C++, con sus manuales... y todo en inglés. Aprendí entonces lo que era una clase, lo que era un objeto, aprendí lo que era un puntero realmente...


Y comencé mi andadura con el C++, e hice mis primero pinitos en programación orientada a objetos, que realmente era una vuelta a la programación funcional y asertiva que era la que venía usando antes.

Pero por azares del destino tuve que dejar la programación durante bastante tiempo, y cuando volví Borland había desaparecido, y el C++ ya casi no existía....



Microsoft Visual Studio y C#:




Pero las cosas van y vienen, y mientras Borland se perdía en el infinito del tiempo Microsoft iba creando una herramienta aún más visual y más fácil de usar, el Visual Studio, orientado a Windows, y muy sencillo de usar, y que permitía no solo programar en C++, sino Visual Basic, y otros lenguajes de la época...

Con el paso de los años Microsoft tomó el C y le puso una # almohadilla, y lo convirtió en C# una versión más sencilla de usar que el C++ pero con gran potencia en el desarrollo de aplicaciones para Windows.

Y la verdad es que es un lenguaje tan cautivador que si empiezas a usarlo al final te engancha y lo único que quieres es aprender más sobre él...


Actualmente puedes usarlo para hacer aplicaciones para Microsoft Windows 8.1, para Windows Phone... Pero al ser un lenguaje tan usado también puedes usarlo para programar en otros sistemas operativos.

Hace un año que empecé con él y aunque me llevará otros cuatro años tener un nivel aceptable, espero llegar a conocerlo bien...

Sobre todo ahora que viene el nuevo Windows 10....




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



lunes, 27 de abril de 2015

EL SEGUNDO ORDENADOR: El AMSTRAD CPC 6128 (programas y subrutinas)

Y mi mundo fue cambiando, y cambié un televisor por un monitor monocromo en tonos verdes, y cambié el Sincalir Zx Spectrum por el Amstrad Cpc 6128...

Después de tantos años y tantos programas y sueños realizados con el Spectrum la cosa por fin cambió, ya iba creciendo en mi la necesidad de programar, de hacer cosas cada vez más complejas, y no solo de jugar a juegos o copiar programas de revistas.



Estamos hablando de varios cambios importantes: En primer lugar el que ya os he dicho, la pantalla deja de ser la tele del salón para ser una pantalla de fósforo verde, el segundo cambiamos una memoria de 48k por una memoria de 128k, es decir, casi el triple, de modo que los programas pueden ser más complicados, puedes hacer más cosas y además más rápido.

Además cambiamos la cinta por el disco... Bueno, no del todo, ya que si comprabas el jack o conector adecuado podías conectar el ordenador a un lector de cintas, y las cintas tenían la ventaja de que eran mucho más baratas que los diskettes... Pero que ilusión más grande cuando vi por primera vez uno de esos diskettes, cuando grabé mi primer programa en uno de ellos...

En cpcbox.com podéis ver un emulador muy bueno de los diferentes Cpc que se comercializaron, y podéis jugar con el Basic que venía como lenguaje fundamental del ordenador.

Este basic era bastante más potente que el del Spectrum y permitía hacer más cosas de una manera más sencilla e introducía el gosub y el return, lo cual permitió estructurar un poco los programas. Probar esto si queréis en el emulador:

10 rem Programa con return
20 print "Estoy en la linea 20"
30 gosub 1000
40 print "Estoy en la linea 40"
50 end
1000 print "Estoy en la linea 1000"
1010 return

Este programa os debe generar una salida del estilo a esto:

Estoy en la linea 20
Estoy en la linea 1000
Estoy en la linea 40

Con esta estructuración si había algo que se hacía varias veces en el programa con un gosub mandabas el flujo del mismo a esas lineas y luego volvía a la linea siguiente a la que hizo la llamada (luego se crearán las funciones en los lenguajes de años posteriores).

Pero el Amstrad traía más sorpresas, ya que aunque no lo entendí en aquel momento el cpc 6128 traía un sistema operativo el CPM, metías el disco pertinente y te sumergías en un mundo diferente, un mundo donde existían unos comandos raros que te permitían ver lo que había en un disco, o formatearlo o crear otro disco de sistema.


Un mundo maravilloso donde ya no era el basic el protagonista sino que se empezaba a vislumbrar un mundo diferente en el que el lenguaje C podía florecer, y en donde podías arrancar nuevos programas diferentes.

Desde Cpm aprendí lo que era un compilador, aprendí a contabilidad, y algunos juegos que venían para el Cpc. Pero también aprendí lo que era no ser compatible, cuando intenté usar un programa de Pcw sobre Cpc, y luego vinieron los programas de copia de discos, y los que permitían reparar los discos....

En ese momento ya era capaz de hacer programas complejos que guardaban datos en el disco, y que luego los recuperaban, incluso me hice mi primer juego, al estilo de los de plataformas, con varios niveles de altura, escaleras para subir y bajar y enemigos inteligentes que te perseguían por la pantalla siguiendo tus movimientos.

Los gráficos se definían a partir de una matriz de puntos, y los protagonistas eran gráficos definidos. El escenario se definía por repetición de caracteres, y se podía subir de por diferentes niveles.

Y todo esto en pantalla fósforo verde y con 128k...

Respecto a los juegos, seguíamos jugando con las cintas que eran más baratas y de vez en cuando conseguíamos alguno que estuviera de oferta y podíamos usarlo....

Si os animáis he grabado un vídeo donde os cuento todo lo visto y alguna cosa más:

El Amstrad Cpc 6128