Pregunta

Realmente siento que debería aprender Ceceo y hay muchos buenos recursos disponibles para ayudarme a hacerlo.

No me desanima la sintaxis complicada, pero ¿en qué parte de la "programación comercial tradicional" encontraría lugares en los que tendría sentido usarlo en lugar de un lenguaje procedimental?

¿Existe alguna aplicación comercial asesina que haya sido escrita en Lisp?

¿Fue útil?

Solución

Uno de los principales usos de Lisp es la Inteligencia Artificial.Un amigo mío en la universidad tomó un curso de posgrado en IA y para su proyecto principal escribió un "Apagar las luces" solucionador en Lisp.Varias versiones de su programa utilizaron rutinas de IA ligeramente diferentes y las pruebas en aproximadamente 40 computadoras arrojaron resultados bastante interesantes (desearía que estuviera en algún lugar en línea para poder vincularlo, pero no creo que lo esté).

Hace dos semestres utilicé Scheme (un lenguaje basado en Lisp) para escribir un programa interactivo que simulaba la rutina "Quién está primero" de Abbott y Costello.Las entradas del usuario se compararon con algunas estructuras de datos bastante complicadas (parecidas a mapas en otros idiomas, pero mucho más flexibles) para elegir cuál sería la respuesta adecuada.También escribí una rutina para resolver un 3x3. rompecabezas de diapositivas (un algoritmo que podría extenderse fácilmente a rompecabezas de diapositivas más grandes).

En resumen, aprender Lisp (o Scheme) puede no generar muchas aplicaciones prácticas más allá de la IA, pero es una experiencia de aprendizaje extremadamente valiosa, como muchos otros han afirmado.Programar en un lenguaje funcional como Lisp también te ayudará a pensar de forma recursiva (si has tenido problemas con la recursividad en otros lenguajes, esto podría ser de gran ayuda).

Otros consejos

Lisp es un lenguaje grande y complejo con un tiempo de ejecución grande y complejo para soportarlo.Por esa razón, Lisp es más adecuado para problemas grandes y complicados.

Ahora, un complejo El problema no es lo mismo que un complicado uno.A complejo El problema es uno con muchos pequeños detalles, pero que no es difícil.Escribir un sistema de reservas para aerolíneas es una tarea compleja, pero con suficiente dinero y programadores no lo es.¿Obtienes la diferencia?

Un problema complicado es aquel en el que el tradicional dividir y conquistar no funciona.Controlar un robot, o trabajar con datos no tabulares (idiomas, por ejemplo), o situaciones muy dinámicas.

Lisp se adapta muy bien a problemas en los que la solución debe ser ampliable;el ejemplo clásico es el editor de texto emacs.Es totalmente programable y, por tanto, un entorno de programación por derecho propio.

En su famoso libro PAIP, Norvig dice que Lisp es ideal para la programación exploratoria.Es decir, programar una solución a un problema que no se comprende del todo (a diferencia de un sistema de reservas online).En otras palabras:Problemas complicados.

Además, aprender Lisp te recordará algo fundamental que se ha olvidado:La diferencia entre Von Neumann y Turing.Como sabemos, el modelo de computación de Turing es un modelo teórico interesante, pero inútil como modelo para diseñar computadoras.Von Neumann, por otro lado, diseñó un modelo de cómo debían ejecutarse las computadoras y la computación:El modelo de Von Neumann.Lo fundamental del modelo de Von Neumann es que usted tiene una sola memoria y almacena allí tanto su código como sus datos.Observe cuidadosamente que un programa Java (o C#, o lo que quiera) es una manifestación del modelo de Turing.Usted fija su programa en concreto, de una vez por todas.Entonces espera poder manejar todos los datos que se le arrojan.

Lisp mantiene el modelo de Von Neuman;No existe una frontera definida y predeterminada entre el código y los datos.La programación en Lisp abre tu mente al poder del modelo de Von Neumann.Programar en Lisp te hace ver viejos conceptos bajo una nueva luz.

Finalmente, al ser interactivo, aprenderá a interactuar con sus programas a medida que los desarrolla (en lugar de compilarlos y ejecutarlos).Esto también cambia la forma en que programa y la forma en que ve la programación.

Con esta introducción finalmente puedo ofrecer una respuesta a tu pregunta:¿Encontrarás lugares donde eclipse a los idiomas "tradicionales"?

Si eres un programador avanzado, necesitas herramientas avanzadas.Y no hay herramienta más avanzada que Lisp.O, en otras palabras:La respuesta es sí si tus problemas son difíciles.De lo contrario, no.

En respuesta a @lassevk:

alt text

sintaxis complicada??

La sintaxis de ceceo es increíblemente simple.

Aplicación asesina escrita en ceceo: emacs.Lisp le permitirá extender emacs a voluntad para hacer casi cualquier cosa que se le ocurra y que podría hacer un editor.

Pero, sólo deberías aprender a cecear si desear y es posible que nunca llegues a usarlo en el trabajo, pero aun así es increíble.

Además quiero agregar:incluso si encuentra lugares donde lisp tenga sentido, probablemente no convencerá a nadie de que debería usarse en java, c++, c#, python, ruby, etc.

No puedo responder por experiencia de primera mano, pero deberías leer lo que Pablo Graham escribió en ceceo.En cuanto a la parte de la "aplicación asesina", lea Superando los promedios.

Programé en Lisp profesionalmente durante aproximadamente un año y definitivamente vale la pena aprenderlo.Tendrá una oportunidad incomparable de eliminar la redundancia de su código, al poder reemplazar todo el código repetitivo con funciones cuando sea posible y macros cuando no.También podrá acceder a una flexibilidad incomparable en tiempo de ejecución, traduciendo libremente entre código y datos.Por lo tanto, las situaciones en las que las acciones del usuario pueden desencadenar la necesidad de construir estructuras complejas dinámicamente es donde Lisp realmente brilla.Los programadores de vuelos de aerolíneas populares están escritos en Lisp, y también hay una gran cantidad de CAD/CAM en Lisp.

Lisp es muy útil para crear pequeños DSL.Tengo una copia de Lisp in a Box ejecutándose en el trabajo y escribí pequeños DSL para interrogar bases de datos del servidor SQL y generar capas de datos, etc. en C#.Todo mi código repetitivo ahora está escrito en macros Lisp que salen a C#.Genero HTML, XML, todo tipo de cosas con él.Si bien desearía poder usar Lisp para la codificación diaria, Lisp puede brindar beneficios prácticos.

Si te gusta la programación, deberías aprender Lisp por el puro placer de hacerlo. XKCD Expresa perfectamente la iluminación intelectual que sigue.Aprender Lisp es para el programador lo que la meditación es para el monje budista (y lo dije sin ninguna connotación blasfema).

Cualquier idioma parece mucho más difícil cuando no se utilizan las convenciones de sangría comunes de un idioma.Cuando uno sigue los de Lisp, ve cómo expresa una estructura de árbol de sintaxis con bastante facilidad (nota, esto no es del todo correcto porque la vista previa miente un poco;las r deben alinearse con las fns en el argumento de ordenación rápida recursiva):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))

Descubrí que aprender un nuevo lenguaje siempre influye en tu estilo de programación en lenguajes que ya conoces.A mí siempre me hizo pensar de diferentes maneras para resolver un problema en mi lenguaje principal que es Java.Creo que, en general, simplemente amplía tu horizonte en términos de programación.

Tomé una "clase de ceceo" en la universidad en los años ochenta.A pesar de asimilar todos los conceptos presentados en la clase, me quedé sin cualquier Aprecio por lo que hace que Lisp sea genial.Me temo que mucha gente ve Lisp como un lenguaje de programación más, que es lo que ese curso en la universidad hizo por mí hace tantos años.Si ve a alguien quejándose de la sintaxis de Lisp (o de la falta de ella), es muy probable que sea una de esas personas que no ha logrado captar la grandeza de Lisp.Yo fui una de esas personas durante mucho tiempo.

No fue hasta dos décadas después, cuando reavivé mi interés por el ceceo, que comencé a "captar" qué es lo que hace que el ceceo sea interesante (al menos para mí).Si logras aprender a cecear sin que te sorprendan los cierres y las macros de ceceo, probablemente no hayas comprendido el punto.

Es posible que aprender LISP/Scheme no le proporcione mayor espacio de aplicación, pero le ayudará a tener una mejor idea de la programación funcional, sus reglas y sus excepciones.

Vale la pena invertir tiempo solo para aprender la diferencia entre la belleza de seis funciones puras anidadas y la pesadilla de seis funciones anidadas con efectos secundarios.

De http://www.gigamonkeys.com/book/introduction-why-lisp.html

Uno de los mitos más repetidos sobre Lisp es que está "muerto". Si bien es cierto que el LISP común no es tan utilizado como, por ejemplo, Visual Basic o Java, parece extraño describir un lenguaje que se continúa utilizando para un nuevo desarrollo y que continúa atrayendo a nuevos usuarios como "muertos". Algunas historias recientes de éxito de Lisp incluyen Viaweb de Paul Graham, que se convirtió en Yahoo Store cuando Yahoo compró su compañía;El sistema de precios y de compras de tarifas aéreas de ITA Software, QPX, utilizado por el vendedor de boletos en línea Orbitz y otros;El juego de Naughty Dog para PlayStation 2, Jak y Daxter, que se escribe en gran medida en un dialecto Lisp específico de dominio, Naughty Dog inventado llamado Goal, cuyo compilador está escrito en LISP común;y el Roomba, la aspiradora robótica autónoma, cuyo software está escrito en L, un subconjunto compatible hacia abajo de LISP común.Quizás aún más revelador es el crecimiento del sitio web de Common-Lisp.net, que aloja proyectos LISP comunes de código abierto, y la cantidad de grupos de usuarios LISP locales que han surgido en los últimos años.

"Vale la pena aprender Lisp por la profunda experiencia de iluminación que tendrás cuando finalmente lo consigas;esa experiencia te convertirá en un mejor programador por el resto de tus días, incluso si nunca usas mucho Lisp".

--Eric S.Raymond, "Cómo convertirse en un hacker"

http://www.paulgraham.com/avg.html

Estoy de acuerdo en que Lisp es uno de esos lenguajes que quizás nunca uses en un entorno comercial.Pero incluso si no lo logras, aprenderlo definitivamente ampliará tu comprensión de la programación en su conjunto.Por ejemplo, aprendí Prolog en la universidad y, aunque nunca lo usé después, me brindó una mayor comprensión de muchos conceptos de programación y (en ocasiones) una mayor apreciación por los lenguajes que uso.

Pero si vas a aprenderlo... por supuesto, lee En ceceo

Vale, puede que sea raro, pero realmente no me gustan mucho los ensayos de Paul Graham y sobre Lisp es un libro muy complicado si aún no tienes conocimientos de Common Lisp.En cambio, diría que optes por Siebel's. Ceceo común práctico.En cuanto a las "aplicaciones asesinas", Common Lisp parece encontrar su lugar en tiendas especializadas, como ITA, entonces, si bien no existe una aplicación sinónimo de CL como lo es Rails para Ruby, hay lugares en la industria que la usan si investigas un poco.

Si tienes que preguntarte si deberías aprender a cecear, probablemente no sea necesario.

¡Aprender lisp pondrá a Javascript bajo una luz completamente diferente!Lisp realmente te obliga a comprender tanto la recursividad como el paradigma completo de "funciones como objetos de primera clase".Véase el excelente artículo de Crockford sobre Esquema frente a Javascript.Javascript es quizás el lenguaje más importante hoy en día, por lo que comprenderlo mejor es inmensamente útil.

Script-Fu de Gimp es labial.Esa es una aplicación que mata el Photoshop.

¿Sintaxis complicada?La belleza de Lisp es que tiene una sintaxis ridículamente simple.Es solo una lista, donde cada elemento de la lista puede ser otra lista o un tipo de datos elemental.

Vale la pena aprenderlo por la forma en que mejora su capacidad de codificación para pensar y utilizar funciones como un tipo de datos más.Esto mejorará la forma en que codifica en un lenguaje imperativo y/u orientado a objetos porque le permitirá ser más flexible mentalmente con la forma en que está estructurado su código.

Para agregar a las otras respuestas:

Porque el SICP curso (los videos están disponibles aquí) es increíble:te enseña ceceo y mucho más!

¿Aplicación asesina? Franz Inc. tiene una larga lista de historias de éxito, pero esta lista solo incluye usuarios de AllegroCL...Probablemente haya otros.Mi favorito es la historia de Naughty Dog, ya que era un gran fanático de los juegos Crash Bandicoot.

Para aprender Common Lisp, recomiendo Ceceo común práctico.Tiene un enfoque práctico que, al menos para mí, lo hizo más fácil que otros libros que he visto.

Podrías usar Clojure hoy para escribir pruebas y scripts sobre Java VM.Si bien hay otros lenguajes Lisp implementados en JVM, creo que Clojure hace el mejor trabajo al integrarse con Java.

Hay ocasiones en las que el propio lenguaje Java interfiere con la escritura de pruebas para el código Java (incluida la "programación comercial tradicional").(No lo digo como una crítica a Java, otros lenguajes sufren el mismo problema, pero es un hecho.Dado el tema, no Java, no daré más detalles.Siéntase libre de comenzar un nuevo tema si alguien quiere discutirlo). Clojure elimina muchos de esos obstáculos.

Lisp se puede utilizar en cualquier lugar donde se utilice programación tradicional.No es tan diferente, simplemente es más poderoso.¿Escribir una aplicación web?¿Puedes hacerlo en Lisp, escribiendo una aplicación de escritorio?puedes hacerlo en Lisp, lo que sea, probablemente puedas hacerlo en Lisp, Python o cualquier otra programación genérica (hay algunos lenguajes que son adecuados para una sola tarea).

El mayor obstáculo probablemente será la aceptación de su jefe, sus compañeros o sus clientes.Eso es algo con lo que tendrás que trabajar con ellos.Elegir una solución pragmática como Clojure que pueda aprovechar la base de instalación actual de la infraestructura Java, desde la JVM hasta las bibliotecas, podría ayudarle.Además, si tiene un programa Java, puede crear una arquitectura de complemento y escribir complementos de Clojure para él y terminar escribiendo la mitad de su código en Clojure.

No es una razón, pero (trivial) AutoCAD tiene soporte de tiempo de ejecución LISP y DCL.Es una forma conveniente de escribir macros complejas (incluida la automatización ActiveX) si no desea utilizar VBA o sus SDK de C++ o .NET, o si una expresión DIESEL no es suficiente.

Muchas de las funciones de AutoCAD son en realidad rutinas LISP.

Este es un tema que yo mismo he reflexionado por un tiempo pero realmente no he llegado a una decisión, como siempre el tiempo es el principal problema...;)

Y como no encuentro estos enlaces hasta el momento en este post los agrego por interés público:

Historia de éxito y fracaso:Ceceo en JPL

Historia de éxito realmente impresionante:Lisp en uso en la corporación Orbitz

Comparación y análisis de si utilizar Lisp en lugar de Java:Lisp como alternativa a Java

¡La sintaxis es irrelevante, la legibilidad no!

No digo que sea una aplicación excelente, pero parece que podría ser genial.http://code.google.com/p/plop/

¿Aplicación asesina?El motor de búsqueda de vuelos de ITA Software es uno de ellos.

En cuanto al "por qué", lo más probable es que te convierta en un mejor desarrollador y es muy poco probable que te convierta en uno peor.Sin embargo, puede hacer que prefieras los dialectos ceceantes a otros idiomas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top