Задать вопрос
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++

Что конкретно может дать программисту знание языка Lisp?

Привет, $(Habrauser)!

Возможно кому-то вопрос покажется глупым и прошу пожалуйста не пинать, а запастись терпением и ответить или просто проследовать далее ;)

Мое видение lisp-программистов:
Последнее время то и дело посматриваю в сторону Lisp. В виду того что я человек сугубо практичный мне очень не хочется делать что-либо зря. Смотря на кого-либо изучающих различные Haskel, Lisp, Prolog, etc мне они кажутся людьми обладающими большим количеством свободного времени и желающих изучить чего-нить прикольное.

Суть вопроса: На сколько я прав?

Уточняющие вопросы: Это реально изучается только с целью «повернуть мозги» немножко в другую сторону, чтобы смотреть на свое ремесло, а разработка софта это все-таки ремесло, немножко под другим углом? Или это все-таки дает реальный практический смысл и позволяет решать на работе задачи (фраланс, на дядю, стартап)?

Меня интересует реальная практика!

ЗЫ:
Недавно меня спросили «А зачем вообще питон изучать?», ответил «Проще писать парсеры логов, небольшие анализаторы исходных кодов написанных на С++ или автосоздание хидеров, либо замена каких-либо строковых данных в С\С++ коде». Другими словами я могу привести реальную конкретную ситуацию где мне пригодился тот или иной инструмент, который я использую. Ровно с таким же мышлением и ищу людей знающих и применяющих Lisp, чтобы они мне показали свой опыт.
  • Вопрос задан
  • 17384 просмотра
Подписаться 9 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 10
@mithraen
У каждого языка есть набор подходов к разработке, которыми в нем наиболее удобно пользоваться. Опыт использования языков с разными парадигмами разработки меняет мышление — вы можете сформулировать задачу разными способами.

Это, в итоге, оказывается полезным и при разработке на других языках.

С практической же точки зрения сейчас Lisp мало интересен. Насколько я вижу, сейчас на практике используют скорее Scala.

Вообще функциональные языки очень интересны. Их освоение для более-менее опытного программиста оказывается сложным (новичку их осваивать даже проще), из-за того, что многие привычные подходы в них оказываются неудобны. Но после освоения — оказываются даже проще в разработке чем объектно-ориентированные и процедурные.

Итоги:
1. Освоение функциональных языков полезно потому, что повысит скорость и качество разработки и на других языках (правда будет неприятный побочный эффект — от них станет подташнивать, когда окажется что вещь реализуемая в несколько строк на haskell требует несколько страниц бреда на C++).

2. Их очень удобно использовать в качестве скриптовых языков внутри более сложных продуктов (как тот же AutoLISP).

3. В крупных «enterprise» проектах их использовать нереально из-за того что мало разработчиков которые с ними знакомы, а для бизнеса заменимость сотрудников критически важна.

4. В небольших проектах, которые пишутся в одиночку — после освоения они могут дать заметно большую скорость реализации проекта. Соответственно, если заказчику все равно на чем сделано, лишь бы работало и работало хорошо, и оплата попроектная — функциональщик может банально зарабатывать больше.

5. Некоторые функциональные языки, например Haskell и OCaml обладают очень интересной и мощной системой типов, которая одновременно не так сильно путается под ногами как в Java, но при этом очень жесткая, и срезает множество потенциальных ошибок.

6. Ну и еще — например в JavaScript и Perl есть ряд инструментов, привычных для функционального программирования. Владение хотя бы одним функциональным языком программирования позволит писать более красивый код на этих языках.
Ответ написан
foxmuldercp
@foxmuldercp
Системный администратор, программист, фотограф
Написал тут много букв про то, что инструменты выбираются либо под задачу, либо те, которыми человек уже владеет, но решил сократить до того, что изучать всё таки стоит — это помогает открыть новые горизонты — хоть обработка текстов в awk/sed/perl, хоть вёрстка в TeX, хоть «Привет, Мир!» на brainfuck'e или же автоматизация действий на shell или управление огромным доменом AD через PowerShell.
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Знаю что Lisp в том или ином виде используется как язык для автоматизации различных действий. Наверное самый яркий пример — AutoLISP, который есть во многих CAD системах (а может уже и нету, не вкурсе ситуации на данный момент, давно этим не занимаюсь). Так же есть масса других инструментов использующих Lisp.

Я воспринимаю попытки освоить Lisp, Haskell или что-то подобное исключительно в качестве разминки для ума.
Ответ написан
ks_ks
@ks_ks
Я выбрал семейство Lisp'ов для изучения: потому-то, потому-то
и ещё вот по этому (зная один из лиспов, будет проще настраивать IDE Emacs).
Ответ написан
@mithraen
У Lisp очень непривычный синтаксис. И читается он тяжело :( Причем по ходу изучения языка читабельность все равно остается низкой — очень много информационного мусора — те самые скобочки, за которые его не любят :)

Посмотрите лучше на Haskell. У него тоже cryptic syntax на первый взгляд, но со временем он начинает казаться очень лаконичным и простым.

В нем вообще только две самых больших сложности:
1. осознать понятие «монада», оно непривычно, хотя писать код можно и без полного понимания, но читать чужой код будет сложно, и писать _хороший_ код не получится;
2. осознать то, что он «ленивый», и какие из этого следствия;
Ответ написан
charon
@charon
про ЛИСП не скажу, но мне знакомство ФП и Хаскелом помогло понять некоторые ранее казавшимися странными вещи: например, что в РНР делают функции array_map, array_walk — уж очень они выбиваются из большинства. Также я перестал странно смотреть на код с использованием JQuery (при первом знакомстве меня как-то смутило использование анонимных функций в обработчиках — тогда я не знал, что бывают анонимные функции).
Ответ написан
Комментировать
@menix
Перечитав эту статью могу сказать, что для яваскриптера функциональщина реальный профит — в функциональном стиле писать меньше (а если ф-ю compose например брать из Underscore — то и намного меньше) и все както изящнее.
Ответ написан
Комментировать
@dponyatov
Как вариант -- можно посмотреть на книгу PLAI:
Programming Languages: Application and Interpretation
(c) Shriram Krishnamurthi
https://cs.brown.edu/~sk/Publications/Books/ProgLangs/

в плане реализации собственного скриптового движка для встраивания в свои программы

правда там используется на Лисп, а Racket, но синтаксис и идеология схожи, а типизация дает ощущение как это реализовать на С++
Ответ написан
EvilsInterrupt
@EvilsInterrupt Автор вопроса
System programming, Reversing Engineering, C++
2 Alukardd:
Согласен, но мой уровень английского позволяет читать только уточняющие данные по API, а не свободное чтение той или иной литературы. Пока читаю перевод на русский язык замечательной книги Practical Common Lisp. Но и там ответа не вижу!
Ответ написан
@v_m_smith
лучше бы я пил и курил
Стоит попробовать уделить пару-тройку часов на введение в Clojure (современная реализация Lisp) через упражнения на сайте 4Clojure . И понять - твое или не твое. Я вот сразу влюбился в эту польскую нотацию Лиспа.

В практическом применении проблем так же нет, т.к. Clojure компилится как в JVM так и в JavaScript.

С эстетической точки зрения для всяких скобочек давно уже придуманы paredit и parinfer, которые расставляют их за вас в IDE.

Да и просто прочитать историю Lisp очень увлекательно. Например, узнать что Garbage Collector был придуман в Lisp задолго до появления Java.

А еще у него есть всякие волшебные штуки типа удаленного REPL - когда можешь в запущенный проект на сервере подключится удаленно реплом и изменить код прямо на лету.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы