⌨ Labor omnia vincit ☮

Why Lisp?

Posted in Lisp by anaumov on 03.02.2012

Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.

– Eric Raymond

Самое интересное в жизни – это учить новое. Время, потраченное на изучение нового, никогда не покажется потраченным зря. Тем более в IT, тем более если вы информатик или физик🙂
Да и не только в IT. Взять хотя бы разбор новой шахматной партии. Суть игры останется той же, это все те же шахматы с теми же правилами, но сколько нового можно порой почерпнуть из очередной партии гроссмейстеров.

Я помню как начинал изучать assembler, и какими глазами на меня смотрели одногруппники. Это было на втором или третьем курсе университета. Удивление вызывала специфика языка, а точнее – его практическое применение. Тяжело назвать изучение языка целесообразным, если на нем не пишут уже лет 20 (хотя куски asm-кода в grub вроди бы все еще в виде патчей поступают). Однако, как я убедился спустя несколько лет, работая в SUSE, не стоит подходить к этому вопросу практически. Assembler помогает намного лучше понять принцип работы процессора, а именно выполнение им кода. Я не знаю как можно по-настоящему хорошо научиться отлаживать код, не понимая как работает процессор, и не имея хотя бы поверхностного знакомства с assembler.

Lisp в этом плане схож с assembler. Не столь широкий спектр практического применения, миф о его “странности” + этот язык не просто расширяет кругозор, но и позволяет взглянуть на программирование на более глубоком уровне (более глубокое в плане использования функциональной парадигмы, а не низкоуровневым управлением памятью программы). Да, надо заметить, что сфера применения Lisp все же далеко не равна нулю. Для него, к примеру, есть Qt-binding (CommonQt), на Lisp написан Emacs и Viaweb (Yahoo Store), а так же почти все профессиональные системы компьютерной алгебры, такие как Maxima или, к примеру, Reduce.

Чем же так интересен Lisp? Lisp крут не потому, что обладает какими-то магическими плюшками, которые можно долго перечислить, а просто потому, что это самый мощный язык из всех существующих на сегодня. Мощным его делают инфраструктурные технологии, формирующие подход его использования, и обеспечивающие мультипарадигмальность. Это достигается за счет макросистемы, которая позволяет расширять возможности языка самому. Lisp в этом смысле называют программируемым языком программирования.

Это реализовано с помощью так называемых s-выражений, т.е. представлении программы в виде некого абстрактного графа. С помощью s-выражений можно самому определить и в последствии использовать управляющую конструкцию. Речь идет именно об управляющей конструкции языка, которая работет на точно таких же правах как и все определенные до нее (по умолчанию). Более того, я могу переопределить уже существующую конструкцию, т.е. изменить поведение препроцессора еще на этапе семантического анализа.

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

Почему же тогда на Lisp практически никто не пишет? Кто-то скажет, что дело в привычке. Что ж, да, возможно и это. Но я считаю, что главной причиной все же является тот факт, что процесс программирования на производстве слишком коммерциализирован. Это значит во-первых, что код, написанный мной, должен быть максимально прост и легок в поддержке, т.е. если я уйду из компании, проекты, разрабатываемые мной, без проблем должны быть “подхваченны” другими разработчиками. Во-вторых, моему начальнику не нужна ни философия, ни красота кода, ни оригинальные подходы к решению тех или иных задачь. Главным тут является функциональность и время, потраченное на реализацию этой функциональности… Все же не будем забывать, что в самых элитных ВУЗах планеты не перестают преподавать Lisp. Этот язык продолжает жить на компьютерах тех, кто знает, что искусство програмирования, как и музыка или живопись, так же требует таланта и прозрения.

4 Responses

Subscribe to comments with RSS.

  1. virens said, on 03.02.2012 at 07:15

    Автор так заразительно написал про Лисп, что мне аж захотелось снова попробовать на нём что-то написать🙂 Пока что пишу на матлабе, питоне, чуть-чуть на перле и, естественно, латех. В пост хорошо бы вставить книжку(или книжки), которые автор считает интересными и стоящими по лиспу (для новичков\продвинутых).

    Да, реквестирую вывесить на главную страницу кнопку с RSS фидом. А то искать её тыком будет не каждый. Так, глядишь, и комментариев будет поболее.

    С уважением.

    • Alex said, on 13.02.2012 at 10:18

      Большое спасибо за комментарий. Добавил кнопки с RSS на посты и комменты🙂

      По поводу книг: тяжело советовать, т.к. я сам прочитал пока только Practical Common Lisp и “пролистал” Structure and Interpretation of Computer Programs. Обе показались очень хорошими (для меня, как для новичка).

  2. dark said, on 25.03.2014 at 06:26

    Да, весьма интересная статейка… Только вот жаль что маловато…

    • anaumov said, on 05.06.2014 at 11:02

      Спасибо.
      В сети очень много материала по теме почему и зачем Lisp. Наверное даже больше, чем описания самих библиотек Lisp.
      Позволил себе эту коротенькую статейку, хотя меньше всего хотелось бы повторяться, т.е. что-то дублировать


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: