RK
RK
Sep 3, 2018 · 3 min read

Что по-вашему будет труднее?

· решить проблему в коде;

· решить более масштабную проблему в коде

Да, я тоже так считаю.

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

Почему я говорю «не обязательно более сложные»? Потому что ваше видение будущего — ошибочно!

История из жизни!

Мне нравится создавать инструменты для разработки игр. То есть, писать что-то для создания чего-то. Поэтому, иногда я пишу программы без практической значимости!

Все шло как по маслу. Но однажды в середине разработки DeMagnete мы решили воспользоваться неким редактором графов, который помог бы разработчикам игр проработать логику головоломки.

Тогда я подумал: «Отличная идея, у меня уже есть написанный редактор графов! Им-то мы и воспользуемся!».

Иииии… получилось нечто низкопробное — как сэндвич из забегаловки.

Вообще-то я люблю Subway

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

Плохие решения

· старался делать все расширяемым;

· пользовался не самым четким визуализатором Unity API.

Плохие последствия

· Слишком расширяемая часть мешала в работе над простыми элементами (но даже так проект получался не самым расширяемым, ведь в то время я плохо разбирался во всех плюсах конфигурируемости).

· Отсутствие масштабируемости (увеличения/уменьшения).

· Сложности с прилинковкой нодов — слоты слишком маленькие (и нет подходящего интерфейса, чтобы это исправить).

· Сложности с сериализацией — нужно синхронизировать нашу модель с Unity интерфейсом.

Первая версия редактора графов

Доработка решения

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

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

За выходные я смог создать эскиз нового графического редактора с нуля. В этот раз я четко понимал его назначение. Так появился более простой для реализации и работы интерфейс.

Хорошие решения

· Создавать простой и лаконичный интерфейс.

· Пользоваться средствами стандартного GUI-редактора и выкатывать свои интерфейсы визуализации (на деле все проще, чем кажется!).

Хорошие последствия

· Новые node-скрипты крайне компактны и расширяемы.

· Реализация масштабируемости (увеличение/уменьшение)!!!

· Проще подключать ноды, ведь мы сами программируем функцию столкновения «слот-мышь».

· Сериализация стала более надежной (как только мы разобрались с первоначальными проблемами хаха). Больше не нужно поддерживать два состояния синхронизации (представление и модель графа).

Приятные бонусы

· Выбор GameObjects в иерархии при клике на связанные ноды.

· Пинг нодов при изменении выбора в иерархии.

· В нодах может быть любой RGB-цвет (а ведь раньше было перечисление… жуть, да?)

· Проще изменять и анимировать реберную раскраску.

· Мы проделали массовое «обрезание» границ — как в ShaderForge (очень круто и полезно)

Текущая версия редактора графов

Что изменилось

Мы решили одну проблему дважды, но вторая реализация была в разы лучше.

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

В других моих инструментах/коде прослеживалась общая закономерность — у них отсутствовали реальные примеры использования. И не было ни одной программы, которую я смог бы повторно использовать без какого-либо дописывания/переписывания!

Перевод статьи Matheus Lessa: The Worst Enemy of a Programmer: Future Proofing

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade