Aprende a Programar [Guia Propia] Parte 1 - Resubido

Solo


Ok, ok. Se que el título de este post es tremendamente sensacionalista, algo extremo y hará que más de alguno entre a este post para colocar la imagen de No lei un Cara**, pero me arriesgare.


Dando vuelta por Taringa, me di cuenta de que, a pesar de estar lleno de manuales sobre lenguajes de programación (C, C++, Java, PHP, ASP, .NET, etc), muy pocos post se enfocan a dar información para las personas que les interesa adentrarse en el mundo de la programación y desean saber como hacerlo y por donde partir.

Es por esto que hoy, doy inicio a un post polémico y complicado que espero hacer muy completo y lo más simple que se pueda sobre como aprender a programar, desde una introducción con los conceptos más básicos hasta entrar de lleno a la programación en sí.


Hago este post pues al ver el post de @emmaremix vi que muchos no sabian por donde empezar, y aqui les enseño todo con mis palabras para que puedan avanzar a crear sus juegos con el gran maestro que es @emmaremix.

Lo que busco en el fondo es que quienes esten interesados, a través de este post puedan aprender a programar y no solo aprender a hacer programas.

¿Están listos?, el viaje es largo y hoy solo es el posible primer post, así que busquen algo para comer, para tomar, armen una mochila de campamento y empaquen un par de calcetines, ya que nadie sabe lo que nos espera por delante.
[/b
]

usted



taringa


Antes de comenzar, para dejar todo bien claro:

Yo no soy ni gúru ni profesional de la programación, por lo que no me atreveria a ofrecer este post como un método seguro llame sha, 100% garantizado, un abdomen mas plano en 7 días ni infalible. No utilizo ninguna guía ni manual oficial para redactar esto, pero lo hare lo más completo posible, a partir de las experiencias personales de como aprendi a programar e intentare traspasar todo eso en las siguientes líneas, por lo que están en todo su derecho de disputar los contenidos de este y los post siguientes y obviamente de seguir sus propios métodos si los estiman convenientes.



Con eso claro, veamos lo que cubriremos en la primera parte de este post:

Contenidos:

¿Qué es la programación?.
¿Qué necesito para aprender a programar?.
Primeros pasos para aprender.
Los algoritmos: la base de todo.

Puede parecer poco, pero creanme que no lo es. Así que ya con todo eso definido, no hay más excusas, vamos. Esto es como andar en bicicleta, una vez que se aprende nunca se olvida.

1.- ¿Qué es la programación?

Hum… que pregunta más amplia. La verdad es que definir que es la programación puede enfocarse desde una serie de aspectos: Desde uno netamente técnico hasta uno más abstracto o conceptual, pero veamos.

Mirandolo desde un aspecto netamente técnico o computacional, la programación es la realización de programas (dah!), es decir, la realización de una serie de instrucciones que interactuarán tanto con el hardware de nuestro computador, como con otras aplicaciones y/o el usuario que las maneje.

En aspectos más simples aún, al programar en la mayoría de los casos lo que hacemos queda tan reducido como a preparar una serie de instrucciones y operaciones que nos permitan hacer una recolección de datos, operar con esos datos de alguna forma y luego presentar una serie de resultados producto de esas operaciones.

Y finalmente mirandolo desde un aspecto más conceptual, la programación se refiere netamente a la resolución de problemas. Cuando programamos lo que queremos hacer es otorgar una solución a una inquietud, abordando aquel problema desde distintos puntos de vista hasta encontrar la respuesta más óptima y/o efectiva. De a poco iremos comprendiendo más esta definición.

En los computadores, todo se maneja a base de números binarios (1’s y 0’s), por lo que cuando por ejemplo queremos realizar una suma, nuestro equipo no entiende si le decimos “suma 2 + 2″ sino que entendería una instrucción o serie de instrucciones en binario que le permita realizar la operación. Por eso cuando nosotros programamos, lo que hacemos es crear un intermediario entre el usuario que usa un lenguaje “real” y nuestro equipo que utiliza un lenguaje “de máquina”.

¿Cómo hacemos esto?, bueno muy fácil (aunque no tanto): Los entornos de programación (tema que abordaremos más adelante en detalle) se encargan de realizar esa traducción de lenguaje real a lenguaje de máquina de las instrucciones que programamos y luego de vuelta la traducción de lenguaje máquina a lenguaje real de los resultados de las operaciones. Así que cuando vemos el resultado “4″ en pantalla es que nuestro equipo ha mandado el mensaje en binario y ha sido traducido por el programa que hicimos.

Hasta ahora hemos visto conceptos algo complejos, pero no se preocupen, de a poco se irán entendiendo y en el fondo si no llegan a entender eso no limitará su capacidad de programación.

2.- ¿Qué necesito para aprender a programar?

Bueno… tiempo.

Hablando un poco más en serio, podemos definir las necesidades en 2 tipos: las físicas y las “personales”.

a) Necesidades físicas:

¿Físicas?, ¿Say what?, ¿Es un concurso de popularidad? ¿Aliens? . No, en verdad por necesidades físicas nos referímos de cierta forma a “implementos reales o computacionales” que se utilizarán para empezar a programar. Para las primeras guías solo necesitaremos de nosotros mismos y a lo más una hoja de papel y un lápiz. (para jugar al gato en los ratos de ocio. No, ya verán porque). Eventualmente cuando nos adentremos más necesitaremos de estas cosas:

Un computador (que si están leyendo me imagino que ya lo tienen).
Un entorno de programación (que dependerá del lenguaje en el que decidamos programar. Ya lo veremos con más calma más adelante).
Una conexión a Internet (no es de vida o muerte, pero si ayuda, si puedes jugar cs 1.6 online basta. ).
Como pueden apreciar, no necesitamos nada de otro mundo. Son cosas que están accesibles a solo unos clicks de distancia (a menos que no tengan computador, ya que no pueden ir clickeando por la vida para comprarse uno. O sea pueden, pero cuesta más). Pero en todo caso no se preocupen por esos ítems aún, ya lo veremos con más calma cuando sea necesario.

b) Necesidades “personales”:

Personales es un término que utilizamos con bastante cuidado, ya que en verdad a lo que nos referimos es a una serie de características y habilidades (natas y/o adquiridas) personales que ayudan mucho en el aprendizaje. Si bien el no tener alguna de estas puede que termine por no ser un impedimento si sirve de mucho tenerlas. Nos referimos a:

Paciencia, y mucha: Y hacemos mucho hincapié en este punto, por eso lo hemos puesto al tope de la lista. La programación puede llegar a ser muy frustrante y en muchas ocasiones podemos quedarnos pegados por un buen rato en la busqueda de una solución a un problema, por muy pequeño que sea. Más adelante daremos algunos consejos sobre esto. Lo importante es tener paciencia y entender que siempre hay baches en el camino, por muy buenos que lleguemos a ser.


Perseverancia: Va ligado netamente al punto anterior. En la programación siempre hay que ser perseverante para poder lograr los objetivos que nos proponemos. En muchas ocasiones nos encontraremos con distintos problemas que van desde: no saber como afrontar un problema, hasta bloqueos mentales o desconocimiento. Saldremos adelante solo siendo perseverantes y solo continuando cuando pensemos que ya debemos tirar la esponja. Estas últimas 2 cualidades es lo que separa a los buenos programadores de los malos. No los conocimientos de lenguajes, sino la paciencia y la perseverancia es lo que los llevará a ser buenos.
Mirar las situaciones desde distintos puntos: Esto es muy útil y nos refleja a nosotros mismos de como enfrentamos la vida. Cuando se nos presenta una situación de cualquier tipo, mientras de más puntos o lados la miremos y obtengamos ciertas conclusiones, aumentamos más la posibilidad de encontrar una buena solución. Debemos siempre tener en cuenta que todas las personas piensan de distinta forma y por lo tanto todos pensamos distintas soluciones y más aún, distintas formas de implementar estas soluciones. Si bien es siempre bueno definir hacia nosotros mismos una metodología para resolver los problemas, es muy útil tener la habilidad de abstraerse y mirar la situación desde otro lado. En más de alguna ocasión con esto obtendremos mejores soluciones que las que habiamos pensado originalmente.


Pensar lógica y básicamente: Algún tiempo atrás, cuando estaba en el instituto, un profesor nos dijo “Señores, les contaré algo que nadie se ha atrevido a decirles hasta ahora: Estas máquinas que están frente a Uds. que son conocidas mundialmente como computadores capaces de hacer cosas que la mente humana no puede, son en verdad tremendamente básicas y tontas”. ¿Curioso, no?. Es una tremenda verdad. Los computadores son máquinas tremendamente estúpidas que saben realizar solo un par de operaciones básicas como cargar, grabar o sumar. Todo lo demás que pueden hacer es, o bien una combinación de esas operaciones, o el producto de otros programadores que han desarrollado aplicaciones que les permiten a estas máquinas realizar otros trabajos. ¿A qué vamos con esto?, a que siempre hay que tener presente lo básico de la forma de pensar de los computadores cuando programamos y por eso muchas veces debemos pensar igual de básico que ellos. Cuando necesitamos encontrar una solución, debemos enfrentar la situación como un computador lo haría sin saber otro tipo de informaciones que nosotros sabemos y debemos diseñar nuestras soluciones de la forma más básica para poder implementarlas.


Ser estructurado: A pesar de que los programadores tienen la fama de ser medios “locos y volados” para encontrar solución a las respuestas, también son tremendamente estructurados. Y es que cuando pensemos una solución a implementar mediante programación, debemos pensarla estructurada de la forma:


Bueno, para hacer esto, primero hay que hacer esto, luego esto, luego esto y finalmente esto. Ese orden y esa estructuración nos irá ayudando a no tener que volver sobre el mismo camino hecho para agregar cosas que deberían haber estado ahí.



Conocimientos matemáticos: Si bien no es extremadamente necesario y no necesitamos ser unos magos de los números, ya que hoy con Internet tenemos acceso a la información de manera rápida y sencilla, si es bueno tener nociones matemáticas sobre operaciones, conocimientos algebraicos, geométricos ya que al programar utilizaremos uno o varios de estos conceptos en ocasiones.


Ser curioso y tener disposición a resolver problemas: La programación nos presenta problemas, problemas y más problemas. Por eso es bueno tener curiosidad de como resolverlos de distintas formas y siempre tener la disposición a encontrar soluciones, en especial la más adecuada. Es nuestra curiosidad y nuestro espíritu de superación lo que eventualmente nos irá convirtiendo en mejores programadores.
Es por esto que en las carreras relacionadas con el área de la computación e informática, previo a la programación siempre nos pasan (muchas veces odiandolo y sin entender bien porque) Cálculo y Álgebra. El primero nos enseña a expandir la mente y mirar los problemas desde distintos puntos y el segundo nos enseña a establecer una estructura de pensamiento. Así que ya saben, a dejar de odiar a esos viejos pelados (¿referencia personal?) que nos llenan de funciones, sistemas de ecuaciones y gráficos.

Y finalmente un detalle a siempre tener en consideración: En la programación, siempre hay más de una forma de resolver los problemas.

3.- Primeros pasos para aprender

Si hemos aguantado leer los primeros extensos parrafos llegamos al punto de: Ok, creo que tengo todo. Ahora ¿Cómo parto?. Bueno partamos con una pregunta que quizás no nos hemos hecho hasta ahora:

¿Cualquier persona puede aprender a programar?

Bueno, si y no. Según muchos “expertos”, hay gente que no sirve para programar. Si bien tienen razón hasta cierto punto creo, sin considerarme en lo más mínimo experto en el tema, que cualquier persona que tenga el interés y deseo de aprender puede llegar a hacerlo. Quizás no se puede garantizar a que llegue a ser realmente bueno, pero creo que teniendo las ganas, la paciencia, la perseverancia y el espíritu de superación se puede llegar muy cerca. Eso y harta práctica, que bueno, como para todo en la vida, nunca está demás.

Entonces, ¿Por donde partimos?, por el principio por lo más básico. Partimos por empezar a preguntarnos ¿Cómo funcionan las cosas?. Me explico: Debemos empezar a entrenar nuestra mente y forma de pensar a descubrir como funcionan las cosas y como se resuelven los problemas. Para hacer esto hay una serie de formas y métodos, pero en el fondo debemos encontrar el que más nos acomode. Desde sentarnos en la vereda y ver como un conductor está haciendo funcionar su automóvil hasta abrir la calculadora de Windows y ver como es el modo de interpretar una operación que le indiquemos realizar. No necesitamos intentar descifrar el procedimiento exacto y detallado, si no que plantearnos esas inquietudes y ver como funcionan.

Por ejemplo, cuando le decimos a la calculadora de Windows que realice una suma y le damos los datos, esta lo que hace es leer los datos que le dimos, interpretar cuales son números y cuales signos. En base al signo, ve la factibilidad de realizar la operación y la hace. Así de “simple”.

Una vez que empecemos a entrenar nuestra forma de pensar de esa manera, podemos empezar a entrar a cosas mucho más concretas como el punto que viene a continuación.


4.- Los algoritmos: La base de todo.

¿Los algo-qué?. Algoritmos. . Wow..

Los algoritmos son la base de la programación. Antes de entrar de lleno, pasemos a una definición:

¿Qué es un algoritmo?

Muchas veces se tiende a confundir un algoritmo con algo netamente computacional o tecnológico. En el fondo no es así.

Un algoritmo es básicamente una lista definida, ordenada y finita que nos indica como resolver un problema determinado (¡Grande Wikipedia!), o sea un how-to bien básico y definido para una operación determinada.

Si no quedó muy claro, utilizare un ejemplo que me ocurrio en el instituto:

El mismo profesor que nos indicó la estupidez de nuestros queridos computadores, el día que nos quisó enseñar lo que eran los algoritmos, nos pidió el primer día de clases y sin darnos explicación alguna que definieramos el algoritmo para hacer un huevo frito.

La cara de duda era unánime en los rostros presentes, ya que todos nosotros, sin experiencia previa, relacionabamos los algoritmos con procesos netamente computacionales, entonces no tenía lógica alguna. Luego nos otorgó la ayuda necesaria diciendonos: “Lo que necesito es que me definan lo que Uds. harían desde un principio para hacer un huevo frito”.

Fue ahí donde nos dimos cuenta que uno puede definir algoritmos para cualquier tipo de procesos, desde los de la vida misma hasta cosas más evolucionadas y tecnológicas.

Ahora, a diferencia de como uno ve los problemas en la vida real, al realizar un algoritmo sobre cualquier cosa, siempre es bueno plantearse los supuestos de cualquier problema que pudiese ocurrir y que soluciones se pueden establecer al respecto.

¿A qué voy con esto?, a darnos cuenta de que los algoritmos son la premisa básica de cualquier solución de programación que vayamos a implementar. Con sus operaciones, sus supuestos, su contingencia y su desarrollo estructurado. Mientras más completos sean los algoritmos que nos planteamos, mejor será nuestra programación propiamente tal.

Veamos un ejemplo, ¿les parece?, ya que después de tanta teoría vamos a marearnos un poco. Viendo la misma historia antes mencionada, intentemos hacer un algoritmo (básico) de como haríamos un huevo frito:

Algoritmo para hacer un huevo frito:

Voy a la cocina.
Saco un huevo del refrigerador.
Saco una sartén.
Pongo un poco de aceite en la sartén.
Hecho el huevo a la sartén.
Lo frío.
Me lo como.

Si bien tenemos los pasos básicos establecidos de forma correcta, podemos empezar a ver de que nuestro algoritmo tiene ciertas fallas, como por ejemplo: ¿Qué pasa si no hay huevos?, ¿Qué pasa si no hay aceite?, ¿Qué pasa si no hay gas?. Pueden ser preguntas y respuestas algo básicas, pero reflejan lo que decíamos de plantearnos supuestos. Cuando programamos siempre tenemos que cubrir todos los aspectos necesarios, ya que por muy bien que conozcamos nuestro programa, el usuario y taringuero puede no saberlo todo, y es por esto que debemos estar preparados para cubrir cualquiera de estas situaciones. Una versión mejorada del algoritmo sería:

Algoritmo para hacer un huevo frito 2.0:

Voy a la cocina.
Veo si hay huevos en el refrigerador.
Si hay, saco un huevo y salto al paso 8
Si no hay, voy a comprar.
Para comprar, voy a buscar plata.
Si hay plata, saco y voy al paso 8
Si no hay plata, no se hace el huevo frito.
Veo si hay gas.
Si hay, prendo la cocina y voy al paso 14.
Si no hay, busco dinero para pedir gas.
Si no hay dinero, no hago el huevo.
Si hay, encargo y salto al paso 14.
Espero que llegue el gas.
Saco una sartén.
Si no hay sartén, no hago el huevo.
Etc, etc.

Creo que la idea se entiende. Si, es cierto, puede parecer excesivo ponerse en todos los supuestos y quizás estemos cubriendo aspectos sumamente extraños, pero mientras más situaciones que puedan ocurrir consideremos y tengamos soluciones presentes para eso, más completo será nuestro algoritmo y por ende nuestro programa.

En el fondo siempre debemos pensar que existe la “mala intención de los usuarios o trolls en Taringa ”, un concepto que más adelante veremos en detalle y que es una de las cosas más importantes a tener en consideración por parte de los programadores.

Es una excelente práctica empezar con el tema de los algoritmos. Empezar a plantearnoslos para resolver distintas situaciones, desde la vida cotidiana, hasta situaciones computacionales, linguísticas, de lógica, matemática, en realidad para todo. Siempre que hay un problema, hay un algoritmo que se pueda realizar para encontrar la solución.

Así que los insto a practicar un poco este tema, mientras yo voy desarrollando la que será la segunda parte de este post para aprender a programar y no morir en el intento.


Por ahora lo dejare hasta aquí, ya que he cubierto los aspectos más básicos y necesarios y han leído bastante. Es momento de descansar la vista un poco y seguir pensando, que es la mejor práctica posible.

Si se interesaron en mi post, quizas haga muchas mas partes de “Como aprender a programar y no morir en el intento”, las cuales pueden llevar:

Áreas de memoria alias “Como almacena la información una máquina”.
Introducción al Pseudo-código.
Haciendo nuestro primer programa.
Todo, a la misma batihora, en el mismo baticanal.


Como siempre, este tutorial ha sido desarrollado mediante mis conocimientos en la programacion , por lo que cuenta con mi, siempre seguro, con un poquito de gusto a limón y establecido Sello de Garantía. Cualquier problema, duda o comentario, sientanse libres de realizarlos en los comentarios y/o mandenme un MP. Asistire sus dudas a la brevedad posible.

No hago este post con el fin de ganar puntos, solo lo hago para que tengan una base estructural en programacion y puedan de ahi en adelante crear sus juegos, programas, y quien sabe? quizas su sistema operativo que compita con Windows .


Y recuerden, que pronto, conocerán a sus “mentes maestras”.

Espero que este post haya sido de utilidad para Uds.

Muchas gracias por leer y será hasta una próxima oportunidad.