Очевидно дурацкие решения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 04.05.20 05:28
Оценка: :)
Периодически смотрю на когда-то написанный код и удивляюсь: как мне могло прийти в голову такое дурацкое решение — хоть алгоритмически, хоть в плане реализации. Ладно бы на момент написания я не знал чего-то существенного, но все было известно, просто мозг так сработал.

Например, только что обнаружил такой ляп в коде двухлетней давности. Делал реализации трех похожих системных интерфейсов, вынеся общее в базовый класс, и сделав отдельный производный класс под каждый интерфейс. Каждый интерфейс обрабатывает системные запросы, присылаемые не через виртуальные функции, как обычно, а через табличные обработчики, которые для удобства завел напрямую в базовый класс. Но в этих запросах система присылает адреса объектов производных классов, поэтому потребовались функции для получения адреса объекта базового класса по объекту заранее неизвестного производного. А поскольку все эти интерфейсы основаны на COM, мне на тот момент почему-то показалось, что единственно правильным решением будет определить GUID интерфейса базового класса и добавить соответствующий код в QueryInterface. Мысли о том, что гораздо проще и правильнее было бы сделать для этого отдельную виртуальную функцию, не возникло. Мозг тупо пошел на поводу у подхода, принятого в COM.

Интересно, насколько часто подобные ляпы встречаются в народе?
ляпы дурацкие решения реализация
Re: Очевидно дурацкие решения
От: удусекшл  
Дата: 04.05.20 05:54
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Интересно, насколько часто подобные ляпы встречаются в народе?


В политике, например — такое сплошь и рядом. А уж среди наших форумных бойцов — да почти каждый первый
Re: Очевидно дурацкие решения
От: Mihas  
Дата: 04.05.20 06:53
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>как мне могло прийти в голову такое дурацкое решение — хоть алгоритмически, хоть в плане реализации.

Мне кажется, в момент написания у разработчика в голове зреют какие-то планы развития этого участка кода. Планы влияют на решение, а потом не сбываются.
Re: Очевидно дурацкие решения
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 04.05.20 10:27
Оценка: 1 (1) +1
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Интересно, насколько часто подобные ляпы встречаются в народе?


У меня всё гораздо хуже. Иногда кажется, что я мало способен к проектированию и пишу программы исключительно снизу вверх. То есть не начинаю с продумывания архитектуры, а архитектура рождается в процессе усложнения системы. Поэтому большая часть моих программ является нагромождением костылей разного уровня кривости.
Re[2]: Очевидно дурацкие решения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 04.05.20 10:55
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Мне кажется, в момент написания у разработчика в голове зреют какие-то планы развития этого участка кода.


У меня на тот момент совершенно точно ничего подобного не зрело. Просто сработала первая ассоциация "раз COM — значит, интерфейс нужно получить через QueryInterface, а для этого нужно определить GUID". Задача была решена, и за два года (этот кусок мне несколько раз попадался на глаза) даже подозрения не возникло, что он кривой. Вот только сегодня торкнуло.
Re[2]: Очевидно дурацкие решения
От: flаt  
Дата: 04.05.20 11:31
Оценка: +1
Здравствуйте, Nuzhny, Вы писали:


N>У меня всё гораздо хуже. Иногда кажется, что я мало способен к проектированию и пишу программы исключительно снизу вверх. То есть не начинаю с продумывания архитектуры, а архитектура рождается в процессе усложнения системы.


Аналогично.

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


Решается рефакторингом обычно. Возможно, если начинать с продумывания, то рефакторинга можно было бы избежать, но так как продукт развивается, то архитектура и реализация всё равно меняются со временем, поэтому всё ли так плохо — не знаю.
Re: Очевидно дурацкие решения
От: vsb Казахстан  
Дата: 04.05.20 12:06
Оценка:
Хорошая мысля приходит опосля, как говорится. Полезно иногда со свежей головой почитать свой код. Хотя я считаю подобные вещи мелочью. Работает корректно и фиг с ним. Исправляется в 10 строк — значит и проблемы никакой не было, не о чем думать. Вот когда фундаментально подход оказывается неоптимальным и хочется немного архитектуру переколбасить, вот это неприятно, тут или куча работы, которую потом долго тестировать или сидеть с неоптимальным кодом, что тоже неприятно.
Re: Очевидно дурацкие решения
От: Carc Россия https://vk.com/gosha_mazov
Дата: 04.05.20 12:20
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Периодически смотрю на когда-то написанный код и удивляюсь: как мне могло прийти в голову такое дурацкое решение — хоть алгоритмически, хоть в плане реализации. Ладно бы на момент написания я не знал чего-то существенного, но все было известно, просто мозг так сработал.


[skip]

ЕМ>Интересно, насколько часто подобные ляпы встречаются в народе?

«Code Complete» Стива Макконнелла хорошо просвещает, что с этим делать, как бороться. И главное, как и что именно возглавить, если победить в этой борьбе не получается

Ну и еще пара книжек хороши по архитектуре: Брукс, Алистер Коберн… Как думать, проектировать, и.т.д. чтобы в таком «болоте» не увязнуть совсем, напрочь — по ноздри, когда уже проще с нуля переписать, чем ковыряться.
Aml Pages Home
Re[2]: Очевидно дурацкие решения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.05.20 04:14
Оценка: +1
Здравствуйте, Carc, Вы писали:

C>«Code Complete» Стива Макконнелла хорошо просвещает, что с этим делать, как бороться.


Спасибо, книжка хорошая. Только подобные книжки годятся в основном для классических программ, в которых реализации идеи не мешает ничто, кроме квалификации и ресурсов программистов. А у меня всю жизнь преобладают задачи типа "вот это реализовано бедно/криво/убого, надо туда как-то влезть и расширить и/или исправить". Когда встраиваешься в изначально кривую реализацию, будучи сильно ограничен ее особенностями, редко удается выдержать стройную архитектуру и соблюсти прочие правила хорошего тона.
Re[3]: Очевидно дурацкие решения
От: Carc Россия https://vk.com/gosha_mazov
Дата: 05.05.20 11:20
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Здравствуйте, Carc, Вы писали:


C>>«Code Complete» Стива Макконнелла хорошо просвещает, что с этим делать, как бороться.


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


Это самая "кривая реализация", в которую надо "влезть", она своя?
Или чужая? Которую нельзя изменить по каким-то причинам?
Aml Pages Home
Re[4]: Очевидно дурацкие решения
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 05.05.20 13:36
Оценка:
Здравствуйте, Carc, Вы писали:

C>Это самая "кривая реализация", в которую надо "влезть", она своя?


Обычно это какая-нибудь из подсистем ОС.
Re: Очевидно дурацкие решения
От: uncommon Ниоткуда  
Дата: 14.05.20 22:21
Оценка: +2 :)
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>... COM, ... GUID, ... QueryInterface


Я тоже недавно написал Hello World под MS-DOS на Turbo Pascal. Эх, где твои семнадцать лет!
Re[2]: Очевидно дурацкие решения
От: Ops Россия  
Дата: 23.05.20 08:31
Оценка:
Здравствуйте, Nuzhny, Вы писали:

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


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