¿Puedes mejorar tus habilidades de programación aprendiendo otros paradigmas de lenguaje?

9

Si es así, ¿puede decirme cómo aprender un nuevo paradigma cambió su enfoque para resolver problemas de programación incluso si el problema está en otro paradigma / lenguaje / tecnología?

Realmente apreciaré si me puede decir de una manera específica, cómo sus habilidades de programación X (es decir: JAVA / C # / C ++) mejoraron al aprender Y (es decir: Scheme / Prolog / Lisp).

Además, ¿qué paradigmas sugiere que ayudan más a convertirse en un buen programador?

Mis experiencias solo están estructuradas - OOP, imperativo - procesal y, en cierta medida, metaprogramación de plantillas, pero mi objetivo no es aprender otro idioma, sino aprender diferentes enfoques para resolver problemas.

¡Gracias!

Armando
fuente
1
Creo que las respuestas a esto serán alguna forma de un rotundo .
R0MANARMY

Respuestas:

7

Intento aprender al menos 1-2 idiomas nuevos cada año. Lo que más obtuve fue aprender un lenguaje funcional (F #) que cambió la forma en que veo la resolución de problemas: I = ahora trato de decirle a la máquina qué hacer en lugar de cómo hacerlo, especialmente en C #, donde uso mucho Linq y objetos inmutables ahora que conozco los beneficios de usarlos. También uso muchas funciones de orden superior (métodos como parámetros) y mi estilo de codificación ha cambiado (mejorado) como resultado.

Dror Helper
fuente
1
Lo mismo para mi programación de Python. Habría fallado miserablemente al escribir todo ese código de generación de árbol y analizador en cierto modo si no hubiera aprendido las técnicas que terminé usando (los árboles implican una recursión o una versión enrollada a mano, el generador de analizador consiste de funciones de orden superior y está inspirado en los combinadores del analizador sintáctico, etc.) al aprender Haskell.
Gracias, reafirmaste lo que sospechaba ... ¡Gracias de nuevo!
Armando
2

Absolutamente. Cada lenguaje de programación que aprendas tendrá una forma diferente de hacer ciertas cosas. Algunas cosas te volverán loco, algunas cosas que te encantarán y otras cosas crecerán lentamente en ti.

Nunca es una pérdida de tiempo aprender al menos los conceptos básicos de un nuevo idioma.

Toby Allen
fuente
1

Ok, aquí hay un ejemplo que he encontrado.

Aprendí un lenguaje relativamente antiguo (VB6) para un proyecto en algún código antiguo que teníamos.
El lenguaje está muy orientado a Windows, pero no hay tantas clases poderosas de alto nivel como las que tenemos en .Net framework.

Tuve que hacer algunas manipulaciones de imágenes, y eso me presentó a las funciones API de Windows para las manipulaciones de imágenes.

Después de enterarme de que me dio una mejor comprensión de las clases GDI de .Net. Y la comprensión de que a veces usar API de Windows será mucho más rápido (menos ajuste de función).

Eso es para mostrar que incluso cuando aprendes código antiguo, aún puedes aprender y obtener otra perspectiva.

Yochai Timmer
fuente
1

¿Puedes mejorar tus habilidades de programación aprendiendo otros paradigmas de lenguaje?

En mi experiencia, definitivamente sí. Tener varias formas diferentes de atacar un problema es como una paleta de herramientas. Un día usted (como lo hice) tendrá uso para estas otras herramientas. O posiblemente no. Todo depende. Algunos ejemplos:

Los idiomas generalmente no están solos, vienen con un entorno. Pasé un poco de tiempo aprendiendo un idioma extraño conocido como awk . Se basa en la coincidencia de patrones utilizando "expresiones regulares". Al tratar de aprender el STL de C ++ (no muy exitoso) aprendí acerca de los mapas. Combinando estos dos conceptos, podría escribir rápidamente algunas utilidades de transformación de texto en Pearl (el único lenguaje disponible en la plataforma).

Principalmente por diversión intenté aprender Erlang (no muy exitoso). Tiene una biblioteca de funciones conocida como OTP que implementa, entre otras cosas, una forma de manejar errores, a veces conocida como dejar que falle y tener un monitor que reinicia las funciones. He usado esta idea en algunas áreas, a veces simplemente dejando que las cosas fallen en lugar de hacer infinitas pruebas.

Intentar aprender Haskell (de nuevo, no con mucho éxito) realmente me ha abierto los ojos hacia otras formas de atacar los problemas. El tipo de programación funcional (en mi opinión) comienza con la escritura de código que dice qué resultado desea, no con la escritura de los pasos necesarios para llegar allí. Creo que esto realmente me ayudó a escribir un mejor código SQL.

Últimamente probé un poco de javascript. Y encontró un entorno conocido como noder. No se necesita código para crear un pequeño servidor de automatización del hogar.

Para ponerlo en perspectiva, la mayor parte de mi juego en varios idiomas fue (y está) en un nivel bastante superficial principalmente para tener una idea de lo que la gente está hablando. Hay muy pocos idiomas en los que puedo ser productivo.

ghellquist
fuente
0

También aprendí mucho al incursionar en un lenguaje funcional durante algún tiempo. Sin embargo, lo que aprendí fue menos sobre hacer las cosas de manera diferente a los lenguajes imperativos, más sobre cómo facilitar la concurrencia. Se puede aplicar con la misma facilidad en un lenguaje imperativo que en un lenguaje funcional, pero por alguna razón, la mayoría de los ejemplos que he encontrado en lenguajes imperativos fueron más complicados. (Otras cosas resultaron ser mucho más complicadas en lenguajes funcionales).

Otra cosa que aprendí de un nuevo lenguaje fueron los patrones de programación adicionales. Había leído acerca de muchos de ellos, pero al ver y usar varias implementaciones realmente buenas de ellos, fue más fácil de entender y realmente llevé a casa su utilidad y cuándo son apropiados.

usuario1118321
fuente