domingo, 26 de septiembre de 2010

Es la programación similar a un juego?

He oído a gente decir que la programación puede ser divertida. Incluso, he dicho que disfruto programar. ¿Es posible decir que la programación es similar a una experiencia de juego desde la perspectiva de los desarrolladores?

En su naturaleza, la ingeniería es algo que funciona como los juegos, por ejemplo:

  • En ambos hay una meta.
  • En ambos hay una manera de perder, que se supone que deben evitarse.
  • En tanto hay un conjunto de posibles acciones que tiene que hacer en cada momento, y la correcta ejecución de estos conduce a la meta.
  • En tanto hay factores que tal vez al azar.

Pero eso es buscar en un punto de vista académico de los juegos, no hablan de cuánto puede disfrutar de la programación, sólo dice que es posible. La programación puede ser vista como un juego, pero bien podría ser sólo un mal partido.

ES ADICTIVA LA PROGRAMACIÓN?

Piense acerca de cómo los juegos más adictivos (o puede ser que deba decir juegos compulsivos). Aquellos juegos en donde no se trata de divertir, sino que son acerca de hacer volver a la gente, no importa si les gusta hacerlo.

La mecánica de estos juegos es simple: se trata de una ruleta. Funciona de la misma manera que la gente se vuelve adicto a los casinos, porque le dan premios al azar con el potencial de ser lo suficientemente grande como para pagar lo que has perdido. Usted simplemente no puede salir del casino porque el siguiente puede ser un ganador.

¿Odiarías que si dejas una máquina de casino sólo para ver que la siguiente persona que se sienta gana el gran premio? Bueno, es posible que lo odies si eso sucede. Es mejor que quedarse allí hasta que gane. Ese es el núcleo de la adicción.

¿Ejemplo de estos juegos? La industria ha aprendido a hacer esto de una manera muy sutil, que ponen monstruos en el juego, que puede o no matar, pero si los matan, entonces soltaran dinero y algunos artículos al azar. Esos artículos al azar tienen un valor (aunque sean virtuales), ya que tomó la decisión y el esfuerzo para vencer a todo un monstruo para conseguirlo! Si es difícil de conseguir, es algo que vas a apreciar.

¿Tiene la programación esta característica? Bueno, sí y no. No es programa pulsando "botón de espada", "botón de espada", "botón de la espada"... Pero hay algunas partes repetitivas de la programación ... que no se deberían repetir mucho.

Pero se puede luchar contra monstruos, que son opcionales en la mayoría de los casos. Estos monstruos son opcionales, ya que puede así descargar algo ya hecho. Ya sabes, no reinventar la rueda. Estos monstruos son los algoritmos y estructuras de datos. Si decide implementar una estructura de datos de una manera reutilizable entonces la aplicación tiene un valor. Tiene valor porque ha implementado todo un algoritmo! y lo que tiene que pagar tiene valor. Aunque a la programación le hace falta es la parte aleatoria, lo que hace que la programación sea menos adictiva que su contraparte del casino.

INMERSIÓN

Inmersión es una característica clave de los juegos de rol. Eso es convertirse en el jugador una parte de la historia. Esto le da al jugador el poder de cambiar el resultado del juego, y ver y disfrutar de los efectos de forma dinámica.

Para tener la inmersión en un juego, usted querría que el juego reaccione con el jugador. Un juego que se comportan como si estuviera vivo, y también que permite al jugador cambiarlo. Estos entornos hace que el jugador se sienta y sea parte de la narración.

Hay dos tipos de entornos de programación que presentan esta característica:

  • Aquellos con un REPL (Leer - Evaluar - Imprimir Loop), como Python, que tienen un insterface similar a una terminal que te permite ejecutar comandos sobre la marcha. Es como el software fueron creciendo a medida que la escribe.
  • Aquellos que, como Visual Basic, que le permiten construir software gráficamente, que aumentar la parte constructiva de nosotros, y suministros de la necesidad de dejar el legado para las generaciones venideras. Es como crear el software de bloques de construcción.

Permítanme mencionar, que cualquier lenguaje puede ser de ese tipo, porque la magia se hace a nivel del compilador, de hecho, actualmente C # es a la vez de los dos tipos que menciono arriba ... en Mono C # tienen un REPL, y en Visual Studio tiene la forma y los diseñadores de diagrama de clase. (En Mono no es un diseñador de formularios también).

COOPERACIÓN Y COMPETENCIA

La mayoría de juegos tienen uno o el otro, para ser justos, los juegos con ambos suelen ser mejores. Cuando se esta en competencia hay aprender a defendernos a nosotros mismos, mientras que se alcanza una meta, este es uno de los objetivo de jugar en la naturaleza, para enseñar a los jóvenes cómo defenderse. Cuando se esta en cooperación también hay que aprender a sobrevivir, sino de un ambiente duro o alguna otra amenaza que se requiere para trabajar en equipo.

Más allá del nivel de los instintos, la Cooperación y el Compettion nos permiten compartir emociones con nuestros compañeros jugadores, que hacen más fuertes los vínculos con ellos, y crean sinergia. Combinado con Inmersión, esto se convierte en una poderosa herramienta para las relaciones humanas.

En la programación se puede tener tanto la cooperación y competencia. A pesar de cooperación es lo que más se promueve en la industria, la competencia nunca desaparecerá. También la competencia en la programación así como la competencia en los entornos físicos se está convirtiendo en una especie de deporte. Por ejemplo, hay competiciones regulares y sitios de Internet dedicado exclusivamente a esta cuestión. Por ejemplo TopCoder y Google Code Jam.

APRENDIZAJE

Lo creas o no, el aprendizaje es una parte crucial del juego. Pero no en el sentido del salón de clases. Tener cosas para descubrir y explorar nos permite desarrollar nuestras capacidades de investigación, y también dar satisfacción a nuestra interminable curiosidad.

Como se mencionó antes, el proposito de jugar es aprender a hacer las cosas. Es habitual que los niños jueguen con versiones de juguete de las cosas que van a utilizar cuando los adultos, tales como automóviles, por ejemplo. Hay algunos juguetes que los padres dan a sus hijos para moldear su comportamiento (incluso si no saben lo que están haciendo, los nuevos juguetes moldean su comportamiento), por ejemplo, hay juguetes para las niñas, que se asemejan a lo que la sociedad espera de las niñas cuando crecen hacia arriba (como la cocina? ... y la elección de un novio que tenga carro?).

Más allá de las imposiciones, los juguetes tienen el poder de enseñar en dos formas:

  • Constructivo: que permite explorar las interacciones y pruposes de las cosas
  • Desctructive: permite explorar la mecánica interna mediante la adopción de ese juguete de distancia.

La programación también tienen ese componente de aprendizaje, usted puede aprender en una forma construtiva, por ensayo y error. O de una manera desctructive haciendo incisiones en el software de código abierto, sólo para ver qué sucede. O de manera más pasiva, con la simple lectura del código.

REPUTACIÓN

Es difícil encontrar algo más atractivo que el de status. La gente tiene una necesidad de encontrar amigos, pareja y el apoyo de terceros, esto es una garantía para seguir con vida en la antigua selva. Hoy se trata de conseguir más premios, y un carro mejor. El status es también atractivo para conseguir citas, pero eso es harina de otro costal.

El punto es que todo el mundo quiere un cierto nivel de status, y que es el status? status es la visibilidad de los monstruos que has matado, por lo que todo el mundo sabe que eres alguien. Es decir que tienes un nombre.

Construir una reputación en el software suele ser muy difícil, el usuario final no le importa, porque para ellos eres poco más que el nombre detrás de la función. Pero entre los desarrolladores la cosa es un poco más fácil. Pero pensemos en esto ... si quiero reputación debo mostrar lo que he hecho, y eso significa que otros puedan aprender de él, e incluso tomstlo para su beneficio.

Es un decisión difícil para muchos. ¿Quieres compartir tu código fuente?

Si lo haces ... ¿te dará dinero?

Puedo asegurar que te dará fama y que lo disfrutarás. Acerca de dinero que no puede estar tan seguro, pero no le hará daño revelar sólo algunas cosas y mantener otras cerrados del público.

CONCLUTION

La programación no puede tener todos los componentes de un juego, pero tiene las necesarias para permitir que la gente lo disfrute. Todavía faltan algunos aspectos importantes, como puntuaciones. Pero está comprobado que todo es comunidad y la magia entorno de desarrollo. No es sobre el hardware o el idioma que elijas, pero las herramientas y la gente que va a hacer La diferencia entre disfrutar o odiar programación.

domingo, 12 de septiembre de 2010

¿Que hay de malo en Mono?

De acuerdo con un articulo (en inglés) escrito por Richard Matthew Stallman, hay algo peligroso en "depender" en C#.

Puede resultar curioso que Stallman se preocupe por la dependencia en un lenguaje de programación en particular, pues el lenguaje de programación se puede cambiar a otro y obtener el mismo software (incluso idéntico a nivel binario, con algo de ayuda del compilador). Muy a pesar de esto, según dice Stallman en el citado articulo, "El riesgo" es que Microsoft quiera someter las implementaciones de C# bajo una patente.

En mi opinión si algo de esto llegara a ocurrir, el menor de los problemas seria cambiar el lenguaje a otro equivalente. Sin embargo la verdad es que esto no va a llegar a ocurrir.

¿por que Microsoft no patentará C#?

Si hacemos algo de memoria, recordaremos que .NET es un estándar, sin embargo, algo menos sabido es que C# esta registrado ante ISO, tal como una pequeña busqueda en Internet lo puede demostrar.

Microsoft no puede hacer esa patente porque:

  1. Microsoft ha registrado C# ante ISO.
  2. Ya existen implementaciones de terceros.
  3. Pueden demandar a Microsoft por monopolio.
  4. A Microsoft le conviene que existan otras implementaciones de C#, para atraer desarrolladores a Visual Studio.

Tal vez lo que le preocupa a Stallman es que no digan "estándar libre" sino "estándar abierto". Pero Stallman como la comunidad de software libre deben entender que no hay tal cosa como un "estándar libre" porque si todos tienen derecho a modificar y adaptar el estándar a su gusto entonces ya no es estándar. En el mejor de los casos podemos decir que es una recomendación técnica, una sugerencia o una guía.

Puede ser que lo que molesta a Stallman sea que Debian este utilizando Mono, que Mono sea de Novell y que nadie utilice DotGNU. Mono no esta en contra de la política y filosofía GNU, y Stallman lo sabe.