Старый проект + 1
От: aeg  
Дата: 24.03.09 17:12
Оценка: 1 (1) +1 -2 :)))
Пришел на проект 2 мес. назад. До этого проект писал один человек несколько лет, ну и меня взяли к нему в помощь. Более менее разобравшись с кодом, начал удивляться как это ваще работает?! Мягко говоря код не очень. На попытки донести мысль как правильно, получаю ответ "это же работает". Из недостатков: очень высокая связность, совсем нет DAL (код вызова хранимок тонким слоем размазан по классам БЛ), невозможность юнит-тестирования (следствие связности), отсутствие MVC|MVP на вебморде, свои велосипеды ну и т.д. Короче все признаки плохого кода. Но мне ведь надо добавлять/менять функциональность. Рефакторинг не сделаешь потому что он д.б. такой глобальный, что проще заново переписать. И меня каждый день охватывает тоска. У кого нибудь было похожее? Как с этим справлялись?
Re: Старый проект + 1
От: Niemand Австралия  
Дата: 24.03.09 17:22
Оценка: +1
Здравствуйте, aeg, Вы писали:

aeg> Как с этим справлялись?


я сейчас в положении первого товарища, который заварил эту кашу. Из-за специфики заказчика (которому надо все и сразу) и бесполезности любых доков (когда на следующий день после согласования спеки они просят совсем левое, а потом еще присылают через неделю левые мокапы) и жутких сроков пришлось пилить все очень быстро, а временами вносить изменения в aspx/cs файлы в блокноте (т.к. под рукой не было компа со студией). Итого — пациент, которого ты описал. Сейчас когда проект начал работать (+ я таки вбил в голову заказчику что спешка не есть гуд) и поток требований упала я неспеша переписываю кусочки один за одним, немного помогает.
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re[2]: Старый проект + 1
От: aeg  
Дата: 24.03.09 17:28
Оценка:
Здравствуйте, Niemand, Вы писали:

N>я сейчас в положении первого товарища, который заварил эту кашу. Из-за специфики заказчика (которому надо все и сразу) и бесполезности любых доков (когда на следующий день после согласования спеки они просят совсем левое, а потом еще присылают через неделю левые мокапы) и жутких сроков пришлось пилить все очень быстро, а временами вносить изменения в aspx/cs файлы в блокноте (т.к. под рукой не было компа со студией). Итого — пациент, которого ты описал. Сейчас когда проект начал работать (+ я таки вбил в голову заказчику что спешка не есть гуд) и поток требований упала я неспеша переписываю кусочки один за одним, немного помогает.


Ну это хорошо, когда можно кусочками переписывать. У меня что-то дернешь, сломается совсем в неожиданном месте. И самое главное, что чувак не видит что все плохо. Он считает что все что я предлагаю в лучшем случае баловство
Re: Старый проект + 1
От: SE Украина  
Дата: 24.03.09 17:40
Оценка: 5 (2) +3
Здравствуйте, aeg, Вы писали:

aeg>И меня каждый день охватывает тоска. У кого нибудь было похожее? Как с этим справлялись?


Каждый из нас бывал в такой ситуации.
Начну с общего совета:

Путь в тысячу миль начинается с первого шага.

Приписается Лао-Цзы. Перевод с китайкого через английский.

В подобном случае я делал следующее:
1. Начинал с простейших рефакторингов вроде переменования метода, выделения метода, выделения класса и т.д. Вероятность багов для этих рефакторингов невелика. Но все-же будьте предельно внимательны.
2. Для каждого затребованного изменения я требовал время на ознакомление и реализовал новую функциональнось. Важно, что я реализовал минимально необходимую ее часть.
3. Новую функциональность уже можно тестировать. Ну, вы поняли...
4. Всякое очередное изменение просто цеплялось к новой функциональности.
Как правило, такие небольшие изменения дают возможность удалить тысячи строк. Такие вещи производят неизгладимое впечатление на менеджеров.

Удачи.
Re[2]: Старый проект + 1
От: aeg  
Дата: 24.03.09 17:49
Оценка:
Здравствуйте, SE, Вы писали:

Правила форума нарушены.
— оверквотинг
Правила можно найти в разделе FAQ данного форума и\или ресурса.
Нарушение правил может повлечь за собой санкции, описанные там же — модератор
SE>Удачи.

Спасибо.
Но тут еще момент. После моего добавления некоей функциональности, чувак потом правит мой код на свой лад, причем все это как-то аргументируя. И самое обидное, что не хочет понимать моих доводов. Т.е. ты пишешь пишешь, все стройно, а потом он всобачивает какую то ф-ю которая д.б. совсем в другом месте, и другой код на нее завязывает. Приехали блин.
Re: Старый проект + 1
От: Vzhyk  
Дата: 24.03.09 19:22
Оценка: 2 (2) +9 :))
aeg пишет:
>
>
> Пришел на проект 2 мес. назад. До этого проект писал один человек
> несколько лет, ну и меня взяли к нему в помощь.
<skip>
> день охватывает тоска. У кого нибудь было похожее? Как с этим справлялись?
Советов тут красивых тебе могут надавать море, особенно в стиле чисто
академических методов (SE>Путь в тысячу миль начинается с первого шага. ).
А по сути или ты подружишься с оным челом и за бутылкой вы решите че
делать дальше и как, либо ты его подставишь и выпрешь, либо свалишь сам.
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Старый проект + 1
От: SE Украина  
Дата: 24.03.09 19:52
Оценка: 8 (3) +5 :)
Здравствуйте, aeg, Вы писали:

aeg>Но тут еще момент. После моего добавления некоей функциональности, чувак потом правит мой код на свой лад, причем все это как-то аргументируя. И самое обидное, что не хочет понимать моих доводов. Т.е. ты пишешь пишешь, все стройно, а потом он всобачивает какую то ф-ю которая д.б. совсем в другом месте, и другой код на нее завязывает. Приехали блин.


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

Иногда удается провести свои предпочтения в жизнь, иногда все заканчивается переходом на другой проект. В моей практике были случаи, когда все заканчивалось моим увольнением, а иногда увольняли моего оппонента. Выыод который я сделал для себя из всего этого — моя жизнь слишком короткая, чтобы решать проблемы дураков. Ее едва хватит (или не хватит) на то, что бы сделать счастливым одного единственного дурака — меня самого.
Re[4]: Старый проект + 1
От: BulatZiganshin  
Дата: 24.03.09 20:48
Оценка: +3
Здравствуйте, SE, Вы писали:

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


ага, уволят разработчика этой системы и оставят новичка. моё мнение — товарищу не повезло по жизни, надо оттуда валить ибо учить его бесполезно
Люди, я люблю вас! Будьте бдительны!!!
Re: Старый проект + 1
От: x64 Россия http://x64blog.name
Дата: 24.03.09 22:11
Оценка: +1
А в чём проблема? Не хочешь работать над этим проектом — не работай, ищи другой.
JID: x64j@jabber.ru
Re[3]: Старый проект + 1
От: x64 Россия http://x64blog.name
Дата: 24.03.09 22:17
Оценка: 3 (1) +1
aeg>И самое главное, что чувак не видит что все плохо.

Тут, я думаю, ты ошибаешься. Всё он скорее всего видит, ну просто в лом потому что... За рефакторинг-то не платят.
JID: x64j@jabber.ru
Re: Старый проект + 1
От: Ушастый Ёж Великобритания  
Дата: 24.03.09 23:27
Оценка:
Здравствуйте, aeg, Вы писали:

aeg>Пришел на проект 2 мес. назад. До этого проект писал один человек несколько лет, ну и меня взяли к нему в помощь. Более менее разобравшись с кодом, начал удивляться как это ваще работает?! Мягко говоря код не очень. На попытки донести мысль как правильно, получаю ответ "это же работает". Из недостатков: очень высокая связность, совсем нет DAL (код вызова хранимок тонким слоем размазан по классам БЛ), невозможность юнит-тестирования (следствие связности), отсутствие MVC|MVP на вебморде, свои велосипеды ну и т.д. Короче все признаки плохого кода. Но мне ведь надо добавлять/менять функциональность. Рефакторинг не сделаешь потому что он д.б. такой глобальный, что проще заново переписать. И меня каждый день охватывает тоска. У кого нибудь было похожее? Как с этим справлялись?


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

P.S.: Недавно на работе досталось временно дописывать небольшой вспомогательный проект после того как его автор ушел. Автор был весьма неплохой специалист, но по каким то причинам написал такую фигню... Договорился с менеджером покрыть тестами и отрефакторить прежде чем вносить изменения. Работал по 10 часов в день в течении месяца, сделал конфетку. В 2-3 раз меньше кода, удачная декомпозиция, исправлено несколько серьезных дефектов, 90% покрыто тестами, куча проверок и осмысленных сообщений об ошибках. Теперь взяли нового чела работать над этим проектом дальше, за время "передачи знаний" возникло ощущение что скоро моему подвигу придет писец. Не судьба.
Re: Старый проект + 1
От: AlexFox  
Дата: 24.03.09 23:42
Оценка: +1
Здравствуйте, aeg, Вы писали:

Похоже ваш напарник считает себя полным хозяином системы. Тяжелый психологический фактор при разработке.
Раз он отрицает любые ваши предложения с самого начала проекта, то будет их отрицать и дальше.
И более того, воспринимать их как личное оскорбление. Ведь вы посягнули на святое! На его СамоЁ творение.

К сожалению, убедить его вам не удасться.

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

В этой ситуации скорее всего придется мириться с "дуростью" напарника.
По прошествии некоторого времени попросить выделить вам отдельный кусок проекта.

Увольняться сразу не надо. Попробуйте все таки потихоньку "отвоевать" часть проекта под себя.
Не получится — ну тогда уходить или вас уйдут.
Re: Старый проект + 1
От: michael_isu Беларусь  
Дата: 25.03.09 07:35
Оценка: 6 (2) +3
Здравствуйте, aeg, Вы писали:

На прошлой работе была подобная ситуация. Когда я туда пришел, опыта ООD почти не было, поэтому сначала принимал как есть (никаких слоев нет, все на датасетах и т.д.) до тех пор, пока не набрался необходимых знаний, после чего периодически стал заводить разговоры с ведущим разработчиком о развитии системы. С третьего захода получилось Смог привести кучу аргументов за новшества, косяки текущего подхода и возможные последствия. Поэтому учись вести переговоры, ибо работа программера — это не только писать программы, но и общаться с другими участниками разработки, поэтому умение общаться и продвигать свои идеи — весьма актуальный навык.
Re: Старый проект + 1
От: Кодёнок  
Дата: 25.03.09 08:41
Оценка: +2 :)
Здравствуйте, aeg, Вы писали:

aeg>На попытки донести мысль как правильно, получаю ответ "это же работает".


Донеси до него мысль, что у программиста нет проблемы «работает/не работает». Делать чтоб работало учат в университете. Если человек не может сделать чтобы работало, он вообще не программист. Гордиться тем, что код работает — это смешно.

Если «он работает» — это все, что можно сказать про код, это значит, что он наихудшего возможного качества. И по-хорошему, оплачиваться должен стажерской зарплатой. Качество кода определяется наличием дополнительных положительных качеств, например

— легко читается
— хорошо структурирован (модули можно переносить в другие проекты без изменений, тестировать по отдельности и пр.)
— легко тестируется
— исправления багов не вносят новые, исправленные баги не возвращаются
— отсутствие таинственных и неуловимых багов (типа случающихся раз в месяц)
— максимально прост и чист, без забытых неиспользуемых кусков, методов, модулей
— хорошо переносит изменения
Re: Старый проект + 1
От: Tilir Россия http://tilir.livejournal.com
Дата: 25.03.09 09:27
Оценка: +1 -1 :)
Здравствуйте, aeg, Вы писали:

aeg> У кого нибудь было похожее? Как с этим справлялись?


Было. Тот парень должно быть устал от этого проекта уже хуже горькой редьки и всю работу делает по принципу "работает и ладно, только отстаньте". Твои текущие задачи:
1) Смирить гордыню и самомнение. Принять и понять код таким какой он есть и полноценно освоить его.
2) Сделать возможным переключение твоего напарника на более интересные проекты
3) Оставшись одному вздохнуть, засучить рукава и навести порядок.
Всё просто Удачи.
Re: Старый проект + 1
От: StandAlone  
Дата: 25.03.09 09:34
Оценка: 1 (1) +1
Здравствуйте, aeg, Вы писали:

aeg>Пришел на проект 2 мес. назад. До этого проект писал один человек несколько лет, ну и меня взяли к нему в помощь. Более менее разобравшись с кодом, начал удивляться как это ваще работает?! Мягко говоря код не очень. На попытки донести мысль как правильно, получаю ответ "это же работает". Из недостатков: очень высокая связность, совсем нет DAL (код вызова хранимок тонким слоем размазан по классам БЛ), невозможность юнит-тестирования (следствие связности), отсутствие MVC|MVP на вебморде, свои велосипеды ну и т.д. Короче все признаки плохого кода. Но мне ведь надо добавлять/менять функциональность. Рефакторинг не сделаешь потому что он д.б. такой глобальный, что проще заново переписать. И меня каждый день охватывает тоска. У кого нибудь было похожее? Как с этим справлялись?


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

P.S.А бежать, как насоветовали, не надо. Во-первых, только победив старого кода дракона, станет юный падаван джедаем настоящим!
И во-вторых, не факт, что на новом месте будет лучше
Re[2]: Старый проект + 1
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 26.03.09 02:56
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>

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

Большая часть вышеприведённых признаков весьма субъективна. А обсуждать "сферический код в вакууме бессмысленно"...
[КУ] оккупировала армия.
Re[3]: Старый проект + 1
От: Кодёнок  
Дата: 26.03.09 05:37
Оценка:
Здравствуйте, koandrew, Вы писали:

K>Большая часть вышеприведённых признаков весьма субъективна. А обсуждать "сферический код в вакууме бессмысленно"...


Само собой. Если бы они были объективны, не существовало бы такой вещи, как code review. Любой code monkey мог бы взять список признаков и объективно оценить качество. Не было бы плохих и хороших программистов.

Проблемы с субъективностью только у тех, кто не может отличить хорошее от плохого.
Re[4]: Старый проект + 1
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 26.03.09 05:54
Оценка:
Здравствуйте, Кодёнок, Вы писали:

Кё>Само собой. Если бы они были объективны, не существовало бы такой вещи, как code review. Любой code monkey мог бы взять список признаков и объективно оценить качество. Не было бы плохих и хороших программистов.


По-моему, основная цель code review (помимо испольования "эффекта свежих глаз") — это сделать код понятным для всех членов конкретной команды, та самая метрика WTF/sec. Она не обязательно сделает код хорошим, ибо во-первых, из понятности кода для тима не следует понятность кода для любого девелопера вообще (и дело тут не в квалификации — очень часто специфика области сказывается), а во-вторых, понятность кода является необходимым, но не достаточным условием его "хорошести".

Если же отвлечься от теории и обратиться к практике, при написании кода я стараюсь придерживаться принципа наименьшего удивления (т.е. минимизация метрики WTF/sec). Это не делает код хорошим, но облегчает работу с ним — как чтение, так и модификацию.

Кё>Проблемы с субъективностью только у тех, кто не может отличить хорошее от плохого.

Это-то как раз и не проблема — проблема в том, что у каждого своё понятие "хорошего" и "плохого". Ну и небольшой тест-пример — есть два варианта кода:
if (File.Exists(fileName))
{ 
    //do something
}

if (File.Exists(fileName) == true)
{ 
    //do something
}

Какой из них, по-вашему, лучше, и почему?
[КУ] оккупировала армия.
Re[5]: Старый проект + 1
От: Кодёнок  
Дата: 26.03.09 06:28
Оценка:
Здравствуйте, koandrew, Вы писали:

K>это сделать код понятным для всех членов конкретной команды

K>что у каждого своё понятие "хорошего" и "плохого"

Метафора. Код — как картина, хороший художник без проблем распознает коллегу по почерку, и они безусловно сойдутся во мнении, что является бездарным (хотя могут заспорить о том, какая картина из двух лучше). Программист, который ограничивается работоспособностью, все равно что художник, заявляющий «ну я же нарисовал человека? нарисовал! что еще надо-то?!». Без сомнения, критерии «хорошести» субъективны. И твоя попытка разобрать качество на примерах обречена на провал.

Только такая разница, картина рисуется один раз и плохую картину достаточно сжечь, а «субъективно плохой» код после определенной критической массы начнет вызывать совершенно объективную головную боль и девелоперов, и у тестеров, и у саппорта, и у маркетинга.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.