2010-06-15 11 views
23

Tengo un poco de experiencia con Python (suficiente para hacer si/else/elif y una generación aleatoria de números), pero siempre he tenido una extraña fascinación con los lenguajes Lisp. Descargué un código fuente de esquema para ver la sintaxis, pero fue bastante galimatías para mí.¿Sería Lisp extremadamente difícil para un programador nuevo (ish) aprender?

Para un programador con un poco de experiencia en programación como yo, dado algunos buenos libros, sitios web y algún tiempo, ¿sería particularmente difícil aprender Common Lisp o Scheme? ¿Cuál de los dos sería más fácil? ¿Cómo se comparan con Python y C, en cuanto a la facilidad de aprendizaje?

Gracias

+11

He estado leyendo [SICP] (http://mitpress.mit.edu/sicp/) recientemente y he encontrado que Scheme _extremely_ es fácil de recuperar en comparación con la mayoría de los otros idiomas que he aprendido. –

+0

@James Estoy de acuerdo. Aprendí un poco de Scheme para una clase uni. Tardé 30 minutos en presentarlo y escribir mi primer programa :) – AraK

+5

Quédate con él, ignora a los que dudan, y serás recompensado con calidos-fuzzies ... es el lenguaje de un hacker en el verdadero sentido de la palabra. – grettke

Respuesta

25

Obtener SICP (Estructura e Interpretación de Programas de ordenador). Fue el libro de texto de nivel CS de nivel de entrada en MIT hasta hace muy poco. Está completamente basado en Scheme. Si disfrutas de CS en absoluto, te encantará este libro. Es fantástico. También dejarás a un programador mucho mejor después de leerlo (e idealmente harás la mayoría de los ejercicios). Es un libro ideal para principiantes, comienza desde el principio y te alienta a ser bastante competente en Scheme. Sin embargo, es un libro de texto universitario, así que a menos que tengas un poco de habilidad para programar, puede ser un poco difícil.

+0

De acuerdo, este libro es (o fue) utilizado como el texto introductorio para la ciencia de la computación en el MIT, y realmente cubre mucho terreno. – Greg

+6

Ya no es así. MIT ha avanzado desde entonces y ahora está utilizando Python como su lenguaje introductorio. Lo cual es una pena IMO. –

+16

Sin embargo, no te enseña Scheme. Lo sorprendente del libro es que te enseña casi todo * de programación y ciencias de la computación usando solo un pequeño subconjunto de una versión obsoleta de Scheme. En otras palabras: SICP te enseña * todo * pero no Scheme. –

2

El esquema es (intencionalmente) más compacto que Common Lisp, y descubrirá que puede aprender el idioma rápidamente. Ahora, dominar los conceptos de (cualquier idioma) y ciencias de la computación es otra historia, y la sugerencia del libro de @Matt Greer sería un lugar maravilloso para comenzar.

3

Lisp no es difícil de aprender. Se puede enseñar mal, y tiene algunos conceptos de "alto nivel", especialmente si vienes del mundo imperativo de la programación "clásica".

Pero hoy, puede que los idiomas modernos tengan aspectos muy similares a los que ofrece Lisp, por lo que es probable que no haya muchos "nuevos" en Lisp en comparación con otros lenguajes, especialmente Python.

Mi "obstáculo" con Lisp (y Scheme) era simplemente "lambda". Esencialmente, mi problema fundamental era que no tenía nada que ver con lo que era una "lambda", por qué se llamaba "lambda", etc.

Si se llamaba "función" o "rutina" o algo así, tendría sido trivial. Pero como es, la palabra "lambda" no tenía sentido en todos los sentidos. Podrían haber llamado "mork", "bleem" o "fizbin" y hubiera sido tan útil.

Una vez que asimilé "lambda", el resto cayó en su lugar.

Si le interesa un Lisp (es decir, un idioma que es esencialmente de la familia Lisp), entonces Scheme es una buena opción. Pero, Scheme NO es Common Lisp (que es lo que "Lisp" normalmente significa hoy en día), en realidad son idiomas diferentes.

Si quiere aprender Common Lisp, comenzaría con Common Lisp y omitir Scheme.

Puede consultar Practical Common Lisp para que pueda escribir Lisp sin "tener que aprenderlo", por así decirlo.

+0

Solo estoy aprendiendo el esquema, y ​​tuve el mismo problema con lambda, hasta que alguien me explicó que era como una función anónima en la programación imperativa. – Cam

21

Dado algunos buenos libros, sitios web y algún tiempo, ¿sería particularmente difícil aprender Common Lisp o Scheme?

No.

¿Cuál de los dos sería más fácil?

Esquema, porque

¿Cómo se comparan con Python y C, por lo que la facilidad de aprendizaje?

Creo que es más difícil aprender C que aprender Python o Scheme, porque para aprender C tienes que asimilar el modelo de la máquina, los punteros y la memoria dinámica.

Entre Scheme y Python, es realmente difícil predecir cómo reaccionará cada alumno individual. Realmente me gusta el espacio en blanco significativo de Python, y encuentro que los paréntesis de Scheme son molestos y molestos. Mucha gente realmente le gusta el paréntesis de Scheme, y encuentran que el espacio en blanco significativo de Python es molesto y molesto. (Hay diferencias semánticas importantes, pero es difícil escapar de la tiranía de la sintaxis.)

¿Qué libros debo usar? (Pregunta que debería haber pedido y no lo hizo)

No utilice Estructura e Interpretación de Programas Informáticos (SICP). El punto de vista de ese libro es "demostremos lo inteligentes que somos codificando toda la ciencia de la computación en Scheme". El libro es una tremenda tour de force intelectual, pero no es adecuado para principiantes. Cuando MIT lo usó en 6.001, fue como un curso "weedout" porque 30 – 40% de todos los estudiantes de MIT querían especializarse en EECS, y estaban tratando de rechazar a las personas. SCIP es un fabuloso para un estudiante senior de CS o un programador con 5 años de experiencia. No haga intente aprender de ello.

Algunos buenos libros para aprender a partir de:

  • How to Design Programs por Felleisen et al ha sido cuidadosamente diseñado y perfeccionado a través de años de experiencia. Utiliza Scheme y te enseña exactamente lo que dice en el título. Muy recomendable.

  • Simply Scheme por Harvey and Wright es un libro introductorio de CS de personas que consideraban que SCIP necesitaba una "precuela". Disfruté leyéndolo pero no he enseñado de eso.

  • Si puedes soportar la ternura, The Little Schemer de Felleisen y Friedman tiene un estilo dialéctico muy inusual, con un montón de ejemplos, que te pueden gustar.

+5

No estoy de acuerdo con que el SICP "no sea adecuado para principiantes". Depende de quién sea el principiante para una cosa. Después de todo, no todos abandonaron 6.001 en el día. Sí, es un libro difícil, y puede ser difícil de abordar sin la ayuda de un profesor y/o asistente técnico para superarlo. Pero a riesgo de sonar arrogante, esta industria podría utilizar a más personas que comenzaron en un libro como este. La programación de computadoras no es fácil. Desafiando su intelecto y comprendiendo que dominar este oficio es todo un compromiso, es algo bueno saberlo desde el primer momento. Un libro como SICP ayuda a consolidar eso. –

+6

@Matt: ¡Haces mi caso por mí! SICP es un * excelente * libro de "cementación". Como titular, no tanto. Para mí no es la dureza del libro; es la audiencia Cuando conoces algo de CS y tienes algo de programación bajo tu cinturón, no es un libro difícil en absoluto. En cambio, es ** un "oh, guau" momento tras otro. ** –

+0

"Creo que es más difícil aprender C que aprender Python o Scheme" - ¿no debería ser eso "más fácil"? –

2

Yo diría que un Lisp será más fácil de aprender como un nuevo programador que si espera. Esto se debe a que la forma en que la mayoría de los idiomas lo alientan a pensar acerca de la programación es una desventaja para aprender Lisp; Ser experimentado con un lenguaje más convencional probablemente ayude de alguna manera, pero no con las cualidades que hacen que Lisp sea único.

Scheme --- el Lisp con el que estoy más familiar --- es probablemente tan fácil como aprender Python, especialmente si elige PLT Scheme (ahora renombrado Racket), que le ofrece muchas extensiones útiles . Common Lisp es probablemente sobre la misma dificultad, aunque me parece menos instintivo por razones que probablemente no sean universales. Encontré que C es mucho más difícil que cualquiera de los dos, por las razones que sugiere Norman Ramsey.

Lo que sugeriría aprender depende en gran medida de lo que quiere hacer con él. Si desea aprender un lenguaje claro y sin lujos, cuyo núcleo se puede aprender rápidamente, aprenda un Esquema que implemente el estándar R5RS, como Scheme48. Si desea un Esquema más capaz, ya sea inmediatamente o más adelante, aprenda PLT Scheme/Racket. Si desea un lenguaje grande, amigable y difuso de inmenso poder pero no tan visiblemente internamente coherente como Scheme, elija Common Lisp; Steel Bank Common Lisp es una buena implementación.

0

Considere (el mal titulado) "Lenguajes de programación, un enfoque basado en el intérprete" por Samuel N. Kamin. Aprenderá cómo programar en 7 idiomas diferentes (incluyendo Lisp, Scheme, SASL, CLU), además de cómo implementar intérpretes para cada uno. Usted debe salir con una buena comprensión de cómo difieren las lenguas, por eso que están diseñados como están, ¿cuáles son las ventajas y desventajas en su uso, etc.

5

Obtener

"The Little Schemer"

y

"La avanzada Schemer"

Estos libros son de gran valor como ayudantes concepto de programación. Personalmente los haría antes del SICP solo porque el SICP es un poco rápido si no has programado mucho antes ... ¡e incluso si lo tienes son excelentes libros!

Personalmente pienso en Scheme como un muy buen lenguaje pedagógico. Se puede usar para casi cualquier cosa, supongo, pero es muy bueno para enseñar construcciones de programación sin atascarse en problemas sintácticos. Lo más parecido a la semántica pura que vas a obtener.

1

En cuanto a lo que es más fácil, Lisp o Scheme, siendo "dialectos" de la familia Lisp, en el nivel de principiante son más o menos lo mismo e intercambiables. Aprendí Common Lisp de "Practical Common Lisp" de Peter Siebel, luego recogí el SICP y trabajé en todos los ejercicios a través de los dos primeros capítulos usando Common Lisp en lugar de Scheme. Hay solo algunas palabras clave diferentes y cosas como el uso de funcall en CL, donde solo un par de paréntesis sería suficiente en Scheme.

Tanto el libro de Siebel como el SICP están disponibles de forma gratuita en su totalidad en la web. ¡Descárgalos y hazte hueco!

1

La última vez que revisé las conferencias de las clases de introducción para CS61A en Berkeley que utilizaban SICP estaban disponibles en iTunes, que le daría una serie completa de conferencias para ayudarlo a aprender el idioma. ¡Gratis! Hice una TA para Brian Harvey a fines de los 90 y los estudiantes realmente me gustaron sus conferencias.

http://deimos3.apple.com/WebObjects/Core.woa/Browse/berkeley.edu.1621506930

4

recomendaría ir con Common Lisp.

Tiene implementaciones excelentes que proporcionan una variedad de capacidades diferentes. Los mejores siguen siendo las implementaciones comerciales (aunque tienen versiones sin costo para aprender Lisp) como Allegro CL de Franz y LispWorks. Ofrecen bibliotecas extensas e incluyen entornos de desarrollo basados ​​en GUI. Pero las implementaciones libres y de código abierto también son excelentes: SBCL, CCL, ECL, CLISP, ...

Hay muchos libros excelentes para Lisp, como Practical Common Lisp de Peter Seibel.

Aprender Common Lisp no es tan difícil, pero obtener experiencia más profunda puede llevar algo de tiempo, porque el lenguaje y su ecosistema son sorprendentemente ricos.

Learning Scheme es útil, también. También aprender SICP puede ayudar. Pero no hay una necesidad inmediata, ya que la literatura de Lisp habla sobre muchos de los mismos problemas. Desafortunadamente Scheme perdió algo de su atractivo en los últimos años (creo que el último R6RS es totalmente decepcionante) y también descubro que implementaciones como 'Racket' se mueven en la dirección equivocada. En cambio, uno podría querer aprender algunos de los mejores dialectos e implementaciones de LD (por ejemplo, OCAML). Aunque podría ser interesante verificar varias implementaciones de Scheme, hay algunas con capacidades interesantes.

Las ideas básicas que debe aprender de Lisp son estos:

  • de programación multi-paradigma
  • lenguaje de programación programable
  • cálculo simbólico
  • desarrollo interactivo y exploratorio

Aprender cómo Lisp apoya estas ideas y por qué son importantes.

-3

Relativamente, es un lenguaje muy difícil de aprender si eres tan obstinado como yo :) Python es un lenguaje OOP, y aunque FP es posible, sigue siendo OOP. Lisp es un lenguaje FOP como Haskell. Al igual que Python, puede hacer OP, pero sigue siendo FOP. Los términos utilizados: POO = Programación Orientada a Objetos OP = El objeto de programación FOP = Funcional Programación Orientada FP = Programación Funcional

0

Si usted está fascinado por el lenguaje, creo que le resultará fácil. Pero debo decir que no es para todos. Intenté varias veces aprender Scheme y Common Lisp y perdí interés. Cuando veo un "si" en un lenguaje de programación, empiezo a buscar "entonces", "otro", un corsé abierto, dos puntos, etc., pero Lisp no tiene nada de eso. Solo veo una sopa de paréntesis.

Además, algunos conceptos son más fáciles en otros idiomas. Estoy de acuerdo con los chicos a los que no les gusta la palabra "lambda". Realmente lo entendí cuando aprendí Lua (Javascript es muy similar). En Lua y Javascript, cuando necesitas una función anónima, escribes (adivina qué) "función (etc., etc.)". Cuando desee crear un cierre devolviendo una función, escriba (adivine qué) "función de retorno (etc., etc.)". En Lisp, escribe "lambda" y usa el retorno implícito al final de la función. No muy amigable para principiantes.

También estoy de acuerdo con Norman Ramsey: No use Estructura e Interpretación de Programas de Computadoras (SICP).

Este libro es raro. Comienza realmente fácil, en la página 1 aprendes algunas expresiones como (+ 137 349). Muy fácil. Luego, en la página 2 aprendes funciones. En la página 3 aprendes recursividad. En la página 4, aprende funciones de orden superior con lambdas (!!!). En la página 5 en adelante, usted dice WTF y no puede encontrarle sentido a nada. El libro tiene solo 5 capítulos, cada uno con mil páginas. Introduce la asignación en el capítulo 3. Tal vez tu cerebro es funcional, pero mi cerebro es ciertamente imprescindible y necesito ver lo que hace la máquina: asignar valores, copiar memoria, etc. Enseñar funciones de orden superior antes de la asignación es simplemente al revés en mi imperativo cerebro. En el último capítulo, el libro habla sobre compiladores, intérpretes y recolección de basura. ¿Es este el mismo libro que comenzó a enseñar expresiones como (+ 137 349)? Ahora puedo entender los últimos capítulos de este libro, pero solo después de aprender media docena de lenguajes de programación de diferentes paradigmas y leer mucho sobre los lenguajes de programación y su implementación. No sé cómo alguien podría seguir el ritmo que este libro impone al lector.

3

En realidad se puede encontrar un completo vídeo curso de Estructura e Interpretación de Programas Informáticos en Google Video. Comience aquí: http://video.google.com/videoplay?docid=933300011953693438#

Los videos fueron hechos en los años 80 por Hewlett-Packard, y enseñados por Sussman y Abelson (los autores originales). La clase está llena de HP HW/ingenieros mecánicos que están siendo entrenados nuevamente como ingenieros de SW. HP los lanzó al dominio público.

Cualquiera puede ver estos videos y ser un programador de Lisp al final. Increíbles, excelentes instructores.

0

No, en absoluto. Creé una plataforma llamada Clojurecademy que pretende enseñar Clojure lenguaje de programación (que es un dialecto de Lisp) y tiene un modelo de enseñanza interactiva (práctica) como lo hace Codecademy.

Puedes comenzar con esto y verás que fácil es eso.

Cuestiones relacionadas