Здравствуйте, LaptevVV, Вы писали:
LVV>Я довольно давно на РСДН. LVV>И как-то не припомню, чтобы был хоть один пост о хорошем качестве кода. LVV>Как правило, посты следующего содержания: LVV>
LVV>Перекинули на старый проект... Проект разрабатывали примерно ... человек в разное время, документация есть, но скудная. И главное — это ужасное качество кода.
На всякий, шоб ссылаться, признаки проблемного кода
1. Кривой дизайн/микродизайн (непонятное, много мест для изменения, много сущностей и тд)
2. Дублирование (в любом виде: от строчек, функций, классов до параллельных механизков вроде трёх версий контроллера ) ACHTUNG !
3. Простыни (длинные файлы/классы/функции/конфиги/имена/цепочки и тд)
4. Высокая вложенность конструкций
а Несколько классов в одном рукописном файле
б уровень вложенности блоков >= 3 ACHTUNG !
в вложенные конструкции вроде сложных запросов linq(на пол-экрана и более)
г несколько операторов в одной строке или одной конструкции, например условие цикла из десятка логический условий
И разные эвристики ACHTUNG !
1. Количество ревизий у файла превышает все разумные границы ACHTUNG !
2. Появления кучки странных багов после небольшого фикса ("добавил картинку — пропал грид")
3. Комментарии в файле (sic!)
4. Велосипеды. Например самопальное кеширование без грамотных юнит-тестов == рассадник багов.
5. Глотание исключений
6. Десятки сборок по пять классов на каждую
7. разделение проекта на несколько солюшнов
8. наличие мега-тулов для сборки, вроде антов-нантов, говномавенов и прочей дури, многоступенчатая сборка
9. мануал или т.н. курс молоджого бойца для работы с проектом
Здравствуйте, Ikemefula, Вы писали:
I>Теперь вопрос — является ли стоимость изменения критичной для клиента который платит за продукт решающий его проблемы ?
Боюсь, что стоимость изменений станет критичной для исполнителя, потому как клиенту на это по фигу, как и на объяснения исполнителя, что "там все плохо". О затратах на правки багов я даже не заикаюсь. Как правило, баги долго разыскиваются, но легко правятся. У меня в одном из проектов был случай: нашел проблему буквально за пару минут, но чинил примерно неделю. Наследование a-la Sheridan и некоторые другие мелочи.
Здравствуйте, Mystic, Вы писали:
I>>Аккуратно это как ? Устраняешь дублирование и внезапно получается не только реюзабельность, но оопшность и функциональщина. M>А потом просят добавить новые фичи, но только в одну из веток. В результате возникают флажки, виртуальные функции, а конце скрещивание ежа и ужа.
Есть пять способов борьбы
1. Сделай код чище чем был до тебя. Вынесешь ветку в отдельную функцию — это вполне достаточно для начала.
2. Правило трёх раз (бог любит троицу) — меняешь код первый раз, смотришь сколько сил-времени уходит и какой результат. Меняешь код второй раз — смотришь что можно улучшить. Меняешь код в третий раз — обязательно делай его лучше.
3. Правило четырёх (без четырях углов изба не стоит)- меняешь код первый раз, меряешь профит. Меняешь код второй раз — смотришь что можно улучшить. Меняешь код в третий раз — исправляешь дизайн, дублирование нахрен, т.е. тотально, после чего делаешь откат. Меняешь код в четвертый раз и обязательно улучшаешь его.
4. Закон сохранения энергии — что бы ускорить(== удешевить) проект, нужно отдать ему часть своей энергии, которую направить на а. облегчение б. ускорение (фича != ускорение)
5. Эволюция — что бы сделать чтото хорошо, надо сначала сделать это плохо а потом обязательно улучшать
Выбирай любой. Оставлять говнокод тоже вариант, надо только набраться храбрости и сказать себе : "Дырка в заднице является оправданием для говнокода".
Здравствуйте, Privalov, Вы писали:
P>Боюсь, что стоимость изменений станет критичной для исполнителя, потому как клиенту на это по фигу, как и на объяснения исполнителя, что "там все плохо". О затратах на правки багов я даже не заикаюсь. Как правило, баги долго разыскиваются, но легко правятся. У меня в одном из проектов был случай: нашел проблему буквально за пару минут, но чинил примерно неделю. Наследование a-la Sheridan и некоторые другие мелочи.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, ry, Вы писали:
ry>>Несколько лет был на поддержке кода пользовательского интерфейса моторольских телефонов. Когда только вообще впервые увидел моторольский код, ужаснулся, но не от качества (что я понимал тогда в этом), а от его объёма — и понял, какой же фигнёй занимался до этого. И только ленивый не ругался на его качество. То ли под воздействием таких разговоров, то ли в силу возрастающего профессионализма я стал считать, что могу писать код лучше. Ещё некоторое время спустя я увидел (стал различать), что это не то чтобы плохое качество кода, а заплатка тут, заплатка там, и местами вообще заплата на заплате. Но такова была политика (процесс разработки) Моторолы. На моей памяти рефакторинг проводился всего один раз. И только потом я осознал, насколько велико было качество дизайна (архитектуры), кода и управления им и восхитился. Ведь столько лет этот код жил, развивался, поддерживался совместно различными командами из Индии, Америки, Бразилии, России и др. и успешно продавался.
I>Ага, продавался пока не сдулся. Я всегда думал, что у моторолы вакханалия в коде, но теперь это можно сказать подтвердилось. I>Похоже, все фичи они имплементили посредтсвом изучения, что позволяет код, а что нет Про пользователя думать было некогда
Ты не прав, P2K платформа была одна из самых качественных и гибких у мотороллы (посмотри сколько телефонов на ней было сделано). Единственный минус, она устарела. С юзабилити у моторов было всё хорошо, всегда всё под рукой и легко найти, в отличии от нокии к примеру.
Здравствуйте, ry, Вы писали:
I>>Ага, продавался пока не сдулся. Я всегда думал, что у моторолы вакханалия в коде, но теперь это можно сказать подтвердилось. ry>Просто-напросто кончился цикл жизни данного продукта. Но это уже проблемы менеджмента, никак не кода.
Проблемы менеджемента как раз проявляются тотально, в т.ч. и в коде. Если менеджменту насравть на код это ровно тоже самое, что заинтересованность в говнокоде. Есть такое являение: "Пока будут баги, у меня будет работа" Это пораженческие настроение и от такого руководителя/команды надо бежать без оглядки.
И то и другое проявляется в т.ч. в виде говнокода, а у говнкода основной эффект — окончание цикла жизни кода. Повторяю — основной !
I>>Похоже, все фичи они имплементили посредтсвом изучения, что позволяет код, а что нет Про пользователя думать было некогда ry>По поводу юзабельности могу сказать следующее: на своей нокии, которая у меня уже 3,5 года, пути доступа к некоторым редко используемым фичам приходится искать (никак не запомню), в моторольских же телефонах такого вроде бы не было никогда. Но это, видимо, проблемы персональных предпочтений. Хотя вот к иФону вообще практически никаких претензий (у меня) — а какого качества там код?
Пока не знаю, айфон год лежал в тумбочке на работе, я им пользовался довольно часто, но себе так и не купил (забухал)
Здравствуйте, Kernan, Вы писали:
I>>Ага, продавался пока не сдулся. Я всегда думал, что у моторолы вакханалия в коде, но теперь это можно сказать подтвердилось. I>>Похоже, все фичи они имплементили посредтсвом изучения, что позволяет код, а что нет Про пользователя думать было некогда K>Ты не прав, P2K платформа была одна из самых качественных и гибких у мотороллы (посмотри сколько телефонов на ней было сделано). Единственный минус, она устарела. С юзабилити у моторов было всё хорошо, всегда всё под рукой и легко найти, в отличии от нокии к примеру.
Я често не понимаю, где ты углядел юзабилити у моторов. Что за модель с P2K ? Может я такую знаю.
Здравствуйте, denisko, Вы писали:
D>Смотри, упрощенно, чтобы добавить новую фичу ты смотришь куда добавить (n_1 квантов времени), думаешь как (n_2 квантов времени), добавляешь (n_3). Если у тебя аккуратный и относительно понятный код без изысков, то n_3 самое большое, n_1,n_2 довольно малы. Если у тебя очень качественный код созданный ради качества кода, то очень часто n_3 действительно очень мало, а вот додуматься до способа, когда оно мало (n_2), и понять куда приспособить новую фичу (n_1) занимает очень много времени, так что суммарное время добавления может быть больше, чем в первом случае.
Ты, просто не тот код называешь качественным
Необоснованная заумность -- это, как раз недостаток!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Ikemefula, Вы писали:
I>Клиент как правило не в курсе, что качество кода может быть разным или, как минимум, не понимает насколько это важно.
Клиент, как правило, не в курсе, что существует вообще какой-то там "код". (с) наблюдение из жизни
Здравствуйте, netch80, Вы писали:
N>>>А зачем рассказывать про хороший код? N>>>Для этого есть статистика (кстати, поэтому я рекомендовал бы провести голосование по этому поводу), а обсуждения по делу посвящены проблемам, а не тому, как всё хорошо. Поэтому о плохом говорят, а хорошее такого не требует. LVV>>Требует! LVV>>Ведь именно так рассуждают журналисты! Поэтому по ТВ — одна чернуха. Как говорил Задорнов: наши новости можно смотреть только под водку и не чокаясь! LVV>>Хороший код — это пример для новичков — нужно его показывать!
N>Угу. Но вместе с ТЗ, разве не так? А это уже немного другой уровень рассмотрения.
Интересно, что про плохой код обычно кричат без всякого упоминания о ТЗ...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Kernan, Вы писали:
I>>>Ага, продавался пока не сдулся. Я всегда думал, что у моторолы вакханалия в коде, но теперь это можно сказать подтвердилось. I>>>Похоже, все фичи они имплементили посредтсвом изучения, что позволяет код, а что нет Про пользователя думать было некогда K>>Ты не прав, P2K платформа была одна из самых качественных и гибких у мотороллы (посмотри сколько телефонов на ней было сделано). Единственный минус, она устарела. С юзабилити у моторов было всё хорошо, всегда всё под рукой и легко найти, в отличии от нокии к примеру.
I>Я често не понимаю, где ты углядел юзабилити у моторов. Что за модель с P2K ? Может я такую знаю.
Легендарный E398, L7 и т.п. их было много.
Здравствуйте, Vlad_SP, Вы писали:
I>>Клиент как правило не в курсе, что качество кода может быть разным или, как минимум, не понимает насколько это важно.
V_S>Клиент, как правило, не в курсе, что существует вообще какой-то там "код". (с) наблюдение из жизни
Бывают наверняка и такие клиенты, мне правда не попадались. Правда почти все клиенты частенько продавливают решения которые дают профит в краткосрочной перспективе. Без учета кода это мягко говоря не самый лучший способ строить бизнес.
Здравствуйте, Ikemefula, Вы писали:
I>А что ты делал целую неделю ?
Говорю же — баг чинил.
На самом деле головняка хватало. Из-за тотального применения наследования там такие эффекты вылезали, что аж не по себе иногда становилось. Ну и размеры методов иногда впечатляли. А иногда весь forkflow вообще в единственный метод запихивали.
Здравствуйте, Kernan, Вы писали:
I>>Я често не понимаю, где ты углядел юзабилити у моторов. Что за модель с P2K ? Может я такую знаю. K>Легендарный E398, L7 и т.п. их было много.
Популярные девайсы были, да. Только багов было столько, что народ вечно с прошивками возился. Открой любой форум — как прошить, где прошить, какую прошивку брать и тд и тд.
"Не определяется телефон — попробуй почистить контакты"
Нокия того же времени была куда посильнее, уверяю.
Здравствуйте, Privalov, Вы писали:
P>Говорю же — баг чинил.
P>На самом деле головняка хватало. Из-за тотального применения наследования там такие эффекты вылезали, что аж не по себе иногда становилось. Ну и размеры методов иногда впечатляли. А иногда весь forkflow вообще в единственный метод запихивали.
Здравствуйте, Ikemefula, Вы писали:
I>Здравствуйте, Kernan, Вы писали:
I>>>Я често не понимаю, где ты углядел юзабилити у моторов. Что за модель с P2K ? Может я такую знаю. K>>Легендарный E398, L7 и т.п. их было много.
I>Популярные девайсы были, да. Только багов было столько, что народ вечно с прошивками возился. Открой любой форум — как прошить, где прошить, какую прошивку брать и тд и тд. I>"Не определяется телефон — попробуй почистить контакты"
Ни разу такого не видел. Возможно ты имеешь ввиду кастомные прошивки.
I>Нокия того же времени была куда посильнее, уверяю.
Если ты про смартфоны, то да.
Здравствуйте, LaptevVV, Вы писали:
LVV>Не верю, что весь код — отстой. Иначе мы тут с вами не сидели бы... LVV>Кто может привести примеры прекрасного качества кода? LVV>Из жизни, а не из книжек.
Вообще говоря, вброс не очень. Subj для КСВ не годится. Лучше так: "Кто говнокодером еще не был ?" или "Кто не говнокодер ?"
LVV>Кто может привести примеры прекрасного качества кода?
Прекрасный код это код, который пишу я в текущий момент, все остальное — отстой, включая мой код, который я писал вчера .
Здравствуйте, Ikemefula, Вы писали:
I>>>Ага, продавался пока не сдулся. Я всегда думал, что у моторолы вакханалия в коде, но теперь это можно сказать подтвердилось. ry>>Просто-напросто кончился цикл жизни данного продукта. Но это уже проблемы менеджмента, никак не кода.
I>Проблемы менеджемента как раз проявляются тотально, в т.ч. и в коде. Если менеджменту насравть на код это ровно тоже самое, что заинтересованность в говнокоде. Есть такое являение: "Пока будут баги, у меня будет работа" Это пораженческие настроение и от такого руководителя/команды надо бежать без оглядки.
Я плохо выразился. Под "проблемы менеджмента" имел в виду продуктовый менеджмент, не кода. У всякого продукта есть срок жизни, и всему наступает конец. Будь то программа, дом, дерево, сын или телефон. Телефон — это аппаратно-программный комплекс. И уж коли платформе пришёл кирдык, то сколько и как ни старайся продлить ей жизнь, лучше её вовремя прибить самому, а Моторола протянула с этим.
I>И то и другое проявляется в т.ч. в виде говнокода, а у говнкода основной эффект — окончание цикла жизни кода. Повторяю — основной !
Не согласен. Конечно, код может укорачивать жизненный цикл, но, думается, главным ограничителем жизни является востребованность продукта рынком. А говнокод просто может сыграть злую шутку с его автором при наличии конкурентного продукта (а может и не сыграть).
Здравствуйте, ry, Вы писали:
I>>Проблемы менеджемента как раз проявляются тотально, в т.ч. и в коде. Если менеджменту насравть на код это ровно тоже самое, что заинтересованность в говнокоде. Есть такое являение: "Пока будут баги, у меня будет работа" Это пораженческие настроение и от такого руководителя/команды надо бежать без оглядки.
ry>Я плохо выразился. Под "проблемы менеджмента" имел в виду продуктовый менеджмент, не кода. У всякого продукта есть срок жизни, и всему наступает конец. Будь то программа, дом, дерево, сын или телефон. Телефон — это аппаратно-программный комплекс. И уж коли платформе пришёл кирдык, то сколько и как ни старайся продлить ей жизнь, лучше её вовремя прибить самому, а Моторола протянула с этим.
I>>И то и другое проявляется в т.ч. в виде говнокода, а у говнкода основной эффект — окончание цикла жизни кода. Повторяю — основной ! ry>Не согласен. Конечно, код может укорачивать жизненный цикл, но, думается, главным ограничителем жизни является востребованность продукта рынком. А говнокод просто может сыграть злую шутку с его автором при наличии конкурентного продукта (а может и не сыграть).
Говнокод всегда удорожает разработку. Всегда. И всегда это становится причиной окончания цикла жизни кода. Ты можешь хотеть юзать платформу год-два три, но денег больше нет
Дорогая разработка софта — значит на разработку железа денег будет меньше. Все очень просто.