Respuestas:
para programación y algoritmos "normales":
para una experiencia de cambio de pensamiento:
por destruir tu mente y cruzar la línea entre padawan y Jedi Master:
No olvides Javascript .
Tiene características OO que no son las características habituales de OO. Es muy adecuado para funciones y cierres de orden superior, y los utiliza habitualmente. Permite muchos trucos de programación funcional. Es enormemente flexible.
Y es práctico, porque todo navegador serio lo tiene.
(Por supuesto, también tiene una serie de peculiaridades desagradables. Pocos lenguajes prácticos no)
C y ensamblaje de cómo funciona una computadora
Haskell y LISP para programación funcional y metaprogramación
APL para programación vectorial y concisa
bash o tcsh para saber cómo administrar una computadora mediante programación
Sugeriría Scheme.
Es un lenguaje de programación funcional derivado (la mayoría realmente piensa que es un dialecto) de Lisp. La principal diferencia con Common Lisp es que su enfoque es muy minimalista, extremadamente extremo . Por ejemplo, en una distribución normal de Scheme (cualquier esquema <R5, o Mit / GNU / Scheme) no encontrará una implementación de bucle: tendrá que hacer la suya utilizando la recursión de cola.
Es realmente expresivo y su sintaxis es excelente para aprender algo nuevo acerca de la programación, como en: solo mirando el código, obtienes una idea de cómo el compilador / intérprete funcionará a través de él.
Además, viene con el mejor libro de programación, estructura e interpretación de programas informáticos , que se puede descargar gratuitamente en el sitio web del MIT.
Aquí hay algunas lecciones en video que, espero, te interesarán de inmediato en este fascinante lenguaje: los hablantes son los autores de SICP: http://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman- conferencias /
LISP, preferiblemente Esquema en combinación con "Estructura e interpretación de programas de computadora" de Abelson & Sussman, le enseñará a pensar en términos distintos a los impuestos por C / C ++.
FORTH, específicamente un FORTH orientado a bloques, no uno orientado a archivos (como D85) le enseñará a controlar su locuacidad. Cuando no puede, bajo ninguna circunstancia, escribir una rutina de más de 16 líneas de 64 caracteres, se ve obligado a abstraer y factorizar.
Java es uno de los idiomas que más se enseña en las universidades de todo el mundo y hay una razón para ello. Aunque a menudo es como un dinosaurio, ofrece a todos una muy buena visión general de los conceptos de la programación moderna. NO te muestra cómo funciona la computadora en sí misma como Assembler o incluso el lenguaje C, que es mucho, mucho más abstracto. Pero los pilotos tienen que poder volar y no poder construir un avión por sí mismos. Aprende JAVA como una buena base para cualquier código que escribirá en los lenguajes más comunes (por resonancia) hoy en día: Java, c ++, php, c #, ruby (on rails) python, etc.
max
C # 3 con LINQ.
Es una gran introducción a la programación funcional.
Intente escribir un programa (o resolver el Proyecto Euler) y reemplazar tantos bucles como sea posible con llamadas LINQ.
Ayuda a dominar los conceptos de programación funcional y evaluación perezosa.
A partir de ahí, uno puede pasar a F #
Sin duda, diría Haskell. Y por dos razones:
Sugeriría Scala si uno viene del mundo C / Java.
No es un lenguaje de programación puramente funcional, pero usa OO para simular algunas características de programación funcional (por ejemplo, usar objetos para simular funciones de primera clase y funciones de orden superior).
Entonces, si está familiarizado con OO, Scala usa términos que ya conoce para explicar el mundo funcional.
Descubrí que es más fácil para mí comprender la programación funcional en Scala en lugar de sumergirme en una programación más funcional como Haskell, List ... etc.
Los lenguajes funcionales son los que siento que me ayudaron a llevarme a donde estoy hoy. Aunque estoy en el desarrollo de aplicaciones web, los conceptos aprendidos de los lenguajes funcionales me ayudan a ver soluciones a problemas que de otro modo no habría visto. Estos son los idiomas con los que trabajé en mi universidad:
Aprender estos idiomas lo ayudará a comprender el mundo de las abstracciones y cómo construir bloques de código que encapsulan otras funciones, ocultando los detalles de bajo nivel para que pueda concentrarse en los objetivos comerciales de alto nivel.
Hay una serie de lenguajes de programación que requerirán que pienses en un problema de una manera nueva (en relación a lo que estás acostumbrado, por supuesto). Los lenguajes más comunes para aprender después de haber aprendido un idioma imperativo, son funcionales y lenguaje lógico, por ejemplo, prolog y lisp .
Algunos idiomas están fuertemente influenciados por la teoría de categorías, como ocaml y Haskell, y algunos son idiomas cruzados como Curry (funcional y lógico). Curry es probablemente el lenguaje más alucinante que conozco, no solo porque obtuvo toda la alucinación de Haskell con la programación lógica, sino también por la integración con la programación basada en restricciones.
Otro lenguaje divertido es Occam-pi, ya que es muy concurrente, pero también debido al reciente puerto arduino .
Un programador completo tiene varias bolsas bajo la manga, y estas incluyen:
Todos estos le enseñan formas ligeramente diferentes de pensar y abordar los problemas.
no aprenderá correctamente ningún lenguaje de programación sin un objetivo claro. Sabiendo lo que quiere hacer con él, puede decidir qué programa se adapta a sus necesidades.
Por ejemplo, digamos sobre c #.
C # puede hacer programas web, programas de consola, ejecutables independientes, programas de juegos, programas Silverlight y programas móviles. Si bien la sintaxis es igual en casi todos los casos, pero funciona de manera diferente en cada escenario. Por ejemplo, un ejecutable independiente mantiene su información hasta que se descarga o el programa finaliza, mientras que un programa web, la información se destruye cada vez que carga una página, y en Silverlight, pasará la mayor parte del tiempo, luchando con un archivo xml
Y segundo, no gaste su tiempo con idiomas exóticos (por ejemplo, Haskel), oraciones corporativas, hay muy pocos programas que valgan la pena: java (rey de la colina), c # / vb.net, php y sql.
Hay un programa muy simple para escribir Applets Java llamado Procesamiento
Este lenguaje le dará una comprensión muy básica de variables, bucles y ese tipo de cosas, si recién está comenzando.
Algunas buenas sugerencias aquí. Probablemente iría con C o C ++ personalmente. Te obligan a lidiar con muchos conceptos que son muy importantes para comprender cómo funcionan las cosas, pero que tienden a ofuscarse en otros idiomas. Solo comprender cómo funcionan realmente las cosas lo ayudará como programador, incluso si el lenguaje que está usando más adelante oculta algunos de los detalles.
El ensamblaje es divertido si quieres profundizar incluso un nivel más bajo que eso, pero no esperes hacer mucho con él. :)
Yo recomendaría a Ruby. Ruby no exige que cambie los paradigmas, pero lo alienta a trabajar en múltiples paradigmas. Creo que la ventaja de esto es que, en lugar de sentirse frustrado por no poder trabajar de la manera en que está acostumbrado, usa un paradigma diferente por frustración con las limitaciones de hacer las cosas de la manera en que está acostumbrado.