Здравствуйте, consign, Вы писали:
C>Нежелание тратить время на бессмысленную работу.
переписывание это и есть бессмысленная работа. Осмысленная работа в данном случае — зафиксить баги в существующем коде.
C>С этим скиллом у меня и так всё хорошо.
тогда в чём проблема зафиксить код? Не знаешь где и как? А почему? Может всё-таки ещё есть куда стремиться в скилле?
C>Ты поставил всё с ног на голову. Моя цель — решение задачи с минимальными сложностями. Продукт любителя "совершенного кода" и паттернов — это как раз то, от чего я хочу избавиться.
я просто вижу очередного "реального" погроммиста, который вместо того чтобы разобраться в коде хочет всё переписать, и не осознаёт, что проект уже худо-бедно но работает, что существующая логика уже обрабатывает кучу нюансов, которых нет в документации и о которых тебе только предстоит узнать. Учись читать чужой код.
Здравствуйте, antropolog, Вы писали:
A>переписывание это и есть бессмысленная работа. Осмысленная работа в данном случае — зафиксить баги в существующем коде.
Не в том случае, если переписать — быстрее, чем исправить существующий код.
A>тогда в чём проблема зафиксить код? Не знаешь где и как?
Знаю, где и как. На добавление мелкой фичи — десяток исправлений в разных местах.
A>я просто вижу очередного "реального" погроммиста, который вместо того чтобы разобраться в коде хочет всё переписать, и не осознаёт, что проект уже худо-бедно но работает, что существующая логика уже обрабатывает кучу нюансов, которых нет в документации и о которых тебе только предстоит узнать. Учись читать чужой код.
Точно. Не может быть, чтобы я знал свою работу. Только ты можешь знать всё лучше всех.
Здравствуйте, consign, Вы писали:
C>Точно. Не может быть, чтобы я знал свою работу. Только ты можешь знать всё лучше всех.
ох, ты бы сразу сказал что у тебя аккаунт на хабрахабре, я бы не тратил на тебя своё драгоценное время
Здравствуйте, consign, Вы писали:
C>У меня его нет, снова пальцем в небо.
дартаньянство есть, отсутствие опыта есть, прийти за помощью и хамить всем подряд тоже есть, а аккаунта на хабре нет. Удивил.
C>И да — займись лучше своей крайне драгоценной работой по 2 килобакса в месяц.
милок, моё время стоило 2 килобакса в месяц примерно 12 лет назад, и ты тогда под стол пешком ходил.
Здравствуйте, consign, Вы писали:
C>Теперь сижу, не могу определиться — ржать или плакать. C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Честно признать что твоей квалификации недостаточно чтобы поддерживать этот код тебе религия не позволяет?
Здравствуйте, consign, Вы писали:
C>И снова мне подкинули проект "совсем немного доработать". C>Как только я услышал эту фразу, сразу закопошились нехорошие предчувствия. И они опять не обманули. C>Код в лучших традициях подхода "меня укусил Гамма" — куча классов с одним методом, каждый вызывается строго через интерфейс и создается через абстрактную фабрику (при том, что у всех интерфейсов ровно по одному наследнику), визиторы, DSL на основе YAML, 30 пакетов с фреймворками непонятного назначения, и так далее. C>Нормальной обработки ошибок нет, если что пошло не так — дохнет напрочь. C>И всё это при том, что вся функция проги — периодически дергать страницу по HTTP, передавая ей аргументы из конфига, и если ответ не совпадает с заданным — дернуть другую страницу. Всё.
C>Теперь сижу, не могу определиться — ржать или плакать. C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Ты сам понимаешь все, что делает код?
Автор кода доступен, он может объяснить как он работает и что нужно поправить?
Есть ли тесты или другой способ быстрой проверки работоспособности?
Если ответ "нет" хотя бы на один вопрос, то о переписывании не думай, ты можешь на порядок ошибиться в оценке.
Предположим, что ответы на вопросы выше — "да". Тогда тебе нужна объективная оценка, чтобы разговаривать с менеджером.
Например чтобы поправить баги нужно разобраться в куске кода размером X строк, и поправить Y строк.
Переписать с нуля — ты оцениваешь в Z строк.
Средняя скорость чтения и понимания кода — 200 строк в час, скорость написания — 70 строк в час. Для переписывания стоит еще коэффициент Пи заложить.
Получится, что переписывать надо, если Pi*Z/70 < X/200+Y/70. Y — должно быть маленьким знанием, относительно X, иначе правка превращается в переписывание кода. Если взять, что Y не превышает 10% от объема проекта, то можно переписать в виде Pi*Z < 7*X/20 + 2*X/20 или Pi*Z < 9/20*X или Z < X/7.
Получаем простую закономерность — новый код должен быть в 6-8 раз меньше старого, чтобы было выгодно переписывать. Причем это верно как для всего проекта, так и для отдельных кусков.
Чтобы поговорить с менеждером — найди куски, которые можно сократить. Например выкинуть абстрактную и интерфейсы, убрать визиторы и напрямую вызывать функции. Если ошибки как раз в этих кусках, то получишь добро.
Здравствуйте, consign, Вы писали:
C>И снова мне подкинули проект "совсем немного доработать". C>Как только я услышал эту фразу, сразу закопошились нехорошие предчувствия. И они опять не обманули. C>Код в лучших традициях подхода "меня укусил Гамма" — куча классов с одним методом, каждый вызывается строго через интерфейс и создается через абстрактную фабрику (при том, что у всех интерфейсов ровно по одному наследнику), визиторы, DSL на основе YAML, 30 пакетов с фреймворками непонятного назначения, и так далее. C>Нормальной обработки ошибок нет, если что пошло не так — дохнет напрочь. C>И всё это при том, что вся функция проги — периодически дергать страницу по HTTP, передавая ей аргументы из конфига, и если ответ не совпадает с заданным — дернуть другую страницу. Всё.
C>Теперь сижу, не могу определиться — ржать или плакать. C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Потом подойти к коллеге чей код тебе кажется не такой как все и попросить помочь разобраться, расспросить о всех ньюансах, скажи что столкнулся с проблемой — программа иногда "дохнет напрочь", спроси как это можно подлечить с минимальными затратами.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, consign, Вы писали:
C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Ну скажи, что не можешь вьехать, и тот, кто это наваял, пусть это и дальше поддерживает.
Здравствуйте, andrey.t, Вы писали:
AT>То есть у тебя нет причин для изменения кода кроме "оно говно"? Тогда менеджер будет прав на все 100, если не послушает такое объяснение.
Ну можно перевести на менеджерский язык — в таком коде новые фичи будут вводиться сложно и долго.
Здравствуйте, pestis, Вы писали:
P>Здравствуйте, consign, Вы писали:
C>>Теперь сижу, не могу определиться — ржать или плакать. C>>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
P>Честно признать что твоей квалификации недостаточно чтобы поддерживать этот код тебе религия не позволяет?
Знаешь, тратить квалификацию на поддержания говнокода не стОит. Есть масса более интересных применений.
Здравствуйте, alpha21264, Вы писали:
A>Здравствуйте, pestis, Вы писали:
P>>Здравствуйте, consign, Вы писали:
C>>>Теперь сижу, не могу определиться — ржать или плакать. C>>>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
P>>Честно признать что твоей квалификации недостаточно чтобы поддерживать этот код тебе религия не позволяет?
A>Знаешь, тратить квалификацию на поддержания говнокода не стОит. Есть масса более интересных применений.
А в чем еще квалификация проявляется, когда все легко и просто тогда и квалификация не нужна
профессиональный врач любит работать со сложными клиентами, т.к. в этом квалификация и навыки проявляются и развиваются.
вылечил от неизлечимой казалось всем болезни — звучит намного профессиональнее чем "поработал со здоровым клиентом болячек не нашел, проводил водные процедуры"
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
Здравствуйте, consign, Вы писали:
C>И снова мне подкинули проект "совсем немного доработать". C>Как только я услышал эту фразу, сразу закопошились нехорошие предчувствия. И они опять не обманули. C>Код в лучших традициях подхода "меня укусил Гамма" — куча классов с одним методом, каждый вызывается строго через интерфейс и создается через абстрактную фабрику (при том, что у всех интерфейсов ровно по одному наследнику), визиторы, DSL на основе YAML, 30 пакетов с фреймворками непонятного назначения, и так далее. C>Нормальной обработки ошибок нет, если что пошло не так — дохнет напрочь. C>И всё это при том, что вся функция проги — периодически дергать страницу по HTTP, передавая ей аргументы из конфига, и если ответ не совпадает с заданным — дернуть другую страницу. Всё.
C>Теперь сижу, не могу определиться — ржать или плакать. C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Очень все зависит от того что за человек менеджер итп. Если видишь что скорее всего упрутся рогом и только испортишь отношения если будешь настаивать — то выхода два:
1) Медленно и не спеша, начиная с тестов — переделывать систему понемногу. Если там совсем немного — то может даже и переписать потихоньку.
99% контор и менеджеров никогда не выделяют времени на рефактиринг и переделки, так что приходится выкручиваться самому, понемногу улучшая систему на ходу.
Да, тяжело, но экспириенс рефакторинга отличный. А постфактум вам скорее всего только спасибо скажут, когда увидят что все уже сделано и работает на 5+.
Если будут настаивать на том что все было правильно а вы дурак — см №2.
2) Найти другую работу.
F>Очень все зависит от того что за человек менеджер итп. Если видишь что скорее всего упрутся рогом и только испортишь отношения если будешь настаивать — то выхода два: F>1) Медленно и не спеша, начиная с тестов — переделывать систему понемногу. Если там совсем немного — то может даже и переписать потихоньку. F>99% контор и менеджеров никогда не выделяют времени на рефактиринг и переделки, так что приходится выкручиваться самому, понемногу улучшая систему на ходу.
Если рефакторинг за свой счет то такой вариант возможен, если в рабочее время то не надо. Вы тратите чужие деньги на то , на что вас не просят. Если код который вам не дает спать будет мешать работе бизнеса то задача на его рефакторинг или доработку сама появится и опять же ваша задача не переписать все а решить проблему как можно быстрее и дешевле, ведь бизнесу не нужно решение проблемы на все случаи жизни ( до которых бизнес может и не дожить ), ему нужно конкретное решение чтобы как можно быстрее и дешевле сделать 1 шаг вперед на рынке.
”Жить стало лучше... но противнее. Люди которые ставят точку после слова лучше становятся сторонниками Путина, наши же сторонники делают акцент на слове противнее ( ложь, воровство, лицемерие, вражда )." (с) Борис Немцов
AWW>>Вы просто не сталкивались с ситуациями когда кодят в оставшиеся пять дней до срока сдачи, и так в течении двух недель до этого. Ну по 12 часов в день. C>Сталкивался и похуже. И когда такое происходит, это всё — один сплошной бред. Странно ожидать от людей, что они не наделают глупостей в таких условиях.
Я вот недавно в одном открытом проекте фиксил багу, запилил константу с идентификатором абсолютно чёрной текстуры IMG_BLACK_SQUARE_MALEVICH
Начать следует с ТЗ.
Если ТЗ отсутствует, то надо поставить вопрос о его составлении.
После прочтения ТЗ может вдруг оказаться, что ничего лишнего в коде нет.
Имея в одной руке ТЗ, в другой сам код, можно уже предметно подготовиться к разговору с менеджером и аргументированно обьяснить, что и почему следует выбросить, что добавить, а что переделать.
Здравствуйте, okon, Вы писали:
O>Здравствуйте, alpha21264, Вы писали:
A>>Здравствуйте, pestis, Вы писали:
P>>>Честно признать что твоей квалификации недостаточно чтобы поддерживать этот код тебе религия не позволяет?
A>>Знаешь, тратить квалификацию на поддержания говнокода не стОит. Есть масса более интересных применений.
O>А в чем еще квалификация проявляется, когда все легко и просто тогда и квалификация не нужна O>профессиональный врач любит работать со сложными клиентами, т.к. в этом квалификация и навыки проявляются и развиваются.
Программист не врач, программист — инженер. И если можно взять в космос карандаш,
а не изобретать ручку за миллион долларов, то нужно брать карандаш.
Если нужна какая-то невероятная квалификация, чтобы делать тривиальные вещи,
то контора нерационально расходует интеллект сотрудников. Топикстартер в начальном
посте правильно описал симптомы. В этом коде приходится использовать "стрельбу дробью" —
то есть, вносить изменения сразу во много мест. Что тебе не понятно? Почему нужно
избавляться от стрельбы дробью независимо от квалификации? Потому что вносить
изменения в одно место в сто раз быстрее чем в десять. Почему в сто? Потому что
тут квадратичная зависимость.
Здравствуйте, consign, Вы писали:
C>Теперь сижу, не могу определиться — ржать или плакать. C>Сакраментальный вопрос — как объяснить менеджеру этой чудо-программы, что код — полное говно, и по хорошему это всё надо выбрасывать на помойку? Но так, чтобы он с программистом не уперлись рогом и не записали меня в вечные враги?
Переведи проблему в термины "время и деньги", т.е. составь экономическое обоснование своей идее "всё взять и поделить переписать".
Возможно, что в процессе ты сам увидишь, что твоя идея не обоснована