Я учу Lisp (язык программирования такой, для тех, кто не знает). Немного стыдно, что до сих пор его не знал (совсем простые куски кода я умею читать, подцепил где-то случайно, в emacs'е скорее всего; но писать не могу, и язык по-настоящему не понимаю), но как-то не нужен он мне был. Да он мне и сейчас не нужен особенно, но захотелось вот заполнить эту лакуну. От лакуны к лакуне -- так, глядишь, и дойдёшь до чего-то хорошего.
Взял в библиотеке две книги пару недель назад: Lisp (Winston&Horn, 3rd edition), и Programming in Common Lisp (Brooks). Сегодня начал их читать, и если найду ещё немного времени, скачаю и установлю какой-нибудь Лисп поиграться.
Книга Винстона и Хорна более подробна, основательна; вместе с тем более "попсовая" что ли. В тексте сквозит настойчивое стремление объяснить читателю, что Лисп - это совсем не страшно. Вместо car и cdr всегда используются first и last. И много ещё подобных мелочей. Книга Брукса куда более лаконична, написана более уверенным тоном и для людей, уже что-то знающих и уверенных в себе.
Концептуальная простота Лиспа меня восхищает. Я вообще очень падок на концептуальную простоту, и потому очень люблю, например, Smalltalk и Forth, хоть и не работал в них сколько-нибудь долго, не писал ничего действительно серьёзного. Теперь Лисп, наверное, присоединится к этому списку.
Взял в библиотеке две книги пару недель назад: Lisp (Winston&Horn, 3rd edition), и Programming in Common Lisp (Brooks). Сегодня начал их читать, и если найду ещё немного времени, скачаю и установлю какой-нибудь Лисп поиграться.
Книга Винстона и Хорна более подробна, основательна; вместе с тем более "попсовая" что ли. В тексте сквозит настойчивое стремление объяснить читателю, что Лисп - это совсем не страшно. Вместо car и cdr всегда используются first и last. И много ещё подобных мелочей. Книга Брукса куда более лаконична, написана более уверенным тоном и для людей, уже что-то знающих и уверенных в себе.
Концептуальная простота Лиспа меня восхищает. Я вообще очень падок на концептуальную простоту, и потому очень люблю, например, Smalltalk и Forth, хоть и не работал в них сколько-нибудь долго, не писал ничего действительно серьёзного. Теперь Лисп, наверное, присоединится к этому списку.
no subject
Date: 2003-02-08 05:34 am (UTC)точно-точно. Схема концептуально "элегантнее", но работать с ней разумно только академикам, да.
а стандарт у нея меньше, потому что в нём нету нифига. обожаю просто этот аргумент.
ежели книжков на бумаге хочешь, так у меня их есть.
no subject
Date: 2003-02-08 05:53 am (UTC)Re:
Date: 2003-02-08 06:04 am (UTC)но увлекаться, конечно, не стоит. :)
no subject
Date: 2003-02-08 06:52 am (UTC)no subject
Date: 2003-02-08 11:35 am (UTC)Возможно, что тем, которым удалось справиться и было потом в чем-то проще, но все равно не вижу причин создавать такие сложности. Разве только, чтобы отсеивать народ, что они с успехом и делают.
no subject
Date: 2003-02-08 12:02 pm (UTC)Как раз наоборот те, у кого были какие-то навыки других языков, часто отказывались понимать и продолжали думать стандартными строками из C или паскаля. Мне кажется, что они воспринимали слишком близко сам язык и слишком расплывчиво то, что они пытались этим языком сказать. А обучение Схеме, как первому языку, как раз выбивает этот симбиоз смысла и слов и, наоборот, учит различать то, что надо запрограммировать от того, как выглядят строительные блоки языка.
no subject
Date: 2003-02-08 01:43 pm (UTC)Мне как раз такие "те" казались скорее исключением , нежели чем правилом. Хотя наверняка это все очень индивидуально и круг знакомств на курсе в любом случае не является достаточным для статистической выборки :)
То что Схема, "учит различать то, что надо запрограммировать от того, как выглядят строительные блоки языка", безусловно верно, но так ведь он же не единственный -- на всех предметах впоследствии в качестве языка для объяснения алгоритмов используется псевдокод, что тоже приучает мыслить абстрактно.
no subject
Date: 2003-02-08 02:55 pm (UTC)Абсолютно верно. Но тогда Схема явно не хуже для обучения, чем другие языки (а какой то предмет все равно должен выбрать язык, чтобы студенты могли на практике попробовать концептуальные идеи). Тогда почему бы не Схему? Как раз он хорош тем, что, как сказали другие, все правила очень просты и все правила языка умещаются в тонкую брошюрку. Студентик может сразу пойти в лабораторную и написать:
(define (power a b)
(if (= b 0) 1 (* a (power a (- b 1)))
и получить тут-же результат, вместо того, чтобы создавать, классы, сабрутины, и т.д. Таким образом с любыми примерами легче и т.д. -- то есть хороший язык для обучения. А потом уже пусть программируют в чем хотят :).
(видите, не прикоснувшись к программированию уже несколько лет, я могу написать что-то на схеме, тем не менее, скорее запуталась бы в синтаксе если бы попробовала привести пример рекурсии в C или, тем более, в чем-нибудь вроде C++).
no subject
Date: 2003-02-09 04:24 am (UTC)А хуже Схема, на мои взгляд, все-таки тем, что рекурсивное мышление не совсем естественно, или просто нам не привычно. Действительно, как Вы говорите, в какой-то момент происходит щелчок и рекурсия усваивается, но зачем так усложнять абсорбцию ? :)
Безусловно Вы правы в том , что какой-то язык нужен, чтобы начинающие сами могли "пощупать" идеи на практике, но разве не проше это делать на языке, пусть даже и с более сложным синтаксисом, но более близком нашему восприятию ? Ведь не обучают же детей в первом классе двоичному исчислению, хотя цифорок там и меньше.
P.S Если Вы хотите, мы можем перенести эту дискуссию в Ваш или мой журнал, потому что боюсь, что мы уже утомили Анатолия :)
no subject
Date: 2003-02-09 06:49 am (UTC)Позвольте, какие только целые числа? Более красивых математических решений, чем на схеме, я не видела. Если использовать streams, то вообще получается замечательно красиво. А рекурсия -- как раз очень сильный концепт и такой, который понять надо. Вот все эти if, then, понимаются очень просто (тем более, что и в схеме они есть).
Я честно говорю с опытом: 4 года помогала преподавать этот самый начальный класс на схеме. Один семестр мы попробовали сделать это на Java (ну или совместить со схемой) -- это был такой страшный бардак, что стонали и студенты и преподаватели и профессора сказали что больше такого извращения не будет. Ну попробуйте написать компайлер или евальюэтор на джаве -- сколько для этого понадобится строк и файлов? И сколько будет ошибок? Можно ли это давать как одно (!) домашнее задание в начальном классе? (да, пусть тот евальюэтор, что студенты пишут на схеме, не совсем сильный, и оптимизации в нем нет, но ведь они изучают и понимают саму концепцию). Или object-oriented adventure game тоже за одно домашнее задание? пусть там нет gui -- пусть там только текст, как встареньком MUDe, но пишут же.
То, что вы сказали про схему против паскаля зависит не от схемы, а от разных типов языков -- типированных против нетипированных. Нетипированных тоже много -- схема, лисп, smalltalk, еще куча, я уверена. Затевать спор про то, какие из них лучше, не будем -- это излюбленная тема спора, вроде big-endian vs. little-endian, и решения никогда не будет. Мне кажется, что для обучения, схема очень удобна.
no subject
Date: 2003-02-09 07:36 am (UTC)Не назову и даже пытаться не буду :) Они оба, как мы с Вами прекрасно знаем, эквивалентны машине Тюринга. Под функциональностью я (и мне кажется другие тоже) имела ввиду всякие удобства, или даже не знаю, как это иначе назвать -- в общем то, из-за чего машине Тюринга на практике предпочитают другие языки.
Насчёт того, что преимущество Схемы в том, что на ней на первом же курсе можно без всяких проблем написать интерпретатор -- согласна, и даже сама собиралась было это упоминуть - но опять же , по-моему это недостаточное преимущество, по сравнению с возникающими сложностями. Однако, Вашему опыту мне трудно что-либо противопоставить, по-этому готова признать, что, возможно, Вам действительно виднее :)
no subject
экспрессивность.
no subject
no subject
Правда, тогда на третьем не получится учить С++ - студентов вырвет.
no subject
желудейС++ !" :)no subject
Date: 2003-02-08 07:24 pm (UTC)Размер стандарта Схемы - не фетиш и не самоцель, разумеется. Но вот, например, от миллиона стандартизированных способов доступа к элементу массива/sequence в Лиспе (svref мы будем использовать потому, что он оптимизирован для одномерных массивов, а aref - нет) - от этого, право же, просто навзрыд рыдать хочется.
потому что в нём нету нифига. обожаю просто этот аргумент.
В какой степени это правда (отсутствует штатная объектная система), но у Схемы теперь есть SRFIs, которые заполняют многие дыры. Некоторые реализации Схемы приходят со своими очень интересными расширениями (weak boxes, fluids, will executors, units w/ signatures etc), отсутствующими в других реализациях, к сожалению.
Re:
Date: 2003-02-09 02:04 am (UTC)DrScheme -- красивая штука, например.
но мне очень не нравится общая атмосфера вокруг Схемы. такой язык с огромным, видным отовсюду пупком, и соответствующим образом ведущие себя адепты.
мне так же не нравится, что самая популярная имплементация может кардинально (и не всегда совместимо) изменяться от версии к версии. с этим можно жить, но неприятно. я боюсь использовать research vehicles для работы.
SRFI -- не замена нормальному стандарту.
принцип "one namespace for functions and variables" мне кажется весьма неудобным. стандартизованная система обработки ошибок и CLOS мне кажутся совершенно необходимыми. от continuations я вижу больше вреда и путаницы, чем пользы. ситуация вокруг конструкта dynamic-wind меня просто смешит.
а наличие трёх разных способов добраться до элементов массива я уж как-нибудь переживу, да.
no subject
Date: 2003-02-09 07:23 am (UTC)Это можно сказать про любой язык, главное - найти адептов.
Re:
Date: 2003-02-09 09:07 am (UTC)community -- очень важный аспект любой технологии.