За обновлениями можно следить в telegram-канале https://t.me/quasiart

Привет всем.

В этой статье я расскажу о некоторых ошибках, которые совершают разработчики, а также о том, как их избежать.

Список немного хаотичный, потому что масштаб ошибок разный: от мелких до крупных.

Их совершали и будут совершать я, мои коллеги и все остальные разработчики. Важно лишь учиться на ошибках, и не важно, своих или чужих, ведь чем лучше код, тем больше времени останется на… написание нового кода :)

1. Документирование

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

Вот основные советы, благодаря которым код будет задокументирован:

1 Типизация

JavaScript и PHP имеют дурную славу из-за отсутствия нормальной типизации, позволяющей избежать выстрелов себев ногу. Но есть TypeScript и PHP7, которые помогают писать более типизированный код. Грамотная типизация помогает избежать проблем во время изменения существующего кода. Например, если у функции изменился набор параметров, то линтер или компилятор подскажут изменить и вызовы этой функции согласно изменениям.

2 Понятное именование

Код должен отражать свой назначение. Есть множество статей на тему того, как правильно называть переменные, функции, классы и пр. К примеру, вместо ixx2x3mailnew следует писать, например, isActiveuserResourcesEmailSender.

Иногда я встречаю таблицы базы данных с префиксом вроде «table» или «tbl», а также колонки с префиксами "column". На рисунке ниже можно наблюдать тихий ужас: стиль именования таблиц абсолютно хаотичный: таблицы с префиксами и без, имена с прописной и строчной буквы.

Неправильная структура базы данных
Неправильная структура базы данных

3 Покрытие тестами

Если код покрыт качественными тестами, описывающими его поведение, то при сопровождении не возникнет вопросов или багов при внесении изменений.​

4 Комментирование неочевидных участков

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

5 Визуальные схемы

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

2 Логика в представлении

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

Хорошо использовать какой-нибудь шаблонизатор. Также имеет право на жизнь подход генерирования интерфейса полностью на стороне браузера средствами JavaScript.

Обязательно к изучению: MVC.

3 Хаос с типизацией

Если функция при различных условиях может вернуть массив, логическое значение или строку, то, скорее всего, она написана неправильно. Допустим, при проверке корректности e-mail правильнее вернуть true или false, а не, например, сам e-mail или строку «успешно». 

При написании кода стоит уделить внимание типизации: если пишете на JavaScript, где с типами хаос и анархия, то на помощь придёт TypeScript, а если пишете на PHP, то в седьмой версии появилась возможность указывать типы (type hinting). При непосредственном написании кода помогает IDE с правильно настроенным линтером, моментально указывающая на ошибки типизации.

4 Разбивайте большое на маленькое

Старайтесь делать функции, классы, компоненты и так далее маленькими.

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

Небольшие части кода проще переиспользовать, отлаживать, сопровождать и покрывать автоматическими тестами.