Может ли Lisp быть чрезвычайно сложным для нового (ish) программиста, чтобы учиться?

У меня есть небольшой опыт работы с Python (достаточно, чтобы я мог делать, если /else/elif и некоторое генерирование случайных чисел), но у меня всегда было странное увлечение языками Lisp. Я загрузил исходный код схемы, чтобы посмотреть на синтаксис, но для меня это было почти тарабарщиной.

Для программиста с небольшим опытом программирования, такого как я, с учетом хороших книг, веб-сайтов и некоторого времени, было бы особенно сложно изучить Common Lisp или Scheme? Какой из двух будет проще? Как они сравниваются с Python и C, насколько легкость обучения?

Спасибо

Ответ 1

Получить SICP (Структура и интерпретация компьютерных программ). До недавнего времени это был учебник CS класса начального уровня в Массачусетском технологическом институте. Это полностью основано на Схеме. Если вам понравится CS, вам понравится эта книга. Это фантастика. После этого вы уйдете от гораздо лучшего программиста (и в идеале делаете большую часть упражнений). Это идеальная книга для начинающих, она начинается с самого начала и облегчает вам возможность быть достаточно компетентной на Схеме. Тем не менее, это учебник в колледже, поэтому, если у вас не хватает навыков программирования, это может быть чуть сложнее.

Ответ 2

Учитывая некоторые хорошие книги, веб-сайты и некоторое время, будет ли особенно сложно выучить Common Lisp или Scheme?

Нет.

Что из двух будет проще?

Схема, потому что

Как они сравниваются с Python и C, насколько легко учиться?

Я думаю, что изучать C сложнее, чем изучать Python или Scheme, потому что для изучения C вам действительно нужно использовать модель машины, указатели и динамическую память.

Между Scheme и Python очень сложно предсказать, как отреагирует какой-либо отдельный ученик. Мне действительно нравятся значительные пробелы в Python, и я нахожу круглые скобки Scheme раздражающими и отвлекающими. Многим людям действительно нравятся круглые скобки Scheme, и они находят значительный пробел в Python раздражающим и отвлекающим. (Существуют важные семантические различия, но трудно избежать тирании синтаксиса.)

Какие книги я должен использовать? (вопрос, который вы должны были задать, но не сделали)

Не используйте структуру и интерпретацию компьютерных программ (SICP). Эта книжная точка зрения - "давайте покажем, насколько мы умны, кодируя всю информатику в Схеме". Книга является огромной интеллектуальной силой, но она совсем не подходит для начинающих. Когда MIT использовал его в 6.001, это был курс "отсеивания", потому что 30–40% всех студентов MIT хотели получить специальность EECS, и они пытались отвратить людей. SCIP - это потрясающе для старшего студента CS или программиста с 5-летним опытом. Не пытайтесь учиться на этом.

Несколько хороших книг для изучения:

  • Как разрабатывать программы Феллайзен и др. Были тщательно обработаны и отточены за годы опыта. Он использует схему и учит вас точно, что он утверждает в названии. Настоятельно рекомендуется.

  • "Просто схема " Харви и Райта - это вводная книга по CS для людей, которые считали, что SCIP нужен "приквел". Мне нравилось читать это, но я не учил этому.

  • Если вы можете выдержать остроумие, у "Маленького интрижка" Феллизена и Фридмана есть очень необычный диалектический стиль с множеством примеров, которые могут вам понравиться.

Ответ 3

Get

"Маленькая схема"

и

"Расширенный модуль"

Эти книги НЕВЫПОЛНЕНЫ как помощники концепции программирования. Я лично делал их перед SICP только потому, что SICP немного быстрее, если вы еще не запрограммировали многое раньше... и даже если у вас есть отличные книги!

Я лично думаю о Схеме как о очень хорошем педагогическом языке. Его можно использовать практически для всего, что я предполагаю, но он очень хорош для обучения конструкциям программирования без увядания в синтаксических проблемах. Ближайшая вещь к чистой семантике, которую вы получите.

Ответ 4

Я бы рекомендовал использовать Common Lisp.

Он имеет отличные реализации, которые предоставляют множество различных возможностей. Лучшие из них по-прежнему являются коммерческими реализациями (хотя у них нет недорогих версий для обучения Lisp), таких как Allegro CL от Franz и LispWorks. Они предлагают обширные библиотеки и включают среды разработки на основе графического интерфейса. Но open source и свободные реализации превосходны: SBCL, CCL, ECL, CLISP,...

Есть куча превосходных книг для Lisp, таких как Питер Сейбел Практический Общий Lisp.

Обучение Common Lisp не так сложно, но получение более глубокого опыта займет некоторое время, потому что язык и его экосистема удивительно богаты.

Программа обучения также полезна. Также может помочь обучение SICP. Но нет никакой насущной необходимости, поскольку в литературе Lisp говорится о многих из тех же проблем. К сожалению, Scheme потеряла часть своей привлекательности в последние годы (я считаю, что последний R6RS будет полностью разочаровывающим), и я нахожу также, что реализации, такие как "Racket", движутся в неправильном направлении. Вместо этого можно было бы изучить некоторые из лучших диалектов и реализаций ML (скажем, OCAML). Хотя может быть интересно проверить различные реализации Схемы, есть некоторые интересные функции.

Основные идеи, которые вы должны изучить из Lisp, следующие:

  • программирование с несколькими парадигмами
  • программируемый язык программирования
  • символическое вычисление
  • интерактивная и поисковая разработка

Узнайте, как Lisp поддерживает эти идеи и почему они важны.

Ответ 5

Lisp нетрудно узнать. Его можно научить плохо, и у него есть некоторые концепции "высокого уровня", особенно если вы исходите из императивного "классического" мира программирования.

Но сегодня, возможно, современные языки имеют аспекты, очень похожие на то, что предлагает Lisp, поэтому в Lisp не так много "новых" по сравнению с другими языками, особенно Python.

Мое "препятствие" с помощью Lisp (и схемы) было просто "лямбдой". По сути, моя фундаментальная проблема заключалась в том, что я не имел никакого отношения к тому, что такое "лямбда", почему ее называли "лямбдой" и т.д.

Если бы это было названо "функция" или "рутина" или что-то еще, это было бы тривиально. Но как есть, слово "лямбда" было бессмысленным во всех отношениях. Они могли бы назвать это "моркой", "блемом" или "физбином", и это было бы полезно.

Как только я собрал "лямбду", остальное упало на место.

Если вам интересен A Lisp (т.е. язык, который по существу состоит из семейства Lisp), то схема является хорошим выбором. Но, схема не является общим Lisp (что обычно означает Lisp "), они действительно разные языки.

Если вы хотите изучить Common Lisp, я бы начал с Common Lisp и пропустить Scheme.

Вы можете посмотреть Практический общий Lisp, чтобы вы могли писать Lisp без необходимости "изучать", поэтому говорить.

Ответ 6

Фактически вы можете найти полный видеокурс Структура и интерпретация компьютерных программ в Google Video. Начать здесь: http://video.google.com/videoplay?docid=933300011953693438#

Видеоролики были сделаны в 80 от Hewlett-Packard и преподавались Суссманом и Абельсоном (оригинальные авторы). Класс полон инженеров HP HW/механиков, которые переучиваются в качестве инженеров SW. HP выпустила их в общественное достояние.

Любой может смотреть эти видео и быть программистом Lisp к концу. Удивительные, отличные инструкторы.

Ответ 7

Схема (намеренно) более компактна, чем Common Lisp, и вы обнаружите, что вы можете быстро изучить язык. Теперь освоение концепций языка и компьютерных наук - это еще одна история, и предложение книги @Matt Greer было бы прекрасным местом для начала.

Ответ 8

Я бы сказал, что Lisp будет легче учиться как новый программист, чем ждать. Это потому, что большинство языков побуждают вас думать о программировании - это препятствие для обучения Lisp; опыт с более традиционным языком, вероятно, поможет в некотором роде, но не с качествами, которые делают Lisp уникальным.

Схема --- Lisp, с которой я больше всего знаком --- возможно, так же легко, как и Python, особенно если вы выберете PLT Scheme (теперь переименован в Racket), который предлагает вам много полезного расширения. Общий Lisp, вероятно, примерно такой же сложности, хотя я нахожу его менее инстинктивным по причинам, которые, вероятно, не универсальны. Я нашел C намного сложнее, чем любой из них, по причинам, которые предлагает Норман Рэмзи.

То, что я предлагаю учиться, во многом зависит от того, что вы хотите с ним делать. Если вы хотите изучить кристально чистый язык без излишеств, чей ядро ​​можно быстро узнать, изучите схему, которая реализует стандарт R5RS, например Scheme48. Если вы хотите более способную схему, сразу или позже, узнайте PLT Scheme/Racket. Если вы хотите большой, дружелюбный, рассеянный язык огромной мощности, но не так явно внутренне согласованный, как Scheme, выберите Common Lisp; Steel Bank Common Lisp - хорошая реализация.

Ответ 9

Что касается того, что проще, Lisp или схемы, являясь "диалектами" семейства Lisp, на начальном уровне они почти одинаковы и взаимозаменяемы. Я узнал Common Lisp от Питера Сибеля "Практический общий Lisp", затем взял SICP и проработал все упражнения в первых двух главах, используя Common Lisp, а не Scheme. Есть только несколько разных ключевых слов и вещей, таких как использование funcall в CL, где в схеме может быть достаточно пары круглых скобок.

Обе книги Siebel и SICP доступны бесплатно во всей их полноте в Интернете. Загрузите их и получите hackin '!

Ответ 10

В прошлый раз я проверял лекции на вступительных классах для CS61A в Беркли, в которых использовался SICP, которые были доступны в iTunes, что даст вам полную серию лекций, которые помогут вам выучить язык. Бесплатно! Я слушал Брайана Харви в конце 90-х, и студентам очень нравились его лекции.

В настоящее время вы можете найти их здесь: https://archive.org/details/ucberkeley-webcast-PL6879A8466C44A5D5

Ответ 11

Рассмотрите (плохо названный) "Языки программирования, подход на основе перевода" Самуила Н. Камина. Вы узнаете, как программировать на 7 разных языках (включая Lisp, Scheme, SASL, CLU), а также как реализовать интерпретаторы для каждого. Вы должны уйти с хорошим пониманием того, как разные языки, почему они разработаны так, как они есть, каковы компромиссы в их использовании и т.д.

Ответ 12

Если вы увлечены этим языком, я думаю, вам будет легко. Но я должен сказать это не всем. Я несколько раз пробовал Scheme и Common Lisp и потерял интерес. Когда я вижу "if" на языке программирования, я начинаю искать "then", "else", open-brace, двоеточие и т.д., Но Lisp не имеет этого. Я вижу только суп из скобок.

Кроме того, некоторые концепции проще на других языках. Я согласен с парнями, которым не нравится слово "лямбда". Я действительно получил его, когда узнал Lua (Javascript очень похож). В Lua и Javascript, когда вам нужна анонимная функция, вы вводите (догадываетесь) функцию (и т.д. И т.д.) ". Когда вы хотите создать замыкание, возвращая функцию, вы пишете (угадываете, что)" возвращаете функцию (и т.д. И т.д.)". В Lisp вы пишете "лямбда" и используете неявный возврат в конце функции. Не очень удобный для начинающих.

Я также согласен с Норманом Рэмси: Не используйте Структуру и Интерпретацию компьютерных программ (SICP).

Эта книга странная. Это начинается очень просто, на стр. 1 вы узнаете некоторые выражения типа (+ 137 349). Проще простого. Затем на странице 2 вы узнаете о функциях. На странице 3 вы узнаете рекурсию. На странице 4 вы узнаете функции более высокого порядка с lambdas (!!!). На стр. 5 вы говорите WTF и ничего не можете понять. В книге есть только 5 глав с тысячей страниц. Он вводит назначение в главе 3. Возможно, ваш мозг функционирует, но мой мозг определенно необходим, и мне нужно посмотреть, что делает машина: назначение значений, копирование памяти и т.д. Преподавание функций более высокого порядка перед назначением - это просто назад в моем императивном головной мозг. В последней главе книги рассказывается о компиляторах, устных переводчиках и сборке мусора. Это та же книга, которая начала преподавать выражения типа (+ 137 349)? Теперь я могу понять последние главы этой книги, но только после изучения полдюжины языков программирования различных парадигм и много читающих о языках программирования и их реализации. Я не знаю, как кто-то мог следить за темпом, который эта книга накладывает на читателя.

Ответ 13

Нет, совсем нет. Я создал платформу под названием Clojurecademy, целью которой является обучение языку программирования Clojure (который является диалектом Lisp), и у него есть интерактивная (практическая) обучающая модель, подобная Codecademy.

Вы можете начать с него, и вы увидите, насколько это легко.

Ответ 14

Относительно, это очень сложный язык, чтобы узнать, насколько вы так упрямы, как я.:) Python - это язык OOP, и, хотя FP возможен, он все еще OOP. Lisp - это язык FOP, такой как Haskell. Как и Python, он может делать OP, но он все еще FOP. Используемые термины: OOP = объектно-ориентированное программирование OP = программирование объектов FOP = функционально-ориентированное программирование FP = Функциональное программирование