Привет всем.
В этой статье я расскажу о некоторых ошибках, которые совершают разработчики, а также о том, как их избежать.
Список немного хаотичный, потому что масштаб ошибок разный: от мелких до крупных.
Их совершали и будут совершать я, мои коллеги и все остальные разработчики. Важно лишь учиться на ошибках, и не важно, своих или чужих, ведь чем лучше код, тем больше времени останется на… написание нового кода :)
1. Документирование
Только что написанный собственный код практически всегда понятен. Но он может быть непонятен другому разработчику, а со временем может стать непонятным даже самому себе.
Вот основные советы, благодаря которым код будет задокументирован:
1 Типизация
JavaScript и PHP имеют дурную славу из-за отсутствия нормальной типизации, позволяющей избежать выстрелов себев ногу. Но есть TypeScript и PHP7, которые помогают писать более типизированный код. Грамотная типизация помогает избежать проблем во время изменения существующего кода. Например, если у функции изменился набор параметров, то линтер или компилятор подскажут изменить и вызовы этой функции согласно изменениям.
2 Понятное именование
Код должен отражать свой назначение. Есть множество статей на тему того, как правильно называть переменные, функции, классы и пр. К примеру, вместо i, x, x2, x3, mail, new следует писать, например, isActive, userResources, EmailSender.
Иногда я встречаю таблицы базы данных с префиксом вроде «table» или «tbl», а также колонки с префиксами "column". На рисунке ниже можно наблюдать тихий ужас: стиль именования таблиц абсолютно хаотичный: таблицы с префиксами и без, имена с прописной и строчной буквы.
3 Покрытие тестами
Если код покрыт качественными тестами, описывающими его поведение, то при сопровождении не возникнет вопросов или багов при внесении изменений.
4 Комментирование неочевидных участков
Если в коде происходит магия, впилен костыль или хак, то это стоит закрепить в комментариях, чтобы у разработчика, желающего это удалить или переписать, было понимание того, почему так сделано, и что стоит учесть.
5 Визуальные схемы
Лаконичные схемы взаимоотношений сущностей или работы бизнесс-процесса облегчают понимание. Если перед изнурительным чтением кода взглянуть на несколько рисунков, объясняющих суть, то можно сэкономить время и избежать недопонимания.
2 Логика в представлении
Если в файлах представлений, которые обычно содержат HTML-вёрстку, содержится какая-либо логика, то вы усложняете работу тому, кто не имеет опыта в программировании, но вынужден вносить изменения в вёрстку. Мало того, можете запутаться в том, что вы отдаёте на вывод. В долгосрочной перспективе такой подход, когда такие разнородные части программы, как логика и представление, становятся всё больше и больше взаимосвязанными, ни к чему хорошему не приведёт.
Хорошо использовать какой-нибудь шаблонизатор. Также имеет право на жизнь подход генерирования интерфейса полностью на стороне браузера средствами JavaScript.
Обязательно к изучению: MVC.
3 Хаос с типизацией
Если функция при различных условиях может вернуть массив, логическое значение или строку, то, скорее всего, она написана неправильно. Допустим, при проверке корректности e-mail правильнее вернуть true или false, а не, например, сам e-mail или строку «успешно».
При написании кода стоит уделить внимание типизации: если пишете на JavaScript, где с типами хаос и анархия, то на помощь придёт TypeScript, а если пишете на PHP, то в седьмой версии появилась возможность указывать типы (type hinting). При непосредственном написании кода помогает IDE с правильно настроенным линтером, моментально указывающая на ошибки типизации.
4 Разбивайте большое на маленькое
Старайтесь делать функции, классы, компоненты и так далее маленькими.
Если у вас есть функция, добавляющая статью на сайт, а внутри есть код для загрузки изображения этой статьи, то есть смысл вынести этот код в отдельную функцию (это называется декомпозиция). Наверняка он пригодится для загрузки изображения, допустим, не для статьи, а для баннера или профиля пользователя.
Небольшие части кода проще переиспользовать, отлаживать, сопровождать и покрывать автоматическими тестами.