Должен ли я волноваться, если я решу многие мои проблемы таким же образом?

13

Я действительно люблю программирование игр и создателей головоломок / игр. Я решаю многие из этих проблем одинаково и, в конечном счете, использую аналогичную технику для их программирования, что мне действительно удобно.

Чтобы дать вам краткое представление, мне нравится создавать графики, в которых узлы представлены объектами. Эти объекты содержат такие данные, как координаты, позиции и, конечно, ссылки на другие соседние объекты. Я помещу их все в структуру данных и буду принимать решения по этой информации в «игровом цикле».

Хотя это краткий пример, он не точен во всех ситуациях. Это всего лишь один способ, с которым я чувствую себя действительно комфортно. Это плохо?

Брайан Харрингтон
источник
Если вы продолжаете повторять себя, почему бы не создать повторно используемый компонент?
Кугель
Не обязательно, если это хороший способ их решения :)
хайлем
4
Если вы повторяете себя все время, напишите библиотеку.
Работа
@ Брайан Харрингтон, столкнувшись с точно такой же проблемой, должен сказать, что я работаю в разных областях, таких как бизнес-логика (на работе), программирование ядра (дома) и работа на C # (на работе) и C ++ (дома). очень помог мне У меня также есть привычка читать открытый исходный код, здесь есть несколько ссылок :) Также вы можете прочитать GOF
Chani

Ответы:

26

Нет, все хорошо.

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

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


источник
+1 за последний пункт «спросите себя, все ли они хороши или, возможно, индустрия прогрессировала». Слишком часто вы видите, что хорошие программисты становятся устаревшими и плохими, потому что они застряли за
кулисами
12

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

user281377
источник
1
Эта. Это проблема, только если вы навязываете свое решение проблеме, которая не работает. Если все ваши проблемы с гвоздями, вы должны использовать молоток, но если вы пытаетесь вбить винт, вам следует отступить.
Satanicpuppy
@Satanicpuppy ... иногда у нас нет отвертки, и у нас есть проблема, которую нужно исправить СЕЙЧАС. В этом случае молоток - лучший инструмент, доступный в данный момент.
CaffGeek
@Chad - тревожно точная аналогия
normanthesquid
5

Реально на наших рабочих местах мы часто сталкиваемся с довольно похожими проблемами.

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

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

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

Может быть, выбрать несколько несрочных / некритических изменений и использовать их для ускорения работы с альтернативными решениями?

Джон Хопкинс
источник
4

Хороший вопрос, и я должен признать, что это меня тоже преследует.

Когда это хорошо? Проведите анализ производительности вашего кода - если вы видите, что вы находитесь в O (log n) или O (n) или O (n log n) и, как таковая, проблема сопоставима с известными структурами данных, с вами, как правило, все в порядке.

Когда это не хорошо? Ваша временная или пространственная сложность O (n ^ 2) или хуже, или проблема по определению NP NP. В этих ситуациях вам нужно применить немного эвристики, применить знания из других областей и т. Д.

Быстрый пример: в конструкции микросхемы выбор способа размещения затворов в схеме для минимальной мощности является NP-полным. Только графики не принесут вам пользы, хотя это необходимо. Вам необходимо читать дополнительные материалы, многие из которых иногда являются междисциплинарными, и применять полученные знания в своей области. Например, генетические алгоритмы (алгоритмы, которые имитируют генетические кроссоверы и мутации, как определено в биологии 101) имеют большое применение при разработке аппаратных чипов.

Fanatic23
источник
3

Не обязательно, если это хороший способ их решения :)

Обычно, работая над «решением», я иду по порядку:

  • простота ,
  • возможность повторного использования ,
  • и только последнее выступление .

Не то, чтобы производительность не имела значения: я проектирую с расчетом на производительность, но не слишком углубляюсь в нее (поэтому, если мне нужно сделать вызовы вспомогательного метода, такого как StringUtils.isEmpty или что-то подобное в том же потоке, я выиграл ' не возражаю). Если тогда необходима производительность (бизнес-кейс или проблема с пользовательским интерфейсом), тогда я использую другой подход, нежели простой и многократно используемый. Быть прагматичным.

Странно, однако, что при кодировании на C я гораздо больше беспокоюсь о производительности, чем при кодировании на Java ... Сила привычки :))

haylem
источник
2

Пока проблема решается эффективно, не нужно беспокоиться.

Маной Р
источник
2

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

Gaurav
источник
2

Если это работает, это нормально.

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

Хавьер
источник
2

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

Дайниус
источник
0

«Developer Art» на самом деле имеет правильный ответ, если ваша цель - создать продукт. А если ваша «фабрика» выпускает продукты, которые удовлетворяют, то круто.

Но...

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

На самом деле это подтверждается неврологическими исследованиями. Итак, поехали.

ElGringoGrande
источник