Привет!
Видео доклада Андрея Солнцева «WTF Code» («говнокод») от 26 мая 2010.
В докладе приводится много примеров кода из своего опыта, а также обсуждается, почему такой код появляется на свет, и как и почему с этим нужно бороться. Доклад хорошенько сдобрен юмором и цитатами из классики.
Тут отдельно слайды:
Jevgeni
Видео — супер :)) Спасибо!
Eugene
Оспорю. Так как рядом с камерой не стоит так хохотать. Плохо слышно.
m-a-m-o-n.livejournal.com/
if (true==conditionVar){
return true; //you may put breakbpoint here.
} else {
return false; //you also may put breakpoint here.
}
в ru_java обсуждалось.
Andrei Solntsev
То есть такой хак используется для того, чтобы ставить breakpoint?
В этом есть смысл, конечно, хотя все современные IDE (Eclipse, IDEA) позволяют ставит Conditional breakpoints. Очень удобная штука, и не надо лишний код городить.
тожа дивелапир
Не понял концепции. Есть опытные девелоперы, есть не очень, бывает качественный код, бывает некачественный. Критерии оценки давно известны и описаны. Складываеся впечатление, что афтар вводит свой собственный, крайне субъективный критерий оценки. Дескать это говнокод, потому что я так решил 🙂
Код не самоцель. Качество продукта отнюдь не в первую очередь определяется качеством собственно кода, конкретных его процедур и функций — если афтар этого не понимает, ему должно быть очень стыдно. Ходить ему до старости в девелоперах 😉
Как известно, во всем процессе разработки ошибки девелопера — самые дешевые. Ошибки при дизайне обходятся в десятки раз дороже, а ошибки в архитектуре — в сотни. «Говнодизайн» — вот основной источник говнокода. Можно рефакторить до посинения, выхлоп от этого будет очень низкий и вдобавок получите перманентно нестабильную систему. Знаем, видели.
А вам не знакома ситуация когда архитектурные решения «спускаются сверху»?
А когда клиентам продаются несуществующие продукты, которые потом приходится делать быстро?
Потом сетуем, дескать, ах, тут говнокод…
Вобщем, как ни печально, но креатиф говно. «Говнокреатиф» 🙂
Антон Архипов
не стоит наверное всё воспринимать за чистейшую монету. весь мир состоит из исключений
у меня вот вопрос, а ходить в девелоперах до старости — это плохо? (я думаю на это тоже чёткий ответ сложно дать)
и ещё вопрос, вот я понимаю (наверное) разницу между программистом, и архитектором. А дизайнер кто такой?
решения, спущеные сверху, которые ошибочные — это конечно самая дорогая статья расходов. и навставлять бы таким принимателям решений, да вот проблема — не задерживаются они на своих позициях так надолго, чтобы им было реально за что отвечать.
вобщем, толсто, толсто
Андрей Солнцев
В ответ на ЛЮБОЙ доклад, на любую статью, книгу, фильм, песню можно сказать: «А вы, уважаемый, не всё учли. В мире есть ещё миллион нюансов, о которых вы не упомянули».
Когда Маккартни садился писать песню про жёлтую подлодку, у него была вполне конкретная цель, и его нифига не волновало, что в мире есть ещё серые подлодки (и их большинство), а также авианосцы, сухогрузы и танкеры, проблем от которых гораздо больше, чем от подлодок. И я уверен, в те времена говорили, что креатиф говно, ничуть не меньше нашего. Но к счастью, он никого не слушал и писал именно про жёлткую подлодку, и ни про что иное. И ему нифига не было стыдно за то, что он не упомянул про ракетные катера.
… Я не слишком иносказательно выражаюсь?…
Eduard Shustrov
Ответ получился эмоциональный. Но мне очень понравился. 5!
Andrei Solntsev
В ваших словах так много не согласовывается с тем, что было в моём докладе, что создаётся впечатление, что вы его не смотрели. Или при просмотре думали о чём-то своём. Например, я ничего не говорил о том, что надо рефакторить до посинения. Я не говорил, что код — это самоцель. Я не говорил, что качество продукта в первую очередь определяется качеством кода. Я ничего не говорил о том, во сколько обходятся ошибки девелопера, архитектора и т.п.
Вы тут опровергаете то, чего я не говорил. Так можно беседовать бесконечно…
> Как известно, во всем процессе разработки ошибки девелопера – самые дешевые.
Моё огромное «ЧИВО???» в ответ!
Откуда вы такое взяли? Кто-то такие исследования проводил? Киньте ссылочку, плиз!
тожа дивелапир
Андрей, я считаю что доклад ни о чём. Жувачка, хотя подано со вкусом 🙂
Антон, девелоперы соображающие что к чему, «выталкиваются» в девлиды. И приходится им учиться любить, эээ.. неидеальный код, потому что система ценностей у них теперь другая. И постоянное шевеление в виде рефакторинга уже отнюдь не вызывает у них восторга.
не делайте из кода культа 🙂 код должен быть адекватен поставленной задаче, отведённому времени, знаниям девелопера о сути проекта, и политической обстановке в мире. 🙂
Eduard Shustrov
Я готов поспорить с тем, что в девлиды выталкиваются именно соображающие, что к чему, девелоперы. У меня достаточно других примеров из жизни. Это я к тому, что если ты не стал к старости хотя бы девлидом, это не означает, что не понимаешь, что к чему. Заниматься до старости любимым делом — это удача. Но не у всех девелоперов именно программирование — любимое занятие. Jedem das Seine.
Но я согласен с тем, что код можно улучшать бесконечно, а чтобы заработать деньги, надо что-то продать. Поэтому коммерческие продукты неидеальны, но их качество достаточное для того, чтобы за них платили деньги. Это компромисс. Для программиста-идеалиста это компромисс с совестью. 🙂
Ещё так в жизни выходит, что программный продукт обычно приходится поддерживать: добавлять в него новые возможноси, исправлять обрануженные ошибки. Тут большое значение имеет качество кода. Хорошо написанный код другой программист быстрее исправит или изменит. И если он это тоже сделает хорошо, то и последующему за ним потребуется немного времени на работу. А время — это деньги.
Такой обмен опытом, указание на распространённые ошибки, позволяет программистам избегать проблем при написании кода. От этого выигрывает бизнес. А сам программист получает маральное удовлетворение. Все довольны, занавес опускается. 🙂
Жизнь не терпит экстремумов. Оптимум где-то между ними. Код должен быть достаточно качественным, чтобы его дешевле было менять. Но не стоит полировать код, который уже достаточно хорош, чтобы за него получить деньги. Плюс ещё куча нюансов для девиаций. 🙂
Антон Архипов
на вкус и цвет все фломастеры разные…
Посмею себе нескромно заметить, что мне довелось работать девлидом, и система ценностей у меня не поменялась. Как было замечено выше, всё зависит от того, для чего пишется код. Если это продукт который надо продавать, то это одно, а если пишешь инфосистему, которую потом самому же и поддерживать, это совсем другое.
«Культ кода» может быть уместен, особенно в компаниях где важнее качество, а не скорость выдачи новых фич. Например в банках.
и тем не меннее, на свой вопрос я ответа не получил
Eduard Shustrov
Для меня ходить до старости в девелоперах — это очень хорошо. Хотя не могу обещать, что именно так оно и будет.
Андрей Солнцев
> Андрей, я считаю что доклад ни о чём.
Такое мнение имеет право на существование. Но мне всё-таки кажется, что вы путаете две разные вещи: «доклад ни о чём» и «доклад НЕ на ту тему, которая меня тревожит». Поэтому лучше всего будет, если вы придёте на следующий девклуб и подробненько расскажете о той теме, которая вам кажется важной.
Мы ждём с распростёртыми объятиями!
Andrei Solntsev
Нет, я серьёзно, сделайте доклад!
Про «говнодизайн» или «говноменеджмент» я большушим удовольствием послушал бы. Думаю, не я один.
савсем не дивелапир
Эй, тожа дивелапир, а Вы не хотите представиться?
just.wow
Весь правильный код похож друг на друга, каждый кривой код крив по-своему.
Перефразируя Достоевского
Позанудствую. Если вы перефразировали цитату «все счастливые семьи счастливы одинаково …», то имейте в виду, что это из «Анны Карениной» Толстого.
И, к сожалению, любимая китайская технология написания кода «copy-paste» опровергает ваше утверждение.
Andrei Solntsev
Смотрите внимательнее, там в видео тема Достоевского-Толстого отдельно обговаривается.
Anonimous
Я бы сказал, что это юмор и цитаты слегка приправлены… Если честно, не осилил дальше 12-ой минуты (много воды кругом (а в стакане, подозреваю, была не минералка :))), дальше только слайды смотрел. Ну можно же было ка-нибудь это обрезать (хотя бы ржач приглушить :)), чтобы смотреть было можно?
Примеры слабые и очевидные. Впринципе, это всё известно любому студенту, хотя бы посещавшему лекции. Я ожидал услышать про какие-нибудь наболевшие/свежие антипатерны или баги, которые трудно отслеживать, в общем, на чужой опыт посмотреть, а услашал немного скучной базовой теории и увидил не систематизированную гору сэмплов, в которых непонятно: куда это применять то, и что вообще с этим делать?
Хотя, куда это меня понесло? Как сказал кто-то (не помню), вы поразитесь, узнав сколько на свете есть очевидных вещей, которых большинство людей просто не замечают, и для программирования это актуально. Для беседы в приятельской компании очень даже годный материал, и ржака, ржака! Куда же без этого? Но в таких мероприятиях приятно и полезно участвовать. Смотреть на это не интересно, простите.
Антон Архипов
конструктивная критика. всё по делу. спасибо
Andrei Solntsev
Ну да, так и есть: участвовать полезно, смотреть видео не интересно. Собственно и делалось для участия, а не для смотрения. Но мысли правильные, если придётся на эти темы ещё болтать, действительно стоит примеры систематизировать и выделить из них сложившиеся паттерны.
Игорь
честно, я не пойму в чем смысл этой встречи — любой нормальный программист сможет для себя определить быдлокод и его исправить без знания клссификации быдлокода. Такое ощущение что автор и слушатели доклада решили просто чем-то занять время и лишний раз повыпендриваться. Короче минус)
Антон Архипов
собственно, ваша правда 🙂 тока критиковать всегда легче чем самому выступить 😉
Wtf
Что за конь ржет в камеру? всю съемку испортил, нифига не слышно
Andrei Solntsev
Конь ржёт, кога ржачно. Ничего не поделаешь, закон природы.
А если серьёзно, мы тогда снимали по-любительски, на свою камеру, и монтировали вручную. С тех пор у нас съёмка качественно изменилась, теперь этим занимаются профессионалы.
AlexZaharow
Ну, со многими примерами, как и большинство комментаторов, и я бы не согласился, НО! эта тема всегда должна подниматься. Выводы очень хорошие. Стороны проблемы обозначены тоже правильные. Я бы добавил такой общий комментарий к этой проблеме:
программы пишутся для людей! А компьютер делает не то что вы хотите, а то что вы ему приказали.
В общем, получил большое удовольствие от просмотра. Автору и оператору большое спасибо за работу.
Grigori
Доклад хороший! Спасибо было интересно посмотеть. Кстате, если архитектура проекта очень хорошо поддерживает копи-паст (гавнокода), но падает на нормальном решении что делать, если манагеры считают что архитектура хорошая и всё же всегда отлично работало?
Andrei Solntsev
Спасибо.
Что это значит, что архитектура поддерживает copy-paste кода? Как это понимать? Ни одна архитектура не диктует условия, как писать код. Или я чего-то не понял.
И как архитектура может падать при нормальном решении? Если оно действительно нормальное, ничего не упадёт.
Grigori
Понятно. Немного поясню. Обекты настолько между собой связаны и знают друг про друга (coupling?), что вычленить нужное без вытаскивания ненужного никак. Декаплинг подразумевает хороший рефакторинг(!!!)… У нас в конторе заклеймили это слово прям как у тебя в докладе. Мол работает и не трогайте, а саппортить #$@#$!.