¿Qué lenguaje debería aprender?

Iniciado por lnvisible, 3 Febrero 2015, 19:20 PM

0 Miembros y 1 Visitante están viendo este tema.

lnvisible

Es una pregunta bastante sencilla y habitual, pero cada maestrillo tiene su librillo. Hay varios grupos de librillos:


Los que recomiendan C/C++

Suelen ser la misma escuela que te recomienda seguir después con ensamblador. Lo que vas a aprender de esta forma son conceptos como los punteros (muy importantes) y vas a conocer el ordenador a un nivel bajo (es decir, muy cerca del hardware). La abstracción que proporcionan estos lenguajes es poca.

C y C++ son lenguajes que se utilizan precisamente por su bajo nivel y por generar código eficiente, por lo que se siguen utilizando y se van a seguir utilizando por mucho tiempo. Si lo que te interesa es programar al más bajo nivel: microcontroladores, sistemas operativos y librerías del sistema operativo, sin un lenguaje que te restrinja y evite los segmentation fault (tal vez los busques) entonces C y C++ son para ti.

Si te interesa la eficiencia pero no quieres preocuparte de los problemas de memoria tal vez otras opciones como Julia o Rust sean mejores.


Los que recomiendan Python

Python es un lenguaje con una sintaxis sencilla y parecida a pseudocódigo, heredero de la tradición de Algol, que intenta acercar el lenguaje de programación a la forma en que se describe un algoritmo.

La gente de esta escuela está por tanto más preocupada por la algorítmica, comprender la complejidad de los programas (la notación de la O) y no tanto por punteros y eficiencia de memoria.

En el caso de Python, la disponibilidad de librerías que permiten hacer muchas cosas de forma relativamente sencilla lo hace muy atractivo, prácticamente es el lenguaje por defecto para los que programan pero programar no es su tarea principal: lingüística computacional (nltk), estadística (pandas), y un largo etcétera, incluso reemplazando a otros lenguajes que tradicionalmente tenían este nicho (R, Matlab, Octave, etc.)

Otros lenguajes en esta categoría son javascript (con una sintaxis no tan elegante) y CoffeeScript, que acerca lo que es javascript al mundo de Python. Son opciones interesantes porque permiten programar para web, lo que significa que podemos hacer pequeñas extensiones para el navegador (como GreaseMonkey), Apps para dispositivos móviles, páginas web y servicios web (también del lado del servidor, ya hay cierta tradición full stack como MEAN). Poder aplicar lo que se aprende es muy satisfactorio, especialmente para los novatos.

En algunos casos se puede recomendar Lua, porque es un lenguaje muy sencillo y con una sintaxis simple y breve. También Ruby por motivos similares.


Los que recomiendan Java

Java ha sido por mucho tiempo el lenguaje más popular, puede que aún lo sea a día de hoy. Es un lenguaje muy utilizado en las grandes empresas de software porque simplifica la programación en C con un recolector de basura y una máquina virtual que abstrae los detalles del hardware sin perder demasiada eficiencia (aproximadamente el doble de tiempo que C). Por la ayuda que proporcionan los IDEs es un lenguaje bastante popular hoy en día para enseñar programación.

Hay mucha demanda de programadores en Java, y también mucha oferta. Si sólo quieres aprender un lenguaje (y nunca más ningún otro) probablemente (a día de hoy) Java sea la mejor opción. Por lo competitivo del mercado prepárate para aprender también un montón de librerías y tecnologías, como Hibernate, Spring, Maven, SOAP y muchas otras. Tal vez no tengas muchos lenguajes para poner en el CV, pero eso no significa que sea breve, realmente el valor de Java está en todo el ecosistema que tiene alrededor.

Java es un lenguaje con un uso muy extendido, pero también muy odiado, lo que ha propiciado la aparición de otros lenguajes como Scala y Groovy entre otros.


Los que recomiendan Pascal/Delphi

O los que recomiendan Ada. Se basan en conocer los ordenadores y la programación de una forma algorítmica, como Python, pero no a tan alto nivel, conociendo algunos detalles de implementación, como C, y sin olvidar los tipos y la teoría de tipos (también presentes en Java, aunque sólo en POO), también algo importante si quieres poder participar en los clásicos debates de tipado estático frente a dinámico.

Son de la escuela: "La letra con sangre entra", o alternativamente: "no quiero que me preguntes si el compilador te dice que tienes un error". Eran la opción para aprender programación estructurada por lo que ayudaba el compilador a detectar errores, eso reducía la carga de trabajo de los profesores. Han sido relevados por Java (que es POO) porque realmente lo que se valoraba de estos lenguajes es eso, si hay que enseñar POO, se enseña, Eclipse y Netbeans ya te informan de los errores antes de compilar.

Resumen: Si alguien te recomienda Pascal, Delphi o Ada, está desactualizado y lo hace por los motivos incorrectos.


Los que recomiendan Lisp

O Scheme, Clojure, ClojureScript, Haskell o Prolog. Valoran conocer la programación funcional o declarativa, el aspecto más teórico de la programación (más que la algorítmica), como es el lambda cálculo, la lógica, la unificación, los árboles sintácticos, las macros y la homoiconicidad.

Son lenguajes que te dan una perspectiva interesante de las cosas. Pueden no ser los lenguajes más prácticos para hacer algo concreto, pero conocerlos te puede ayudar a abordar un problema aunque lo resuelvas con otro lenguaje. Son más un lenguaje a aprender que el primer lenguaje a aprender, pero ciertamente son lenguajes a muy recomendables. En el caso de Prolog es prácticamente el único en su paradigma (¿hay más?).

Es curioso porque los lenguajes de este grupo los verás poco por el foro. Son más lenguajes para la gente que quiere hacer las cosas bien que la gente que quiere hacer algo y que funcionen. La gente que pregunta cuando ya ha resuelto un problema si lo ha hecho bien y cómo podría mejorarlo (revisión de código), en lugar de la gente que pregunta porque no ha mirado la documentación y no es capaz de encontrar el fallo en el programa que ha escrito o porque ni siquiera sabe por dónde empezar a escribirlo.


Los que recomiendan PHP

PHP es un lenguaje muy popular por la tradicional LAMP. Todavía hay muchas páginas que funcionan con PHP por detrás (como este foro) y eso le garantiza sobrevivir por mucho tiempo. Fue un lenguaje que cumplió con una tarea decentemente y fue prácticamente la única opción para quien quería hacer algo en ese nicho, lo que garantiza que mucha gente lo use. Por el diseño del lenguaje también se garantizó que mucha gente lo odiara.

Quienes te recomiendan empezar por PHP son mala gente, no les escuches. Tampoco escuches a los que te recomiendan VisualBasic, Perl, Brainfuck ni Malbolge, bloquéales en cualquier red social en la que puedan llegar a ti. Es broma, simplemente es una opción extraña y no está muy claro si te va a enseñar a programar bien o a programar mal, mejor cualquier otra.


Los que recomiendan Bash

Son administradores de sistemas. Bash es muy potente, pero nadie lo toma en serio como lenguaje de programación y nadie te tomará en serio como programador, aunque consigues un +10 en frikismo y es muy satisfactorio poder arreglar algo simplemente con un script. Además, para cualquier cosa que haga el SO (como mover ficheros) es más eficiente que hacerlo tú mismo en C (ya lo hace el SO) y también tienes muchas herramientas (en lugar de librerías) para usar, como grep, sed, awk, etc.

Si te interesa la administración de sistemas, es el lenguaje a aprender, o tal vez csh, o PowerShell, seguramente todos. Pero es raro que alguien recomiende empezar por uno de ellos, hazlo por tu cuenta y riesgo.


Los que recomiendan la familia .NET

Tradicionalmente se ha asociado con Microsoft, especialmente para el desarrollo de aplicaciones de escritorio, aunque ahí está ASP.NET para solucionar eso. Para Linux está la alternativa de Mono, pero aun así parece un intento fallido por parte de Microsoft para capturar el mundo de la programación.

La estrella indiscutible, C#, se usa en muchos entornos industriales, pero siempre por detrás de C y Java, es difícil encontrar excusas para apostar por C# en lugar de uno de los otros dos, que por otro lado tampoco son los líderes indiscutibles de la lista (aunque sí pueden ser líderes discutibles).


Los que recomiendan LaTeX

No quieren programar, quieren \emph{publicar}. Hay lenguajes de programación que son Turing completos pero tienen un uso específico para el que están hechos, otro ejemplo es XSLT. Si lo que quieres hacer es eso, puede ser la mejor opción, pero sólo para hacer la cosa concreta para la que han sido diseñados. Lo mismo con ActionScript y Flash.


Los que recomiendan Go o Erlang

Gente muy centrada en la concurrencia. Seamos honestos, si tuvieras un cluster o un grid bajo tu responsabilidad no estarías leyendo esto, así que me ahorro escribir esta sección.


Los que recomiendan otros lenguajes

Son gente muy rara, pregúntales por sus ideas políticas.




Puede que os interese poner esto con una chincheta o enlazado desde el FAQ o algo.

Si tenéis comentarios para mejorarlo no me importa incorporarlos.

Eleкtro

#1
Cita de: lnvisible en  3 Febrero 2015, 19:20 PMLos que recomiendan otros lenguajes

Son gente muy rara, pregúntales por sus ideas políticas.

Hay muchas cosas con las que estoy en desacuerdo y pueden ser desmentidas, pero respeto tu opinión y no quiero entrar en discusiones, me limito a resaltar ese comentario, porque creo que deberías incluir un apartado para los desarrolladores de C#, y VB.Net, ya que tal y como lo dejas quien lo lea va a pensar erroneamente que dichos lenguajes no están dentro de los lenguajes más destacados de hoy en día, ni de los más usados, ni de los más populares, ni de los mejores.

:P

Saludos!








wmcarlos1991

#2
En mi opinión deberías primero aprender los conceptos básicos de la programación en los cuales te encontraras con la lógica de un programa, pseudolenguaje y otros conceptos, te digo esto ya que como tal la mayoría de los lenguajes están enfocados casi a lo mismo te lo digo por experiencia, pero la lógica te dirá cual lenguaje usar todo depende también a que te quieras enfocar, si pretendes desarrollar aplicaciones web deberías aprender php, jvascript html css, que son los mas usados en esa rama, ahora tenemos lenguajes para el desarrollo de aplicaciones desktop o escritorio como java c# delphi entre otros.

Te voy a dejar un curso de video2brain que me sirvio mucho para comprender conceptos de la programacion

Mod: Dentro del blog el link está acortado, por seguridad y proteccion de los usuarois dejo el link directo
http://librosdelprogramador.blogspot.com/2015/02/fundamentos-esenciales-de-la.html

Espero te sea de mucha utilidad Saludos!!

engel lex

#3
El link directo de lo que indica wmcarlos1991

Link: https://mega.co.nz/#!n9dRSaxY!yWf0SrPIC-pRHND26fgQCOcPphGfBEVWBoigpas-7hg
Contraseña: www.intercambiosvirtuales.com

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

3n31ch

#4
Cita de: wmcarlos1991 en  3 Febrero 2015, 20:53 PMsi pretendes desarrollar aplicaciones web deberías aprender php, jvascript html css

Si... y no. Ciertamente PHP es muy usado en la web, y tu comentario me pareció indicado y correcto. cualquiera que quiera aprender a programar debería aprender pseudocódigo antes que cualquier cosa. (en el caso ideal)

Como bien dices el lenguaje que utilizas dependerá del proyecto al que te enfoques pero eso de decir si es web tiene que ser php porque es el mas usado... bueno no es tan así, la gran mayoría de paginas web no necesitan de muchas funcionalidad o estructuras especiales, es por esto que PHP es ideal, pero en caso de empresas importantes, lo que mas veras sera .NET y Java.  A lo que quiero llegar, es que no depende de si te enfocas a que sea web, o a escritorio o a celular, depende de cada proyecto en particular. (Supongo que te referías a eso de manera simplificada, pero lo quería aclarar por si alguien lee este post)

Actualmente se están utilizando mucho la atutomatización de procesos de negocios, y la mayoría de estas automatizaciones están hechas en ASP.NET y Java

En lo personal el mejor lenguaje de programación para empezar a programar es el pseudocódigo

lnvisible

#5
@Eleкtro: Nunca he visto a nadie que recomiende .NET. Entiendo que es potente para hacer aplicaciones de escritorio para Windows, ¿algo más en lo que destaque? Con las mismas puede ser recomendable Java, pero realmente no recomendaría a nadie centrarse en aplicaciones de escritorio (y menos para windows).

Una cosa son los lenguajes más populares (por ejemplo los que lista TIOBE) y otra los más didácticos o que pueden ser interesantes de aprender. PHP está entre los más populares, pero nunca lo recomendaría para aprender, aunque sí lo he visto recomendado, por eso lo he añadido. Los lenguajes que mencionas nunca he visto a nadie recomendarlos, pero ya que lo haces, los añado.


@Nac-ho: PHP y ASP están ya pasados de moda, incluso Java (Spring y otros frameworks web) y tengo mis dudas de Ruby (on Rails).

Quien los aprendiera en su momento seguro que tiene mucho trabajo y muy bien pagado, pero planteárselos como algo a aprender en estos momentos puede no ser muy buena idea. Para cuando seas "experto" (dentro de unos años) puedes encontrarte siendo experto en un mundo de dinosaurios, donde todo el mundo es más experto que tú y preferiría serlo en tecnologías más nuevas, como Python (Django), javascript (Node.js y todo lo que ha traído) o Scala (Play!).

Seguro que podéis encontrar mucha información en Internet, especialmente blogs de opinión, que respaldan esas alternativas, y seguro que todos los posts tienen ya varios años. Los comentarios que habéis hecho están muy bien, el único problema que tienen es la fecha de publicación.

3n31ch

#6
@Invisible

Segun se Java y ASP.NET (al menos podría apostar por Java) estan siendo muy usados en empresas (al menos en mi país). Últimamente el Bussines Process Management esta cobrando mucha importancia en el habiente empresarial y también lo hacen sus automatizaciones con Bizagi el cual según se hace uso de Java o de .NET. (Claro eso es en base a lo que me he enterado, pero puedo estar equivocado.)

Y no se que decir respecto a que Java es antiguo porque hasta donde yo se es un lenguaje en continua evolución.

PD: Si pones Java pon C# (se que lo mencionaste en la familia .net) :xD :xD :xD

Usuario Invitado

@Invisible, lo que me causó gracia es que digas que Spring Framework, uno de los mejores frameworks para desarrollo están "pasados de moda". C#, Java, PHP, etc son lenguajes en continua evolución. Solo hace falta echar un vistazo hace unos años y uno se da cuenta cuánto han evolucionado.

Pero mejor me quedo callado, para no entrar en polémicas ;D

Salu2.
"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein

lnvisible

Claro, y COBOL está en el puesto 13:

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Pero es muy muy antiguo.

Siendo honestos, Lisp es más antiguo, pero no es el caso de Clojure.

En el caso de los lenguajes que mencionáis, se los está comiendo Python. Para alguien que ahora se plantea si aprender Java, PHP o Python, la recomendación está clara: Python. El sueldo que va a poder ganar es mucho mayor, y si la diferencia se reduce (a estas alturas) será ya porque Python quede relegado por otro lenguaje.

Ahora mismo la tendencia es javascript, también un lenguaje antiguo, pero revitalizado por Node.js, que cambia completamente la forma de funcionar y la aplicabilidad. Por eso javascript fue escogido como el lenguaje del año por el índice de TIOBE que menciono.

Si se quiere aprender algo más nuevo y con visión de futuro, Julia es un buen candidato. Dentro de 5 años habrá trabajo muy bien pagado con Julia, básicamente en el área de ciencia de datos, y muy poca gente con más de 3 años de experiencia en Julia.

Si lo que quieres es hacer aplicaciones del montón, como sitios web con PHP o aplicaciones de escritorio con C#, pues sí, te valen los lenguajes del montón y tendrás sueldos del montón, lo que roza el desempleo en el caso de España.

Eso no significa que no puedas tener un buen sueldo con Java, pero no sólo con Java. Si tienes 10 años de experiencia, conoces una lista de tecnologías que supera la docena (Spring, Hibernate, SOAP, Solr, Lucene, Apache Camel, Maven, Hadoop, Hive, etc.) entonces puedes ganar 100.000€ anuales sin despeinarte, pero claro, estamos hablando de lenguajes de programación.

No parece que haya demasiados hilos abiertos acerca de Hadoop, parece que se pregunta más por Batch...