Русский
Русский
English
Статистика
Реклама

Про Patterns



Меня часто спрашивают, когда ты в первый раз познакомился с паттернами? И в очередной раз этот вопрос оставляет меня в небольшом замешательстве. Могу ли я сказать, что это был тот самый знойный июльский день, когда я ехал в маршрутке по томному пути решив взять интересную книжку по программированию в дорогу? Книжкой, кстати, оказалась та самая Gang of Four, Design Patterns. Или может это произошло немного раньше, когда я только появился на свет, и начал впитывать в себя разноцветный свет и голоса этого мира? Может еще раньше, когда, сидя в утробе матери, мой генетический алгоритм в очередной раз отрабатывал программу, которая по большому счету, уже была до меня отработана на моих родителях и прародителях множество поколений назад. Не могу сказать точно, возможно в одном из этих сюжетов. Достоверно могу сказать, что книжка эта меня чем-то зацепила. Я стал думать, что я думаю паттернами.
Disclaimer после прочтения текста под хабракатом, вам может стать скучно жить. Автор не хотел бы нести груз ответственности за ваше дальнейшее существование.


За время работы программистом я успел поработать на проектах для самых разных рынков. На каждом из них я старался увидеть те самые последовательности в доменной модели, либо в потоках данных, которые в конце концов сводятся к одной, уже давно кем-то решенной задаче с теми или иными преимуществами или недостатками. Такие места находились довольно часто, и это позволяло видеть немного дальше, чем текущие требования, быть готовым к расширяемости, или изменению функционала ранее, чем они появлялись. Bridge, Composite, Adapter и прочие, все это находило применение в той или иной ситуации. Но одна мысль все же не оставляла вашего покорного слугу, и не давала возможности спокойно насладиться текущим положением дел, а именно вопрос: а почему собственно так? Что это за магические комбинации такие, и почему они не используются повсеместно? Возможно ли это как-то применить в других отраслях или областях жизни? Всегда казалось, что здесь спрятано нечто большее
Для того, чтобы разобраться, мне пришлось отправиться на самое дно. Ну как дно, это наверное прозвучало несколько метафорично, потому что, и я надеюсь, читатель со мной согласится, никакого дна нет. Тем не менее, кривая изысканий привела меня в мир, близкий к нейробиологии. Ведь, если разобраться, все что нас окружает, тем или иным образом обрабатывается именно мозгом, и наше восприятие происходящего реализуется именно там. Конечно, на сегодняшний день, 2020-го года никто досконально не разобрался, как оно работает и по каким принципам эти 86 миллиардов нейронов пересылая друг с другу электрические сигналы формируют внутреннее представление того, что являет собой наш разум. Но это 2020-й, удивительно, как мы вообще всё еще выживаем. Ни смотря ни на что, есть позитивные сдвиги и, например, Jeff Hawkins в книге On Intelligence представил свою модель на суд зрителя еще в далеком 2004-м, которая многим пришлась по душе и которой, я хотел бы с вами поделиться.

Тут нужно сделать небольшую литературную сноску в основные определения и понятия. Итак, каждый нейрон в мозге состоит из тела и отростков (дендритов и аксонов). Те, места, где отростки 2-х нейронов соприкасаются, позволяя проходить электрическому сигналу называются синапсами. Таким образом, нейроны имеют возможность посылать сигнал, или общаться, с теми нейронами, с которыми у них есть соединение, т.е. синапс. Если по простому, если у нас есть есть физическое соединение, между нейроном, который отвечает за книгу и нейроном, который отвечает за автора, то мы знаем и то и другое, ну а если нету, то просто понятия не имеем, кто написал эту книжку.
Особый интерес для нас представляет такое понятие, как автоассоциативная память механизм, когда определенная последовательность сигналов передается от одного нейрона к другому и затем, эта же самая последовательность возвращается от нейрона получателя, к нейрону отправителю назад.
Предвосхищаю ваш вскрик негодования, Как так? Дублирование кода? Нафига!? Меня так же зацепил этот кусок функционала. Напоминает ситуацию, когда вы взяли в магазине красивые бананы, подходите на кассу, продавец спрашивает, чем вы будете оплачивать покупку? и вы не долго думая отвечаете, пожалуй, сегодня заплачу бананами!. Deal!

Тут есть одна деталь. Дело в том, что последовательность, которая подается на вход, может быть неполной, или битой, с погрешностями и неточностями. А в ответ возвращается сигнал такой, какой он должен быть в идеале (по крайней мере с точки зрения той части, которая его принимает). Т.е. вы идете в магазин со своими своими просроченными, черными бананами и платите ими за красивые, зеленые бананы, которые вам заботливо выложил в сумочку продавец. Для чего это все? Одним из ожидаемых предположений является оптимизация. Зачем каждый раз запрашивать всю информацию целиком, если по холодному, черному носу понятно, что перед нами собака? Или по характерным четырем ногам и доске сверху вполне можно определиться, что это ни что иное как обыкновенный стол.
Внимательный читатель наверное догадался, что вся эта прелюдия с паттернами была не просто так. Дело в том, что последовательность сигналов, которую передает один нейрон к другому, это и есть один из подвидов тех самых паттернов. Когда нейрон получатель распознает определенную, известную ему последовательность, он может восстановить полную картину целиком по тем неполным данным, которые поступили к нему на вход. И если я вам сейчас пропою Маленькой елочке.., ваш мозг тут же распознает этот до боли знакомый паттерн и, совершенно верно, закончит ее тем самым }{oloDn0 3NMoI. Если нам нужно задизайнить функционал, в котором определенные операции могут выполняться в виде атомарной транзакции, с возможностью отката и повторения, вы сразу же думаете про Command. Когда мы катаемся на велосипеде или читаем, мозг распознает знакомые паттерны, и в ответ включает знакомую ему программу реагирования на них, например включить определенную моторику в руках и ногах, чтобы не упасть, или распознать слово, которое будет идти следующим, пока мы до него даже не дочитали. Другими словами мозг это машина распознавания паттернов, или, если сказать простым английским языком pattern recognition machine.

Если теперь оценить масштаб фундаментальности данного механизма, те design patterns, к которым мы так привыкли, и которые выручают нас когда нужно, например, задизайнить типичный и гибкий подход к созданию объектов, являются просто каплей в океане событий, происходящих вокруг и которые основаны на этих самых паттернах. Мы почти все делаем по шаблонам, крупным и мелким, временнм и в пространстве, логическим и физическим. Иногда, жизнь представляется мне вот такой:



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

Ну и основной вопрос. Что с этим делать? Как и все вокруг нас окружающее, паттерны имеют свои плюсы и минусы. Так как жизнь, это в целом social game, люди, которые умеют видеть свойства общества, в котором мы живем, имеют больше шансов использовать их в свою выгоду и получить от жизни то, что им нужно, чем тем, которым не понятно и, из-за этого, недостижимо. Ну и конечно понимание своих собственных свойств и особенностей тоже может сильно помочь. Начиная от общих, принадлежащих виду homo sapiens в целом, и углубляясь в детали, понимание того, чем я конкретно отличаюсь от других sapiens и в каких ситуациях мои личные особенности могут играть мне на пользу, а в каких мешать. Понимание своих паттернов может помочь увидеть себя в будущем, ну или хотя бы в одной из веток квантовой вселенной. Что уже в принципе не плохо, чтобы попытаться что-то изменить, подправить свой курс и увеличить вероятности попадания туда, куда вы хотите попасть, а не туда, куда нас автоматом несет река жизни.

Предмет конечно очень обширный и его сложно заархивировать в формат статьи. Если у уважаемой публики будет интерес, я подумываю выпустить подкаст про подобные животрепещущие темы и хотелось бы найти сообщников, с кем бы это можно было бы организовать. Напишите мне, если вы находитесь на такой же стадии, может у нас получится сделать что-то крутое.
Благодарю за внимание.
Источник: habr.com
К списку статей
Опубликовано: 24.06.2020 06:06:01
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Анализ и проектирование систем

Мозг

Фракталы

Паттерны

Жизнь айтишника

Категории

Последние комментарии

© 2006-2020, personeltest.ru