всем нам известно такое позорное явление, как "говнокод". Кто хотя бы раз в жизни не восклицал, глядя на код: "Ну что за говно? Надо всё переписать!"?
Но четкого определения этому явлению нет, всё как-то больше интуитивно. Что для вас является "говнокодом"? Каким критериям должен удовлетворять код, чтобы заслужить эту оценку с вашей стороны?
Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
0>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
Хоть бы разочек посмотреть на RSDNе на кусок кода, строк в 20, и чтобы никто не обозвал его говнокодом.
Отсылания во всякие опенсорсные проекты не считаются.
Жизнь не обязана доставлять удовольствие. Достаточно отсутствия страданий.
Здравствуйте, 0x7be, Вы писали:
0>Дискуссия приветствуется
Зритель в консерватории срывающимся шепотом и перекрывая музыку обращается к соседу "Скажите, это Глинка?". Сосед, положив ногу на ногу и задумчиво разглядывая свой ботинок: "Вот и я думал, что глинка... А теперь вижу что говно".
Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии.
Здравствуйте, s_aa, Вы писали:
_>Хоть бы разочек посмотреть на RSDNе на кусок кода, строк в 20, и чтобы никто не обозвал его говнокодом. _>Отсылания во всякие опенсорсные проекты не считаются.
Намекаешь на синдром "Not invented here"?
Здравствуйте, Carc, Вы писали:
C>Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии.
То есть, если написать код в соответствии с его рекомендациями, то никто-никто не назовёт этот код говном?
Здравствуйте, 0x7be, Вы писали:
0>Здравствуйте, Carc, Вы писали:
C>>Если шутки в сторону, то берем Макконела и далее везде со всеми остановками — вот вам и критерии. 0>То есть, если написать код в соответствии с его рекомендациями, то никто-никто не назовёт этот код говном?
Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Здравствуйте, Carc, Вы писали:
C>Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Лучший формализм — это метрика WTF/min.
Причём невзирая на. Человек может написать для частной задачи совершенный интерпретатор-лиспа-на-хаскелле на голом си, но его индийские коллеги замучаются сопровождать эту красоту, поэтому его код, по сути, явится ажурным говном.
Даже знаменитое Устройство Дуффа — это говнокод, по причине ужасной сопровождаемости.
Здравствуйте, Carc, Вы писали:
C>Ну я скорее про объективность, а не про формализмы. Есть какие-то существенные моменты, вроде "одна функция одна задача", долой 5000 строк на функцию и.т.п. Если в целом код соответствует этим критериям, то гут. А назвать можно что угодно, и как угодно. Это уже религиозные войны. И наверное не нужно возводить все эти критерии в абсолют. Все таки важен продукт, а не только сам код (хотя он и гиперважен), поэтому в некоторых моментах иногда следует остановиться с вылизыванием "красоты".
Понятно, спасибо за ответ
Здравствуйте, 0x7be, Вы писали:
0>Но четкого определения этому явлению нет, всё как-то больше интуитивно. Что для вас является "говнокодом"? Каким критериям должен удовлетворять код, чтобы заслужить эту оценку с вашей стороны?
Для коммерческого софта это любой код, который вызывает проблемы при поддержке и сопровождении (разумеется, к автосгенеренному код, который сам по себе поддерживать не надо, это не относится).
Критерии стандартные:
* повсеместное нарушение SRP,
* отсутствие комментариев/документации там, где они нужны,
* использование динамики/кастинга типов там, где они не нужны,
* нарушение стандартных рекомендаций по оформлению кода/дизайну API,
* постоянное использование своих вспомогательных классов/методов вместо кода из фреймфорка/библиотеки хелперов,
* использование паттернов ради паттернов (как только в имени типа с БЛ появляется Strategy/Singleton/Selector — вы попали),
* попытка эмулировать поведение других языков (например, Optional/Either для шарпа (в c# на сегодня нет PM/variants)),
* код на побочных эффектах, особенно без документирования отладочными ассертами.
* WTF/sec при ознакомлении с кодом.
…
Ну и любые другие признаки write-only кода, тысячи их.
Разумеется, к любому из пунктов можно придраться: исключения, "ятакделал" и всё такое. Надеюсь, все мы понимают, что это будет спор ради спора, не?
0>Объективное ли это свойство кода, или "говнокод в глазах рефакторящего"?
По сути, "говнокод" — это та же метрика качества кода, только со знаком минус. Т.е. объективное. Не количественное. Все согласны с тем, что измерять его вообще-то надо, но при этом не согласны с любым из конкретных предложений.
Здравствуйте, Кодт, Вы писали: К>Лучший формализм — это метрика 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>Как программисты для одной и той же задачи писали совершенно разный код в зависимости от поставленной цели.
Интересная точка зрения. Особенно бывает весело, если код человека с одной целью (системой ценностей) попадёт на оценку человеку с другой
Видел я такие эпик баттлы в своей практике
Здравствуйте, Кодт, Вы писали:
К>Причём невзирая на. Человек может написать для частной задачи совершенный интерпретатор-лиспа-на-хаскелле на голом си, но его индийские коллеги замучаются сопровождать эту красоту, поэтому его код, по сути, явится ажурным говном.
Прекрасный термин! Возьму на вооружение
Я бы сказал, что это — действительно единственный достойный критерий. Причем говнокодом является даже супермегапрекрасный код мегагуру программирования, если он написан там, где с этим кодом будут работать программисты, не имеющее аршин во лбу.
Здравствуйте, 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>Нормально, когда удобнее читать меньшее количество кода (в конструкциях языка). А у некоторых читабельность какая то эзотерическая.
Не. Читабельность вполне понятное понятие...
Вот в среднем читабельность программы на Питоне заметно выше читабельности проги на С++...
И опять же понятно, что можно на обоих языках писать наоборот: не читабельно на питоне и читабельно на С++.
А измерять читабельность вполне можно.
Выделить некоторые признаки читабельного кода (например, отступы вложенных блоков...),
построить метрику — и оценивай себе на здоровье...
Можно построить нечеткую модель, где читабельность — это лингвистическая переменная,
а уровень читабельности — это ее термы: не читабельно, ниже среднего, средняя, выше среднего, супер.
Тогда функция принадлежности — это и есть та метрика.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!