¿Cómo empezar en la programación?

21 comments | in | about Gamedev | mayo 22, 2014

Hoy he recibido uno de esos correos que te ilusionan. Se sale del típico correo de alguien que te pide que le hagas sus prácticas de programación o le diseñes su logo por la patilla. Un chaval de 13 años, con muy buenas formas y destilando motivación y ganas, me hacía la siguiente pregunta: ¿Cómo empezar en la programación?

La verdad es que no creo ser el más adecuado para responder. Aunque siempre he estado a medio camino entre la programación y el diseño, últimamente me he decantado más por este último. Supongo que ha llegado hasta mí a través de mi tutorial del Tetris o el del editor de pantallas.

Sea como sea, me he propuesto ayudarle. Y la mejor forma es dejando a todos que participéis dando vuestra opinión.

He aquí el correo en cuestión

Buenas Javi:

Sé que esta/s en Japón y espero no molestarte con mi correo. Soy un chaval de 13 años y llevo desde pequeñito enganchado al ordenador, jugando, investigando sobre tecnología… aprendiendo al fin y al cabo. Actualmente sé bastante de hardware y de software para mi edad, me encanta mirar en blogs, páginas de informática…

Respecto a la programación se que se basa en el uso de algoritmos y variables, y que se usan lenguajes tales como Java, C, C++, Javascript, HTML… En el diseño de videojuegos, se que está por una parte el diseño y modelado 3D y programación. Además es necesario un motor gráfico que es lo que «une» estos dos aspectos. Actualmente, estoy investigando y curioseando mucho sobre los motores gráficos de distintas compañías, y de sus capacidades.

Eso es lo que me gustaría aprender, un poco de todo, y ya después especializarme en ello. Sé que es un proceso de aprendizaje muy difícil, pero me considero capaz y con la suficiente fuerza de voluntad. Tengo claro que de mayor estudiaré informática, ya que me encanta, y en especial la programación que me resulta muy interesante y útil.

Después de haberte/le escrito esto, solo quería hacerte/le una cuestión: ¿Por dónde y cómo empiezo? Ya que es tan amplio me gustaría que me guiaras/ase para empezar (qué lenguaje, o si es mejor que mejore mi nivel de matemáticas, que aprenda sobre la programación en general… Lo que sea). Y si es posible, dónde lo podría aprender.

Me he decidido a escribirte/le, ya que no sé cómo he llegado a tu/su página web y he visto que decía/s que hay que devolver a lo comunidad lo que se ha aprendido de ella.

Gracias por leer y espero tu/su respuesta.
Juan Antonio.

Mi respuesta

Muy buenas Juan Antonio,

Muchas gracias por tu email, me ha hecho mucha ilusión 🙂 También me he sentido un poco un dinosuario. ¡Cómo pasa el tiempo! Parece que fue ayer cuando con 9 años abrí un libro de Basic por primera vez y copié línea a línea mi primer programa en el MSX… ¡batallitas del abuelo!

Antes de nada, yo ahora mismo no ejerzo como programador en el día a día. Más bien trabajo como diseñador o resolviendo marrones varios. Pero siempre he estado a medio camino entre ambas cosas.

Bueno, al grano. Llevas mucho ganado con:

  • La motivación que desprendes con tus palabras. Es imprescindible.
  • Lo bien que te expresas y estructuras la información en tu email. Apuntas maneras 🙂
  • Google, internet, lenguajes orientados a objetos… cuando yo tenía 9 años nada de eso existía. Ahora aprender es más fácil. Hay mucha más información disponible y la programación ha avanzado mucho. Ahora está al alcance de muchos. Yo lo único que tenía era un libro de Basic que tenía tintes míticos en mi imaginación. Cuando lo habría me sentía como Bastian en la Historia Interminable o un arqueólogo a punto de leer sobre Cthulhu en el Necronomicón. ¡Aprovecha la información disponible!

Algunos aspectos importantes que necesitas son:

  • Alto nivel de inglés. Ponte a tope con eso. Cuando busques en Google, procura hacer tus búsquedas en inglés. Y si ves series o películas, míralas en inglés con subtítulos en inglés.
  • Perserverancia. La motivación está muy bien, pero sin constancia no se va a ningún lado.

Sobre por dónde empezar:

Aquí cada uno tiene su opinión. Yo diría que busques un equilibrio entre lo que más te motive y un lenguaje que te aporte las nociones básicas de programación. Empezar con un motor gráfico de juegos es demasiado ahora mismo. Pero con cualquier otro lenguaje puedes hacer cosillas visuales que te motiven, como pequeños juegos, etc.

Gallir, creador de Menéame, dio hace poco unos consejos sobre cómo aprender a programar bien. Así que según Gallir, deberías empezar por el lenguaje C. Yo no lo tengo tan claro, la verdad. Con C las opciones de que te desesperen rápido son grandes. Aunque claro, si te desesperas a las primeras de cambio, es que esto no es lo tuyo. Yo creo que tu tienes motivación de sobra, así que igual deberías empezar por C.

Por otro lado, y que Gallir me perdone, quizás podrías empezar por Java. Es un lenguaje totalmente orientado a objetos, con lo que antes de nada vas a tener que aprender qué son los objetos y quizás eso es empezar en una capa de abstracción demasiado alta… pero tiene un entorno de desarrollo bastante agradable (Eclipse) y no te va a desesperar tanto en tus inicios como C. Vas a ir seguramente más rápido.

También puedes echarle un vistazo a Python: que es muy agradable porque con relativamente poco código se consiguen muchas cosas y se avanza rápido.

Siento no poder ser más claro al respecto. Lo importante es que empieces. Yo comencé con Basic (para MSX) que es el anticristo de los lenguajes de programación y estoy vivo. Lo importante es ponerse en marcha. Si quieres considerarte un buen programador tienes que pasar por varios lenguajes a lo largo de tu vida.

Sufrir, ensuciarte las manos… primero hay que echar a andar para luego poder correr.

Sobre programar juegos

En mi opinión, Unity3d es lo mejor ahora mismo con diferencia para el pequeño desarrollador. Pero es pronto para ti, no porque sea complicado, sino porque es mejor que antes adquieras algunas nociones básicas de programación.

Eso sí, puedes ir ya haciéndote miembro de la comunidad Stratos y Tigsource.

Tutoriales y ayuda sobre la mayoría de los lenguajes

Google y la lista de Programming Motherfucker.

¿Dónde hacer preguntas?

Por ejemplo en Stack Overflow, pero tus preguntas, al menos durante los 3 primeros años de aprendizaje, ya estarán respondidas en internet y podrás buscar normalmente en Google.

¿Qué lenguajes son los más populares?

Mira aquí: Programming Language Popularity.

Lecturas recomendadas

¡Mucho ánimo! ¡Mantenme al tanto de por donde vas!

Vamos a ayudar a todos los «Juan Antonios» que hay ahí fuera

Como podréis ver con mi respuesta, bastante inconexa, el chaval no ha acertado en quién preguntar 🙂

¿Podríais dejar un comentario y ayudarle? Seguro que muchos tenéis una opinión más clara y acertada que la mía. Echémosle una mano a todos los chavales que están como él, ansiosos por aprender. Es lo mínimo que podemos hacer.

¡Gracias!

Comentarios (21)

  • Este chaval es un crack! 🙂 Pone tildes y todo! Voto por mecenar a este hombrecito 😛

    Eso si… tu le acabas de joder la vida… xD Java? Seriously? que se ponga con PHP mejor no? xDDD Lo mejor que puedes hacer querido Juan Antonio es dejar esas chorradas de programar y ser un buen sysadmin 😛

    Estaré atento a este hilo, tiene pinta de que sera muy interesante

    22 de mayo de 2014
  • No hagáis casos a @zordor, que lo más complejo que ha programado es un «Hello World». Y encima no me acompaña a comprar el mac a Akihabara. Troll!

    22 de mayo de 2014
  • Hace no mucho Ricardo Galli hablaba sobre el tema:

    https://storify.com/gallir/uno-consejos-para-los-interesados-en-programar-bie

    Aconseja para empezar el Python. En algún momento todo programador tiene que conocer el leguaje C. Pero igual no es el mejor para empezar.

    22 de mayo de 2014
  • Déjame adivinar @Javier, hiciste una lectura diagonal del texto, ¿eh? 🙂 ¡No pasa na’! Culpa mía por enrollarme tanto. Simplemente lo digo porque lo menciono en el artículo y hay un link justo a donde comentas.

    22 de mayo de 2014
  • Desde mi punto de vista (y he hecho una lectura bastante diagonal) tus consejos no son malos.

    Por donde empezar (lenguaje) es elección de cada uno.

    En nuestra empresa hemos estado comentando este mismo tema durante un tiempo y el equipo de engineering salió con unas conclusiones bastante aceptables desde mi punto de vista:

    – Tienes que saber C, todo usa C, C is a must.
    – Tienes que saber Java. Java se usa en todas partes, hay muchísimo code en Java y saber entenderte en ese entorno es importante
    – Python/Ruby Python porque induce a buenas prácticas, ruby porque enseña el valor de la expresividad del código.

    Obviamente ser expresivo en el código no es un must cuando estás empezando, pero cuando te estás «profesionalizando» es muy importante.

    Obviamente hay muchas más elecciones ahí fuera, pero creo que empezar por esos 3 es un buen criterio.

    PD:
    Desde mi punto de vista y siendo programador PHP a tiempo completo, empezar por PHP es un killer para tu formación.

    PHP es un buen lenguaje, como muchos otros, y se utiliza muchísimo en el entorno web pero siendo objetivos y sinceros es muy difícil empezar con PHP y adoptar una serie de buenas prácticas y de «apertura de mente».

    Para eso solo hace falta ver 2 hechos:
    – Los ejemplos de código de los usuarios que hay por internet y en la documentación oficial.
    – Que tenga que existir esta página http://www.phptherightway.com/ para intentar incentivar el buen código en PHP.
    Aún así. si alguien quiere empezar por php que se sienta libre de hacerlo.

    De hecho yo empecé así y no me va del todo mal (eso sí, estoy haciendo muchas horas «extra» para intentar ponerme al día en C, Java y python.)

    22 de mayo de 2014
  • 🙂 He encontrado esta entrada en tu twitter, y aunque me han gustado tus suggerencias, quiero decir la mía.

    En primer lugar, el clásico:

    ** Aprender a programar != Aprender un lenguaje de programación!! **

    Vale, en primer lugar admito que está bien aprender un idioma de programación «sencillo»y a programar a la vez. Pero hay conceptos y nociones que són indispensables y casi siempre independientes del idioma de programación.

    Conceptos-nociones:

    -Que es programar – que es un ensamblador? conjuntos de instrucciones x86 o arm? que es «compilar»? «no puedo hacer un .exe directamente? Librerías?
    -> (esto te lleva a) lenguajes de bajo nivel – lenguajes de alto nivel.

    – Nociones de programación en sí:

    VARIABLES
    — Declaraciones de variables.
    — Variables globales vs variables locales.
    — Tipos de variable
    — Maneras de guardar las variables (Aquí entramos en cosas que quizás este chico aún no ha dado, Arrays o listas que no dejan de ser matrices). En el caso de los arrays es importante el tema de si es índice 0 o índice 1 el primer elemento!

    Operadores/loops
    — IF / FOR / WHILE / «go to»/ SWITCH
    — funciones, se les pasa «parámetros», hacen cosas y devuelven ( o no) variables.

    OBJETOS, CLASES (si quieres)…

    Se que esto puede desanimar a un chaval de 13 años. Me desanima hasta a mí! Pero la teoría es necesaria, y aprenderla correctamente evitará muchos errores y frustraciones a la larga.

    Luego, la elección de «primer lenguaje de programación».

    Sobre lo que dijo Gallir estoy medio de acuerdo y medio desacuerdo.

    C es un lenguaje de programación que puede ser poco amigable, muy estricto en declaración de variables y semántica, y con bastante antiguidad. Pero es muy potente (aunque poco versátil a veces), esto si lo has usado se puede ver, un lenguaje de añazos que sigue vivo en la industria.
    Vamos, cómo era BASIC. Yo empezé con QBASIC! Que recuerdos 🙂

    Por esos motivos, C es un buen y mal idioma.
    Ser estricto al principio es bueno. Que adquiera costumbres y refuerce la teoría. Y es más bajo-nivel que otros lenguajes high-level, así que haces y entiendes cosas más cerca del hardware.
    Pero temas cómo los pointers (del demonio) evitalos hasta que sean necesarios. Y es verdad que no es muy «object friendly».

    Por otra parte, el paradigma actual es orientada a objetos sí o sí. En este sentido se puede recomendar Java, ya que es estricto cómo C y está más pensada a objetos.

    Python es una buena idea, aunque para empezar soy partidario de que empieze por algo menos high-level, más cercano a la máquina.

    Javascript es interesante para aprender porque lo puedes ir ejecutando en el navegador y ver si te equivocas o no.

    Una opción (si este chaval fuera un niño) sería Scratch, por el tema de los conceptos de programación. Y luego una vez tenga claro eso, pues C – Java – Python en función del uso que le quiera dar.

    En cuanto a los consejos y enlaces nada que añadir, todo en orden. Lo importante es la constancia, las ganas, y el inglés es un must-have en este campo.

    No puedo dar información sobre el campo de videojuegos, ya que es tan variado en entornos de programacion….

    Ala, he dicho

    22 de mayo de 2014
  • Qué pensáis de http://www.codeacademy.com?

    22 de mayo de 2014
  • Buenas, nunca he estado en este ¿blog?. He entrado a través de menéame, y me ha parecido muy interesante.

    Bueno, yo empecé en esto de la programación con el «turbo pascal», que tiempos……. Luego pasé por c, c++, html, javascript, php, asp(sin el .net, menudo horror), y al final he acabado «especializandome en la programación web con PHP+javascript+html+BBDD.

    No sabría indicarle a Juan Antonio con cual empezar,pero a mi por lo menos pascal me pareció un lenguaje sencillo de aprender, aunque me dá a mi que es más un lenguaje didáctico que práctico.

    Para motores gráficos 3D, estoy de acuerdo con que unity es bueno, lo he utilizado y es bastante intuitivo. Lo bueno de este motor es que hay mucha documentación al respecto. Eso sí, primero es importante aprender la estructura e idiosincrasia de un lenguaje orientado a objetos. Luego ya es cosa de Leer, leer, leer y leer.

    Un saludo a tod@s.

    22 de mayo de 2014
  • Algún consejo más:

    – Mezclar teoría y práctica. Seguro que hay libros de informática básicos que puede leerse el chaval para aprender el funcionamiento de un ordenador y en qué se sustentan los lenguajes de alto nivel.
    – Que se aplique con las mates en el cole si quiere programar videojuegos. Tiene que empezar por programar, luego vendrá lo de los videojuegos.
    – Empezar a programar ya, resolviendo pequeños problemas sin uso de librerías ni complejidad añadida.
    – Tener a alguien que te los valide y enseñe tus errores. Equivocarse y aprender de ello es clave.
    – Empezar por un lenguaje estructurado y no con la orientación a objetos: aunque soy especialista en OO y coincido con Gallir, lo desaconsejo totalmente para empezar.

    22 de mayo de 2014
  • Buenas,

    Pues yo le recomiendo que empiece por c++ y despues ya veremos, motivo, con una base solida de programación, en c++ aprenderas muchas cosas y te servira para programar incluso en Linux y Apple.

    Despues si quieres pasar a un lenguaje orientado a objetos pasaria por java como lenguaje de alto nivel y si quiero dedicarme a web, python y c#, con bases de datos, tambien esta pegando fuerte HTML5.

    Son demasiadas cosas. Por eso mi consejo empezar por algo que te servira para varias plataformas y despues ya creceras segun necesidades.

    saludos

    22 de mayo de 2014
  • Buenas a tod@s:

    Lo primero muchas gracias por las respuestas y por la ayuda que me habéis prestado. Lo segundo es que, tras leer todo lo que me habéis aconsejado, creo que empezaré con C este mismo fin de semana.

    Pero quiero también hacer referencia a Rodaballo, respecto a las nociones básicas y tal, muchas gracias, me dedicaré también a informarme y documentarme sobre eso.

    Además he de decir que de hecho las matemáticas se me dan bastante bien (10), y el inglés también(10), aunque reconozco que los verbos irregulares son mi debilidad…

    He mirado el twit, y tengo que decirle a Alex (@eskemagames) que también soy MURCIANo.

    Eso es todo, muchas gracias por responder a tod@s.

    22 de mayo de 2014
  • Javi, me pediste que le echase un cable. Ahí van algunas sugerencias más en forma de post 🙂

    http://ivanguardado.com/private/86785092654/tumblr_n64ot4DDwB1r7ssc0

    25 de mayo de 2014
  • 25 de mayo de 2014
  • Da igual el lenguaje, lo importante es lo que se enseñe con él.

    Primero, aprender los fundamentos de la algoritmia.

    Yo empecé con esto:

    http://www.paraninfo.es/catalogo/9788497321853/una-introduccion-a-la-programacion–un-enfoque-algoritmico

    1 de junio de 2014
  • Es genial el mundo de la programación y diseño, voy a tener en cuenta lo que dices. Verás, tengo 14 y me ilusiono a montones con tan solo leer esa carta… Creo que voy a tener que mejorar en matemáticas 😉

    Saludos desde Chile (el pais mas al sur del mundo) y tengo que agradecerle a Kirai de haber encontrado tu pagina, mándale saludos 😀

    24 de junio de 2014
  • Yo ya soy muy viejuno y empece con C++ para pasar despues a Java. C++ es mas duro para empezar pero se agradece lo que aprendes en este lenguaje que luego no ves en otros.

    Siendo tan joven yo tambien te recomiendo Python porque es un lenguaje muy agradable y con el veras si te gusta programar. Desde ahi ya te meteras con otros lenguajes porque al final acabas pasando por casi todos si o si.

    15 de julio de 2014
  • Yo hace un par de años que hice un ciclo superior aquí en España, más concretamente el de aplicaciones web, y el primer codigo que te enseñan en la asignatura de programación es C, y más adelante C++, todo en el primer año, en el segundo ya se centran más en javam php y los colegas de multiplataforma incluso android.

    Saludos

    15 de agosto de 2014
  • Pues yo considero que la respuesta que le has dado está de puta madre. Qué envidia me da este chaval, con 13 años tiene toda la vida por delante para aprender y convertirse en un crack. Yo empecé en la programación con casi 30 tacos y ahora, por haber empezado tan tarde y tener poca experiencia, no me cogen en ningún sitio, por muchas entrevistas que haga. Espero que a él le vaya mejor que a mí.

    19 de agosto de 2014
  • Bueno, volviendo por aquí he de decir que este verano he de reconocer que no he hecho nada.

    Pero bueno, me he centrado en aprender mecanografía, que considero muy importante, estoy en 230 pulsaciones ^^

    Ahora estoy estudiando bases de la programación y pseucódigos, para no tirarme de cabeza a un lenguaje y entender mejor lo que haga. Una vez termine las 120 horas del curso empezaré a programar como tal.

    Saludos

    18 de octubre de 2014
  • Vais a volver tonto al chaval, al final ha decidido usar su tiempo para mecanografía en vez de estar programando como un hijoputa.

    ¿Conocéis algún coder que haya aprendido mecanografía?

    A mi con tu edad me dijeron: Si quieres aprender a programar, programa y punto. Tienes 13 años, tienes tiempo de sobra para leer libros sobre estructuras, algoritmia, y bla bla bla. Yo creo que es mejor que programes, aunque sea sucio y tu código sea mierda de troll. Da igual. En el futuro cuando leas articulos o libros sobre patrones de diseño podrás decir: «ostia, este patron me hubiera venido de puta madre aquí… o allí.»

    Si de primeras te pones a leer teórica a saco vas a terminar siendo esos putos programadores que solo hacen sobreingeniera de la muerte. Código sobre código sobre código sobre código sobre código. Y esto amparado en que tal patrón dice que hay que hacerse así. Pregúntale a cualquiera que haya programado cosas complejas cuanto a disfrutado de la herencia profunda, pero claro, el libro de turno ponía ejemplitos super chupis sobre esto.

    Ahora mismo da igual que lenguaje uses, piensa en algo que programar que tenga un poco de todo y programalo. Cuando tengas 15 años y hasta programado de todo, te pondrás a leer libros chupis de programación y te enterarás.

    Y está claro que las mates son molonas y todo conocimiento sobre ingeniería es bienvenido. Pero conozco la ostia de programadores que podrían estar toda su vida profesional sin que las mates fueran necesarias (al nivel que te comentan).

    Mecanografía… aish.

    4 de diciembre de 2014
  • Para empezar no escribo para dar un consejo u opinión al respecto, solo quería plasmar en estas lineas que me identifique grandemente en las palabras de ese niño quien pide sugerencia ¿Por donde y como empezar? en el mundo de la programación, la verdad es que yo tengo 21 años recién cumplidos y estudio informática desde el año pasado, voy por mi segundo trimestre y he notado que sin una meta clara, motivación y disciplina no se llegaría a ningún lado, son tantas cosas que quisiera decir pero por ultimo solo quiero decirles ¡GRACIAS, GRACIAS POR HABERME DADO LA MOTIVACIÓN QUE ME HAN INYECTADO SUS PALABRAS, AUNQUE NO FUE DIRECTAMENTE A MI A QUIEN ACONSEJABAN SE QUE TODO ESTO USTEDES LO HACEN PARA AYUDAR A PERSONAS QUE LO NECESITAN, PERSONAS COMO ESE NIÑO, PERSONAS COMO YO.
    ESPERO Y ASPIRO LA PRÓXIMA VEZ QUE LES ESCRIBA SEA PARA IR MOSTRANDO-LES LOS FRUTOS DE MI ESFUERZO!
    DESDE HOY 16 DE ABRIL DE 2015 ME TRAZARE UNA META DE APRENDER Y MAS QUE ESO ESFORZARME AL MÁXIMO PARA UN FUTURO PODER AYUDAR A CHAVALES COMO ESE Y PODER SER MOTIVACIÓN DE MUCHOS!

    16 de abril de 2015

Si quieres dejar un comentario puedes hacerlo directamente escribiéndome en Twitter: @javilop