Как нарисовать тигра со всего 3 строками?

Фон:

Художественный учитель однажды дал мне проблему проектирования нарисовать тигра с помощью только 3 строк. Так как идея - это, я изучаю тигра и изучаю эти 3 строки для рисования, чтобы люди все еще были в состоянии сказать, что это - тигр.

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

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

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

Вопрос:

Существует ли процесс набора для удаления сложности в программных системах - своего рода шаблон процесса сокращения, который будет применен к проблеме?

9
задан Todd Moses 28 February 2010 в 05:41
поделиться

5 ответов

Посмотрите книгу Refactoring Мартина Фаулера и его http://www.refactoring.com/ веб-сайт.

Чистый код Роберта К. Мартина - еще один хороший ресурс для снижения сложности кода.

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

8
ответ дан 4 December 2019 в 09:12
поделиться

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

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

Правка : Однако никто не беспомощен против унаследованного кода. См., Например, отличные ссылки на книги в ответах Алекса Бараноски и Кристофера Джонсона. Эти книги предоставляют множество полезных методов, но в целом я остаюсь твердым в своем утверждении, что рефакторинг нетривиального устаревшего кода - это итеративный процесс, требующий как искусства, так и науки (а также терпения, безжалостности и мягкости ;-)).

4
ответ дан 4 December 2019 в 09:12
поделиться

Ознакомьтесь с книгой, Эффективная работа с устаревшим кодом

Обсуждаемые темы включают

  • Понимание механики изменения программного обеспечения: добавление функций, исправление ошибок, улучшение дизайна, оптимизация производительности
  • Включение устаревшего кода в систему тестирования
  • Написание тестов, защищающих вас от появления новых проблем
  • Методы, которые можно использовать с любым языком или платформой - с примерами на Java, C ++ , C и C #
  • Точное определение того, где необходимо внести изменения в код.
  • Работа с устаревшими системами, которые не являются объектно-ориентированными
  • Работа с приложениями, которые, похоже, не имеют никакой структуры

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

4
ответ дан 4 December 2019 в 09:12
поделиться

Прочтите книгу Anti-Patterns , чтобы получить хорошо написанную книгу по всей теме перехода от плохого (или неадаптивного) дизайна к лучшему. Он предоставляет способы восстановления после целого ряда проблем, обычно обнаруживаемых в программных системах. Затем я бы добавил поддержку рекомендации Кристофера Рефакторинг в качестве второго важного шага.

6
ответ дан 4 December 2019 в 09:12
поделиться

Это наглый вопрос: -)

Во-первых, как мы измеряем «сложность»? Без какой-либо определенной априори метрики может быть трудно оправдать любой проект «сокращения».

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

В-третьих, можно ли доказать, что поведение / функциональность программы не изменились из-за рефакторинга? (Это становится более сложным, когда код является частью поставляемого продукта.)

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

Наконец, по моему скромному мнению, я думаю, что любой такой проект рефакторинга - это скорее проблема людей, чем проблема технологий. Все программисты хотят писать хороший код, но восприятие хорошего и плохого очень субъективно и варьируется между членами одной команды. Я бы предложил установить «соглашение о дизайне» для проекта (что-то вроде C ++ Coding Standards ). Если вам это удастся, вы в основном готовы. Оставшаяся часть - это модификация частей кода, которые не соответствуют соглашению о дизайне . (Я знаю, это очень легко сказать, но очень сложно сделать. Добрые пожелания вам.)

1
ответ дан 4 December 2019 в 09:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: