Si uno va a aprender un nuevo lenguaje de programación cada año, ¿cuál debería ser la lista? [cerrado]

19

En el capítulo uno de "El programador pragmático", el primer objetivo de aprendizaje es:

Aprenda al menos un nuevo idioma cada año. Diferentes idiomas resuelven los mismos problemas de diferentes maneras. Al aprender varios enfoques diferentes, puede ayudar a ampliar su pensamiento y evitar ser golpeado en una rutina. [...]

Para lograr esto a lo largo de una carrera, es probable que la lista de idiomas sea bastante larga (especialmente si no desea "progresar" en la gestión). Claramente, la educación de un programador (o cualquier forma) lo ayudará a comenzar con un núcleo de lenguajes comercialmente útiles (la lista habitual de la publicación de trabajos: C, C ++, Ruby, Python, JavaScript, C #, Java, VB, .. .). Además, es probable que un programa de aprendizaje formal o informal haya cubierto enfoques funcionales (a través de algo como Haskell, LISP o un lenguaje derivado de ML)

Pero una vez que se aprende un subconjunto razonable de esa lista, ¿qué sigue y por qué ?

Richard
fuente
3
En esta respuesta, enumero algunos de los paradigmas del lenguaje que podrían estudiarse para ampliar sus habilidades. Comenzaría tratando de aprender todos estos paradigmas (en lugar de centrarnos en los idiomas), así que marca todos los que usa tu idioma actual, luego elige un idioma que tenga tantos diferentes de lo que estás acostumbrado. No tiene mucho sentido comenzar en C # y luego en Java, intente diversificar más inicialmente. Una vez que haya cubierto todos los tipos básicos, puede elegir otros idiomas comunes.
Simon P Stevens
@ Simon: ¿Por qué no hacer de esto una respuesta aquí?
Richard
1
Aprenderá mucho yendo de Java a C #, pero no tanto al revés
Casebash el
@Ricardo. Realmente no pensé que justificara una respuesta completa, solo te estaba refiriendo a algo relevante que había escrito en otra parte.
Simon P Stevens
1
La mayoría de la gente que aprende un idioma al año será un "maestro de todos los oficios, pero maestro de ninguno" hasta que se concentre en unos pocos durante varios años. Creo, en base a mucha experiencia, que la noción del programador 'full-stack' es falsa, excepto para el 1% - 5% de los desarrolladores. La mayoría de las personas de back-end que conozco no tienen grandes habilidades de front end y viceversa.
junky

Respuestas:

19

Hazlo interesante y pasa cada año escribiendo un intérprete o compilador para tu propio lenguaje de programación que llene un nicho para el que nunca has usado un lenguaje de programación. Cada año, escriba su próximo compilador / intérprete usando el idioma que escribió el año anterior.

alternativa
fuente
77
¿Me puede dar su autógrafo? :-)
Christian Davén
1
+1 Respuesta brillante, incluso si probablemente fue hecha de manera humorística.
Joe D
1
@ Joe D No se entiende de una manera totalmente humorística. Si puedes hacer esto, has dominado todos los nichos.
alternativa
-1 por no querer decirlo de una manera totalmente humorística. (como si no tuviéramos suficientes idiomas / implementaciones semi abandonadas)
ZJR
2
@ZJR ¿Entonces 99% humorístico, 1% no humorístico es malo? Vamos. Además, ¿por qué rechaza una respuesta basada en un comentario?
alternativa
13

Debe maximizar la "relevancia marginal", es decir, aventurarse siempre en nuevas áreas en las que aún no es fuerte. Varíe tanto los lenguajes de programación como los conceptos . Si no conoce ningún lenguaje orientado a objetos, pruebe Java y un marco de alta abstracción como Hibernate. Luego escriba algunas cosas de administración de sistemas en un lenguaje de script como Python o Perl. Luego, obtenga algunas habilidades de bajo nivel en C o C ++, escribiendo código de servidor multiproceso de alto rendimiento. Si no conoce la programación funcional, pruebe Haskell con algunos problemas de teoría de gráficos, como resolver el Solitario Peg , etc. Es muy factible hacerlo para que todo lo que aprenda tenga un valor inmediato en el mercado, hasta que llegue a cosas eruditas o especiales. como seguridad de capacidad de objeto ,Prolog o VHDL .

Buen ejercicio por cierto! Esto le enseñará a pensar lateralmente y visualizar problemas en términos independientes del lenguaje, en lugar de depender de muy pocas técnicas específicas de la plataforma. Por ejemplo, una vez que domine las similitudes y diferencias en el envío de métodos virtuales entre C ++ y Python, prácticamente lo "obtendrá" al instante para cualquier otro lenguaje.

DomQ
fuente
9

No vale la pena conocer un lenguaje que no afecte su forma de pensar sobre la programación. - Alan Perlis

Como algunas de las otras respuestas han mencionado, si está aprendiendo un nuevo idioma por año, ¿por qué? es expandir tus capacidades como programador. ¿El como? es mediante el aprendizaje de idiomas con paradigmas distintos de los que ya conoce, y hacer un balance de los paradigmas que ya conoce determina qué idioma aprender a continuación.

¿Cuáles son estos paradigmas? El libro avanzado Conceptos, técnicas y modelos de programación de computadoras proporciona una excelente visión general con un mapa gráfico .

Por lo tanto, si solo conoce lenguajes imperativos tipo C, entonces aprender Scheme / Lisp es extremadamente útil. Si ya conoce lenguajes imperativos y funcionales, aprender Prolog será útil, etc.

Un libro reciente que intenta enseñar múltiples idiomas y paradigmas es Seven Languages ​​in Seven Weeks . Por supuesto, no hablará con fluidez cada idioma después de una semana de estudio, pero parece proporcionar una perspectiva de paradigma múltiple accesible y orientada al profesional.

Cuando asimilas otro paradigma, es realmente un momento Zen; pasar de la programación imperativa a la funcional me hizo ver el mundo de la informática desde una perspectiva completamente nueva. ¡Feliz aprendizaje!

limist
fuente
Y un lenguaje afecta tu pensamiento no tanto por lo que te permite expresar, sino más bien por lo que te obliga a expresar.
Florian F
9

C - como lo esencial, "subyace a todo", lenguaje de programación de sistemas

Lisp (Scheme): el extraño pero increíblemente poderoso lenguaje ur que los grandes hackers creen que define genial

Smalltalk - porque esto es lo que OO estaba destinado a ser

Erlang (u otro lenguaje de actores) para entender a los actores

Haskell - para entender las mónadas

Javascript: porque está en todas partes y es esencial para crear scripts en el navegador

Uno de Python / Ruby / Perl (pero realmente no importa cuál), para que sepa cómo se siente un lenguaje de script popular, moderno y de alto nivel con un buen soporte de biblioteca

SQL: para que pueda hablar con bases de datos relacionales

Prólogo: porque aún necesitas volar tu mente

interestar
fuente
2
La razón por la que aprendí Haskell es porque quería aprender un lenguaje funcional (a diferencia de todos los procedimientos que conocía antes), y Haskell me pareció el niño aficionado de los lenguajes funcionales. La razón por la que me gusta Haskell ahora es porque es un lenguaje de alto nivel, tiene un buen soporte de biblioteca y es rápido (aproximadamente 50% tan rápido como C, pero depende de lo que esté haciendo). Además, me gusta poder escribir un montón de código y todo funciona la primera o la segunda vez (después de que se compila).
Joey Adams
Definitivamente importa si aprendes Perl, Python o Ruby. Como ejemplo, Python tiene listas de comprensión, que no existen en Ruby, y Ruby tiene módulos, que no existen en Python. Puede duplicar los resultados de ambas cosas en cualquier idioma, pero aprender cualquiera de ellos influirá en su pensamiento de maneras muy diferentes.
philosodad
1
Prólogo - porque todavía necesitas volar tu mente - El mejor comentario de la historia +1
Zachary K
1
Creo que el principal beneficio de aprender haskell no es necesariamente controlar la abstracción de la mónada, sino aprender los beneficios de un sistema de tipos REAL fuerte y poderoso. Si la idea de un "sistema de tipo estático" es algo como Java, entonces haskell te dejará sin aliento.
sara
4
  • Go (nuevo lenguaje de programación a nivel de sistema con buen soporte para concurrencia y conceptos no tan tradicionales)
  • Lua (lenguaje de scripting paradigmas simple, expresivo, extremadamente flexible y equilibrado imperativo, funcional y meta programación, permitiendo POO)
  • D (C / C ++ bien hecho)
  • Groovy (Expresividad y meta programación en el mundo Java)
  • Eiffel (Diseño por contrato y un enfoque diferente de OOP)
  • Prolog (EL lenguaje de programación lógica)
revs bigown
fuente
1
¿Por qué alguien debería aprender esto? (El por qué es lo interesante aquí, hay pocos lenguajes de programación verdaderamente únicos: cada paradigma se ha implementado más de una vez.)
Richard
Interesante ver que usted piensa que D es C se hace bien. Personalmente, cuando uso C, lo uso principalmente para algunas cosas de bajo nivel donde no quiero ninguna abstracción de OOP.
Jonas
@Jonas: Todavía necesitamos un lenguaje simple bien hecho, mientras que este lenguaje no viene D se puede usar muy bien solo de manera imperativa. Para usted, D2 es más funcional, cuando se complete tal vez sea la mejor implementación del paradigma para un lenguaje fundamentalmente imperativo.
Maniero
hecho bien es subjetivo. Para mí, Erlang es un lenguaje muy pequeño y simple bien hecho. La parte que falta es un gran marco de GUI, y si haces sistemas complejos, tal vez quieras un lenguaje de tipo estático más.
Jonas
@Jonas: Erlang es un buen lenguaje pero no es C / C ++ bien hecho, es algo totalmente diferente.
Maniero
2

1) Prólogo: es completamente diferente a todos los idiomas imperativos que ha estado utilizando hasta ahora, y cambiará su forma de pensar acerca de los problemas.

2) Lisp: sin él, bien podrías estar usando Vi

3) Erlang: De nuevo, es completamente diferente, además, parece bastante de moda.

4) Algo de Turing Tarpit (por ejemplo, Brainfuck), y probablemente escriba un compilador o un intérprete para ello: no se me ocurre una razón para hacerlo, pero parece una buena idea.

Carnicero paul
fuente
1
"sin él, bien podrías estar usando Vi". Me sorprende que nadie haya captado eso :)
Gauthier
Yo uso vi! (Bueno gvim)
Zachary K
1

Además de los que enumeraste,

Haskell, F #, Clojure, OCaml, Lua, Go, D, Erlang, Objective C.

grokus
fuente
1

Si bien estoy de acuerdo en que es bueno aprender nuevos idiomas (e incluso imprescindible a través de una larga carrera), creo que uno por año es demasiado pasado los primeros cinco o diez años. Lo que preferiría ver es a alguien con este nivel de experiencia aprendiendo cosas nuevas sobre los idiomas que ya conocen. En algún momento necesitas profundidad y amplitud de conocimiento. Entonces puedes escribir una construcción If en 12 idiomas, gran whoop. Prefiero ver a alguien que realmente profundice y se convierta en experto en al menos una cosa. Y luego los próximos años se convierten en expertos en otra cosa. Durante una carrera de más de 30 años, quiero que alguien tenga un conocimiento profundo, no solo lo básico en muchas cosas.

HLGEM
fuente