Вход
Быстрая регистрация
Если вы у нас впервые: О проекте FAQ
2

Как понять что мой код - ужасный?

Ycea [144] более месяца назад

Мне интересно узнать, по каким критериям или признакам можно распознать так называемый "говнокод". Я просто начинаю изучать программирование и до конца так и не понял, что такое "говнокод"

1

Если код тяжело понять - то это говнокод. Если бы программы не приходилось дорабатывать - то писать код можно было бы как угодно. Но полезные программы всегда приходится дописывать (причем обычно не вам, а другим людям) - поэтому код должен быть понятным (в первую очередь) и эффективным (во вторую).

Часто так бывает, что эффективный код оказывается непонятным - если это какой-то критический для производительность фрагмент программы - то это нормально (не говнокод). Однако если вы только что начали писать программу (еще не нашли критические для производительности фрагменты), а уже пытаетесь ее оптимизировать - это типичный пример говнокодинга. В классической литературе это культурно называется проблемой преждевременной оптимизации.

С другой стороны, часть говнокода в этом мире написана очень мощными ребятами - технарями, но не программистами. По ссылке можно посмотреть примеры таких поделок от Intel и некоторых других, а классический пример - это работы технарей из Microsoft. Когда человек думает о низкоуровневых вещах (например о "железе") - ему тяжело думать о проблемах того, кто будет это железо программировать.

Кроме того, часто при разработке программисту проще сначала решить задачу, а потом уже "привести в порядок" код. Такой процесс называется рефакторинг. Прочитать про это я советую следующие книжки:

  • Фаулер М. Рефакторинг. Улучшение существующего кода/ М. Фаулер. Символ-Плюс, 2008. 432 с.
  • Мартин Р. Чистый код. Создание, анализ и рефакторинг. Библиотека программиста. — СПб.: Питер, 2014. — 464 с.

Также, с темой чистого кода и говнокода связаны SOLID принципы.

И еще, есть прекрасный сайт с миллионами примеров плохого кода. Я вот нашел один небольшой пример на С++:

Что тут не так? :

1) программист почему-то решил не расставлять фигурные скобки (возможно экономит строки, а зря).

2) Ключевое значение в этом коде имеет символ "точка с запятой", стоящий перед else. Код else... ТОЛЬКО в том случае, если провалится условие if(object). Об этом финте знают далеко не все программисты и это сильно увеличивает затраты на "разобраться и доработать код".

3) из п.2 следует что тут неправильно расставлены отступы. Отступами показано, что ветка else вложена внутрь блока if, однако на деле программа работает совершенно иначе.

автор вопроса выбрал этот ответ лучшим
2

Тут есть две крайности. Например, код бестолковый, не оптимизированный и просто безграмотно написан. Все тоже самое можно было бы сделать гораздо элегантней, чище, красивей, читабельней и примерно в 100 раз более эффективно. - Это говнокод. Или например код настолько оптимизирован, настолько заумен и нечитабелен, настолько непрозрачен и не поддается исправлениям, что тоже становится говнокодом.

Правильный код, пишется как литературное сочинение и читается так же. На этапах разработки, красивая, логичная, читабельная структура, поддающаяся правке и развитию, гораздо важнее скорости работы. - Если вам действительно нужна будет скорость, то все равно, хотя бы часть кода вам придется писать прямиком на ассемблере.

1

Ответьте для себя на следующие вопросы:

  • Насколько легко читается мой код? Если в нем способен разобраться даже новичок - значит код написан хорошо, если нет - "быдлокод".
  • Если вам нужно добавить новую фичу, то как быстро вы найдете нужное место в коде, не поломав остальную логику программы?
  • есть в нем достаточное количество комментариев?
  • все ли переменные и методы называется как положено? переменные именуем существительными, методы - глаголами, например, функция получает элемент по идентификатору: getElementById(id);
  • количество WTF в минуту, доносящееся из другой комнаты, где читают ваш код (по Роберту Мартину "Clean code")

А если действительно интересуетесь, как улучшить кодстайл, то обычно разработчики читают либо Роберта Мартина "Чистый код", либо Чеда Фаулера "Совершенный код". Эти книги есть на русском языке и очень хорошо распространены по интернету, чтобы скачать или почитать онлайн.

1

Я не очень большой знаток, хотя программы в своё время и писал, потому отвечаю так.

Если в трансляторе поставить любое условие оптимизации кода (по длине кода, или по времени исполнения) и транслятор найдёт в исходном коде то, что он сможет оптимизировать, то этот код не совершенен.

Знаете ответ?
Есть интересный вопрос? Задайте его нашему сообществу, у нас наверняка найдется ответ!
Делитесь опытом и знаниями, зарабатывайте награды и репутацию, заводите новых интересных друзей!
Задавайте интересные вопросы, давайте качественные ответы и зарабатывайте деньги. Подробнее..
регистрация
OpenID