Для начала или вводный курс в эзотерический язык  Brainfuck придуман Урбаном Мюллером в 1993 году, в основном для забавы. Уникальный, вполне себе интересный Тьюринг-полный язык программирования с размером компилятора в 240 байт! В нём используется всего лишь 8 команд, каждая из них записывается одним символом. Программа на языке Brainfuck представляет собой последовательность этих самых команд. 
 
 То что может выполнять этот язык: 
 BrainFuck Developer - с продвинутыми функциями, там внизу ссылка есть на файл 
 http://brainfuck.progopedia.ru/ - выполнение программ в вашем браузере 
 Машина, которой управляют команды Brainfuck, состоит из упорядоченного набора ячеек и указателя текущей ячейки, получается что-то вроде стека и смещения в нём. Так же реализована возможность механизма ввода-вывода, далее будет понятно на примере. 
 Список всех команд языка 
 > перейти к следующей ячейке 
 < перейти к предыдущей ячейке 
 + инкремент значения в текущей ячейке на 1 
 - декремент значение в текущей ячейке на 1 
 . напечатать значение из текущей ячейки 
 , ввести извне значение и сохранить в текущей ячейке 
 [ если значение текущей ячейки равно 0, перейти вперёд по тексту программы на ячейку, следующую за соответствующей закрывающей ] (с учётом вложенности) 
 ] если значение текущей ячейки не равно 0, перейти назад по тексту программы на ячейку, следующую за соответствующей открывающей [ (с учётом вложенности) 
 Изначально задумывалось число ячеек в 30 тыс., каждая размером в байт. По умолчанию указатель находится в левой ячейке (ячейка 0); значения всех ячеек равны 0. Ввод/вывод значений происходит по таблице ASCII, точнее по числовому смещению в этой таблице. Например 32 знака "+" и точка — выведут на экран пробел в нулевой позиции, последующий знак ">" переведёт нас к следующей ячейке. Если теперь ввести 72 знака "+" и точку — выведется буква «H». Конструкция +++[.-] по сути цикл, вносим в ячейку значение 3, выводим на экран значение из ячейки и уменьшаем его, соответственно получится вывод символов с кодами 3, 2 и 1. 
 Параметры языка могут отличаться от разновидностей! 
 «Hello World!» 
 +++++++++++++++++++++++++++++++++++++++++++++ 
 +++++++++++++++++++++++++++.+++++++++++++++++ 
 ++++++++++++.+++++++..+++.---------------- --- 
 --------------------------------------------- 
 ---------------.+++++++++++++++++++++++++++++ 
 ++++++++++++++++++++++++++.++++++++++++++ ++++ 
 ++++++.+++.------.--------.------------------ 
 --------------------------------------------- 
 ----.-----------------------. 
 Собст венно 72 вывод «H», в этой же ячейке прибавляем ещё 29 вывод «e» и т.д., манипулируя прибавлением/убавлением значения в одной единственной ячейке. Значения не пишутся в ячейку, а выводятся на лету. 
 Прокачанный «Hello World!» 
 ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++ 
 .>+.+++++++..+++.>++.<<+++++++++++++++.>.+++. 
 ------.--------.>+.>. 
 Так сказать хрестоматийный пример. Основан на предварительной подготовке 4 ячеек со значениями 70, 100, 30 и 10, чтобы проще было прибавлять или убавлять. Блок ++++++++++[>+++++++>++++++++++>+++>+<<<<-] 10 раз выполнит операции в цикле — прибавить 7 в первой ячейке, 10 во второй, 3 в третьей и 1 в четвёртой, после чего вернуться к ячейке 0 и уменьшить её. В последующих действиях можно уже разобраться и так. 
 Стырено с Хабра