Las buenas costumbres no hay que perderlas. Es por ello que sigo jugando al fútbol y la pachanga del lunes forma parte de un ritual al que no se puede faltar. Como toda buena pachanga, no vamos con un portero fijo sino que nos vamos rotando cada 7 minutos con un orden que sorteamos al llegar. Aquí se pueden aplican distintos métodos para realizar el sorteo:
Seguramente existan más variantes pero para el objetivo que nos ocupa es suficiente. La cuestión que hoy nos trae es que cualesquiera de estos métodos consumen un tiempo que podríamos emplear en jugar al fútbol. Así que pretendemos que la tecnología nos ayude a crear una aplicación que nos genere al azar el orden en el que los jugadores se turnan como portero antes del partido. Ya que estamos aprendiendo a programar, qué mejor que buscar un problema sencillo y abordable con el que empezar en este mundillo.
Como decía en capítulos anteriores, saber programar es cuestión de saber expresar un problema en unos términos que entienda un computador. Imaginaos que tenéis que aterrizar un avión sin tener ni idea y que tenéis a un piloto dándoos instrucciones por teléfono. En este caso no haréis nada a menos que se os den instrucciones muy precisas y actuaréis como máquinas tontas sin capacidad tomar decisiones autónomas. En ambos casos el lenguaje empleado no es lo esencial sino que simplemente es el medio para comunicar un mensaje que debe conducir a que se realice una determinada acción. En este contexto y para poder expresar nuestro mensaje de forma que un ordenador, un móvil o cualquier dispositivo con capacidad de computación lo entienda, debemos tener en cuenta las siguientes características de los computadores:
Dicho todo esto, os planteo un reto que puede parecer hasta más simple que el "Hola Mundo" y que está al alcance de todo el mundo: Describir paso a paso qué tiene que hacer una computadora para realizar un sorteo aleatorio que defina el orden en el que 7 u 8 jugadores deben turnarse como porteros. Para ello podéis comentar esta entrada (mira más abajo) proponiendo un orden numerado de acciones que indique a una computadora qué debe hacer paso a paso. Cada acción debe estar definida en lenguaje natural, nada de lenguajes de programación, ni pseudo-código, ni lenguas muertas. Y cuanto más detallado sea el proceso, más cerca estaremos de que una máquina lo entienda y estaremos mejor preparados para construir nuestra pequeña aplicación por fin en un lenguaje de programación. ¿Te atreves?
Nota: a fin de evitar el Spam y los Trolls los comentarios están moderados. La primera vez que realices un comentario, tendré que aceptarlo. A partir de ahí puedes comentar y automáticamente será aceptado siempre que utilices la misma dirección de correo.
Pablo Trinidad 16 septiembre, 2014
Posted In: Aprendiendo a programar, Tecnologería
Imaginaos que un día os levantáis y decidís que queréis aprender a programar. Os puede parecer absurdo, pero ¿acaso no es absurdo que haya personas que fotografíen una tostada y la cuelgue en Instagram?
Lo primero es elegir un objetivo a largo plazo, una visión en la que nos imaginemos creando la reencarnación del PCFútbol, mi propia mascota virtual en el móvil o una web para colgar fotos de tostadas. Claro que a día de hoy no tenemos ni idea, pero esa visión será la que nos ayude a navegar entre las enormes cantidades de información, a superarnos y a elegir en cada momento las batallas adecuadas.
Tu visión personal será la que te ayude a aprender a programar.
Lo segundo es equiparse con todo lo necesario para programar. No queremos que por una mala planificación no podamos avanzar, y no sabemos qué otro día nos levantaremos con ganas. Para programar se necesitan 4 cosas:
Un ordenador adquirido en los últimos 10 años te vale. Y no tengas miedo, la programación no se va a cargar tu ordenador. Descargar películas y libros piratas sí.
La primera decisión de calado es elegir el lenguaje. Muchos habréis escuchado frases del tipo "Java es mejor que C++", "Javascript es el nuevo Java", "Lo mejor para empezar es Haskell" o "Yo programo en Excel". Paparruchas. Los que ya estén familiarizados con el mundo de la informática seguramente conozcan a E.W. Dijkstra [2], una de las voces más influyentes en la informática al que se le recuerda más por su chorrada de algoritmo [3] que por su apasionada obsesión por hacer programas que funcionen correctamente y su postura frente a la enseñanza de la programación. Detrás de los cientos de lenguajes de programación que existen, se encuentran no más de 5 paradigmas diferentes. Dijkstra defendía que el aprendizaje debía dirigirse hacia los paradigmas de programación en lugar de centrarse en los lenguajes. Cuando una persona aprende un segundo lenguaje, empieza ver las relaciones entre ambos y establece patrones comunes. Esos patrones son los que definen un paradigma. De esta manera, un programador que no aprende al menos dos lenguajes que siguen el mismo paradigma es un programador incompleto; y un programador que conoce un paradigma puede aprender un lenguaje en horas.
El objetivo debe ser aprender un paradigma de programación, no un lenguaje.
El primer objetivo en la formación de un programador debe ser el aprendizaje del paradigma de la programación estructurada. Aquí encajan lenguajes clásicos como C o Pascal. Sin embargo el paradigma predominante hoy en día es una evolución de la programación estructurada denominada programación orientada a objetos. Lenguajes como C++, Java, C#, Ruby o Scala siguen este paradigma. Como es deseable aprender varios lenguajes y la programación orientada a objetos introduce elementos innecesarios para las primeras etapas del aprendizaje, el lenguaje elegido será C.
El entorno de desarrollo es la aplicación (o conjunto de aplicaciones) que nos permitirá escribir código en un lenguaje y que de forma mágica consiga ejecutarlo. Será el encargado de hacer realidad nuestros sueños y de darnos a la vez muchos quebraderos de cabeza. Existen multitud de entornos de desarrollo y elegir el adecuado puede ser una tarea ardua. Yo os recomiendo que comencéis a utilizar Eclipse [1]. Escucharéis opiniones en contra y a favor. Mi consejo es que os evitéis debates espúreos y que lo descarguéis y lo instaléis. Es gratuito, está disponible en todos los sistemas operativos y soporta múltiples lenguajes. Así si un día cambiáis de ordenador o aprendéis un nuevo lenguaje, el trauma por cambiar de entorno será casi inexistente.
La definición de "buen libro" puede ser tan subjetiva como la de "mejor equipo de fútbol" o la de "mejor plato". Hay muchas posibles decisiones y cada persona recomendará uno distinto (algunos incluso a sabiendas de que es malo). Sólo hay una cosa peor que tomar una mala decisión y es no tomarla. Así que dejémonos de debates estériles y vayamos a hablar de EL LIBRO [4] de Herbert Schildt, para mi gusto el mejor escritor de libros didácticos de programación. Un libro con más ejemplos que texto no puede ser malo. Además obliga al lector a poner en práctica los conocimientos y a relacionarlos de forma constante, ofreciendo soluciones a todas las preguntas que plantea. Tiene libros de otros muchos lenguajes como C++, Java o C# que siguen la misma metodología y que son realmente buenos.
Este aspecto es más importante que cualquiera de los anteriores. Debes creerte capaz de hacer cosas y pensar en que algún día realizarás tu visión. Pronto aprenderás que los retos más difíciles pueden resolverse con facilidad y la mayor chorrada puede suponerte un enorme obstáculo. Pero al final todos los problemas se resuelven y la recompensa debe merecer la pena. Invierte tiempo en buscar tu motivación.
Muy fácil: equípate. Hazte con un ordenador, instala Eclipse CDT [1], localiza ese libro y dibuja tu visión. Pronto volveré con retos que espero que os motiven.
[1] Eclipse CDT.
[2] Puedes leer algo más sobre E.W. Dijkstra aquí.
[3] Si quieres saber qué es y para qué sirve el algoritmo de Dijsktra echa un vistazo aquí.
[4] Herbert Schildt. "C: Guía de autoenseñanza". Ed. McGraw-Hill 2001, ISBN 9788448132040. Lo podéis encontrar en la mayoría de bibliotecas universitarias.
Pablo Trinidad 6 septiembre, 2014
Posted In: Aprendiendo a programar, Tecnologería