Serguey Zefirov ([info]thesz) wrote,
@ 2008-02-24 21:30:00
Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Всякое разное.
Шел по улице, увидал рекламу Хонды, "Эволюция лидера." Изображена какая-то Хонда, а вокруг нее такие красные, желтые и белые полосы, как обычно бывает на ночных снимках автодорог. С одной стороны, это вызывает ощущение движения, с другой (после некоторого раздумья, однако) понимаешь, что Хонда стоит, а ее обгоняют все, кому не лень. Куда, спрашивается, эволюционировал лидер?

Случилась тут небольшая рубиловка в [info]ru_lambda насчет применения Scrap Your Boilerplate.

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

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

Такие вопросы надо вскрыть быстро, для этого надо быстро разобраться в предметной области. А для этого язык программирования не должен стоять на пути. В нем должна быть возможность адекватного задаче уровня абстракции. И "адекватный" здесь означает "не слишком высокий" тоже. Грешно использовать слишком абстрактные инструменты там, где можно обойтись более специфичными.

Например, для разбора файлов типа SREC монадические комбинаторы будут слишком сложны. А построчное сравнение с образцом - например, ('S':'0':'5':a:b:c:d:nibbles), - в самый раз.

Хаскель предлагает достаточно удобный для большинства задач уровень абстракции - алгебраические типы, сравнение с образцом, классы типов. Забираясь выше, легко попасть в ловушку не решения проблемы предметной области, не достижения цели, а решения проблемы отображения решения проблемы предметной области на фиксированный уровень абстракции и ни ангстремом ниже.

Неинтересно.

Это все равно, как изучать Дим Мак без изучения тактики поединка.

Абстракции, кстати, я люблю, но как-то "большими шагами." То есть, специально изучать тот же SYB или GADT ради улучшения знания Хаскеля я, пожалуй, не буду, а вот разобраться с зависимыми типами - очень хочется. В них как-то все очень по-новому. Ну, и GADT придется изучить, за компанию.

Последний аргумент, который я бы хотел привести, это совсем уж воздушный аргумент про "поток." Чем меньше мы отвлекаемся, тем легче удерживать состояние "потока," в котором все удается. Его невозможно поймать при использовании непривычных инструментов, значит, чтобы поймать поток, придется оттренировать применение SYB, например. Но это время я могу потратить на решение задач предметной области, что я, обычно, и делаю. Здесь получается замкнутый круг, который, наверное, надо бы разомкнуть путем увеличения размера типичных проектов, но пока не очень хочется. Уж больно все вокруг интересное. ;)

А дальше посмотрим. ;)



(Post a new comment)


[info]grundik
2008-02-25 07:17 am UTC (link)
По-моему слова "надо быть проще" очень диссонируют со словом "хаскель" ;)

(Reply to this) (Thread)


[info]thesz
2008-02-25 11:13 am UTC (link)
Да ладно уж подкалывать. Хаскель - это синтаксический сахар поверх лямбда-исчисления с нормальным порядком упрощений.

По-моему, что-либо проще придумать нельзя.

(Reply to this) (Parent)(Thread)


[info]grundik
2008-02-26 07:37 am UTC (link)
ЛИ такая же простая вещь, как шахматы - правила просты, а в реальном применении всё очень непросто. В хаскеле при этом ещё и syntax sugar не особо простой, плюс порядок вычислений всё-таки влияет (чисто потому, что все привыкли к аппликативному (причём к строгому слева-направо)/call-by-value).

Ну а вообще да, я скорее подкалываю, чем серьёзно ;)
Хотя считаю, что хаскель - язык сложный, где-то уровня перла.

(Reply to this) (Parent)(Thread)


[info]thesz
2008-02-26 08:40 am UTC (link)
"Правила просты," ага. Рокировка, например. ;)

(Reply to this) (Parent)(Thread)


[info]grundik
2008-02-26 12:43 pm UTC (link)
Ну ладно, можно не шахматы, можно го в пример привести, там из сложных правил только список того, что запрещено делать чёрным, ну и определение аналога шахматовского "троекратного повтора позиции", если я правильно помню правила го.

(Reply to this) (Parent)(Thread)


[info]thesz
2008-02-26 01:52 pm UTC (link)
Правила Го настолько просты, что их очень просто правильно запомнить. ;)

Про Го история - мы пошли на чайную церемонию и стали играть в Го. Поскольку Го означает 5 по-японски, я быстро выиграл в то, что потом оказалось рендзю (по-моему). После чего я понял, что мы играем в "точки" и выиграл в "точки." Оказалось, что правила и от точек отличаются, но я все равно заставил противника попотеть. ;)

(Reply to this) (Parent)(Thread)


[info]grundik
2008-02-27 12:05 pm UTC (link)
Скорее всего противник тоже играть не умел ;)
Я даже у компьютера не могу выиграть стабильно.

(Reply to this) (Parent)(Thread)


[info]thesz
2008-02-27 01:14 pm UTC (link)
Ну, да, с живым партнером она играла впервые в жизни. ;)

(Reply to this) (Parent)


Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…