¿Cuáles son las ventajas de usar LISP y Haskell? ¿Me harán un mejor programador? [cerrado]

38

Sé que Lisp y Haskell son lenguajes de programación lógicos y funcionales respectivamente, pero ¿qué significa esto exactamente? ¿En qué se diferencian de otros idiomas? He oído que aprender esto te hará un mejor programador y mejorará tu lógica. ¿Es esto cierto y si voy aprendiendo Lisp o Haskell a un nivel competente, mi programación mejorará y seré mejor para manejar cualquier problema en cualquier idioma? Solo quería saber si valen la pena el esfuerzo de aprender. ¿También son útiles estos lenguajes en áreas como GUI y gráficos o solo son útiles para aplicaciones de consola?

    
pregunta Logan545 09.09.2013 - 18:08

3 respuestas

33

Es muy parecido a que aprender matemáticas mejorará tus habilidades analíticas y aprender literatura latina / clásica mejorará tus habilidades de escritura.

Las personas que diseñaron esos idiomas han pensado mucho sobre lo que significa escribir un programa. Y esos idiomas son el resultado de esas investigaciones.

Dicho esto, aprender Java también te hará un mejor programador. Y aprender C. Los beneficios reales provienen del aprendizaje de idiomas con diferentes filosofías. Entonces puede tener su propia opinión sobre la forma en que se debe escribir un programa.

Editar

Me doy cuenta de que esta respuesta no es tan útil para las personas que aún no han aprendido haskell o lisp. Aquí hay algunos ejemplos para explicar con más detalle lo que quiero decir

LISP

Lisp cree que la sintaxis debería ser mínima, y que todo debería ser una lista o una primitiva (Lisp significa Procesamiento de listas). Incluso los programas son principalmente listas que contienen otras listas y símbolos. Lisp le permite manipular programas como lista y generar nuevos programas sobre la marcha. De ahí el lema entero code is data and data is code .

La consecuencia directa es que los lenguajes Lisp le permiten definir cualquier interfaz que desee. Un buen ejemplo es compojure, que es un marco web de clojure. Aquí es cómo se ve una función de enrutamiento

(defroutes app-routes
  (GET "/" [] view/page)
  (GET "/api" [] (wrap-aleph-handler api/socket-handler))
  (route/resources "/static")
  (route/not-found "page not found"))

Otro buen ejemplo es el marco de las plantillas de hipo:

(html [:ul
  (for [x (range 1 4)]
    [:li x])])

Como puede ver, el resultado es tan conciso como en DSL como el bigote, pero le permite usar las funciones de idioma como (for [x (range 1 4)] block) . Aún mejor, tienes todas las herramientas para abstraer y estructurar tu código.

En otros idiomas, la sintaxis es más compleja. No puedes leer un programa Java como un montón de listas. Pero al usar Lisp, obtendrá una mejor idea de cómo debería ser una interfaz ideal, y lo que en su código se puede abstraer como información. También le ayuda a ver su lenguaje favorito como una estructura de big data y a comprender mejor su semántica.

Haskell

Haskell cree en la tipificación estática y la pureza fuertes. Las funciones puras son como las funciones matemáticas: se definen en un conjunto de valores y se asignan en otro conjunto. La función no tiene efectos secundarios, y los valores son inmutables. La pureza es interesante porque no es algo que un lenguaje de paradigma múltiple pueda tener. Un lenguaje es puro o no.

Una consecuencia es que no puedes realizar una acción de IO siempre que lo desees (los haskellers creen que esto es algo bueno). Las acciones IO se definen como transacciones, que son en sí mismas valores puros. El valor main de un programa haskell es una transacción IO ejecutada cuando ejecutas el programa.

Debe tratar explícitamente el flujo de datos en su programa. No puede hacer que dos componentes se comuniquen escribiendo & Leer cosas en una variable global. Tienes que construir y pasar valores.

Otra característica mencionada por Jimmy Hoffa es el rico sistema de tipos. Mientras que otros idiomas tienen escritura estática, en haskell puedes tener cosas como:

length :: [a] -> Int (función de una lista de a a int)

map :: (a -> b) -> [a] -> [b] (función que toma una transformada a to b y una lista de a, y devuelve una lista de b)

Lo bueno es que no necesito explicar lo que realmente hacen esas funciones: ya entiendes su comportamiento. Lo que es más, las funciones con esas firmas no pueden ser más que calcular la longitud de una lista y asignar una transformación en una lista.

En otros lenguajes escritos, las jerarquías de clase combinadas con la mutabilidad hacen que lidiar con esos tipos sea una pesadilla. Tienes que entender cosas como la covarianza y la contravarianza, que son imposibles de entender desde una perspectiva lingüística (es decir, simple, potente y segura).

O tomas el camino seguro (como scala) y terminas con un lenguaje realmente complejo, o tomas el camino simple y obtienes algo que es limitado (Google Go genéricos se limita a la lista y los mapas) o inseguro (Dart Genérico que son siempre covariantes).

Al usar haskell, aprendes principalmente sobre los beneficios de la pureza y cómo escribir código puro.

    
respondido por el Simon 09.09.2013 - 18:28
12

tl; dr Aprender nuevas cosas solo puede hacerte un mejor programador, pero ser un mejor programador no se trata de los idiomas en los que puede escribir código.

¿Cuáles son las ventajas de usar LISP y Haskell?

LISP:

  
  1. código homoicónico. Esto permite un código de auto-modificación estructurado.
  2.   
  3. Macros compatibles con la sintaxis. Permiten la reescritura del código repetitivo.
  4.   
  5. Pragmatismo. CL está diseñado para hacer cosas por profesionales que trabajan. La mayoría de los lenguajes funcionales no son, como regla.
  6.   
  7. Flexibilidad. Puede hacer muchas cosas diferentes, todo a velocidades razonables.
  8.   
  9. verrugas. El mundo real está desordenado. La codificación pragmática termina por tener que usar o inventar construcciones desordenadas. Common Lisp tiene   suficiente verruga que puede hacer las cosas.
  10.   

Podría decirse que las únicas razones reales para elegir en contra de CL es que   Las bibliotecas estándar están fechadas.

     

Me arriesgaré y diré que en el caso general, la sintaxis   No debería ser un problema para un trabajador de software profesional.

De: ¿Por qué es útil Lisp?

Haskell:

  

Haskell es un lenguaje de programación informática. En particular, es un   Lenguaje polimórficamente estáticamente tipificado, perezoso, puramente funcional,   bastante diferente de la mayoría de los otros lenguajes de programación. El idioma es   Llamado así por Haskell Brooks Curry, cuyo trabajo en lógica matemática   Sirve de base para lenguajes funcionales. Haskell se basa en   el cálculo lambda, de ahí el lambda que usamos como logotipo.

Puede leer allí una descripción de Funcional vs imperativo

De: enlace

¿Me harán un mejor programador?

Sí, por supuesto, saber más idiomas y paradigmas solo puede hacer que seas un mejor programador, pero en este caso:

No hay una sola herramienta, un solo libro, un solo paradigma de programación que te hará un mejor programador.

Aprender diferentes lenguajes de programación con diferentes paradigmas definitivamente te ayuda a ser un mejor programador, aprender a resolver problemas con diferentes enfoques también beneficia enormemente tu pensamiento lógico.

Ser un buen programador no tiene que ver con el lenguaje, sino con la capacidad de resolver cualquier problema en cualquier idioma. Y cuando no sabes el idioma, la capacidad de aprenderlo rápidamente y usarlo de manera efectiva.

  

Creo que cuanto más global sea tu forma de pensar, mejor desarrollador.   usted es.

     

Por ejemplo, puede agregar comentarios útiles a su código, preocuparse por la   La legibilidad de su código, la mantenibilidad. Presta atención a   pequeños detalles. Piensa antes de escribir !. Aprende sobre los patrones de diseño.   Siga las buenas prácticas.

Divulgación: esta es una publicidad descarada del peor tipo, porque es de mi blog.

    
respondido por el jsedano 09.09.2013 - 18:37
9

Cuando aprendes idiomas que están fuera del paradigma que usualmente operas, abrirá tu mente a soluciones alternativas en tu día a día e incluso puede ayudarte a comprender mejor algunas características en el idioma que elijas. Solo saber que esos idiomas no lo harán un mejor programador a menos que pueda tomar las lecciones que aprendió de esos idiomas y aplicarlas a las situaciones que ve todos los días.

Dicho esto, no se limita a los idiomas. Cuando se leen varias estructuras de datos que no ha visto o utilizado anteriormente, puede ayudar a ampliar el alcance de su conocimiento para que la próxima vez que encuentre un problema tenga una solución más posible.

    
respondido por el Jetti 09.09.2013 - 21:56

Lea otras preguntas en las etiquetas