programming-languages - principiantes - escuelas de ingles gratis
Los beneficios de aprender idiomas que no usarĂ¡s (19)
He leído varias veces que aprender un idioma como Haskell, Lisp o Smalltalk de alguna manera lo hará un mejor programador mientras programa en otros idiomas.
¿Hay algo más que evidencia anecdótica para esa afirmación? ¿O es simplemente la manera en que las personas racionalizan haber pasado mucho tiempo aprendiendo un lenguaje de programación que nunca usarán?
¿Cuáles son los beneficios de aprender matemáticas o física que no usarás, o los beneficios de estudiar filosofía o lenguas muertas?
Es el logro intelectual y la iluminación lo que importa, serás una persona más sabia con cualquier cosa nueva que aprendas, no importa si son lenguajes de programación, literatura, juegos de rol ... por supuesto, si están relacionados con tu campo de trabajo, entonces en realidad encontrarás un uso, tarde o temprano :-)
Algunos ejemplos que vienen a la mente:
Conocer C y tener que lidiar con la administración de la memoria y las estructuras de datos de tipo "hágalo usted mismo" puede ayudarlo a comprender los problemas de rendimiento al programar en un lenguaje de nivel superior, donde esos detalles están ocultos para usted.
A la inversa, aprender un lenguaje OO puede afectar su programación en C: con, por ejemplo, el concepto de Polimorfismo que le indica que use los punteros de función de formas que de otra forma no tendría.
Aprender un idioma en el que las funciones son objetos de primera clase que pueden transmitirse puede hacerle pensar en técnicas similares en otros idiomas, incluso si, en esos otros idiomas, tiene que hacer los métodos de las funciones en los objetos que se transmiten.
Aprender sobre la forma en que Erlang maneja la concurrencia puede hacer que reconsidere la cantidad de estado compartido que usa entre hilos en otros idiomas.
Cualquier idioma que tenga una característica incorporada que le resulte útil puede solicitarle que implemente su propia versión de esa característica en otro idioma que no la tenga, y por lo tanto le permitirá resolver problemas de maneras que quizás no haya pensado si no había sido expuesto a la característica en el idioma que la tiene incorporada.
Aprender sobre Interfaces en Java puede hacerle pensar acerca de los beneficios de especificar con precisión sus interfaces (pequeña "i") en otros idiomas que no las tienen como una construcción formal en un sistema de tipos.
Sin duda hay otros.
Aprender profundamente el idioma solo para aprenderlo tiene muy pocos beneficios. Si tiene muchas tareas y no sabe un lenguaje que sea ideal para resolverlo, entonces tiene sentido aprender ese idioma. De lo contrario, tiene sentido dedicar tiempo a convertirse en experto en idiomas que ya conoce.
Aprender un idioma no es un evento binario. Si eres un programador decente, deberías poder confiar en tus propios instintos en cuanto a si un lenguaje te ofrece una nueva versión de tu oficio.
Prácticamente todos los idiomas que vale la pena considerar en estos días se pueden descargar y probar en un par de minutos. Así que hazlo, elige uno y pruébalo.
Hay un número limitado de casos en los que este enfoque de "laissez-faire" se queda corto. Si eres un principiante completo, por supuesto que no funciona. Cuando aprendí C por primera vez, tuve que golpearme, pero resultó que valió la pena porque me hizo entender los punteros, la referencia de memoria y la asignación dinámica de una manera que no lo había hecho anteriormente.
Pero si ya lo sabes, solo busca y busca un lenguaje que encienda tu bombilla.
Aprender un idioma, especialmente uno que practica un nuevo paradigma, es muy beneficioso para todos los programadores. Por ejemplo, el programa de aprendizaje ayudará a alguien a entender la programación funcional. El programador puede luego practicar lo que aprendió con otros lenguajes como C #. Ella puede pensar en nuevas formas de hacer las cosas.
Además, a medida que los idiomas evolucionan, es muy probable que el idioma que utilice adopte algunas características de otros idiomas. Después de haber aprendido a mí mismo a Ruby, pude comprender los cambios en C # 3.0 mucho más fácilmente.
Bryond lo que ya se ha dicho, realmente me gustan los nuevos lenguajes solo porque puede traer un nuevo interés a la programación. Aprendes diferentes maneras de abordar los problemas y las fortalezas / debilidades de ciertos idiomas. Es algo nuevo que aprender y cualquier buen programador debe esforzarse por aprender siempre cosas nuevas. Mezcla tu rutina diaria de programación en el mismo idioma durante años.
También me gusta lo que todos han dicho sobre la perspectiva de la programación.
Creo que aprender idiomas siempre te beneficiará incluso si no los usas nuevamente. Comencé a jugar con Ioke como un intento de aprender algo experimental y, debido a ello, mi JavaScript ha mejorado porque ciertas ideas se han consolidado.
aprender un nuevo idioma posiblemente le proporcionará nuevos conocimientos que intentará traducir a su idioma principal.
Diferentes idiomas tienen diferentes maneras de implementar las mismas ideas. Al aprender nuevos idiomas, obtiene una perspectiva diferente sobre cómo se pueden lograr las cosas y luego puede usar ese conocimiento para abordar cómo programa en su entorno actual. Piensa en programación orientada a objetos y funcional. Los programadores de OO pueden aprender mucho sobre parrellización de lenguajes como C.
En mi humilde opinión, se trata de aprender un nuevo paradigma de programación. Si conoces Java y luego C #, no hay mucha ganancia, una vez que ambos tengan casi el mismo "tipo de programación".
Pero si aprendes un lenguaje funcional o dinámico, por ejemplo, estás obligado a pensar de otra manera, y eso probablemente te ayudará a programar mejor en tu idioma favorito.
Es algo así como: " Es muy fácil hacer esto en {el idioma diferente que aprendiste}. Debe haber una mejor manera de hacerlo en {idioma que ya conoces} ". Y luego reconsidera y crea una forma más elegante de hacerlo en {lenguaje que ya conoce}.
Es completamente subjetivo, pero hace mucho tiempo cuando, después de tomar un curso de licenciatura en Haskell, noté que mi estilo de programación en C se volvió más ''como Haskell'' por un tiempo; Utilicé muchas funciones simples y recursivas. También noté que este estilo de programación parecía producir algunos de los mismos beneficios que la programación de Haskell; los errores eran menos, el código era más fácil de entender (aunque más lento).
Entonces, mientras que aprender otro lenguaje de programación puede no hacer que todos sean mejores programadores, definitivamente fue una experiencia de aprendizaje para mí, personalmente.
No creo que haya ninguna evidencia sólida, creo que esto es algo más intuitivo. Aprender un idioma totalmente diferente te ayudará a ver cosas totalmente diferentes. O tal vez no lo hará. En cualquier caso, ¿qué hay de malo en aprender algo?
No puedo arrojar mucha luz sobre esto en términos de lenguajes de programación , pero parece muy similar al "¿por qué aprender un idioma muerto?" argumento que rodea al latín, y gran parte del razonamiento allí puede aplicarse aquí.
No sé que habrá habido un estudio muy riguroso sobre los beneficios de la exposición a lenguajes de programación múltiple en la capacidad de programación general, pero diría que los estudios sobre por qué aprender un idioma humano extranjero (que nunca se puede usar en la práctica) Es beneficioso en general sería igualmente bueno para estudiar lenguajes de programación extranjeros . Los beneficios que se atribuyen a menudo incluyen la mejora de las capacidades cognitivas, así como una mejor comprensión de la lengua materna.
Aquí hay algunos enlaces a los estudios.
Como anécdota, me quejé mucho por tomar COBOL, y nunca lo usé realmente , pero pude aplicar las cosas que aprendí en esa clase en mi primer trabajo.
No tengo pruebas sólidas, pero realmente aprecio la forma diferente de ver los problemas que he tenido desde que aprendí lisp (lo mismo ocurre con Python y C).
Sin embargo, la clave no es necesariamente aprender diferentes idiomas, creo que la clave son los diferentes puntos de vista que obtienes al aprender diferentes estilos de programación.
Los buenos ejemplos son funcionales, imperativos, orientados a objetos, etc. Además, existen diferencias comunes de diseño que se interpretan frente a los lenguajes compilados; escritura estática vs dinámica, etc.
Aunque la mayoría de las personas realizan la mayoría de sus programaciones con un solo estilo (generalmente, POO en los últimos años), creo que todos los programadores deberían conocer varios estilos para que puedan ver mejor las deficiencias de su propio estilo.
Pasé un tiempo estudiando clojure, aunque sabía que no lo usaría en el corto plazo (sobre todo porque realmente no puedo desplegar en la JVM).
Tiene conceptos que no son compatibles con los idiomas que uso (C # / C / C ++ / Python / Perl) y quería saber qué me faltaba y también si valdría la pena buscar en las bibliotecas que pretenden agregar estas características.
Específicamente, estoy muy interesado en comprender las macros de estilo Lisp y el soporte directo de concurrencia. También dediqué un tiempo a leer la implementación, específicamente las estructuras de datos, que fueron muy educativas; es bueno ver una implementación de calidad de las estructuras de datos persistentes para aprender cómo funcionan (y ofrecerle inmutabilidad sin sacrificar mucho el rendimiento).
Se han hecho algunos buenos puntos.
Me gustaría agregar que aprender idiomas que no usará en el trabajo de producción puede ser valioso.
Para apreciar y absorber mejor los argumentos y métodos en textos y documentos que mejorarán la capacidad de programación en lenguajes que utilizo para trabajos de producción (por ejemplo, MIX / MMIX para Art of Computer Programming de Knuth; RATFOR para Kernighan y Plauger''s Software Tools; Sintaxis basada en ALGOL para algunos pseudocódigos aunque nunca escribí código ejecutable en ALGOL fuera de la Universidad)
Para poder verificar o crear prototipos de programas que se escribirán en un idioma diferente (por ejemplo, algunas rutinas para computación numérica en C se pueden verificar o escalar rápidamente usando idiomas que tengan la funcionalidad apropiada incorporada, como Fortran, Python o Haskell)
Aprender un nuevo idioma puede dar una idea de cómo podría usarse para resolver más fácilmente los problemas que se dejaron de lado debido a limitaciones de tiempo o complejidad.
Si le da credibilidad a los muchachos de la Programación Pragmática , considere los consejos de la página 14 de su primer libro :
Aprende 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 atascarse en una rutina.
Un gran efecto secundario de aprender nuevos idiomas es el potencial de aplicación en su idioma existente.
Por ejemplo, soy un programador de Java y me tomé el tiempo para aprender mi primer lenguaje funcional (Haskell). Recientemente me pidieron que aprendiera Scala para un próximo proyecto. Esto es extremadamente fácil ya que entiendo los conceptos de guardias, recursión, etc. de Haskell.
La programación es una forma de pensar, no de escribir código en el lenguaje de programación X
: eso es "codificación", no "programación".
Al saber al menos algo sobre más de un lenguaje de programación, preferiblemente a través de diferentes paradigmas, por lo tanto imperativo / OOP / funcional / lógico, entrena esa forma de pensar los problemas fuera del contexto de los detalles específicos y las peculiaridades del lenguaje X
Creo que esto siempre mejora tus habilidades para ser un mejor programador.