Задать вопрос
  • Как залезть на несколько уровней абстракции ниже, не плодя кривой код?

    @zahardzhan
    Такие задачи изящно решаются при помощи методов аспектно-ориентированного программирования, в качестве примера можно посмотреть на комбинаторы методов Common Lisp Object System.
    Ответ написан
    Комментировать
  • На каких задачах отработать ООП, паттерны практически?

    @zahardzhan
    hokudJolsbsy,

    На каком проекте/задаче вы реально освоили, отработали такую-то технологию/фреймворк/патетрн/инструмент


    Для того чтобы понять какой-либо паттерн, подойдет любой достаточно убогий в выразительных средствах язык программирования, который не поддерживает соответствующую семантику встроенными в язык средствами. Лучше всего взять ассемблер. Ассемблер не поддерживает никакие высокоуровневые семантики, поэтому это самый лучший язык для изучения паттернов. В нем вам придется реализовать паттерн Подпрограмма, паттерн Цикл, паттерн Сложение Больших Чисел, паттерн Массив, и много-много других паттернов.

    Сама задача "изучение паттернов" это в некотором смысле извращение. Это равносильно тому, что вы сперва отпиливаете себе ногу, а потом изучаете набор костылей, которые позволят вам нормально передвигаться, компенсируя свою неполноценность.

    Если есть задача изучить паттерн - берете язык в котором семантика этого паттерна реализована без паттернов, т.е. языковыми средствами, изучаете реализацию этой семантики, затем возвращаетесь в свой более убогий язык, и пытаетесь придумать реализацию этой семантики в виде костыля (паттерна) - таков естественный путь изучения паттернов.

    Design Patterns in Dynamic Languages
    Ответ написан
    6 комментариев
  • В чем смысл макро программирования?

    @zahardzhan
    Программа, написанная на любом языке программирования имеет форму последовательности слов и чисел.
    Содержанием программы является некий вычислительный процесс, преобразующий одни данные в другие данные.
    Данные которые преобразует программа обычно представлены в форме последовательности слов и чисел.
    Таким образом программа может изменить форму другой программы тем самым изменив её содержание, или может изменить форму другой программы не меняя её содержания. В этом состоит суть макропрограммирования.
    В рамках одного языка преимущества и недостатки макропрограммирования заключаются в повышении разнообразия форм которые могут принимать программы написанные на этом языке.
    Что касается дебага, то макропрограммирование как таковое не подразумевает дебага вообще. Это всего лишь возможность произвольного преобразование форм программ, ничем не отличающееся от преобразования любых других данных. Преобразование форм программ осуществляется самыми обычными средствами, например обычными функциями высшего порядка, поэтому сложность дебага при таком раскладе сводится к сложности дебага программы составленной из функций высшего порядка.
    Ответ написан
    Комментировать
  • Какие книги по математике и ФП легки для изучения?

    @zahardzhan
    Гёдель, Эшер, Бах: эта бесконечная гирлянда. Хофштадтер, 1979.
    Ответ написан
    Комментировать
  • Функция в математике?

    @zahardzhan
    Если смотреть на вещи проще, то функция в программировании - это правила, по которым из чего-то одного получается что-то другое (причем это что-то другое всегда одинаковое для одного и того же).

    Например, правила по которым из одних правил получаются другие правила - это и есть пример функции в программировании в общем виде.
    Ответ написан
    Комментировать
  • Как изучить язык приближенно к 100%?

    @zahardzhan
    Само по себе знание какого бы то ни было языка программирования на 100% не имеет никакого практического смысла, потому что большая часть полезных на практике способов организации информационных систем всегда лежит за пределами выразительных возможностей любого наперед заданного языка программирования. Грубо говоря, мир вычислений бесконечно богат в рамках любого - и самого ограниченного, и самого разухабистого - языка программирования.
    Ответ написан
    Комментировать
  • Примеры идеального кода?

    @zahardzhan
    Почитай книгу "Идеальный код" [Beautiful Code, O'Reilly, 2009]. Хорошая вещь, профессионалы рекомендуют. Разбор образцовых примеров кода всех возможных стилей и направлений.
    Ответ написан
    Комментировать
  • Что такое список в функциональных языках программирования?

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

    Например, функция-список λfx.fu(fv(fwx)) содержит в себе функции-элементы u, v, w

    λfx.fu(fv(fwx))
    
            f
            x
           . .
          f u .
             . .
            f v .
               . .
              f w .
                   x


    Функция λl.l(λab.a) извлекает первую функцию-элемент из функции-списка

    λl.l(λab.a)
    
             l
            l a
              b
              a


    Извлечение функции-элемента u из функции-списка (λl.l(λab.a))(λfx.fu(fv(fwx)))

    (λl.l(λab.a))(λfx.fu(fv(fwx)))x = u
    
                                                                             .
          .                  .            x             x            x      x x    u
         . .                . .          . .           . .           u      u
        l   .              f   a        a u .         b   .
       l a   .             x   b        b  . .        u  . .
         b   f            . .  a        a a v .         b   .
         a   x           f u .            b  . .        v  . .
            . .             . .           a a w .         b   x
           f u .           f v .            b    x        w
              . .             . .           a
             f v .           f w .
                . .               x
               f w .
                    x
    Ответ написан
    Комментировать