Здравствуйте, 0x7be, Вы писали:
0>Но четкого определения этому явлению нет, всё как-то больше интуитивно. Что для вас является "говнокодом"? Каким критериям должен удовлетворять код, чтобы заслужить эту оценку с вашей стороны?
Для коммерческого софта это любой код, который вызывает проблемы при поддержке и сопровождении (разумеется, к автосгенеренному код, который сам по себе поддерживать не надо, это не относится).
Критерии стандартные:
* повсеместное нарушение SRP,
* отсутствие комментариев/документации там, где они нужны,
* использование динамики/кастинга типов там, где они не нужны,
* нарушение стандартных рекомендаций по оформлению кода/дизайну API,
* постоянное использование своих вспомогательных классов/методов вместо кода из фреймфорка/библиотеки хелперов,
* использование паттернов ради паттернов (как только в имени типа с БЛ появляется Strategy/Singleton/Selector — вы попали),
* попытка эмулировать поведение других языков (например, Optional/Either для шарпа (в c# на сегодня нет PM/variants)),
* код на побочных эффектах, особенно без документирования отладочными ассертами.
* WTF/sec при ознакомлении с кодом.
…
Ну и любые другие признаки write-only кода, тысячи их.
Разумеется, к любому из пунктов можно придраться: исключения, "ятакделал" и всё такое. Надеюсь, все мы понимают, что это будет спор ради спора, не?
0>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
По сути, "говнокод" — это та же метрика качества кода, только со знаком минус. Т.е. объективное. Не количественное. Все согласны с тем, что измерять его вообще-то надо, но при этом не согласны с любым из конкретных предложений.
0>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
Хоть бы разочек посмотреть на RSDNе на кусок кода, строк в 20, и чтобы никто не обозвал его говнокодом.
Отсылания во всякие опенсорсные проекты не считаются.
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Здравствуйте, Carc, Вы писали:
C>Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Лучший формализм — это метрика WTF/min.
Причём невзирая на. Человек может написать для частной задачи совершенный интерпретатор-лиспа-на-хаскелле на голом си, но его индийские коллеги замучаются сопровождать эту красоту, поэтому его код, по сути, явится ажурным говном.
Даже знаменитое Устройство Дуффа — это говнокод, по причине ужасной сопровождаемости.
Здравствуйте, Кодт, Вы писали: К>Лучший формализм — это метрика WTF/min. К>Причём невзирая на. Человек может написать для частной задачи совершенный интерпретатор-лиспа-на-хаскелле на голом си, но его индийские коллеги замучаются сопровождать эту красоту, поэтому его код, по сути, явится ажурным говном. К>Даже знаменитое Устройство Дуффа — это говнокод, по причине ужасной сопровождаемости.
Согласен! Сам по молодости написал какой-то сериализатор для ини-файлов на шаблонах в двух плюсах. И сколько я на него потом не смотрел, возникало именно "как этим вообще пользоваться?", не то чтобы "как оно работает", или "как его развивать\изменять\поддерживать". Долго так смотрел, все рука не подымалась, все ж как никак жутко шаблонный код, предмет моей гордости в далекой сопливой юности . А потом радикально: Ctrl+A + Delete, и все с нуля
В общем, совершенство это когда нечего убрать, а не когда нечего добавить (ц)
0>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
Субъективное.
Зависит от цели, которая ставилась при написании кода.
Можно написать:
— самый читабельный код;
— самый короткий код;
— самый быстрый код;
— самый красивый код;
Вот в этой книжке: http://www.eknigu.com/info/Cs_Computer%20science/Weinberg%20G.M.%20Psychology%20of%20computer%20programming(T)(C)(299s).djvu
которая была издана первый раз аж в 1971 году, автор об этом пишет.
Как программисты для одной и той же задачи писали совершенно разный код в зависимости от поставленной цели.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Субъективное. LVV>Зависит от цели, которая ставилась при написании кода. LVV>Можно написать: LVV>- самый читабельный код; LVV>- самый короткий код; LVV>- самый быстрый код; LVV>- самый красивый код; LVV>Вот в этой книжке: http://www.eknigu.com/info/Cs_Computer%20science/Weinberg%20G.M.%20Psychology%20of%20computer%20programming(T)(C)(299s).djvu LVV>которая была издана первый раз аж в 1971 году, автор об этом пишет. LVV>Как программисты для одной и той же задачи писали совершенно разный код в зависимости от поставленной цели.
Интересная точка зрения. Особенно бывает весело, если код человека с одной целью (системой ценностей) попадёт на оценку человеку с другой
Видел я такие эпик баттлы в своей практике
Я бы сказал, что это — действительно единственный достойный критерий. Причем говнокодом является даже супермегапрекрасный код мегагуру программирования, если он написан там, где с этим кодом будут работать программисты, не имеющее аршин во лбу.
Здравствуйте, 0x7be, Вы писали:
0>Дискуссия приветствуется
Зритель в консерватории срывающимся шепотом и перекрывая музыку обращается к соседу "Скажите, это Глинка?". Сосед, положив ногу на ногу и задумчиво разглядывая свой ботинок: "Вот и я думал, что глинка... А теперь вижу что говно".
Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии.
Здравствуйте, s_aa, Вы писали:
_>Хоть бы разочек посмотреть на RSDNе на кусок кода, строк в 20, и чтобы никто не обозвал его говнокодом. _>Отсылания во всякие опенсорсные проекты не считаются.
Намекаешь на синдром "Not invented here"?
Здравствуйте, 0x7be, Вы писали:
0>Здравствуйте, Carc, Вы писали:
C>>Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии. 0>То есть, если написать код в соответствии с его рекомендациями, то никто-никто не назовёт этот код говном?
Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Здравствуйте, Кодт, Вы писали:
К>Причём невзирая на. Человек может написать для частной задачи совершенный интерпретатор-лиспа-на-хаскелле на голом си, но его индийские коллеги замучаются сопровождать эту красоту, поэтому его код, по сути, явится ажурным говном.
Прекрасный термин! Возьму на вооружение
всем нам известно такое позорное явление, как "говнокод". Кто хотя бы раз в жизни не восклицал, глядя на код: "Ну что за говно? Надо всё переписать!"?
Но четкого определения этому явлению нет, всё как-то больше интуитивно. Что для вас является "говнокодом"? Каким критериям должен удовлетворять код, чтобы заслужить эту оценку с вашей стороны?
Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
Здравствуйте, Carc, Вы писали:
C>Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии.
То есть, если написать код в соответствии с его рекомендациями, то никто-никто не назовёт этот код говном?
Здравствуйте, Carc, Вы писали:
C>Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Понятно, спасибо за ответ
Здравствуйте, LaptevVV, Вы писали:
0>>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"? LVV>Субъективное. LVV>Зависит от цели, которая ставилась при написании кода. LVV>Можно написать: LVV>- самый читабельный код; LVV>- самый короткий код; LVV>- самый быстрый код; LVV>- самый красивый код; LVV>Вот в этой книжке: http://www.eknigu.com/info/Cs_Computer%20science/Weinberg%20G.M.%20Psychology%20of%20computer%20programming(T)(C)(299s).djvu LVV>которая была издана первый раз аж в 1971 году, автор об этом пишет. LVV>Как программисты для одной и той же задачи писали совершенно разный код в зависимости от поставленной цели.
Быстрота кода и размер кода понятия объективные и формализуемые. Читабельность и красивость — нет. Так что это не цели, а отсутсвия целей.
Нормально, когда удобнее читать меньшее количество кода (в конструкциях языка). А у некоторых читабельность какая то эзотерическая. Такая, что они сами не могут описать это. Либо удалось сразу понять, и люди делают вывод о положительной читаблельности/красивости. Либо нет.
A>Быстрота кода и размер кода понятия объективные и формализуемые.
Объективные, но относительные.
Самый короткий код не всегда будет самым быстрым. A>Нормально, когда удобнее читать меньшее количество кода (в конструкциях языка). А у некоторых читабельность какая то эзотерическая.
Не. Читабельность вполне понятное понятие...
Вот в среднем читабельность программы на Питоне заметно выше читабельности проги на С++...
И опять же понятно, что можно на обоих языках писать наоборот: не читабельно на питоне и читабельно на С++.
А измерять читабельность вполне можно.
Выделить некоторые признаки читабельного кода (например, отступы вложенных блоков...),
построить метрику — и оценивай себе на здоровье...
Можно построить нечеткую модель, где читабельность — это лингвистическая переменная,
а уровень читабельности — это ее термы: не читабельно, ниже среднего, средняя, выше среднего, супер.
Тогда функция принадлежности — это и есть та метрика.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!