Здравствуйте, kaa.python, Вы писали:
G>>Последнее время часто вижу такой код и каждый раз пропадает мотивация менять мир к лучшему.
KP>Но если серьезно, подобная хрень характерна для продуктовой разработки и единственное что можно сделать – ловить её на этапе ревью.
Такая хрень не должна доходить до ревью. Оная легко ловится статическими анализаторами кода, через которые разработчик должен пропустить свой код и только после этого отправляться на ревью.
Re[3]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, ry, Вы писали:
ry>Такая хрень не должна доходить до ревью. Оная легко ловится статическими анализаторами кода, через которые разработчик должен пропустить свой код и только после этого отправляться на ревью.
Разработчик много что должен, но реальный мир, очень часто, отличен от всех этих "должен/должно". Я не знаю, в каких тебе компаниях довелось работать, но из моего опыта, пример выше, даже на понятие "злобная хрень" не тянет. Так, мелкая гадость
Re[4]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, kaa.python, Вы писали:
KP>Здравствуйте, ry, Вы писали:
ry>>Такая хрень не должна доходить до ревью. Оная легко ловится статическими анализаторами кода, через которые разработчик должен пропустить свой код и только после этого отправляться на ревью.
KP>Разработчик много что должен, но реальный мир, очень часто, отличен от всех этих "должен/должно". Я не знаю, в каких тебе компаниях довелось работать, но из моего опыта, пример выше, даже на понятие "злобная хрень" не тянет. Так, мелкая гадость
Интересно как вы перепишете эту хрень правильно
Народная мудрось
всем все никому ничего(с).
Re[5]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, Tom, Вы писали:
Tom>Интересно как вы перепишете эту хрень правильно
[philosophical_raptor_mode]
А что если все проверки загнать в один единсвенный regexp?
А можно сделать проверяльщик на основе FSM?
[/philosophical_raptor_mode]
Sic luceat lux!
Re[4]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, kaa.python, Вы писали:
ry>>Такая хрень не должна доходить до ревью. Оная легко ловится статическими анализаторами кода, через которые разработчик должен пропустить свой код и только после этого отправляться на ревью.
KP>Разработчик много что должен, но реальный мир, очень часто, отличен от всех этих "должен/должно".
А что делать. Работа такая. KP>Я не знаю, в каких тебе компаниях довелось работать,
В разных. В компании с СММ5 — самой первой получившей этот уровень в России — было строго. Был в компании, где сам строил процессы. Работал в компании без установленного процесса ревью. И сейчас СММI — зависит от установленного процесса на проекте, вот подталкиваю проекты к установке "правильного" процесса и, соответственно, к более жёсткому следованию ему.
KP>но из моего опыта, пример выше, даже на понятие "злобная хрень" не тянет. Так, мелкая гадость
Да понятно, только от этого он не перестаёт быть хренью, которую поддерживать охренеешь.
Re[5]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, Tom, Вы писали:
Tom>Интересно как вы перепишете эту хрень правильно
(Псевдокод)
if not <condition1>
return "<error message1>";
if not <condition2>
return "<error message2>";
...
if not <conditionN>
return "<error messageN>";
<processing>
return "";
Re[7]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, Sammo, Вы писали:
S>Причем сразу в сообщение собрать претензии и по пользователю и по паролю.
+1.
Ещё бесит такое: Регистрируюсь на каком-нить простом сайте, ввожу свой простой пароль для таких случаев, мне пишут — ваш пароль должен быть не менее 8 символов. Ок, удлиняю, submit. Пишут: ваш пароль должен содержать хотя бы одну цифру. Ок, добавляю цифры. Submit. Пишут: ваш пароль должен содержать хотя бы один из следующих символов (там всякие восклицательные знаки т.д.). Ненависть.
Re[8]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, MozgC, Вы писали:
MC>Ещё бесит такое: Регистрируюсь на каком-нить простом сайте, ввожу свой простой пароль для таких случаев, мне пишут — ваш пароль должен быть не менее 8 символов. Ок, удлиняю, submit. Пишут: ваш пароль должен содержать хотя бы одну цифру. Ок, добавляю цифры. Submit. Пишут: ваш пароль должен содержать хотя бы один из следующих символов (там всякие восклицательные знаки т.д.). Ненависть.
Да ладно, вот паттерн "несостоятельная говноформа" круче: заполняешь все поля, потом прилетает ответ: "поле N должно содержать Х", обновляется страница, все поля пустые, и приходится их заново заполнять!
В связи с эпидемией говнофреймворков появился новый подход: сообщение возвращается в виде выпрыгивающего окошка, закрываем его, все поля заполнены, вот только курсор не работает.
Re: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, Tom, Вы писали: Tom>Интересно как вы перепишете эту хрень правильно
правильный вопрос "а как вы будете эту хрень тестировать"
как только поймете, так сразу перепишете правильно
соб-но в этом и смысл TDD — заставлять говнокодеров использовать собственный код
Здравствуйте, greenpci, Вы писали:
G>Последнее время часто вижу такой код и каждый раз пропадает мотивация менять мир к лучшему. G>Image: haduuken.jpg
Все разговоры про хороший и плохой код не имеют никакого смысла, если не понятно:
1) Насколько часто код планируется менять
2) Насколько он критичен по надежности
3) Насколько он критичен по производительности
Может это прототип, цель которого быстро понять, будет ли спрос на продукт.
Или он был написан в строгом соответствии с ядреной спецификацией, которую менять в 10 раз сложнее чем код, и главная задача — сверять код со спекой.
Re[5]: Arrow Anti-Pattern стал попадаться слишком часто
Tom>Интересно как вы перепишете эту хрень правильно
Тут-то как раз никакой магии: это уже обсосано тысячу раз. Подход с array of validators работает прекрасно. Можно взглянуть, скажем, на реализацию 100500 проверок в реализации SSL на Java.
Re[2]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, kaa.python, Вы писали:
KP>Но если серьезно, подобная хрень характерна для продуктовой разработки и единственное что можно сделать – ловить её на этапе ревью.
да, я знаю, что характерна. Даже Страуструп в своей книжке писал, что говнокод — это стандарт индустрии. Нормальный код — статистическая аномалия.
Самый вопиющий случай, с которым я имел дело, это реализация рекурсии с помощью пяти вложенных циклов. Конечно она не работала при уровне вложенности более пяти. Примерно такой подход:
for(int i = 0; i < 10; i++)
{
if(docs[i].IsDocument())
{
printf("Doc %s\n", docs[i].Name);
}
else if(docs[i].IsFolder())
{
Document *docs1 = docs[i].Children();
for(int i = 0; i < 10; i++)
{
if(docs1[i].IsDocument())
{
printf("Doc %s\n", docs1[i].Name);
}
else if(docs1[i].IsFolder())
{
Document *docs2 = docs[i].Children();
//... и так дальше от docs2 до docs5
//Кен из Street Fighter'а
}
}
}
}
Далее все это обросло подробностями, добавились новые фильтры на документы и каждый из пяти циклов и условников стал больше. Все это выросло в большую говнокодную стрелу.
Re[2]: Arrow Anti-Pattern стал попадаться слишком часто
Здравствуйте, MozgC, Вы писали:
MC>Здравствуйте, Sammo, Вы писали:
s/2014/01/crea S>>Причем сразу в сообщение собрать претензии и по пользователю и по паролю.
MC>+1.
MC>Ещё бесит такое: Регистрируюсь на каком-нить простом сайте, ввожу свой простой пароль для таких случаев, мне пишут — ваш пароль должен быть не менее 8 символов. Ок, удлиняю, submit. Пишут: ваш пароль должен содержать хотя бы одну цифру. Ок, добавляю цифры. Submit. Пишут: ваш пароль должен содержать хотя бы один из следующих символов (там всякие восклицательные знаки т.д.). Ненависть.
В конце должно выдать, что пароль уже используется