martes, 15 de octubre de 2013

¿Por qué lenguaje de programación empiezo?

Estoy seguro que si os dedicáis al mundo de la informática desde hace tiempo sabéis que cuando alguien quiere aprender a programar es lo primero que pregunta, como no podía ser de otro modo. Y cada uno aquí da sus opiniones lo mejor que puede y basado en su propia experiencia. Yo voy a dar la mía, que para eso es mi blog.

Para empezar yo diferencio dos clases de usuarios, los que quieren realmente meterse al mundillo y dedicarse a la informática, o los "casual", gente que no se va a dedicar a la informática pero tienen la curiosidad de querer aprender para programarse algo sencillito y no complicarse mucho la vida. También hay los que se quieren meter "porque la informática tiene futuro", aunque sin más pasión y/o interés que ése no les auguro mucho futuro en estos lares.

Para los usuarios puntuales que sólo quieren algo rápido para sacar algún proyecto pequeño adelante, recomiendo Python. Fácil de aprender, de usar, bonito, te obliga a indentar, módulos para todo (soy de los que creen y esperan que iPython + Numpy se coma a matlab) no tienes que saber ni papa de punteros o de lo que hay por debajo. Te miras algún manual facilito como el de Python para Todos y muy pronto puedes empezar a hacer tus cosillas.

Para los que quieran entrar en el mundillo de la informática de cabeza, aprender a manejar algoritmos, tipos abstractos de datos y demás mariconadas y palabras chungas que usamos los informáticos para parecer más listos mi opinión es:

Para empezar, un lenguaje fuertemente tipado. Pascal puede ser el elegido. Sintaxis sencilla, no tan complicado como C o C++, y te hace coger buenos hábitos de programación. Para usarlo para proyectos grandes no me gusta en absoluto, pero en mi ciudad al menos he visto varias ofertas de trabajo para programadores en Delphi (una evolución de Pascal), así que quizás pueda ser una opción...

Una vez aprendido Pascal, nos vamos a C. Aprendemos lo divertido que puede ser concatenar dos cadenas, lo graciosos que pueden ser los punteros, y por supuesto el poder que tienes sobre la máquina. No voy a negar que me encanta C y lo optimizado que está.

Por supuesto, todo buen programador tiene que saber de Programación Orientada a Objetos. Hay algunos puristas que hablan de empezar por SmallTalk o cosas así, yo recomiendo Java. Tipado, multiplataforma, herencia simple, probablemente el lenguaje más extendido del mundo y el que más se pide para conseguir un trabajo. Esencial. C++ es otra muy buena opción.

Por último un lenguaje funcional es importante, no tanto bajo mi punto de vista para usar de forma cotidiana pero sí para aprender a pensar de otra manera (tail recursión, todo es una función, etc.) En mi caso aprendí Ocaml en la facultad y me gustaría tener algo de tiempo para mirar Haskell, que le tengo ganas.

En este punto puedes aprender los lenguajes que te apetezcan, sin demasiada complicación una vez ya "hablas" los anteriores. C++, PHP, Javascrip, Python, Ruby, C#...

Si alguien quiere saber mi "trayectoria" personal (probablemente no), yo empecé por BASIC hace muchos años, salté a QBASIC y la evolución lógica me llevó a Visual BASIC. Aprendí también algo de C, y al entrar en la facultad desaprendí todo lo aprendido de Basic y aprendí Pascal -> C -> Java -> Ocaml -> Matlab -> Python -> Javascript y el último lenguaje que he aprendido allí ha sido C#.
Luego decidí especializarme en Python, es el lenguaje que más me gusta, con un buen equilibro entre optimización y velocidad de desarrollo (a veces mientras programo en Python pienso en tener que hacer lo mismo en C y me entra un escalofrío de imaginar todas las líneas de código...) y de hecho es el lenguaje que me ha dado trabajo ahora mismo, junto con el querido Framework Django, conjunto de librerías que permiten a Python desarrollar fácilmente aplicaciones web.

Cada uno tiene que probar de todo y ver lo que le va gustando. Cualquier duda ya sabéis dónde estoy!

6 comentarios:

  1. Saludos Uxío,

    interesante post. Aquí un ing. técnico que te sigue. Me gusta lo que has escrito, pero parece que recomiendas Python como un lenguaje sólo para iniciarse a "no iniciados" y luego para orientación a objetos les recomiendas Java, cuando Python tambien tiene eso.

    Python yo lo veo ya bastante desarrollado, y de hecho Google lo usa mucho, supongo que usando tambien su orientación a objetos. Podría ser una elección bastante buena tanto para iniciarse como para consolidarse y tiene alguna cosilla muy interesante características de lenguaje funcional que están a tu alcance pero no usas si no quieres o no estás preparado.

    A mi tambien me ha interesado Django, pero no encuentro documentación suficiente(aparte del libro ese que está repetido por todas partes) o cursos buenos (ya online o impartidos) como para consolidar ese conocimiento. Su sistema de plantillas y el poder usar un lenguaje como Python me parecen cosas muy atractivas.

    Te comentaré tambien por si te interesa que hay un libro de Machine Learning de Manning que curiosamente usa Python como lenguaje y numpy. No sé que es eso del iPtyhon.

    Sobre Haskell tambien comparto tu interés. Tengo un colega que se dedica profesionalmente a los lenguajes funcionales y Haskell lo tengo mas que recomendado. La idea de un lenguaje completamente polimorfico en el que no hay que repetir nada (en cualquier empresa trabajando en Java al final acabas copiando y pegando código para hacer cosas similares y me parece aberrante).

    Me mola mucho tu blog. Sigue escribiendo.

    ResponderEliminar
    Respuestas
    1. Hola!

      Muchas gracias por tu extenso comentario :)

      Por partes. Me debí de explicar más con Python. Lo recomiendo a gente que empieza y también lo recomiendo para especializarse (orientación a objetos, gran número de librerías disponible, multiplataforma, django...), me gusta bastante bastante más que Java, y ya te digo, es lo que uso en mi trabajo. Creo que no me expresé bien.

      Django está muy bien. Yo aprendí con "The Django book" (te lo puedes compilar incluso para ebook y "2 Scoops of Django" es luego para prácticas recomendadas. La biblia de Django.

      Gracias por la recomendación del libro. iPython es un intérprete mejorado digamos: http://ipython.org/

      Bueno, te diré que Haskell o Java no es que tengas que repetir código, eso depende de cómo tú programes, simplemente es un paradigma distinto. Si alguna vez te encuentras pegando y copiando código algo no haces del todo bien ;)

      Gracias por el comentario, respuestas así me hacen coger ganas de escribir más.

      Eliminar
  2. hola.
    me ha gustado uxio tu articulo sobre ¿Por qué lenguaje de programación empiezo? .
    yo estoy ha años luz de vosotros los programadores, estoy empezando con pascal...y lo veo interesante, cuando termine, seguiré con java.
    pero mi pregunta es: es posible encontrar trabajo como programador si no tienes la carrera de ingeniero informático?
    yo estoy estudiando por mi cuenta....y que no obtendré ningún titulo universitario...
    estoy perdiendo el tiempo o no? supongo que las empresas se inclinarán mas hacia las personas que tengan una titulación....
    menudo rollo te he soltado eh? jejejejeje
    saludos

    ResponderEliminar
    Respuestas
    1. No estás a tantos años luz. Estás a 5 años de ingeniero superior, 3 de ingeniero técnico, 2 de ciclo de FP y 4 de graduado.

      Ahora mismo es difícil encontrar trabajo de programador con la licenciatura (al menos en mi zona), no me quiero imaginar sin nada.

      Si realmente te gusta y no tienes nada que te lo impida (estás sacándote otra titulación, trabajando...) si quieres dedicarte a esto, estudia algo, recomendación en estos momentos, grado.

      El tiempo aprendiendo no lo estás perdiendo nunca. Si luego decides hacer una carrera pues todos estos conocimientos los vas a poder aplicar, y mientras otros estudian pascal o Java tú te rascas la barriga o aprendes otras cosas.

      Espero que te valga el comentario, un saludo!

      Eliminar
  3. HOla, necesito algun Programa de facturacion para instalar en un comercio de venta de ropa

    ResponderEliminar