?

Log in

No account? Create an account
Evolve Your Hierarchy - Valse oubliée [entries|archive|friends|userinfo]
aruslan

[ userinfo | livejournal userinfo ]
[ archive | journal archive ]
[ delicious | aruslan's delicious ]

Links
[Links:| Tags Profile Friends FG1 PP gamedev XNA FF Entries Comments Memories ]

Evolve Your Hierarchy [May. 30th, 2006|04:38 am]
aruslan
[Tags|, ]
[Current Music |Mozart. Requiem.]

Прочёл сабжевую колонку про Tony Hawk из мартовского Game Developer, что начиналась словами

"Until recently, game programmers consistently used a deep class hierarchy to represent game entities.
The tide is beginning to shift from this use of deep hierarchies to a variety of methods that compose a game entity object as an aggregation of components."

Меня раньше было довольно просто вывести на интересный спор, если проявлять достаточную упёртость.
Например, настаивать на ровно одном прочтении и ровно одной интерпретации.
Ровно одной точке доступа. Ровно одном паттерне взаимодействия.

Особенно сильно меня заводили намертво сцепленные код и данные, синглтоны, фиксированные форматы с запретом частично-вычисленных данных, старательный школьный data-driven типа "строго данные, никаких схем", псевдо-"классический" ОО в стиле "наследование-полиморфизм-инкапсуляция" и т.п.

Недопущение взгляда со стороны или другой точки отсчёта - как попытка оставить систему механистичной и мертвой.
Как противоположность wabi sabi.
Как противоположность живым, приспосабливающимся системам.

Я, конечно, понимаю, что идеи тэгирования достигли критической массы только с появлением тэгов в ЖЖ.
И inplace загрузкой заинтересовались только когда петух клюнул.
И идеи композиции и делегирования достигли умов широкой аудитории только с появлением вопросов по GoF на собеседованиях.
И многократно-прошитые коллекции и join против тупых иерархий потребуют WinFS, не иначе.

В последнее время я чрезвычайно ("по-постмодернистски") толерантен и циничен по этому поводу.
Особенно циничен, поскольку, наконец, вижу (с ужасом), что - окупается short term, и что - приносит доход даже long term.

Но, блин, ребята, ведь 2006 год идёт?..
LinkReply

Comments:
[User Picture]From: justy_tylor
2006-05-28 10:00 pm (UTC)
И?

Хороший код - код, который хорошо выполняет свои задачи. А пидерастичность архитектуры какой-нибудь Unr. Engine - только повод пофлеймить, не более того.
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-28 10:58 pm (UTC)
Ну что ты, justy_tylor, если тебе нужны выводы - для этого есть sim0nsays.
У меня - только риторика и ссылки, уж извини.

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

Я пробовал и то, и это.
И могу на полном серьёзе сказать, что да, тупой незамутнённый подход не позволит per se выйти на above averages. И обойдётся он, в конечном итоге, дороже.

Зато он более приспособляем и гораздо более хакопригоден.
То есть когда по локоть в говне - как-то не замечаешь, что говна прибавилось.
И если вся работа построена на "дожить до релиза" -- количество говна актуально только как мера рисков.

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

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

Вот тэгирование, композиция и замыкания стали mainstream механизмами, и можно их вкручивать в мозги.
Потому что распространённость достигла критической массы.

Что и наполняет меня оптимизмом.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: justy_tylor
2006-05-28 11:48 pm (UTC)
Хорошо, если изменение архитектуры системы не требует изменения данных.
Хорошо, если изменение архитектуры одной из подсистем не требует изменения архитектуры системы.
Хорошо, если изменение реализации одной из подсистем не требует изменения её архитектуры.
Хорошо, если изменение алгоритмов нижнего уровня не требует изменения реализаций каких-либо подсистем.

Но за 5 лет изменятся даже данные. А если нет, то "эта программа на Коболе проработает ещё пару десятилетий".

Т.е. ещё вопрос, делать "хорошую архитектуру", или "вроде как подходящее решение для данного момента времени", учитывая, когда именно придётся архитектуру менять (_в любом_, из этих двух случаев). Если использовать "вирусный дизайн", то остаётся только второй случай. Это хуже. Но проще.
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-29 12:14 am (UTC)
Ну, ожидаемые хотспоты изменений легко инкапсулируются.
То есть embrace change - не самое сложное, вообще говоря, в дизайне.

Вирусный дизайн - это не "выбери самое простое, но не проще".
Это штатная мозговая установка.

Объёмы copy-paste, плохой (по-настоящему плохой) код и т.п.

Видя "хороший" код, программист предполагает, что он будет вести себя адекватно. Но как только появляются хаки, всё становится сильно хуже, поскольку "хороший" код создаёт иллюзию, что вокруг безопасно, cozy and warm.

А говнокод с кучей copy-paste и минимумом параметризаций - не страшен.
Потому что "на войне - как на войне".
(Reply) (Parent) (Thread)
[User Picture]From: justy_tylor
2006-05-29 09:50 am (UTC)
Хотспот изменений - вся система, в дальней перспективе. Кроме того, организационная проблема отсутствия "заморозки требований" может здорово сбить прогнозы.

Если тебе сейчас напишут так, как ты сам писал "хорошую архитектуру" лет 5 назад, вполне возможно, что это тоже сейчас окажется говнокодом.

Т.е. мне кажется более важной возможность _быстро_ заменять архитектуру "хорошую тогда" на "хорошую сейчас". Потому что иначе говнокод гарантируется, как бы ни была хорошо спроектирована старая система.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: sergey_shandar
2006-05-29 12:40 am (UTC)
Многие программеры на Java до сих пор думают что иерархия не может быть множественной, а ты тут про композиции и агрегации...
(Reply) (Thread)
[User Picture]From: aruslan
2006-05-29 10:52 am (UTC)
Ну, Серёж, в том бизнес-коде, что я видел (на C#) - у них таки гораздо больше композиции и делегирования, чем в игровом коде.
Только они вот не считают это достижением.
И стараются вменяемо решать встающие проблемы.
Кто как. DSEL, кодогены и т.п.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: sim0nsays
2006-05-29 02:56 am (UTC)
Ну, по-моему, сказано только то что сказано. "is beginning to shift" - это мягкое высказывание. Вообще, весь английский язык очень мягкий. Мол, не дай бог никого не хочу обидеть.
Ну и как бы да, есть такая альтернатива - на компонентах писать. Выпушенные продукты ты знаешь, делающиеся тоже знаешь, смысл худо бедно есть. Нет, я конечно всю статью не читал, но сомневаюсь, что там категорично все.

А про гибкость... Думаю, самые удачные системы - имеющие концепт, а не гибкость. Иметь разумный набор констрейнов для задачи, которые формируют на нее такой взгляд, чтобы было ясно что делать. Как пример - Крейтовый двежок ddima. No allocation, статический scene graph, и т.д. и т.п.

(Reply) (Thread)
[User Picture]From: aruslan
2006-05-29 07:13 am (UTC)
Гештальт, да.

Что гибкость и универсальность нахер никому не нужны - это как бы очевидно.
Достаточно, чтобы было понятно, почему и что.
Скажем, у меня в Тахионе - No allocation, жёсткий in-place, статический scene graph, и т.д. и т.п.

Но я как бы не про это немножко говорю.
Я скорее про то, что народ - спит.
(Reply) (Parent) (Thread) (Expand)
[User Picture]From: aruslan
2006-05-29 07:18 am (UTC)
Статья была бы интересной, если б он действительно рассказал, почему и как всё в Tony Hawk. И занафига там такое вообще.
Ну и почему Bilas есть, а Дюрана - нет.
(Reply) (Parent) (Thread)
From: shodan_ru
2006-05-29 05:04 am (UTC)
а чем 2006й с точки зрения зарабатывания денег принципиально отличается от 1978го? :)
(Reply) (Thread)
From: neteraser
2006-05-29 07:10 am (UTC)
в контексте "миллиона не было и нет"? :)
(Reply) (Parent) (Thread)
[User Picture]From: aruslan
2006-05-29 07:15 am (UTC)
в этом контексте отличается инфляцией ;)
(Reply) (Parent) (Thread)
[User Picture]From: aruslan
2006-05-29 07:14 am (UTC)
Принципиально - ничем.
В конкретной индустрии - всем.

И каждый следующий год - делает отличие всё более выраженным.
(Reply) (Parent) (Thread)
From: shodan_ru
2006-05-29 07:39 am (UTC)
> В конкретной индустрии - всем.

что технологии и прочее очень интересное черным обезьянам меняются - это понятно...
(Reply) (Parent) (Thread) (Expand)