Мне надо было решить какую-то задачу. Показалось, что на лиспе будет решать удобнее (ибо в задаче деревья, XML и DSL). Взял я первую попавшуюся живую реализацию scheme (как оказалось потом, выбор реализации был неверным), и через 20 минут начал писать, да. Синтаксис я, каюсь, знал - я в emacs работал уже (но на лиспе не писал, только конфиги правил). За эти 20 минут я понял, что на лиспе надо реально мелко декомпозировать и реально строить DSL, а потом на нём писать собственно рабочую систему. Всё остальное неважно.
На хаскеле за 20 минут я таки начать не могу писать, ибо я за 20 минут не могу выучить синтаксис в мере, достаточной для понимания примеров и чужого кода. А без понимания примеров и чужого кода невозможно понять философию языка, ну то есть невозможно понять, как именно надо записывать свои мысли.
При этом у меня есть небольшой опыт работы с ocaml (примерно такой же, какой был опыт работы с лиспом в emacs-е на момент начала писания на scheme), то есть типы и ленивость меня не смущают, ну и синтаксис таки похож.
Так понятнее?
PS: трактуй "20 минут" как "N минут", а то что-то ты по-моему на цифре "20" зациклился :) PPS: я не говорю, что хаскель говно или что он хуже лиспа, я говорю, что он сложнее изучается
У тебя произошёл неверный переход, если уж на то пошло. В одном месте (про Лисп) ты говоришь, что за 20 минут начал что-то писать, в другом месте ты говоришь, что чтобы что-то писать, надо изучить лучшие подходы и тп и что надо разбираться. Это другое место очень интересно "Роман: я поправил баг в хаскельной программе, но это просто, особо разбираться не надо. Я: так и чтобы начать что-то писать тоже особо разбираться не надо. Роман: э, нет, разбираться надо."
>На хаскеле за 20 минут я таки начать не могу писать, ибо я за 20 минут не могу выучить синтаксис в мере, достаточной для понимания примеров и чужого кода.
Повторяю - чтобы пофиксить баг, не надо придумывать дизайн. Он уже придуман, просто делай так же, как уже написано. Если пишешь сам, то дизайнить будешь сам. А дизайнить сложнее, чем просто код писать.
Насчёт "позволь не поверить" - а зачем мне врать-то? :) Я реально не могу читать код на хаскеле, потому что не могу запомнить его синтаксис. Нет, я наверняка СПОСОБЕН выучить синтаксис, но тем не менее имею право считать его сложным, если уж ПО ФАКТУ я его не могу выучить за пару часов.
>Повторяю - чтобы пофиксить баг, не надо придумывать дизайн. Он уже придуман, просто делай так же, как уже написано. Если пишешь сам, то дизайнить будешь сам. А дизайнить сложнее, чем просто код писать.
Типы позволяют быстро менять дизайн. Поэтому можно писать быстро, а потом переделать, как правильно, не сделав больших ошибок.
Я теперь этим даже на Си пользуюсь.
>Насчёт "позволь не поверить" - а зачем мне врать-то? :)
Для красного словца, например. Или чтобы остаться при своём мнении.
>Я реально не могу читать код на хаскеле, потому что не могу запомнить его синтаксис. Нет, я наверняка СПОСОБЕН выучить синтаксис, но тем не менее имею право считать его сложным, если уж ПО ФАКТУ я его не могу выучить за пару часов.
Тогда, как я понимаю, ты имеешь право высказываться в стиле "я считаю синтаксис Хаскеля сложным", а не "синтаксис Хаскеля сложен". Хотя бы "синтаксис Хаскеля сложен для меня".
По-моему я имею право говорить, что "штанга в 200 кг - тяжёлая". То, что для тебя она не тяжёлая, не делает её лёгкой. По хаскелю всё ровно то же самое.
А теперь про дизайн. Вот есть у меня задача. Я её декомпозировал, получил три структуры данных со связями один-к-одному и пять функций для работы со структурами (функции реализуют некую валидацию данных плюс некую BL, например, в одной из структур записаны права на изменение других структур). Написал всё. И тут оказалось, что удобнее будет пять структур со связями один-ко-многим и многие-ко-многим, ну и действий над ними поменьше (update делается как каскад remove, add), то есть функций теперь надо всего четыре.
>И тут оказалось, что удобнее будет пять структур со связями один-ко-многим и многие-ко-многим, ну и действий над ними поменьше (update делается как каскад remove, add), то есть функций теперь надо всего четыре. >Как мне помогают типы в этом случае?
Как минимум, меньше писать тестов. Не забудешь, где надо заменить update на remove+add.
Однако, ты описываешь вырожденный случай.
Подсистема, дизайн которой ты поменял, взаимодействует с другими системами, в которых тебе надо поменять по минимуму. Вот здесь тебе типы помогут в полной мере. Они протаскивают требования по программе.
Поясняю заново своё отношение/ощущения.
Мне надо было решить какую-то задачу. Показалось, что на лиспе будет решать удобнее (ибо в задаче деревья, XML и DSL). Взял я первую попавшуюся живую реализацию scheme (как оказалось потом, выбор реализации был неверным), и через 20 минут начал писать, да. Синтаксис я, каюсь, знал - я в emacs работал уже (но на лиспе не писал, только конфиги правил). За эти 20 минут я понял, что на лиспе надо реально мелко декомпозировать и реально строить DSL, а потом на нём писать собственно рабочую систему. Всё остальное неважно.
На хаскеле за 20 минут я таки начать не могу писать, ибо я за 20 минут не могу выучить синтаксис в мере, достаточной для понимания примеров и чужого кода. А без понимания примеров и чужого кода невозможно понять философию языка, ну то есть невозможно понять, как именно надо записывать свои мысли.
При этом у меня есть небольшой опыт работы с ocaml (примерно такой же, какой был опыт работы с лиспом в emacs-е на момент начала писания на scheme), то есть типы и ленивость меня не смущают, ну и синтаксис таки похож.
Так понятнее?
PS: трактуй "20 минут" как "N минут", а то что-то ты по-моему на цифре "20" зациклился :)
PPS: я не говорю, что хаскель говно или что он хуже лиспа, я говорю, что он сложнее изучается
Reply
У тебя произошёл неверный переход, если уж на то пошло. В одном месте (про Лисп) ты говоришь, что за 20 минут начал что-то писать, в другом месте ты говоришь, что чтобы что-то писать, надо изучить лучшие подходы и тп и что надо разбираться. Это другое место очень интересно "Роман: я поправил баг в хаскельной программе, но это просто, особо разбираться не надо. Я: так и чтобы начать что-то писать тоже особо разбираться не надо. Роман: э, нет, разбираться надо."
>На хаскеле за 20 минут я таки начать не могу писать, ибо я за 20 минут не могу выучить синтаксис в мере, достаточной для понимания примеров и чужого кода.
Позволь мне не поверить. Ну не может этого быть.
Reply
Насчёт "позволь не поверить" - а зачем мне врать-то? :)
Я реально не могу читать код на хаскеле, потому что не могу запомнить его синтаксис. Нет, я наверняка СПОСОБЕН выучить синтаксис, но тем не менее имею право считать его сложным, если уж ПО ФАКТУ я его не могу выучить за пару часов.
PS: я Руслан ;)
Reply
Типы позволяют быстро менять дизайн. Поэтому можно писать быстро, а потом переделать, как правильно, не сделав больших ошибок.
Я теперь этим даже на Си пользуюсь.
>Насчёт "позволь не поверить" - а зачем мне врать-то? :)
Для красного словца, например. Или чтобы остаться при своём мнении.
>Я реально не могу читать код на хаскеле, потому что не могу запомнить его синтаксис. Нет, я наверняка СПОСОБЕН выучить синтаксис, но тем не менее имею право считать его сложным, если уж ПО ФАКТУ я его не могу выучить за пару часов.
Тогда, как я понимаю, ты имеешь право высказываться в стиле "я считаю синтаксис Хаскеля сложным", а не "синтаксис Хаскеля сложен". Хотя бы "синтаксис Хаскеля сложен для меня".
>PS: я Руслан ;)
Прошу прощения, я поторопился.
Reply
По-моему я имею право говорить, что "штанга в 200 кг - тяжёлая". То, что для тебя она не тяжёлая, не делает её лёгкой. По хаскелю всё ровно то же самое.
А теперь про дизайн. Вот есть у меня задача. Я её декомпозировал, получил три структуры данных со связями один-к-одному и пять функций для работы со структурами (функции реализуют некую валидацию данных плюс некую BL, например, в одной из структур записаны права на изменение других структур). Написал всё. И тут оказалось, что удобнее будет пять структур со связями один-ко-многим и многие-ко-многим, ну и действий над ними поменьше (update делается как каскад remove, add), то есть функций теперь надо всего четыре.
Как мне помогают типы в этом случае?
Reply
>Как мне помогают типы в этом случае?
Как минимум, меньше писать тестов. Не забудешь, где надо заменить update на remove+add.
Однако, ты описываешь вырожденный случай.
Подсистема, дизайн которой ты поменял, взаимодействует с другими системами, в которых тебе надо поменять по минимуму. Вот здесь тебе типы помогут в полной мере. Они протаскивают требования по программе.
Reply
Это если у меня дизайн такой, что оно так :) Ну хотя на таком уровне в принципе пофигу на технологию, да.
Reply
Reply
Reply
Reply
Leave a comment