¿Debo elegir un lenguaje de programación funcional?

10

Recientemente me ha preocupado más la forma en que escribo mi código. Después de leer algunos libros sobre patrones de diseño (y su implementación demasiado entusiasta, estoy seguro), he cambiado mucho mi pensamiento para encapsular lo que cambia. Tiendo a notar que escribo menos interfaces y más código orientado a métodos, donde me encanta arreglar la vida en clases antiguas con predicados, acciones y otras tareas delegadas. Tiendo a pensar que a menudo son las acciones las que cambian, así que las encapsulo. Incluso a menudo, aunque no siempre, descompongo las interfaces en un solo método, y luego prefiero usar un delegado para la tarea en lugar de forzar el código del cliente para crear una nueva clase.

Entonces supongo que me golpeó. ¿Debería estar haciendo programación funcional en su lugar?
Editar: puedo tener una idea errónea sobre la programación funcional.

Actualmente mi lenguaje de elección es C #, y vengo de un fondo C ++. Trabajo como desarrollador de juegos pero actualmente estoy desempleado.

Tengo una gran pasión por la arquitectura. Mis virtudes son código limpio, flexible, reutilizable y mantenible. No sé si he sido envenenado por estas formas o si es para mejor. ¿Tengo fiebre refactorizante o debo seguir adelante? Entiendo que esta podría ser una pregunta sobre "usar la herramienta adecuada para el trabajo" , pero me gustaría escuchar sus pensamientos.

¿Debo elegir un lenguaje funcional? Uno de mis factores de miedo es dejar la comodidad de Visual Studio.

Declaración
fuente
Puede probar F # si salir de Visual Studio es un factor decisivo.
Adam Lear
No es un factor decisivo. Simplemente no he probado muchas otras alternativas. Supongo que me da miedo no trabajar sin intellisense, refactorizar o herramientas similares y tengo la idea de que terminas escribiendo código en un editor de texto sin formato.
Declaración
Actualmente estoy desempleado ... ¿no debería ser esto lo primero que hay que arreglar?
Trabajo
Intentaría trabajar sin VS por un tiempo. Puede encontrar que trabajar de una manera muy minimalista puede ser divertido.
Zachary K
@ Job, sí, pero recientemente me han golpeado una serie de eventos bastante malos :) Me dañé el pie (bueno, no codifico con el pie, pero, aún así ...) hace poco después de dejar mi antiguo trabajo en busca uno nuevo.
Declaración del

Respuestas:

5

SI

Aprender cosas nuevas debería ser divertido. Y aprender una nueva forma de programar debería hacerte un mejor programador. Marque uno de Haskell o Erlang, ambos son funcionales pero son muy diferentes. Si elige a Haskell, busque algunas charlas de "Simon Payton Jones" en YouTube o podcasts. El chico es un gran orador.

Zachary K
fuente
1
Elegí esta respuesta por muchas razones. @Zachary K dice que podría ser divertido salir de la caja de un lugar conocido y tener otra perspectiva. No debería tener miedo de probar algo nuevo. No es el final de los días. Haskell es un lenguaje que me ha llamado la atención en varias discusiones un par de veces antes. No si necesito un lenguaje funcional, pero como dice @Toby Allen, es una excelente manera de ver cómo funcionan otras formas y estoy de acuerdo con esto después de probar algunos UnrealScript. @ammoQ perdió el punto un poco, pero no tenía una muy buena definición de mi pregunta. Todavía tengo sus preocupaciones.
Declaración
Encantado de ayudar. Diviértete
Zachary K
14

Santo * * * *. No hay bala de plata. Bajar. Relájate, respira hondo.

El hecho de que tenga una herramienta en su caja de herramientas no significa que esté obligado a usarla. Concéntrese en la tarea en cuestión, es decir, escribir un programa que funcione y refactorice cuando el código huela mal. No encapsule y resuma cada pequeño detalle solo porque pueda cambiar algún día en el futuro. En mi opinión, es mucho mejor comenzar directamente, KISS & YAGNI, y reaccionar ante los requisitos cambiantes cuando realmente cambian .

No creo que nadie aquí pueda decirle si un lenguaje funcional es más adecuado para sus necesidades. Porque no nos dijiste en qué estás trabajando.

usuario281377
fuente
Bueno, no estoy trabajando en nada en particular en este momento. Estoy entre trabajos. Soy / fui desarrollador de juegos.
Declaración del
3
Esta es una situación peligrosa con respecto a la sobre ingeniería. Sin plazo, sin retraso, demasiado tiempo para obsesionarse con los detalles.
user281377
(Muchas conjeturas por delante ya que no tengo una imagen clara en mi mente) Creo que mis "necesidades" se reflejaron más en la forma en que prefiero escribir código. No sé mucho sobre programación funcional, y supongo que el nombre podría engañarme un poco. Simplemente siento que mi preferencia no está tan orientada a objetos como pensaba. Entonces, ¿tal vez debería disfrutar trabajar en otro paradigma?
Declaración del
Sí, supongo que es el caso. Estoy en una fase de aprendizaje en este momento, por eso exploro las posibilidades de escribir de maneras particulares. En el trabajo, a menudo no había tiempo para escribir dicho código, y hay que respetar el código de conducta y mantener un estilo consistente entre los desarrolladores.
Declaración del
2
Está absolutamente bien cuando pruebas todas las herramientas disponibles ahora que estás entre trabajos, pero me temo que no podemos decirte si el zapato encaja o no.
user281377
12

Puedes recoger F # . Es un lenguaje funcional .NET, que le permitirá usar Visual Studio y reutilizar gran parte de su conocimiento .NET. Sus ensambles, por supuesto, se integran con ensamblajes de C # sin problemas (lo que le permite combinar fácilmente C #, C ++ / CLI y F # en un proyecto). El soporte F # viene con VS Pro o mejor, aunque no estoy seguro de si está habilitado de forma predeterminada.

Matěj Zábský
fuente
Creo que hay un complemento para F # en VS2008, pero es predeterminado en VS2010.
apoorv020
F # funciona incluso con un VS Shell gratuito.
SK-logic
6

En mi opinión, vale la pena probar un lenguaje funcional. Incluso si nunca lo usa directamente en un producto lanzado, aprenderlo seguramente ayudará a dar una perspectiva / punto de vista algo diferente sobre la programación. Incluso si terminas haciendo toda tu codificación "real" en C #, es muy probable que te ayude a mejorar el código que escribes en C #.

Como otros han mencionado, la opción obvia para alguien acostumbrado a Visual Studio es F #, que es básicamente un derivado de Ocaml / Caml / ML. En mi opinión, esa fue una buena opción por parte de Microsoft para presentar a la gente la programación funcional: es un lenguaje funcional completo, pero no tiene una sintaxis tan extraña como la tienen algunos (por ejemplo, mientras que los lenguajes basados ​​en Lisp sí lo tienen). tienen ventajas reales, los principiantes casi siempre tienen dificultades para leer).

Jerry Coffin
fuente
2

Si deberías.

Si elige uno puro, como Haskell, aprenderá no solo un nuevo idioma, sino también una nueva forma de pensar. Esto también puede ayudarlo más adelante en su trabajo de procedimiento / OO.

F #, por otro lado, no es puro, por lo que puede perderse fácilmente lo que es importante en la programación funcional. Usted puede, por así decirlo, continuar escribiendo programas de procedimiento que mutan una variable aquí, realizar algunos efectos secundarios allí, solo en la sintaxis de F #.

Ingo
fuente
De hecho, comencé en tryhaskell.org :) Es emocionante aprender cosas nuevas.
Declaración del
1

Si ya está usando C #, no necesita un nuevo lenguaje: con la combinación de métodos de extensión, lambdas y los tipos genéricos Func / Action, es bastante fácil escribir código funcional en C #, de esa manera puede usar un estilo funcional en los algoritmos donde tiene más sentido sin necesidad de cambiar toda la aplicación.

Tom Clarkson
fuente
1
Siempre necesitas otro idioma. Incluso si nunca lo usa, es una gran experiencia de aprendizaje aprender un nuevo idioma. Ningún idioma lo tiene todo.
Toby Allen
Siempre necesita aprender, pero no siempre necesita aprender otro idioma. El beneficio proviene de aprender los conceptos de programación funcional en lugar del lenguaje en sí, y puede hacerlo sin abandonar el entorno familiar y cambiar todo el proyecto. C # es lo suficientemente bueno y, en términos prácticos, existe una gran ventaja de tener solo el código funcional en los algoritmos que realmente se benefician de él.
Tom Clarkson
Sí, supongo que mi preocupación estaba más sesgada hacia si hay lenguajes más adecuados (sintácticamente) para trabajar con métodos / funciones de la manera en que a menudo me encuentro trabajando mientras lo estoy resolviendo. C # ofrece expresiones lambda y eso es bueno en sí mismo, pero por ejemplo, tener una función devuelve un valor sin ningún parámetro, produce un código como () => x, y tal vez hay formas más claras de hacerlo.
Declaración del
+1 @Toby. Recientemente, hojeé la referencia de UnrealScript y vi algunas soluciones de lenguaje interesantes para trabajar con estados et.c. Se traslada a C # en términos de pensar sobre el problema y tienen una solución bastante buena. Entonces sí, creo que aprendes mucho cuando sales de tu cajón de arena y sacas a tus vecinos por toda la arena y el juguete que encuentras :)
Declaración del