Sí, de acuerdo con chrisaycock, C y montaje le enseñan lo que un ordenador es en realidad, C ++ es un muy ligero paso hacia arriba, pero todavía tendrá que manejar asuntos como punteros de memoria y problemas de alto rendimiento
Lacrymology
mh Prolog es genial, pero no veo cómo podría ser interesante para mejorar las habilidades generales de programación. Lo veo como un sistema alternativo de notación matemática / lógica, cuyas construcciones puede consultar, más que como un lenguaje de programación (describe estadísticas, no procedimientos). Editar: seguro cambia la forma en que piensas sobre algo, pero ese algo no está programando.
cbrandolino
Prolog seguro es la programación. Programación declarativa y arraigada en la lógica (y, por lo tanto, relativamente matemática), sí. Pero sigue programando. En cuanto al último punto, ¿crees que otro Lisp (es decir, Scheme) también lo haría?
3
Prolog es el lenguaje más conocido del paradigma lógico. Es importante enfocarse en todos los paradigmas que puede manejar, si lo que quiere es mejorar como programador, lo ayudará a obtener agilidad mental y le dará nuevas herramientas. Supongo que cualquier dialecto de Lisp haría, lo que veo en Common Lisp es que me parece el Lisp más utilizable en producción.
Lacrymology
1
Yo votaría por Scheme sobre Common Lisp. Supongo que depende si crees que alguna vez usarás Lisp en la producción. Si no, ve por Scheme.
Skilldrick
13
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)
@Phobia: JS hace OO de una manera totalmente diferente. No hay clases La herencia se realiza mediante prototipos: esencialmente, un objeto puede heredar de cualquier otro objeto. Las funciones son valores de primera clase; no solo puede pasarlos, sino que puede asignar fácilmente nuevos métodos a los objetos existentes. La forma en que JS oculta los datos también es bastante diferente de Java: todo lo que expone un objeto es público, por lo que oculta datos y métodos utilizando cierres. Tenga en cuenta que no hay 'OO canónico'; JS está un poco más cerca del OO 'original' que Smalltalk inventó que, por ejemplo, C ++, pero el OO de Java ahora también es 'canónico'.
9000
11
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
+1 en montaje. Nunca ves los lenguajes de alto nivel de la misma manera después de hacer un desarrollo significativo. Si está buscando algo que le haga pensar en la codificación de una manera realmente diferente, ASM lo hará.
Kurtis
9
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.
Gracias. Sin embargo, debo advertirle que las lecciones son fáciles de llevar a los programadores apasionados hasta las lágrimas.
cbrandolino
@cbrandolino - Cierto, nuestra clase de programación funcional dejó a muchas personas fuera del programa de informática.
jmort253
1
El esquema era minimalista, pero en R5 había crecido algunas verrugas, y en R6 es decididamente enorme. Es una pena, ya que era muy hermosa. Para un lenguaje realmente minimalista pero práctico, consulte Lua
Javier
@Javier, tienes razón. Editaré la respuesta para especificar las implementaciones.
cbrandolino
Estoy haciendo un esquema en el cajero automático de la universidad y lo odio. No porque sea un lenguaje funcional, quiero entrar en eso durante mucho tiempo. Sin embargo, la sintaxis realmente me mata. Hay tres tipos diferentes de llaves en el teclado (cuatro si cuenta los corchetes angulares) y solo está usando paréntesis. ¿Por qué? ¿Cuál es el problema con el uso de los otros?
Femaref
4
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.
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.
Es simplemente la mejor manera de aprender programación funcional. Casi todos los demás idiomas permiten efectos secundarios de forma predeterminada, pero pueden hacer las cosas funcionalmente (y sí, esto incluye los ML y Erlang: consulte esta charla para obtener más información ). Haskell es funcional de manera predeterminada, pero se puede hacer que use efectos secundarios cuando los necesite.
Definitivamente es un lenguaje que lo alienta a pensar antes de codificar. Para ser sincero, esto nunca ha sido realmente un problema para mí (en todo caso, es exactamente lo contrario). Dicho esto, parece que soy una minoría. La mayoría de los programadores con los que me he encontrado parecen ser más de la mentalidad de "código primero, hacer preguntas después" en lugar de "reflexionar sobre su problema durante días antes de codificar la mentalidad de la solución en 5 minutos" (que tiende a ser mi mentalidad) . Por lo tanto, este tipo de lenguaje puede proporcionar una experiencia valiosa para la mayoría de los programadores.
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:
C ++ (no funcional, pero conceptos como punteros y administración de memoria son invaluables)
Dr. Scheme
ML / Ocaml (¡Escribimos otro idioma usando ML / Ocaml!)
JavaScript (lenguaje funcional que está ganando terreno en la industria, tanto del lado del cliente como del lado del servidor)
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.
Ruby tiene uno de los marcos de prueba más potentes e intuitivos que he usado. No estoy seguro de haber entendido realmente cómo usar correctamente la burla y el trozo hasta que comencé a escribir pruebas en rubí. rSpec y Pepino son herramientas fantásticas.
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 .
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.
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.
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:
fuente
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)
fuente
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
fuente
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 /
fuente
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.
fuente
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
fuente
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 #
fuente
Sin duda, diría Haskell. Y por dos razones:
fuente
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.
fuente
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.
fuente
Ruby tiene uno de los marcos de prueba más potentes e intuitivos que he usado. No estoy seguro de haber entendido realmente cómo usar correctamente la burla y el trozo hasta que comencé a escribir pruebas en rubí. rSpec y Pepino son herramientas fantásticas.
fuente
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 .
fuente
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.
fuente
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.
fuente
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.
fuente
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. :)
fuente
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.
fuente