Clean Code
13.3K subscribers
2.32K photos
5 videos
2.97K links
Советы по написанию кода, обзоры распространенных ошибок и многое другое.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

РКН: clck.ru/3Ht6ch
加入频道
Полная отдача в решении проблем

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

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

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

#tips #good_programmers
Используйте Композицию вместо Наследования

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

Для того чтобы не распространять ненужных зависимостей в иерархии классов, используйте Композицию, если вы планируете расширять свой код и добавлять в него функционал, таким образом вы сделаете его гибче и избавите его от ненужной шелухи, вызванной Наследованием. В статье на конкретном примере рассматриваются проблемы, которые может породить Наследование в неумелых руках

Подробнее

#tips #programming
Плановик

Плановик столько времени тратит на обдумывание работы, что проект завершится раньше, чем он что-нибудь напишет. Озабоченный своей подготовкой, он много читает и изучает. Плановик знает все о технологиях разработки, но плохо справляется со строками и доведением чего-либо до конца, хотя код Плановика получается очень грамотным.

Как быть, если вы один из них: сконцентрируйтесь на прототипах проекта, привлеките инкрементную разработку, постарайтесь соблюдать более правильные пропорции между планированием и реализацией.

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

#tips #programmer_type
Ветеран

Программист старой закалки. Можете послушать его рассказы о старых добрых временах, когда он использовал перфокарты, а памяти машин не хватало, чтобы сложить два целых числа.

Он все уже видел, на все знает ответы и не собирается изучать новомодные штучки. Он вам скажет, что ничего нового и нет - лишь старые идеи в другой упаковке. Ветеран не любит дураков. Он несколько сварлив, и его легко привести в раздражение.

Как быть, если вы один из них: не будьте категоричными к молодым, ведь когда-то вы были таким же увлеченным программистом с кучей свежих идей.

Как работать с такими людьми: не спорьте с Ветераном по пустякам, оказывайте ему уважение, но относитесь как коллеге, а не как к божеству.

#tips #programmer_type
Не используйте параметры метода в качестве рабочих переменных

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

В С++ данную ситуацию можно предвосхитить, явно указав компилятору на это, использовав ключевое слово const, тогда изменение параметра внутри метода вызовет ошибку компиляции.

Более грамотным решением является использование локальной рабочей переменной, как workingVal в примере, которая будет содержать значение, которое мы хотим получить на выходе метода, при этом входной параметр остается неизменным. Метод без побочных эффектов намного проще отлаживать, а также расширять при необходимости. Старайтесь избегать побочных эффектов в методах.

#tips #clean_code
Предпочтение полиморфизму

Большое число блоков case может указывать на необходимость в рефакторинге, который заключается в замене блока наследованием. Методы DrawCircle() и DrawSquare() следует заменить единственным методом Draw(), который будет поддерживать рисование и окружностей, и прямоугольников.

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

#tips #polymorhism
Фанатик

Это именно тот разработчик, который предан какой-то одной технологии Большой Компании. Он знает все тонкости технологии и старается всеми силами интегрировать её в текущий проект. Любые другие подходы к разработке он отвергает, т.к. зачастую плохо разбирается в альтернативах.

Как быть, если вы один из них: не пытайтесь слепо верить в мощь одной технологии, воспользуйтесь другими подходами и образом мышления.

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

#tips #programmer_type
Множественный возврат

Грамотное использование операторов return для обеспечения множественного возврата из метода может значительно повысить читабельность кода.

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

#tips #clean_code
Идеальный программист

В реальности идеальных программистов не существует — лишь в легендах. Он дипломат и мудро относится к огрехам странных кодеров, менеджеров, тестеров. Он хорошо срабатывается с людьми, умеет слушать других и высказаться сам.

Идеальный программист умеет разрабатывать элегантные решения и ценит эстетическую сторону реализации, пишет надежный, промышленного качества код.

Да, это лишь слова на цифровой бумаге, но это то, к чему каждый из нас стремится.

#tips #programming_type
Преобразуйте if в набор if-then-else

Использование вложенных if оправданно только в очень узком кругу задач. Фрагмент слева - развестистое дерево решений, которое имеет много недостатков хотя бы потому, что проверяемые условия избыточны. Этот код легко преобразуется в набор if-then-else.

А что если бы числа не были так упорядочены? Тогда можно необходимое условие вынести отдельно и в операторе if выполнить операцию И, чтобы добиться необходимого результата без применения вложенности. Код сложнее понять, если он движется вглубь — все, что видит программист, должно лежать на поверхности.

#tips #if_then_else
Уязвимостей ради сообщаем

Значительная часть из нас работает в крупных компаниях, которые разрабатывают ПО для банковских, силовых и статистических структур и центров. Отличительной особенностью таких продуктов является их исключительная безопасность.

Всегда будьте готовы к тому, что злоумышленник закрался где-то неподалеку, не проходите мимо уязвимостей и не считайте себя непобедимым. Где-нибудь обязательно найдется тот, кто попытается применить эксплойт к вашему коду.

#tips #exploits
Он зависимый, у него крыша едет

Использование значения индекса цикла после его завершения — дурной тон. Значения этих индексов часто непредсказуемы для других разработчиков.

Второй фрагмент содержит дополнительную переменную, однако, согласитесь, он не зависит от последнего значения индекса, не содержит дополнительных проверок, но читается легко и непринужденно.

#tips #cycles
Бабушкины сказки

Вы когда-нибудь пробовали описать цикл так, как показано на примере справа? Вы скажете, что это безумие, однако вот какой интересный факт хранит в себе этот фрагмент кода.

Казалось бы, меньше строк кода - быстрее и эффективнее он работает, однако тесты на Java и Microsoft Visual Basic показали, что второй фрагмент минимум на 60% быстрее первого.

#tips #cycles