Паттерны проектирования
Скакунов АлександрОпубликовано 22.12.2006 в Книги, Учеба, статьи
Всем, кто интересуется паттернами программирования, а особенно тем, кто не знает, что это такое, рекомендую почитать книгу “Приемы объектно-ориентированного проектирования. Паттерны проектирования”.
Как я докатился до такой жизни: втемяшилась мне в голову мысль, что большинство проблем, которые я решаю сейчас, уже кто-то когда-то решал и может быть даже решил. Очень может быть, решил лучше и изящнее, чем я. Почему бы не перенять его опыт?
Сначала в архитектуру, потом в компьютерную науку было введено понятие паттерна. Академическое определение оставим доцентам с кандитатами, знакомыми до слёз, а в моём понимании - это типовые решения типовых задач (в частности, при объектно-ориентированном подходе). Нам, инженерам (developers!), надо просто научиться не переизобретать велосипед.
Читается трудно и результативно. Трудно - много нового; приходится прерывать чтение, чтобы заглянуть в справочник паттернов; простое почитывание толку не принесёт. Результативно - лично я смог применить знания, полученные буквально уже в первых двух главах (об этом в следующий раз).
Также огромный плюс, без которого книга стала бы сухой энциклопедией - практически сразу начинается описание разработки реального проекта с использованием паттернов. Всё разжёвано, компромиссы описаны, линки на документацию приведены.
Резюме: советую всем, кто стремится к повышению качества своих проектов. Вы один из таких?
Понравилась статья? Подпишись на обновления по RSS/E-mail



Согласен. Книга MustRead для каждого разработчика.
Не знаю как вы этом издании, но в новом (http://www.ozon.ru/context/detail/id/2457392/) очень много примеров на Smalltalk - а вот знания хотя бы базового синтаксиса Smalltalk нету
Главное в первое время удержать себя от применения всех подряд паттернов в каждом проекте :)) , а то выйдет как в той статье Фаулера (http://www.martinfowler.com/articles/designDead.html) - The world is full of the legendary programmer, fresh off his first reading of GOF who includes sixteen patterns in 32 lines of code
2 Vadim: в этом - в оснвоном С++. В принципе, без многих примеров кода можно обойтись. Ещё мне нравятся примеры на Smalltalk и прочих языках, о которых много (очень много) народу даже не слышало.
2 Sergey Pariev: Да, есть такое. Чувствую себя студентом-медиком, который по ходу чтения учебника находит симптомы всех описываемых болезней у себя самого
Есть желание публиковать обзоры книг на mustread.ru? Если да, то вот ссылка: Добавить рецензию.
давно есть оригинал и когда вышел перевод - взял несколько экземпляров в офис
к сожаление перевод именно этого издания убивает
оригинал читается гораздо легче
Как раз книгу эту я бы рекомендовал не читать… потому что она ужасна, вернее перевод. Я ее когда-то купил и читать было очень тяжело, потом почитал в оригинале и оказалось, что все куда как проще, просто перевод отвратительный.
Кстати, для тех, кто разрабатывает web/enterprise-софт куда лучше подойдет книга “Архитектура корпоративных програмных приложений” Мартина Фаулера.
Фаулер тоже не очень хорошо переведён, как по мне. Фразы в духе “паттерн ‘Множество записей’”, заставляющие угадывать, что же имелось в виду в оригинале (Recordset), мне не очень по душе.
2-я мысль - “Patterns of EAA” - это next level по сравнению с GOF. Книжка, думается, лучше пойдёт, если вы уже имеете определённое (пусть - начальное) представление о этой кухне, в частности о углах взглядов на Enterprise-системы (requirements-driven development, performance)
Очень неплоха книга Джошуа Кириевски “Рефакторинг с использование шаблонов” (Refactoring to Patterns, ISBN 5-8459-1087-0).
Хорошо показано что процесс разработки - не просто кодирование заранее продуманного дизайна, а постоянное его улучшение.
Книга несколько перегружена практическими примерами, но это необходимо для полного понимания.
Особенно понравилось, что авторы не забыли так же про такое направление рефакторинга как отказ о паттернов. И в каждом конкретном случае есть обоснование, почему тот или иной паттерн оказался плох, и чем другой паттерн или наоборот полное отсутвие паттернов лучше.
Патерны это для выпускников одесского кулинарного техникума, а не для выпускников кпи/универа. Не понимаю почему, последнее время, умение решать бытовые каждодневные задачи возведено в фетиш под названием Патерны. Наверное потому, что в отрасли желающих получать высокую зарплату значительно больше чем умеющих программировать (и имеющих к этому склонность).
Стосовно випускників у мене скоро взагалі цензурних слів не залишиться. Створення робочого оточення розтягується на тижні, просту домовленність проводити аналіз і змінювати план при наявності проблем виконати не можуть, а гонору… Крутіше них тільки яйця вкруту і їм треба як старт давати чотиризначну зарплату.
Між іншим, випускники та студенти “одеского кулінарного” хоча б розуміють що вони практично нічого не вміють. На відміну від.
2akhavr: я не говорю о тех кто вчера получил дипломы - это сырой материал - глина. вылепить из них специалистов еще предстоит. да и качество преподавания за последние 5-9 лет пошатнулось не в лучшую сторону.
PS: человеку которого натаскивали 5 лет на выработку системного подхода подобные книги не нужны.
сорри в последнем посте - “человеку” читать как “человеку с опытом работы по специальности”.
Если работодатель изначально ограничивает потенциальных работников трехзначной зарплатой то зачем с ним вообще общаться? - либо он не может предоставить лучшие условия - идем к его конкуррентам
либо не хочет … - становимся конкуррентами 
кстати реальный пример. сидит один человек с небольшим опытом, после некоей фирмы на которой практиковалось коллектиное(!!!) обсуждение-выработка архитектуры. должность - обвычный девелопер. реально писать не может - делает панельку неделю (вместо одного дня). таск тупой до безобразия - сделать “по образу и подобию” по готовой архитетуре. зато масса каких-то красивых и никому не нужных обсуждений (я уже даже не делаю вид что слушаю).
2 General:
Значит начальство этого человека позволяет ему вместо работы разводить ненужные красивые обсуждения.
Не нравится - увольняйте.
Да и какое отношение эти обсуждения имеют к паттернам?
Что и кому вы пытаетесь доказать, пытаясь опровергнуть устоявшиеся мнения о паттернах своими мало-аргументированными тезисами.
@General - я і “глину” навчу. Немає бажаючих вчитися. Є бажаючі зашибати бабло.
@Ili. Якщо про “работодатель изначально ограничивает потенциальных работников трехзначной зарплатой” - це в мою сторону, то у мене ніяких обмежень немає. Хоч виконай весь бюджет і отримуй п’ятизначну платню.
2akhavr: “товар стоит столько, за сколько его можно продать”. это “изобретение” пришло в нашу жизнь из других отраслей (не ИТ - скорее из так называемого менеджмента).
2Vadim Voituk: в ua, основное предназначение паттернов - меряться кто их больше знает. реально не видел ни одного проекта который бы приносил радость - приходиться хачить нечто такое убогое… я уже плюнул искать работу - все рано где ####о лепить к ####у. только не надо рассказывать мне корпоративные сказки о том что меня наняли для того чтобы я это исправил - в лучшем случае “архитекторы все в париже”, в худшем - архитектуру определяют менеджеры (из того же “парижа”) - самое дешевое это сидеть хачить то что дали - “кулинарные” лягушки не любят волны в своем болоте - достаточно пропускать их пузыри мимо ушей да держать на дистанции.
General: Вы просто пока не нашли нормальные (в вашем же понимании) проекты. Да и работаете скорее все-го на “архитиекторов в париже” вот и приходится подстраиваться под “чужого дядю буржуя”.
И про работу в комманде, я думаю, тоже знаете мало - потому как для того чтоб что-то “убогое хачить” команду собирать не надо.
Возьмите проект на пол-года, соберите команду в 4 человека, разделите на всех задачи, а потом вместе попробуйте построить базовую архитектуру, да так чтоб все потом могли на этой архитектуре свои задачи решать, не перекраивая все вдоль и впоперек.
P.S. Согласен с вами в том, что большинство кандидатов на должность программистов, каких довелось прособеседовать, о паттернах имеют весьма отдаленное представление.
2Vadim Voituk: работать на местный рынок не фонтан - можно сделать интересный проект, но проблемы с финансированием и менталитетом менеджеров - исскуство менеджмента заканчивается на “ну я ж добазарился - депутат кого надо нагнет”.
и что самое смешное у них - не получается.
совок и противно связываться. А что касается зарубежа - так потому и работаю на дядю, что не знаю где проекты брать.
2Vadim Voituk: а про работу в команде - очень даже насмотрелся (команды 10-30 человек). тоже противно. все эти варианты “против кого дружить”, мальчики кроме “лукс гут” ничего не умеющие и прочие корпоративные прелести - не для меня.
@General - здається ти у мене вхідний, суто технічний, тест не пройдеш. А “продавати” можна по-різному. Можна “втюхувати і тікати”. А можна співпрацювати. На жаль, ті, що виросли у 90-ті другого способу, схоже, розуміють погано.
@Vadim Voituk. Які там паттерни? Вони навіть часто не знають що таке “svn co”.
2akhavr: кхм, не думаю, что стоит таким образом себя позиционировать - с чего мне вдруг проходить у Вас какой-то тест ? я в украине по техническим вопросам собираюсь беседовать два раза и то в квазар-микро за свои деньги.
что касается “втюхать и бежать” - согласен. А Вы видели тут человека который бы тут с рождения говорил по английски и не понимал укр (или рус) ? менталитет не меняется и не скоро изменится - некому учить.
@General: Все с вами ясно - меняйте профессию, пока не поздно. С этой вам счастья не найти
@akhavr:
Зато те, что знают - мнят себя гуру конфигурационного менеджемента, разрывая рубаху на груди рассказывают насколько лучше SVN чем CVS, но в тоже время отличий принципиальных назвать не могут (правда я и сам не могу:)
2akhavr: зачатки более правильного мировозрения не связанно с возрастом и появлятюся если хотя бы месяц пожить в стране у заказчика и за месяц другой тут - этот легкий налет цивилизации исчезает. проверено на нескольких человеках - по возращению из командировок ходят с круглыми глазами. а потом как все.
2Vadim Voituk: я уже три месяца ношу свои окурки в карманах. мне проще сменить страну чем профессию
по крайней мере - уже надело смотреть на мерянье патернами.
@General. При чому тут вік або місце життя? Клепка в голові - це предмет особистого _рішення_. Кожен або вирішує що воно йому потрібно, або йде йолопом по життю, радісно бігаючи по граблях.
2 Vadim Voituk:
“Зато те, что знают - мнят себя гуру конфигурационного менеджемента, разрывая рубаху на груди рассказывают насколько лучше SVN чем CVS, но в тоже время отличий принципиальных назвать не могут (правда я и сам не могу:)”
>> CVS DOESNT support atomic commits - this is the most signigicant difference.
Это я знаю, но должно же быть ещё что-то.
let’s wont discuss features like ’switch’, usability etc :)(this is important too)
As for me, atomic commits is the difference.
С автором статьи полностью согласен - книга стоящая. Читал, кое-что применял.
С качеством перевода - тоже согласен, местами хромает, и можно было некоторые термины оставить в оригинале.
Не согласен с противниками паттернов. Паттерны, ровно как и OOA/OOP - всего лишь инструменты (и этот факт многие отечественные умы просто не могут воспринять), и не более. Инструментом можно пользоваться, можно не пользоваться. Но знать о его существовании и принципе работы - безусловно полезно. Тем более, что данная книга не заполнена лозунгами (как, например, книги по XP, которые тем не менее тоже полезны), и не требует перестройки мозгов на стиль patterns-only.
С другой стороны, если конкретному девелоперу предлагают несколько книг для изучения на выбор, и при этом он не занимается дизайном (архитектурой), данная книга может быть вредна, поскольку займет место (и время) другой, более практичной книги (руководства по новой технологии и т.п.). Но данный случай обычно называют misuse, и книга от этого хуже не становится :).
Чому ніхто не хоче вчитися? Я хочу навчатися програмуванню. І маю деякі невеликі успіхи в цьому. Пишу свою адмін-панель на PHP, використовуючи Ajax, Smarty, TinyMCE і ще хочу побудувати надійне ядро адмінки, використовуючи паттерни. З моїм бажанням і тягою до програмування я думаю, що досягну успіху. Є ще молодь, яка хоче вчитися і вчиться!
З.І. Щоправда я закінчую 11-й клас і потім буду поступати до ВУЗу тому до літа програмування відійде на задній план.
Да, конечно есть те, кто хочет учиться, но, во-первых, очень мало (по сравнению с ёмкостью рынка труда), во-вторых, тяга к обучению заканчивается у многих уже к окончанию ВУЗа, когда, с одной стороны, кажется, что всё уже знаешь, с другой стороны, пора бы уже зарабатывать деньги и побольше. На деле, к этому времени у 95% знания стремятся к нулю