Libros sobre desarrollo de videojuegos

Una recopilación de libros sobre Diseño y Desarrollo de videojuegos. Guión, Arte, Programación, Marketing... Tanto libros gratuitos en PDF como libros comerciales desde Amazon.

Sección de Documentales y Vídeos

Documentales, Making Offs, Reportajes, Conferencias y Entrevistas. Todo ello relacionado con los Videojuegos y o el desarrollo de los mismos. Enfocados principalmente al mundo Indie.

Cursos para crear Videojuegos

Aprende a crear Videojuegos con cursos de Diseño, de Dibujo, de Modelado y Animación, y de programación con diferentes motores y lenguajes. Ya no tienes excusa, ¡Crea!

Mostrando entradas con la etiqueta Artículos de programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Artículos de programación. Mostrar todas las entradas

ARTÍCULO - Por qué elegir el lenguaje C#

Si te has planteado aprender a programar, seguro que la primera duda que te ha surgido es el lenguaje a escoger. Yo, tras pensarlo mucho, decidí escoger C# y a continuación expongo las razones.

"Aunque tu objetivo sea ser diseñador, aprender un poco de programación te ayudará a entender las limitaciones técnicas para implementar lo que imaginas"







Artículo escrito por: Asensio López Fernández


   Sin duda el principal motivo para elegir aprender a programar con C# (pronunciado Si Sharp), es que se trata de un lenguaje de programación orientado a objetos.
Mucha gente anima a que se empiece aprendiendo con un lenguaje estructurado, y luego se pase a la programación orientada a objetos, pero otros tantos opinan que si primero aprendes con un lenguaje estructurado será más confuso a la hora de pasarte a la programación orientada a objetos, ya que son conceptos diferentes. Yo personalmente he elegido C# y la programación orientada a objetos porque me parece más sencillo.

    C# es un lenguaje diseñado por Microsoft para generar programas sobre la plataforma .NET. Es fruto de una evolución que partió con el nacimiento de C, que era un lenguaje en el que se trabajaba con programación estructurada, luego apareció C++ que ya permitía la programación orientada a objetos, y por último la evolución dio lugar a C#. Este último coge lo mejor de diferentes lenguajes de programación como C++, Visual Basic, Java o Delphi y lo mete en una coctelera, dando como resultado un lenguaje que combina a partes iguales potencia y sencillez. De este modo, además facilita la migración de los programadores de estos otros lenguajes a C#. En definitiva se trata de un lenguaje moderno, intuitivo y muy eficiente, que mejora la productividad en el desarrollo de software. Además es el lenguaje de la plataforma .NET con más y mejores ejemplos; es más, la propia plataforma fue desarrollada con este lenguaje.

Mucha gente elige otros lenguajes de programación alegando que las aplicaciones creadas con C# solo corren bajo la plataforma .Net, pero nada más lejos de la realidad. Hoy en día, gracias al  “proyecto Mono", se pueden compilar programas C# en plataformas como Linux, Mac o incluso Android, por lo que no veo un motivo por el cual renunciar a las mejoras que nos ofrece C#.

Además, se puede programar con lenguaje C# en Unity3d. Unity es un Game Engine de los más potentes e intuitivos del mercado; permite crear juegos para Windows, Mac, Xbox360, Playstation 3, Wii, Ipad, IPhone y Android. Además, también se pueden desarrollar juegos para navegador web con tecnología HTML5.

La plataforma .NET

La plataforma .Net es un conjunto estandarizado de conceptos y prácticas (framework) diseñada para que se puedan desarrollar componentes sobre software utilizando casi cualquier lenguaje de programación, de forma que lo que escribamos en un lenguaje pueda utilizarse desde cualquier otro de la manera más transparente posible. Esto es, en vez de estar limitados a un único lenguaje de programación permitirnos cualquier lenguaje de programación, siempre y cuando se adhiera a unas normas comunes establecidas para la plataforma .NET en su conjunto. De hecho existen compiladores de múltiples lenguajes para la plataforma .NET.
Nace como una respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java y a los diversos framework de desarrollo web basados en PHP. Su propuesta es ofrecer una manera rápida y económica, a la vez que segura y robusta de desarrollar aplicaciones, permitiendo una integración más rápida y ágil entre empresas, con un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo.

El proyecto Mono

Se trata de un proyecto de código abierto basado en GNU/Linux y compatible con .NET, que consta de un grupo de herramientas que permiten desarrollar fácilmente aplicaciones para Linux con lenguajes basados en .NET como C#. Como mencionaba anteriormente, gracias al proyecto mono se pueden compilar programas C# en plataformas como Linux, Mac o incluso Android.

-¿Qué es un IDE?

Un IDE o “entorno de desarrollo integrado” básicamente es un programa que nos facilita la tarea de escribir, depurar y compilar código. Por poder podemos programar incluso con un editor de texto como notepad, pero obviamente un IDE nos va a facilitar mucho la tarea.

Visual Studio es el IDE que proporciona Microsoft para programar en su plataforma. La versión Community es totalmente gratuita.y es más que suficiente para crear cualquier tipo de programa, pudiéndose incluso vender sin tener que pagar nada a Microsoft.

Además de Visual Studio existe MonoDevelop (y otros), que es un IDE libre para el proyecto mono, que nos permite compilar programas en otras plataformas.

Podéis descargar la versión gratuita de Visual Studio en la página oficial: AQUÍ

Y con Monodevelop (ahora llamado Xamarin) tres cuartas de lo mismo, podéis descargarlo: AQUÍ 


ARTÍCULO - Los pilares de la programación orientada a objetos

En este artículo vamos a tratar de explicar brevemente qué es la programación orientada a objetos (POO) y por qué se ha convertido en la más popular, relegando a las antiguas formas de programar a un segundo plano. Cabe destacar que la POO no es un lenguaje de programación en si, sino una forma de afrontar la programación. Hoy en día existen muchos lenguajes que soportan este tipo de programación y algunos han sido creados especialmente para ello, pero remarco que, este método de programación no es una obligación, es una elección: la elección acertada.

"Lo que vemos en el mundo real son objetos, cosas. Así que, sin duda, la mejor manera de programar es partiendo de esa simple base"








Artículo escrito por: Asensio López Fernández

    La programación orientada a objetos se ha convertido en la más popular debido a sus grandes capacidades y ventajas respecto a las antiguas formas de programar. Básicamente, este tipo de programación nos permite crear auténticos objetos, que pueden ser cosas que aparecen en la pantalla, como botones o ventanas, o bien pueden ser objetos de la vida real, como una persona o un lápiz. 

Estos objetos poseen características que es lo que llamamos propiedades o atributos, como pueden ser: edad, velocidad, temperatura, color, altura, etc... 
También tienen capacidades, cosas que pueden hacer, a esto lo llamamos funciones o métodos, como pueden ser: andar, golpear, acelerar, envejecer…
Y pueden pertenecer a clases. Una clase es la definición de los elementos de los que está compuesto uno o varios objetos de un mismo tipo. Por ejemplo, mi padre tiene tiene una serie de características como son: ojos, nariz, boca, brazos, piernas, lo cual nos dice que pertenece a la "clase persona". La función de una clase en POO es la de definir las características y funciones de los que están compuestos los objetos de un mismo tipo.

A varios objetos de una misma clase de les llama instancias de esa clase. Por ejemplo, imaginemos que tenemos una clase que se llama coche, los objetos Ferrari F40 y Toyota Corolla serían instancias de esa clase. La clase coche marcará las características principales que tiene cualquier coche, y que compartirán todos los objetos/instancias que pertenezcan a esa clase.

 Los tres pilares del desarrollo orientado a objetos son la encapsulación, la herencia y el polimorfismo. Si... ya veo que en la imagen aparece también abstracción... no seas cansino.
La abstracción: 

Mucha gente considera que la abstracción en si no es más que una parte del proceso de la encapsulación, y por tanto no la tienen como  pilar independiente de la POO.

La abstracción es la capacidad de obtener y aislar toda la información y cualidades de un objeto que no nos parezcan relevantes, para poder encapsularlos. Para ello separamos "mentalmente" los objetos y nos centramos en su comportamiento fundamental. 
Gracias a ello, podemos representar las características esenciales de un objeto sin preocuparnos de las restantes.
Pongamos el ejemplo de un objeto llamado gato. El gato tiene propiedades o características (nombre, color, peso, precio, edad..) y métodos o comportamientos (andar, maullar, lamerse las pelotas...)
Gracias a la abstracción, otro objeto, por ejemplo el "objeto vendedor" puede manipular el "objeto gato" sin tener en cuenta algunas de sus propiedades y métodos, ya que solo le interesan  algunas, como el precio.

Poniendo un ejemplo de videojuegos. Si creamos un juego de coches tipo Arcade, lo único que necesitamos abstraer de un coche real serán cosas como, la forma, el color y la velocidad, por ejemplo. Pero, si queremos crear un juego de coches tipo simulador, deberemos abstraer muchas más cosas, como el peso, la potencia, el tipo de tracción, tipo de combustible, tipo de ruedas, etc...

La encapsulación: 

La encapsulación es la capacidad de ocultar los datos abstraídos,  aislarlos o protegerlos de quién no desees que tenga acceso a ellos; otro objeto o función por ejemplo. 
Cada objeto puede tener muchas cosas encapsuladas en su interior, propiedades, funciones o incluso otros objetos. 
Muchas veces no se necesita entender el funcionamiento interno de un objeto, sino tan solo sus funcionalidades: para que sirve o qué puede hacer. Por tanto un objeto puede ser cambiado por otro siempre que cumpla con la misma función.

Veamos un ejemplo del mundo real. Imaginemos que tenemos un objeto: una tarjeta de sonido. No sabemos cuál es el funcionamiento interno de la misma, sus propiedades se podría decir que están encapsuladas dentro. Lo que si sabemos es que cumple con la función de proporcionar el sonido a nuestro ordenador.  Podemos cambiar una tarjeta de sonido por otra, ya que cumplen la misma función, y no necesitamos saber nada más, a no ser que queramos trabajar para creative.

Para dejarlo aún más claro; el usuario no necesita saber cómo funciona internamente un coche, solo necesita saber que al pisar el acelerador (aplicar el método) el coche anda. 

Herencia y reutilización:


La Herencia lo que nos dice es que puede crearse una clase a partir de otra clase ya existente, heredando todas las cualidades de la clase de la que deriva y además pudiendo añadir nuevas funcionalidades o modificar las ya existentes.

Imaginemos que tenemos un ordenador con sus planos y queremos fabricar otro ordenador. En vez de crear uno de cero, sería mucho más sencillo basarnos en el ordenador que ya tenemos y añadirle o modificarle ciertas funcionalidades como podrían ser: aumentar su capacidad, su velocidad de procesamiento, etc…
Podríamos ejemplificarlo también con una clase llamada Vehículo y varias clases que heredan de ella, llamadas, moto, coche, barco, etc... Estas clases heredarían las propiedades y funciones de un vehículo, y podrían modificarlas o crear nuevas.

A la clase que se crea a partir de otra clase se le conoce como subclase o clase derivada.
En un último ejemplo, podríamos pensar en crear una clase persona, y una clase mujer que hereda todas las propiedades de la clase persona y que añade otras nuevas como las tetas, y podemos crear varios objetos de la clase mujer, como podrían ser Ana o Bernarda...

Polimorfismo:


 El polimorfismo es la capacidad para que varias clases u objetos derivados de otros, reaccionen de manera diferente ante los mismos métodos. El polimorfismo se puede aplicar tanto a objetos como a funciones, por lo que podemos hablar de objetos polimórficos y de funciones polimórficas.
Por ejemplo, cuando apretamos el acelerador de un coche no va a responder igual el que posee un motor diésel que el que tiene un motor de gasolina.

ARTÍCULO - Historia y evolución de los lenguajes de programación

No os asustéis, la palabra Historia puede sonar fuerte y a veces provoca somnolencia en quienes la escuchan. Tomen esto más bien como un “cuento” que trata de hurgar un poco en el pasado del ser humano, cuando crearon las máquinas y debieron aprender a comunicarse con ellas.
Para nada este artículo trata de ser algo estrictamente científico, nada más lejos de la realidad. Trataremos de enfocarlo como un acercamiento del público general al mundo de la informática, sin necesidad de tener ningún tipo de conocimiento previo.

"El lenguaje nos sirve para comunicarnos. Por desgracia algunas personas tienen un lenguaje bastante físico"










Artículo por: Asensio López Fernández



    Un lenguaje es un método de comunicación que nos permite comunicarnos con los demás. Si hablamos con un Inglés deberemos hacerlo en lenguaje inglés, si hablamos con un Japonés le hablaremos en lenguaje Japonés… pero, ¿y si lo que queremos es hablar con una máquina? Pues en ese caso debemos de hacerlo en un lenguaje que ella pueda entender: un lenguaje de programación.
En realidad estoy mintiendo un poco. Las máquinas solo entienden un lenguaje, el llamado lenguaje máquina, que no es otra cosa que: electricidad o no electricidad, apagado o encendido, unos o ceros. Entonces ¿no entiende los lenguajes de programación?, directamente no, primero han de ser traducidos al lenguaje máquina bien directa o indirectamente, pero vayamos paso a paso.

Origen de los lenguajes de programación:

Si las máquinas nacieron como una idea del hombre para automatizar trabajos rutinarios y repetitivos, la programación nació como un método eficaz de comunicación con dichas máquinas a modo de instrucciones.

La  primera computadora como tal, fue la “máquina analítica” inventada por Charles Babbage allá por el año 1823 y que continuó depurando hasta su muerte en 1872, por lo que se le considera “el padre de la computación”, aunque el artilugio nunca fue totalmente terminado. Se trataba de una máquina capaz de calcular tablas matemáticas, eliminando así los posibles errores humanos debidos a la fatiga o el aburrimiento que producía dicha tarea.
"Hola, soy Charles Babbage"


"Máquina analítica de Babbage















Pero fue Ada Lovelace, hija del poeta inglés Lord Byron, la primera persona que ejecutó un algoritmo para la “máquina analítica” y describió por primera vez un lenguaje de programación de carácter general interpretando las ideas de Babbage, además de solventar ciertos errores de su proyecto. Es por ello por lo que se la conoce como la primer programadora de la historia. Incluso el Ejército de los Estados Unidos llamó a uno de sus lenguajes de programación ADA, en homenaje a esta extraordinaria mujer.
"Esta máquina puede hacer cualquier cosa que sepamos cómo ordenarle que ejecute..."

Tipos de lenguajes:

-El lenguaje Máquina

El lenguaje máquina fue el primer lenguaje de programación, y es el único lenguaje que entiende una computadora. Está compuesto únicamente por unos (1) y ceros (0), es por ello que también se le conoce como lenguaje binario. Con estos dos dígitos (conocidos como bits), forma lo que se conoce como cadenas binarias, con las instrucciones que damos al microprocesador. Ejemplo de cadenas binarias:

110011001000
001001010101
111000111000

Este lenguaje es fácil de entender por una computadora, pero como podréis ver es difícilmente entendible por un humano. Es por ello que con el fin de facilitar el trabajo a los programadores se creó un tipo de lenguaje que sustituía las secuencias de unos y ceros  por palabras o letras provenientes del inglés, facilitando de este modo la lectura, escritura y posterior ejecución de los programas. A los primeros lenguajes de este tipo se les denominó lenguajes de bajo nivel.
Eso sí, una vez que se termina de escribir un programa, es necesario compilarlo o intepretarlo, es decir, volver a traducirlo al lenguaje máquina para que el ordenador lo entienda, ya que como bien he dicho al principio es el único lenguaje que entiende una computadora.

 - Lenguajes de bajo nivel

Los lenguajes de bajo nivel de abstracción, son los que están más cercanos a la forma de trabajar de un microprocesador, por lo que son fácilmente trasladados a lenguaje máquina.

El lenguaje ensamblador (Assembly) fue el primer lenguaje de programación que trató de “sustituir” el lenguaje máquina por uno mucho más parecido al de las personas. Lo que hace es sustituir las secuencias de código máquina por letras o palabras, por lo que en realidad escribir en lenguaje ensamblador es básicamente lo mismo que hacerlo en lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que la secuencias de números binarios. Por ejemplo, para sumar se usa la letra A, de la palabra inglesa add (sumar).

La palabra bajo, no implica que el lenguaje sea inferior a uno de alto nivel, se refiere a la reducida abstracción (abstracción = grado de cercanía) entre el lenguaje y el hardware.
Actualmente se suele usar, entre otras cosas, para programar drivers. Entre sus ventajas se encuentran: mayor adaptación al equipo y mejor velocidad con un mínimo uso de memoria. Y entre sus desventajas: Mayor dificultad de comprensión e imposibilidad de escribir código independiente de la máquina.

Con el tiempo se hizo necesario simplificar aún más la tarea de los programadores, ya que la complejidad de las tareas que realizaban las computadoras iba en aumento. Así que se crearon los lenguajes de alto nivel, que entre otras cosas necesitan menos instrucciones que un ensamblador para realizar una misma tarea.

Si como hemos dicho antes, los lenguajes de bajo nivel son los más próximos a la arquitectura de hardware, los lenguajes de alto nivel son todo lo contrario: los más cercanos a los programadores.

 - Lenguajes de alto nivel

Un lenguaje de alto nivel es aquel que se aproxima más al lenguaje humano que al lenguaje binario, o lenguaje máquina. Utiliza palabras y expresiones del lenguaje humano (en inglés), por lo que al ser más fácilmente compresible por los programadores aumenta la sencillez y rapidez a la hora de crear programas, a la par que reduce las posibilidades de equivocarse.

En C# se usan palabras como: if, convert, write, etc… Ejemplo:

If (numero1 > numero2)  
 {   
 Console.Write (“gana el primero”);  
 }
Esto significa que, si el número 1 es mayor que el número 2, se va a escribir “gana el primero” en una ventana de consola.

La principal característica de un lenguaje de alto nivel es su independencia de un hardware determinado, por lo que un programa escrito en este tipo de lenguaje puede ser utilizado en distintas computadoras. Cierto es también, que la computadora debe disponer de un intérprete o compilador, que es el encargado de traducir dicho programa al lenguaje específico de cada máquina, ya que, como dije al principio,  las computadoras solo entienden el lenguaje binario o lenguaje máquina.


Cada nueva evolución en los lenguajes de programación ha traído consigo una simplificación de los mismos, por lo que, en muchos casos, varias instrucciones en lenguaje máquina pueden ser simplificadas en una sola instrucción en lenguaje de bajo nivel, y varias instrucciones en lenguaje de bajo nivel pueden ser  simplificadas en una sola instrucción en lenguaje de alto nivel.
En la actualidad existen gran diversidad de lenguajes de alto nivel (C, C++, C#, BASIC, PASCAL, JAVA, entre muchos otros)

Tipos de programación:

El tiempo hizo que los lenguajes de programación tuviesen que irse adaptando a las circunstancias cambiantes. El usuario final requería cada vez programas más potentes a la par que intuitivos y fáciles de manejar, y paradójicamente los programas sencillos de utilizar son los más difíciles de programar. A esto se sumó el nacimiento de la red de redes y la creación de nuevos dispositivos a parte de las computadoras.

Podemos dividir los lenguajes de alto nivel en tres tipos de acuerdo a su evolución y tipo de programación:
De programación de procesamiento, de programación estructurada y de programación orientada a objetos.

- Programación de procesamiento

La programación de procesamiento o programación lineal es aquella en que las instrucciones se ejecutan en el mismo orden en que han sido escritas. Se basa en una serie de procedimientos que se ejecutan uno tras otro y que actúan sobre los datos. A estos procedimientos también se les llama, funciones o métodos.

El principal problema de este tipo de programación queda en evidencia a la hora de realizar programas complejos, ya que ofrece poca flexibilidad.  Es especialmente complicado mantener una gran cantidad de líneas de código con superposición de funciones y se hace en extremo confuso para el programador..

- Programación estructurada

Con el tiempo los programas comenzaron a ser más complejos y ambiciosos por lo que la evolución lógica era la llamada programación estructurada. Básicamente en este tipo de programación lo que se hace es dividir el trabajo en partes, llamadas módulos o componentes.Esta forma de programación entiende un programa como un conjunto de tareas. Cada tarea compleja es dividida en módulos, y cada módulo complejo es subdividido en componentes. De este modo cada tarea es fácilmente entendible y puede ser mejor documentada internamente. Los módulos o componentes son ejecutados a medida que son requeridos, de este modo tenemos un diseño compuesto por módulos independientes que pueden comunicarse entre sí.

Pero este tipo de lenguaje se centra en los procedimientos (también se le llama programación procedimental), y crecía la necesidad de pensar en los datos, en lo que se puede hacer con ellos. Además se vio que  había funciones iguales que se copiaban una y otra vez en los módulos y se pensó que se podrían reciclar dichas funciones para distintas situaciones. Fue así como nació la programación orientada a objetos.

- Programación orientada a objetos

La programación orientada a objetos (POO) combina las mejores ideas de la programación estructurada con conceptos nuevos y potentes que nos hacen ver las tareas de programación desde un nuevo punto de vista: el de los objetos. Debo hacer hincapié en que no se trata de un lenguaje de programación en sí, sino de una forma de plantearse la programación, soportado por muchos lenguajes actualmente.

Se trata de una forma de programar mucho más cercana a como expresamos las cosas en la vida real; descompone los problemas en conjuntos de datos con estructura propia, que llamamos objetos. Su idea principal es llevar al mundo del condigo lo mismo que encontramos en el mundo real. Y en nuestro mundo, cuando miramos alrededor, ¿qué nos encontramos? La respuesta es sencilla: cosas, objetos.

Para entender la programación orientada a objetos debemos entender que es un objeto. En el mundo real, un objeto es cualquier cosa que vemos a nuestro alrededor, un lápiz, una televisión, un coche, etc… Podemos distinguir un objeto de otro porque son de una clase diferente, o incluso diferenciar objetos de una misma clase, como pueden ser dos coches de modelos distintos.
Un objeto puede estar compuesto por diferentes componentes, por ejemplo un coche está compuesto por: motor, radiador, frenos, ruedas, etc... Todo en conjunto forma parte del objeto coche. Internamente cada componente puede ser muy complicado y haber sido construido por distintas empresas, pero a nosotros nos basta con saber cuál es su funcionamiento y como se relaciona con los otros componentes.
Y lo mismo pasa en la programación orientada a objetos, todo el programa está construido en base a diferentes objetos, compuestos por diferentes componentes. Cada uno tiene un rol específico en el programa y todos pueden comunicarse entre sí de formas predefinidas.Me resta decir que todos los lenguajes compatibles con programación orientada o objetos deben cumplir con estos tres requisitos: Herencia, encapsulación, y polimorfismo; hay quién añade también la abstracción, pero ésta en realidad forma parte de la encapsulación.

Permítanme que no entre más en detalles sobre programación orientada a objetos en este tema, ya que redactaré otro artículo íntegramente dedicado a explicar todos los pormenores de esta forma de programar.

Intérpretes y compiladores

 Como ya dijimos anteriormente, un lenguaje de alto nivel no puede ser entendido directamente por una máquina, sino que debe ser traducido a su lenguaje, el lenguaje binario o lenguaje máquina, para que la computadora pueda entenderlo y ejecutarlo. Existen dos tipos de “traductores”: los Intérpretes y Compiladores.

Intérpretes:

El intérprete realiza la traducción del programa fuente (programa escrito en lenguaje de alto nivel) al lenguaje máquina directamente,  ejecutando dicha traducción al momento de ejecutar cada una de las instrucciones. Normalmente no guarda el resultado de dicha traducción. De este modo, el programa fuente siempre conserva su forma original, con la desventaja de que cada vez que es ejecutado debe ser traducido nuevamente. Este proceso puede hacer más lenta la ejecución del programa, por lo que los intérpretes suelen ser menos usados que los compiladores.Podríamos comparar la labor de un intérprete con la que realiza un traductor humano, que va traduciendo lo que escucha  a otro idioma en tiempo real, pero sin escribirlo ni dejar registro alguno.
"Terminator dispone de un programa interprete que traduce lo que le dice John Connor al lenguaje máquina"
Llamamos lenguaje interpretado a todo aquel que está diseñado para ser ejecutado por medio de un intérprete.Algunos de los más famosos pueden ser: PHP, ActionScript, LUA o JavaScript.

Compilador:

El compilador a diferencia del intérprete, no ejecuta el programa directamente, haciendo la traducción en tiempo real, sino que, tras analizar el programa fuente lo traduce a otro lenguaje equivalente, creando lo que llamamos un programa objeto. Para remarcarlo aún más, diré que un programa objeto es la traducción de un programa en lenguaje de alto nivel a un programa en lenguaje máquina, lenguaje que la máquina puede interpretar y ejecutar.
Una vez compilado el programa, el resultado en forma de programa objeto no puede ser directamente ejecutado. Debemos usar un programa conocido como enlazador  o linker, que combina todos los módulos del archivo objeto para formar un archivo ejecutable (un .exe por ejemplo), que ya sí que se considera un programa en sí mismo y no necesita hacer referencia al código fuente original.
Volviendo al símil del traductor humano, podríamos decir que lo que hace un compilador sería equivalente a la labor que haría un humano al coger un libro y traducirlo a otro idioma dejándolo por escrito para la posteridad.
Principales ventajas y desventajas de cada método:

- El compilador presenta la ventaja considerable de la velocidad de ejecución al no tener que traducir el programa fuente cada vez que es ejecutado.
- Usando un intérprete el programa se puede mover de una plataforma a otra más fácilmente, produciendo resultados iguales en (Windows, Linux, Mac, PS3, etc…)
- Se requiere un compilador para cada lenguaje de programación.
- En la actualizad, uno de los entornos más comunes de uso de los intérpretes es Internet, debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma. . 

Eso es todo, espero no haberos aburrido con tanta teoría. En el siguiente artículo de programación indagaremos más profundamente en los lenguajes de alto nivel con programación orientada a objetos.

ARTÍCULO - El origen de las máquinas computadoras

Las máquinas existen desde que el hombre es hombre. Nos complementan como extensiones de nuestros propios cuerpos y nos permiten ir más allá de nuestros límites. Por ejemplo: una tenaza es una prolongación de nuestra mano que nos permite coger cosas con mucha más fuerza, una cerbatana es una extensión de nuestra boca y nos permite lanzar dardos a gran velocidad y abatir a un animal, un telescopio es una extensión de nuestro ojo, etc.…
Este tipo de máquinas que acabo de mencionar son las denominadas herramientas, que necesitan de una acción por parte del ser humano para funcionar.

"Las computadoras son una extensión de la mente del ser humano"









Artículo por: Asensio López Fernández 

    Nuestro cerebro al igual que nuestro cuerpo tiene límites, y de ahí nació la necesidad de hacer algo que nos permitiese calcular e incluso recordar. Haremos un pequeño paseo a través del tiempo parándonos tan solo en los hitos más importantes.

Al principio de los tiempos, con las primeras transacciones comerciales, el hombre tuvo la necesidad de calcular cantidades importantes de mercancía o del medio de pago utilizado. Para ello comenzaron usando el método más primitivo que se nos pueda pasar por la cabeza, hacían los cálculos a base de hacer montoncitos de piedras. Pero este método era complicado para mantener los datos y para transportarlos, fue por ello por lo que exprimieron sus primitivos cerebros e inventaron el ábaco. 
"Ábaco"
El ábaco se remonta a las civilizaciones Griega y Romana; consta de un marco rectangular en el que se montan diversas varillas. Dichas varillas contenían pequeñas piedras circulares agujereadas y ensartadas previamente. Las posiciones de las piedras representaban los valores almacenados. Sin embargo este elemento no puede ser considerado una computadora, ya que no dispone de su elemento fundamental: un programa.
Y para que veáis que no voy a ser demasiado pesado, vamos a saltar desde la época greco-romana directamente en vuelo Charter hasta la década de 1640, cuando el señor Blas Pascal inventó la Pascalina. 

Blas Pascal era hijo de un importante recaudador de impuestos en Francia. Debía ayudar a su padre con las cuentas continuamente en vez de estar por ahí de fiesta con sus colegas, así que Blas decidió crear una máquina de calcular que le ayudase a automatizar el trabajo y a asegurar la fiabilidad de los datos. Inspirado en el diseño de un sistema de engranajes diseñado siglos antes por Leonardo Da Vinci, el amigo Blas Pascal creó su máquina calculadora: la Pascalina. 
Los datos en la Pascalina se representaban mediante las posiciones en los engranajes, y se introducían manualmente estableciendo dichas posiciones finales de las ruedas, parecido a como leemos los números en el cuentakilómetros de un vehículo actual. 
"La pascalina"
Tras la Pascalina, muchos científicos se esmeraron en construir sus propias máquinas de calcular, pero como no son tan famosos y no hay ningún lenguaje de programación que lleve su apellido, nos teletransportaremos en el tiempo hasta el siglo diecinueve, cuando Charles Babbage, el llamado “padre de la computación”, creó la primera computadora.
"Charles Babbage"
Charles Babbage fue un profesor matemático de la Universidad de Cambridge. Consciente de que la elaboración de las tablas matemáticas era un proceso tedioso y propenso a errores, decidió crear la que sería la primera computadora de la historia: la máquina analítica. 

Allá por 1823 y con apoyo del gobierno británico se embarcó en la elaboración de un dispositivo mecánico capaz de efectuar sumas repetidas llamado la máquina de diferencias. 
Pero llegó a sus oídos que un fabricante de tejidos francés, apellidado Jacquard, había creado un telar que podría reproducir automáticamente patrones de tejidos leyendo información codificada en patrones de agujeros perforados en tarjetas de papel rígido. Fue entonces cuando decidió abandonar  la máquina de diferencias y dedicarse al proyecto de  la máquina analítica que se podría programar con tarjetas perforadas para efectuar cualquier cálculo con una precisión de veinte dígitos.
La tecnología de la época no estaba preparada para hacer realidad sus ideas. El mundo no estaría listo hasta cien años después, sin embargo el amigo Babage continuó perfeccionando su diseño hasta el día de su muerte en 1972.

Fue Ada Lovelace, hija del poeta inglés Lord Byron, la primera persona que ejecutó un algoritmo para la “máquina analítica” y describió por primera vez un lenguaje de programación de carácter general interpretando las ideas de Babbage. Aunque esto lo veremos en otro artículo dedicado a la historia de los lenguajes de programación.

En tiempos de guerra, la tecnología marca la diferencia


Es una verdadera pena ser conscientes de que cuando más se esfuerza el ser humano es cuando lucha contra si mismo.
Ya entrada la segunda guerra mundial, debido a la necesidad de obtener rápidamente los cálculos de las trayectorias de los proyectiles de artillería, se crearon máquinas calculadoras automáticas de las que cabe destacar la IBM ASCC, también conocida como Harvard Mark 1. Un verdadero monstruo de 17 metros de largo por 2 y medio de alto. Esta máquina no está considerada como computadora electrónica debido a que no era de propósito general y su funcionamiento estaba basado en dispositivos electromecánicos llamados relevadores.
"La Harvard Mark 1"
Ya en 1947 se construyo, en la universidad de Pennsylvania la ENIAC, que fue la primera computadora electrónica. Tenía la capacidad de realizar cinco mil operaciones aritméticas en un segundo.
El proyecto, patrocinado por el departamento de Defensa de los Estados Unidos, culminó dos años después, cuando se integró a ese equipo el ingeniero y matemático húngaro John von Neuman. Las ideas de von Neumann resultaron fundamentales para su posterior desarrollo.
" Hola soy Von Newman y me tapo la calva con el flequillo"
El equipo de la ENIAC con Von Neuman a la cabeza diseñaron la EDVAC. La idea fundamental de von Neumann fue permitir que en la memoria coexistan datos con instrucciones, para que entonces la computadora pueda ser programada en un lenguaje, y no por medio de alambres que eléctricamente interconectaban varias secciones de control, como en la ENIAC.
En realidad EDVAC fue la primera verdadera computadora electrónica digital de la historia, tal como se le concibe en estos tiempos y a partir de ella se empezaron a fabricar arquitecturas más complejas.

John Von Newman redactó una serie de reglas hoy conocidas como "el modelo Von Newman" para la creación de computadoras, que sigue siendo válido hasta nuestros días. De acuerdo con el, una característica importante de este modelo es que tanto los datos como los programas, se almacenan en la memoria antes de ser utilizados. Hay quién le considera el padre de la computación moderna junto con Babbage.
La UNIVAC fue la primera computadora producida comercialmente.


La UNIVAC no fue construida para un propósito militar, sino que fue diseñada para la oficina de Censo en 1951, por los ingenieros que crearon la ENIAC. La computadora no era de bolsillo, pesaba mas de siete toneladas y podía ejecutar unos mil cálculos por segundo, además era capaz de procesar los dígitos en serie.

Y llegó el transistor

No me refiero al que tiene papá para escuchar la radio, sino a ese pequeño dispositivo electrónico semiconductor que cumple las funciones de amplificador, oscilador, conmutador o rectificador.
"Esto es un transistor"
Allá por la década de 1950 las válvulas de vacío fueron suplantadas por los transistores, consiguiendo de este modo elementos lógicos mucho más pequeños, así como los espacios entre ellos, por lo que la fabricación de la máquinas resultaba más barata. Pensad que una válvula de vacío podía tener el tamaño de un cartucho de escopeta aproximadamente, mientras un transistor podía equipararse en volumen con una lenteja. Además el consumo de energía de un transistor era considerablemente menor, unos 10 voltios por los 300 de una válvula de vacío. Los transistores son normalmente de silicio, por lo que tienen una vida útil prácticamente ilimitada.
En definitiva el desarrollo de los transistores propició la aparición de máquinas cada día más perfeccionadas.

Circuitos integrados

A finales de la década de 1960 apareció el circuito integrado, que posibilitó la fabricación de varios transistores en un único sustrato de silicio en el que los cables de interconexión iban soldados. El circuito integrado permitió una posterior reducción del precio, el tamaño y los porcentajes de error. 

El microprocesador se convirtió en una realidad a mediados de la década de 1970, con la introducción del circuito de integración a gran escala y, más tarde, con el circuito de integración a mayor escala , con varios miles de transistores interconectados soldados sobre un único sustrato de silicios

El futuro está cerca

Gracias al uso de microcircuitos con inteligencia, en futuras generaciones las computadoras tendrán la capacidad de aprender, asociar, deducir y tomar decisiones para resolver problemas gracias al uso de microcircuitos con inteligencia. Esta será la generación de la inteligencia artificial.

Realidad o ficción?

En la universidad de Surey, Inglaterra, creen que en el futuro la clave será la LUZ. Según su equipo de investigadores, será posible crear un dispositivo óptico de computación que se aproveche de la velocidad de la luz y de su gran capacidad para transportar información... En la película K-Pax el protagonista viajaba a través de los rayos de luz.

Por otra parte, en el instituto de bioquímica Maxplanck, cerca de Munich, han conseguido hacer que el silicio interactúe con tejidos vivos. La tecnología neuroelectrónica abre una via de comunicaciones entre computadoras y células. El primer "neurochip" ha consistido en fusionar y hacer que trabajen juntos un microchip y las neuronas de un caracol... Podría ser esto una avance en la cura de enfermedades neuronales en humanos?

ARTÍCULO - ¿Por qué elegir Game Maker ?

Existen muchos programas que nos facilitan la ardua tarea de de programar Videojuegos. Últimamente, con el auge de nuevo del 2d, gracias a las nuevas plataformas de destino como son smartphones, tablets, etc.. Han surgido o resurgido muchos motores para videojuegos en dos dimensiones, con la clara misión de convertirse en multiplataforma. Algunos de estos motores nos permiten crear videojuegos sin picar absolutamente ni una linea de código, y permiten exportarlos a Android, iOS, Mac, Html5 y o Flash.

"Game Maker es la suite de desarrollo de videojuegos 2d más usada por la comunidad Indie"







Escrito por:  Asensio López Fernández



    Yo, como tantos otros, he tenido que decidirme por un software para la creación de algunos de mis proyectos en 2d, y no eran pocas las alternativas:
GameMaker
Multimedia Fusión
Construct 2
Stencyl
GameSalad
Otros...

Mi elegido ha sido GameMaker, y voy a tratar de razonar dicha elección.
Es el más veterano de todos y la experiencia siempre es un grado. Tiene varias comunidades en español como son: comunidadGM y GameMaker Pro. Hay gran cantidad de tutoriales por la red y de videotutoriales en youtube; sin duda de los mencionados anteriormente es el que más tiene, con diferencia, en el idioma de Cervantes.
Tiene un poderoso lenguaje interno que nos permite programar cualquier cosa, por si se nos queda corto el sistema de eventos y acciones del programa.
Además GameMaker soporta 3d, si bien no lo hace de un modo muy potente, nos puede permitir darle algunos detalles interesantes a nuestro proyecto, aunque para videojuegos 3d, lo mejor es ir a lo seguro, y potente: unity3d.
Puede ejecutarse desde Windows o Macintosh y permite crear aplicaciones para PC, Mac, Android, iOS, Html5 y Windows 8.

La versión máxima del programa vale sobre 450 euros, un precio que me parece irrisorio para lo que ofrece, así que id ahorrando el dinero que os da mamá para el fin de semana.
De cualquier modo tiene versiones más baratas, si solo queremos exportar a Android, Html5 o iOS exclusivamente. Incluso tiene una versión solo para Pc y Mac por menos de 50 euros. Mi recomendación es que bajes la versión libre, y pruebes el programa para compararlo con el resto de tocayos suyos.

No digo que los descartados sean malos, nada más lejos de la realidad.

GameSalad por ejemplo, es una buena elección. Fue creado originalmente como un GameMaker para Macintosh, pero desde hace poco existe una versión para Windows. La versión de Mac tiene varias plantillas de proyectos de diferentes estilos que pueden ayudarte a empezar, pero por desgracia en la versión windows no están disponibles. Como ventaja, al menos para los menos dados a la programación, en GameSalad todo puede hacerse mediante reglas, por lo que no hay que picar ni una sola linea de código. Y como desventaja clara, no se puede crear la aplicación para Windows 7, si para el resto de las plataformas que soporta también GameMaker.

Si tienes Linux tu elección deberá ser Stencyl, ya que a parte de poder ejecutarse en Windows y Mac, también puede usarse desde Ubuntu, Linux Mint, etc...

Tanto Construct2, como Multimedia Fusión, al igual que Game Maker, se pueden ejecutar solo desde Windows.
Multimedia Fusión lo descarté porque para juegos web exporta en formato flash, esto tiene sus ventajas ya que nos da como resultado un solo archivo y no varios como Html5, pero el inconveniente es que se debe tener instalado flash player en el navegador para poder jugar a los juegos creados con él.
Construct2 no recuerdo bien por qué lo descarte, creo que no me gustaba el logotipo.