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

Ссылка: @Portal_v_IT

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

РКН: clck.ru/3Ht6ch
加入频道
Гуру

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

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

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

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

#tips #programmer_type
Грамотное программирование

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

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

#tips #good_programmers
Ковбой

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

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

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

#tips #programmer_type
От чего страдает оптимальность кода

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

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

Это далеко не весь список проблем, но он даст представление о том, на что нужно будет обратить внимание в первую очередь, ведь настоящие недоработки кроются в деталях.

#tips #optimisation
Жажда скорости

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

Намного полезнее на этапе формулирования требований к ПО определить уровень производительности и на каждом этапе разработки проверять, удовлетворяет ли продукт заданным параметрам.

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

#tips #bad_programmers
Отладчик

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

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

#tips #debugger
Важность программной архитектуры

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

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

#tips #architecture
Полная отдача в решении проблем

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

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

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

#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