LINUX.ORG.RU

Паттерны.

 


3

3

Народ, откуда столько НЕНАВИСТИ к паттернам в программировании?

Пробежался тут по последним темам.

For example, in the OO world you hear a good deal about «patterns». I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I'm using abstractions that aren't powerful enough — often that I'm generating by hand the expansions of some macro that I need to write. — P. Graham

'Patterns mean «I have run out of language.»' — Rich Hickey

Ну и там хор подпевал, как обычно, и всё в таком духе. Вообще, сколько себя помню, на ЛОРе термин «паттерны проектирования» всегда был синонимом какого-то вселенского зла.

Но ведь если разобраться, то «паттерны» так или иначе присутствуют просто ВЕЗДЕ. В градостроительстве, архитектуре, механике, инженерии, электронике, транспорте, аэрокосмосе, музыке, спорте, кулинарии, литературе, поэзии, живописи, медицине, физике, математике, геологии, географии, добыче ископаемых, сельском хозяйстве, военном деле, государственном управлении, экономике, финансах, социологии, в людских взаимоотношениях, наконец! Человечество повсеместно использует стандартные подходы/сценарии/решения, проверенные годами. И к ним мы относимся совершенно нормально. Почему мы, например, услышав секвенцию II-V-I в «Лунной сонате», не говорим Бетховену: «Чувак, you've run out of harmony!» Почему, увидев четырёхстопный ямб у Пушкина, не предъявляем: «Чувак, да у тебя же a sign of trouble в стихах!»

Почему только будучи применёнными к программированию паттерны вызывают столь лютую ненависть?


Мне кажется одно время было тренди и стали употреблять к месту и не к месту, хэйтеры и взъелись. А так никто и не волнуется, а просто используют.

anonymous
()

P. Graham
Rich Hickey

Не парься, это же лисперы.

Они в своей жизни ничего полезного не сделали, чтобы их можно было воспринимать всерьез. А «подпевалы» — это в основном местная школота, которая повелась на вброс о якобы «илитности» лиспа. Их вообще крайне мало, просто они сильно фонят. И да, открою тебе секрет: в лиспе тоже есть паттерны, и в ФП тоже есть. Просто лисперам западло это признавать. Ведь «паттерны» прочно ассоциируются с промышленной разработкой и мейнстримом, а лисперы, наоборот, хотят себя им противопоставить.

Потому что бугуртят и завидуют — ведь их из промышленности прогнали ссаными тряпками.

anonymous
()

Почему только будучи применёнными к программированию паттерны вызывают столь лютую ненависть?

Потому что в той же java SomethingShitAbstractFabricFabricFabric не редкость. И для того, чтобы разобраться в документированном (!) коде приходится прилагать оч. много усилий.

Сами по себе паттерны хорошая вещь, вот только иногда с ними перебарщивают и очень сильно. Отсюда и попоболь.

Norgat ★★★★★
()
Ответ на: комментарий от grouzen

Ты такой забавный, везде тебе lisp мерещится, может к врачу бы сходил?

Т.е. мне померещилось, что Graham и Hickey — лисперы?

Кому после этого надо сходить к врачу?

anonymous
()
Ответ на: комментарий от Norgat

Потому что в той же java SomethingShitAbstractFabricFabricFabric не редкость.
SomethingShitAbstractFabricFabricFabric
Fabric
Fabric

Может, ты имел в виду Factory?

И да, раз «не редкость», можешь показать пример? А то столько раз слышал про эти мифические «AbstractFactoryFactory», но ни разу не видел. На выдумки смахивает.

anonymous
()

в людских взаимоотношениях, наконец

Очччень хорошее сравнение! Ты попал в точку! Ибо бездумное следование «поведенческим клише» с последующей невинно-удивлённой гримассой «А что такое? Так же все делают?» приводит в священное бешенство больше, чем все ужимки местных «ентерпрайз-дрочеров» вместе взятые. Хотя я и понимаю, что я не прав, и не надо злиться, а надо просто использовать в своих интересах хомячью запрограммированность

yyk ★★★★★
()
Последнее исправление: yyk (всего исправлений: 1)

Народ, откуда столько НЕНАВИСТИ к паттернам в программировании?

Паттерны можно понять только уже имея за плечами очень богатый опыт разработки. Тогда все эти паттерны становятся просто удобной общей терминологией для описания и без того хорошо известного, выстраданного. А у новичков без опыта они вызывают непонимание и неприязнь, потому как их пытаются преподнести как самоочевидную истину (каковой и они и являются для разработчиков с опытом).

anonymous
()

Это что, современные микропроцессоры и SoC так вообще целиком из паттернов состоят. Набирают из IP-блоков, как из готовых кубиков. Так что паттерны - это нормально, и в программировании, и во всем остальном, а попаболь от них только у здешних борщевиков.

сколько себя помню, на ЛОРе термин «паттерны проектирования» всегда был синонимом какого-то вселенского зла

Кстати нет, это только последние годы так. Когда-то ЛОР был нормальным. Вот, например, абсолютно адекватный топик о паттернах от 2004 года. Design patterns

Ну а потом начались всякие луговские, и «пропал калабуховский дом».

anonymous
()
Ответ на: комментарий от yyk

О, а вот и первый бугуртенок-борщевичок явился. Поприветствуем!

в людских взаимоотношениях, наконец

бездумное следование «поведенческим клише»

Нечего ответить по теме - придерись к деталям? Оок.

anonymous
()

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

В градостроительстве, архитектуре, механике, инженерии, электронике, транспорте, аэрокосмосе, музыке, спорте, кулинарии, литературе, поэзии, живописи, медицине, физике, математике, геологии, географии, добыче ископаемых, сельском хозяйстве, военном деле, государственном управлении, экономике, финансах, социологии, в людских взаимоотношениях, наконец!

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

Почему мы, например, услышав секвенцию II-V-I в «Лунной сонате», не говорим Бетховену: «Чувак, you've run out of harmony!» Почему, увидев четырёхстопный ямб у Пушкина, не предъявляем: «Чувак, да у тебя же a sign of trouble в стихах!»

Не путай раскрытие паттерна с его описанием. Ты вот распознал секвенцию, теперь чтобы записать это место «Лунной сонате», тебе достаточно указать, что здесь идёт секвенция. Тебе не надо расписывать отдельные ноты. (хм, я не знаток теории музыки, надеюсь, аналогия не очень кривая)

Проблема паттернов в программировании в том, что программирование создано для идентификации, описания и устранения паттернов в реальной жизни. Применять их в явном виде в коде глупо.

anonymous
()
Ответ на: комментарий от anonymous

Паттерны это все-таки более высокий уровень абстракции, чем библиотечная функция или IP-блок. В железостроении паттерном будет, например, пайплайн, или FSM, или scoreboard. Паттерном будет round-robin арбитраж. А конкретный блок, конкретная реализация, например, wishbone - это аналог тупо библиотечной функции.

anonymous
()
Ответ на: комментарий от anonymous

Если мы сможем описать паттерны в этих областях, мы сможем построить автоматы, решающие соответствующие задачи.

Ты, конечно же, не в курсе, но эти паттерны идентифицированы, описаны и стандартизованы, на каждый по кучке ГОСТов. И за малейшее отступление от этих паттернов в разработке инженеров бьют батогами и закапывают в термитники. Инженер и есть тот самый автомат, который решает «соответствующие задачи», и самодеятельность в его работе крайне неуместна.

anonymous
()
Ответ на: комментарий от anonymous

Ну а потом начались всякие луговские

Виталик, ЕМНИП, тут тусил с 1999-го примерно.

encyrtid ★★★★★
()
Ответ на: комментарий от anonymous

Может, ты имел в виду Factory?

Ага.

Именно FactoryFactoryFactory с ходу не нашлось. Да и это был сарказм естественно. Но

Тут - https://github.com/gephi/gephi/tree/master/modules/AttributesAPI/src/main/jav... можно встретить:

GraphItemDelegateFactoryProvider

Ну и моё любимое http://www.gigaspaces.com/docs/JavaDoc9.6/index.html тут встречаются классы:

NonBlockingElasticMachineProvisioningAdapterFactory ClassLoaderAwareProcessingUnitContainerProvider

и др.

А вот тут http://wiki.gigaspaces.com/wiki/display/XAP96/Running and Debugging Within Yo... можно встретить:

IntegratedProcessingUnitContainerProvider

с помощью которого нужно создавать ProcessingUnitContainer.

В общем и целом конечно понятно что и как там происходит. Но вот первое знакомство, мягко говоря, несколько затягивается. Т.к. приходится перелопачивать кучу кода, чтобы разобраться как оно работает и что с чем соединять нужно.

P.S. искать ещё просто лень сейчас.

Norgat ★★★★★
()
Последнее исправление: Norgat (всего исправлений: 1)
Ответ на: комментарий от yyk

бездумное следование «поведенческим клише»

Это вы описали скорее «антипаттерн», нежели паттерн. Я имел в виду, например, «официальный брак» или «гражданский брак» — чем не паттерны? Проверенные временем стандартные схемы, служащие для достижения определённых (хоть и слегка разных) целей.

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

BYHYRT
() автор топика
Ответ на: комментарий от Norgat

Потому что в той же java SomethingShitAbstractFabricFabricFabric не редкость.

У меня прямо сейчас на соседнем рабочем столе в QtCreator открыт плюсовый хедер с классом абстрактной фабрики фабрик of something shit. Так что не явой единой =).

Deleted
()
Ответ на: комментарий от anonymous

Нечего ответить по теме - придерись к деталям?

Ты из-за своей гипер-озабоченности совсем читать и понимать прочитанное разучился. Но, в общем-то, и не удивительно...

yyk ★★★★★
()
Последнее исправление: yyk (всего исправлений: 1)

Чтобы укротить дух ненависти, достаточно IMHO прочесть, к примеру, статью про антипаттерны в Википедии. Как-то так.

Infra_HDC ★★★★★
()
Ответ на: комментарий от BYHYRT

Это вы описали скорее «антипаттерн», нежели паттерн.

Это я «наехал» на бездумное использование чего-либо или следование чему-либо. И в обоих формах брака не вижу ничего плохого, вот только случаи, когда «вступают в брак» ни о чём не думая, чаще всего плачевно заканчиваются. Навязывание же алгоритма «сначала замуж/женись, а потом гуляй после 23-х» (то-же паттерн) считаю махровой дремучестью.

yyk ★★★★★
()

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

Примерно так: Хороший архитектор оставляет след.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от yyk

Это я «наехал» на бездумное использование чего-либо или следование чему-либо.

И как это вообще связано с паттернами? Паттерны - просто набор терминов для обозначения тех общих для всех опытных разработчиков практик, которые иначе бы тупо назывались бы как попало, затрудняя коммуникацию.

Паттерны есть, это объективный факт, от которого никуда не денешься. Или мы даем им имена, облегчая тем самым обсуждение архитектуры, или закрываем глаза на сам факт их наличия, и разводим терминологический бардак. Какой из вариантов тебе больше нравится?

anonymous
()
Ответ на: комментарий от iZEN

Потому что паттерны уводят программирование от DSL, языка предметной области, наиболее точно выражающего модель предметной области

Поясните. Это что, на каждую задачу надо писать свой язык?

BYHYRT
() автор топика
Ответ на: комментарий от anonymous

Ну там и про ватник и про бугурт есть статьи, но это же не то.

crowbar
()
Ответ на: комментарий от iZEN

Потому что паттерны уводят программирование от DSL

Вообще-то DSL это тоже паттерн. И уж в практике конструирования языков этих паттернов больше, чем вообще где бы то ни было еще.

anonymous
()
Ответ на: комментарий от anonymous

И как это вообще связано с паттернами?

Точно так-же, как паттерны связаны с молотком, которым заворачивают шурупы, и с отвёрткой, которой забивают гвозди. Но если с молотком почти интуитивно понятно (достаточно раз посмотреть и раз попробовать) что и как делать, и нет желания им пользоваться по случаю и без случая, то «горячие головы» носятся со своими паттернами, будто им везде мерещаться гвозди. Я понимаю, что сами паттерны в этом не виноваты. Ну так и БАДы, в общем-то, полезные в отдельных случаях препараты, если бы только шумиха вокруг них не раздулась до такого масштаба, что проще наклеить ярлык «говно», нежели пытаться разъяснять что и как.

yyk ★★★★★
()
Ответ на: комментарий от BYHYRT

Поясните. Это что, на каждую задачу надо писать свой язык?

А ты и так это делаешь. Определение каждой новой функции можно (и нужно!) рассматривать как добавление нового оператора в уже имеющийся язык программирования. Потом с помощью этих операторов ты описываешь решение своей задачи, фактически, используя эти функции как термины (e)DSL. Другое дело, что обычно ты при этом ограничен синтаксисом изначально выбранного языка.

Если интересно подробнее, загугли «bottom-up programming».

anonymous
()
Ответ на: комментарий от yyk

то «горячие головы» носятся со своими паттернами, будто им везде мерещаться гвозди.

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

Еще раз - паттерны объективно существуют. То, что толпы макак не в силах паттерны понять, это проблема самих макак, а вовсе не паттернов.

что проще наклеить ярлык «говно», нежели пытаться разъяснять что и как.

Ну и куда ты без паттернов денешься-то?

anonymous
()
Ответ на: комментарий от anonymous

Методом борьбы с распространением борщевика в дикой природе является картирование зон его самосева и уничтожение растений до появления семян

Прекрасно, просто прекрасно!

anonymous
()
Ответ на: комментарий от fat_angel

А где же пассаж про мамкин борщ?

Вот здесь:

хотят себя противопоставить

В этой фразе все. И остывший борщ, и ночи, проведенные за компьютером, и аниме, и асоциальность, и нищебродство, и доширак, и пятна засохшей спермы на клавиатуре, и перхоть, и отсутствие гигиены, и агрессия, и наркомания, и алкоголизм. Просто я посчитал, что это довольно очевидно — и поэтому решил не раскрывать в подробностях.

Но раз уж ты настаиваешь...

anonymous
()
Ответ на: комментарий от iZEN

Потому что паттерны уводят программирование от DSL

Но постой, ведь DSL сами состоят из кучи паттернов!

Adaptive Model
Alternative Tokenization
Annotation
BNF
Class Symbol Table
Closure
Construction Builder
Context Variable
Decision Table
Delimiter-Directed Translation
Dependency Network
Dynamic Reception
Embedded Interpretation
Embedded Translation
Embedment Helper
Expression Builder
Foreign Code
Function Sequence
Generation Gap
Literal Extension
Literal List
Literal Map
Macro
Method Chaining
Model Ignorant Generation
Model-Aware Generation
Nested Closure
Nested Function
Nested Operator Expression
Newline Separators
Notification
Object Scoping
Parse Tree Manipulation
Parser Combinator
Parser Generator
Production Rule System
Recursive Descent Parser
Regex Table Lexer
Semantic Model
State Machine
Symbol Table
Syntax-Directed Translation
Templated Generation
Textual Polishing
Transformer Generation
Tree Construction

Выходит, что паттерны уводят программирование от паттернов?

anonymous
()
Ответ на: комментарий от anonymous

Я же объяснил - паттерны - для опытных разработчиков

Но вот только почему-то полки книжных магазинов не завалены книгами «шунтирование коронарных сосудов для чайников за 24 часа», и им не пытаются заниматься если просто появился насморк или даже голова слегка заболела.

yyk ★★★★★
()
Ответ на: комментарий от yyk

А что, полки уставлены книгами «паттерны за 24 часа»? Нет. В книгах для чайников про паттерны ни слова не сказано, а если чайники хватают с полок книги для спецов, то, опять же, виноваты сами чайники.

anonymous
()
Ответ на: комментарий от BYHYRT

Это что, на каждую задачу надо писать свой язык?

Не писать свой язык, а определять язык предметной области, в терминах которого пишется любое приложение. Меньше абстрактных псевдоматематических построений — больше связи с реальностью и делом. Так поступают лисперы.

iZEN ★★★★★
()
Ответ на: комментарий от anonymous

Вообще-то DSL это тоже паттерн.

Это не паттерн, а переосмысление программирования. Кому оно не даётся, тот зубрит Java EE.

iZEN ★★★★★
()
Ответ на: комментарий от anonymous

А что, полки уставлены книгами «паттерны за 24 часа»? Нет.

Таки теперь ты будешь придираться к деталям? Полки завалены книгами по паттернам, и везде они объясняются «на котятах». И если в книгах и пишут об осторожном применении паттернов, то мелким почерком и в конце книги. И ни в одной книге с таким-же восторгом и упоением, с которым расписаны примеры применения паттернов, не разбираются случаи, когда применение паттернов излишне и не оправдано. По мне, так это равносильно рекламе табакокурения :)

yyk ★★★★★
()
Ответ на: комментарий от iZEN

Это не паттерн, а переосмысление программирования

Это паттерн, конечно же. Что же еще, как не паттерн?

Формулируется так: «Записать терминологию и таксономию предметной области в виде языка программирования, и переписать решение задачи на этом языке».

С того самого момента, как этих самых DSLей было придумано более одного, это стало паттерном.

anonymous
()
Ответ на: комментарий от anonymous

Но постой, ведь DSL сами состоят из кучи паттернов!

Да нет. Это очередное филологическое творчество, сделанное по тому же самому сценарию, ради самого филологического творчества и бабок, которое оно приносит «определителям» терминов метаязыка. :)

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

а определять язык предметной области, в терминах которого пишется любое приложение

Молодец, ты только что свормулировал pattern. А еще до этого ты дал ему имя: «DSL». Так вот, все остальные паттерны точно такие же. Кто-то подмечает общий для многих задач метод, дает ему краткую формулировку и дает ему простое и запоминающееся имя.

И после этого ты в курилке своим коллегам будешь говорить: «я для решения этой задачи соорудил DSL», вместо того, чтобы говорить «я тут определил язык предметной области, в терминах которого и описал решение вот этой задачи».

Дошло?

anonymous
()
Ответ на: комментарий от iZEN

Ты еще составителей словарей разоблачи. Они общую терминологию выискивают ради бабла! Шок! Сенсация! ВИДЕО!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.