Здравствуйте, gandjustas, Вы писали:
bnk>>IMHO, такая линия поведения называется словом "саботаж" G>И в чем саботаж то заключается? В любом случае ошибка будет исправлена, подход разный.
Будет исправлена только та ошибка, из-за который затеяли переписывание. И будет добавлено еще штук 5-10 новых, которые вылезут чуть позже. Оно, конечно, можно думать, что иначе и нельзя, но вообще вот так запросто переписать тыщу строк кода и быть уверенным что сделал точно не хуже — это пионерство.
Здравствуйте, Трофимов, Вы писали:
Т>2All: Человек спрашивает "Как убедить начальника?", а ему как всегда отвечают "Купите Windows 98!".
Да уж, никто так и не сказал как убедить начальника... как-будто никому никогда не приходилось этого делать.
В итоге я так и не нашел иходники версии, которая стояла у клиентов и класс пришлось переписывать. Но обошелся "малой кровью", примерно 300 строк переписал, лениво было переделывать все.
Здравствуйте, gandjustas, Вы писали:
G>В итоге я так и не нашел иходники версии, которая стояла у клиентов и класс пришлось переписывать. Но обошелся "малой кровью", примерно 300 строк переписал, лениво было переделывать все.
Здравствуйте, gandjustas, Вы писали:
G>Начальник отклонил мое предложение все переписать и хочет чтобы я связался с клиентами, выяснил какие у них стояли версии программы (учет этого конечно же не ведется), нашел где-то эти версии (полу-)годичной давности (естественно CVS никакого нет, а архив храниться где-то на дисках), проанализировал эти версии и внес локальные изменения для восстановления работоспособности.
Все-таки ты знаешь где ошибка или нет? Если знаешь, то почему тебя отправляют к клиентам ее искать. Если нет, то почему ты выбрал какой-то рандомный класс и хочешь его переписать?
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Здравствуйте, the_dip, Вы писали:
G>>В итоге я так и не нашел иходники версии, которая стояла у клиентов и класс пришлось переписывать. Но обошелся "малой кровью", примерно 300 строк переписал, лениво было переделывать все. _>300 строк за сутки?
Если знаешь что делаешь и фигачишь проверки и прочие ассерты пачками, то 100 строк в час — совсем не рекорд. Строки — они разные бывают, помни о Маяковском
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, bnk, Вы писали:
bnk>>IMHO, такая линия поведения называется словом "саботаж" G>И в чем саботаж то заключается? В любом случае ошибка будет исправлена, подход разный.
Здравствуйте, gandjustas, Вы писали:
G>Абсолютно не имею желания переписывать все. Переписать реально надо ОДИН класс, 600-1000 строк кода, после переписывания объем может уменьшиться в 2 раза.
Мне с ужасным кодом доводилось очень много работать. В таких случаях делаю следующее:
1) В процессе внеседия изменений НИКОГДА не допускаю, чтобы в результате моих правок код еще более усложнялся. Если метод на 1000 строк — свой код выношу в отдельный метод, и вызываю из ужасного. Иногда делаю косметические изменения в ужасном коде рядом с моими правками, могу там еще коммент добавить перед вызовом. Часто вместе с моими правками выношу часть кода старого класса в отдельный метод, по мелочи удаляю copy-paste, если править одно и тоже приходится в нескольких местах. Основную цель преследую — чтобы хаос не увеличился, а по возможности уменьшился. Переписывать мне даже один метод лень, за это мне не заплатят, а на себя беру до черта рискоа — если что сломается — виноват буду я;
2) Если я в этот класс еще начинаю лезть раз 5 из-за постоянно всплывающих там багов — начинаю более сильный рефакторинг этого класса. Логику часто не меняю, рефакторинг преследует цель разобраться как работает код, а не переписать все. Просто тупо дроблю огромный метод на более мелкие. Пишу комментарии к каждому методу, чтобы отследить все тонкости работы. Пишу комментарий к классу — что за класс, зачем служит, какие параметры принимает и т.д. Иногда шаг 2 предшествует шагу 1, в этом случае результаты рефакторинга даже не сохраняю, если вдруг что-то порушил по невнимательности, а времени на поиск причины нет, как правило в процессе рефакторинга я нахожу место, где внести исправления и исправляю локально.
3) Если в процессе рефакторинга на шаге 2 я начал полностью понимать логику, и нахожу, что ошибка уже в алгоритме — делаю еще один рефакторинг, более похожий на переписывание. Уже меняю логику работы, спорные моменты оставляю.
4) Если возможно — предварительно пишу тесты. Мой класс против старого, на вход подаю одно и тоже, на выходе проверяю, что все совпадает. К сожалению редко так получается, код часто такой, что тесты написать практически невозможно за приемлемое время.
Здравствуйте, Anatolix, Вы писали:
A>Все-таки ты знаешь где ошибка или нет? Если знаешь, то почему тебя отправляют к клиентам ее искать. Если нет, то почему ты выбрал какой-то рандомный класс и хочешь его переписать?
Я знал почему ошибка происходит, но не знал где находтся коды вызывающий ошибки. Учитывая что код был написан активно применяя технологию "copy&paste", таких мест могло оказаться много.
А начальник давал такие указания, потому что так он видит процесс исправления ошибок.
Здравствуйте, gandjustas, Вы писали:
G>Здравствуйте, 0rc, Вы писали:
0rc>>Зачем? Вы ведь сами сказали, что ошибки возникли в следствии обновления программы.
G>В новой версии содержатся новые отчеты, необходимые клиентам. Короче надо исправить ошибку надо по-любому и быстро. А вот в методах мы с начальником разошлись.
G>Я уже думал включить дурачка и сделать по-своему, но хочется дать понять начальнику что стоит переписывать части программы для уменьшения сложности, а он зачем-то держится за старый код, позволяя вносить только мелкие изменения.
Он, видимо, не первый год начальник просто.
Моменты:
1. большинству программистов свойственно переоценивать свои возможности. "Все переписать, делов-то — 2 дня" часто выливается в 2 месяца.
2. код старый, недокументированный, и не твой. Есть немалая вероятность существования неочевидных моментов(в просторечии, костылей), которые перестанут работать после переписывания этого куска, а проявиться это может не сразу.
Это не значит, что твой путь неправильный. Просто в этом случае без знания конкретной ситуации советы могут быть вредными.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
G>ОДИН класс, 600-1000 строк кода, после переписывания объем может уменьшиться в 2 раза.
СКОЛЬКО??????
Я бы в порядке багфикса видел в страшном сне переписавыние таких классов.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Alex EXO, Вы писали:
AE>Начальник правильно делает. AE>Если это класс работы с железом, то там _могут_ _быть_ неочевидные (не поддающиеся логическому объяснеию) элементы (задержки, вставки пустых байт, последователнтсти запросов и т.д.) которые есть резултат старого опыта и "большого траха". Поскольку они "не следуют из логики", вы их наверняка потеряете при переписывании. И начнете круг "большого траха" по новой. Особенно это касается российского "железа", но и западного тоже.
+++
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
AE>>Если это класс работы с железом, то там _могут_ _быть_ неочевидные (не поддающиеся логическому объяснеию) элементы (задержки, вставки пустых байт, последователнтсти запросов и т.д.) которые есть резултат старого опыта и "большого траха". Поскольку они "не следуют из логики", вы их наверняка потеряете при переписывании. И начнете круг "большого траха" по новой. Особенно это касается российского "железа", но и западного тоже.
M>Такие "неочевидные" элементы в большинстве случаев результат невнимательного чтения спеки, наивного подхода к решению проблем или криворукой оптимизации. Поскольку "цикл большого траха" обычно проходит в темпе гопака с чечеткой, разбираться в причинах ошибки, а уж тем более читать документацию недосуг. Вот и получается корявый код, изобилующий никак не отмеченными хаками, в котором никто не способен разобраться.
Счастливый человек, верит в святую точность спек к девайсам
Рекомендую пописать(ударение на последний слог, хотя я часто думал о другом варианте) под китайские принтеры.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.