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

Предлагаю взглянуть на небольшой перечень позитивных показателей качества программных продуктов. Хотя это лишь один из множества подходов к оценке, надеюсь, что он окажется полезным. В общем, это простые и естественные принципы, которые применимы не только в программировании, но и в других сферах деятельности. Можно сказать, что это своего рода принципы естественного порядка!
Краткость 📝
Чем меньше и проще в логике своей работы код, тем он лучше. Идеальный программный код - это отсутствие кода вообще. Идеальная кнопка - это кнопка, которой нет. Идеальный интерфейс - это отсутствие интерфейса, и выполнение задачи в фоновом режиме.

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

Вне зависимости от поставленной задачи, необходимо обеспечить непрерывность работы программного кода. Каждый участок кода должен быть структурирован таким образом, чтобы его функциональность была понятной и надежной, без каких-либо сюрпризов. Главная цель - обеспечить пользователя или поток данных кратчайшим путем от точки А до точки Б.
Программист - это не волшебник, а компьютеры - это не магические артефакты. Напишите код так, чтобы другим было легко разобраться в его структуре. Разрабатывайте интерфейсы так, чтобы пользователи не терялись в поисках нужной кнопки. Делайте предсказуемые действия, на которые можно положиться и которые легко предугадать.
Читабельность 📖
Хороший код должен быть легко читаемым и понятным для других специалистов. Основное назначение программных продуктов заключается в том, что обычно над ними работают команды программистов. Это верно даже в тех случаях, когда отдельный программист временно занимается разработкой кода в одиночестве. Если не сегодня, то завтра, если не он, то другие продолжат развитие программы.

Основное важное правило заключается в том, что каждый код должен быть хорошо задокументирован и упрощен (см. раздел "Краткость"). Твои коллеги не должны догадываться о том, что ты имеешь в виду, или тратить время на изучение запутанных логических цепочек. Код должен быть структурирован и оформлен таким образом, чтобы он был понятен и доступен для любого нового участника.
Я уже много лет придерживаюсь простого правила читаемости в программировании. Оно звучит так: "Пиши код так, чтобы даже самый неопытный человек мог его понять". Это правило не только забавно, но и помогает мне самому, когда спустя годы я возвращаюсь к своему коду и уже не помню, как работает тот или иной модуль.
Важным аспектом является документирование кода. Каждый класс, метод, функция - все элементы программы должны быть описаны подробно. Из моего опыта можно сказать, что в создании и проектировании программ доля кода составляет 60%, а документации - 40%.
Сопровождаемость 🛠
Важно, чтобы программы были легко поддерживаемыми. Если код написан таким образом, что любое изменение полностью разрушает всю структуру - такой код не стоит и внимания. Программы не являются чем-то постоянным. Это лишь отражение решения определенной задачи на определенный момент времени, созданное определенным программистом.

Нельзя рассчитывать на то, что условный программный код останется неподвижным и вечным, отражая лишь видение своего создателя. Развитие любого кода неизбежно - это либо его доработка в простейшем случае, либо полное переписывание с нуля в более сложных ситуациях. Будущее любого кода во многом зависит от его способности к поддержке и дальнейшему развитию.
При написании кода учитывайте неизбежные будущие изменения, которые могут быть внесены в него, как вами, так и другими разработчиками. Важно предусмотреть возможности для дальнейшего развития продукта уже на этапе создания кода. Избегайте создания программы, которая будет похожа на хрупкую скульптуру - необходимо избегать ситуации, когда для внесения небольших изменений потребуется полностью пересоздавать всю программу заново.
Масштабируемость 📈
Эффективный код должен быть способен к масштабированию. Что подразумевает это красивое понятие? Простыми словами, качественные программные продукты обладают потенциалом для развития и расширения. Профессионально разработанный веб-сайт может начать с посещаемостью в 300 человек сегодня и привлечь 5000 человек завтра. Полезное приложение может собрать аудиторию изначально из 100 человек, а затем привлечь даже 100 тысяч пользователей.

Важно разрабатывать программы с учетом их потенциального расширения. Хотя это не всегда удается, но лучше предусмотреть возможность дальнейшего развития каждого созданного модуля, и желательно делать это без радикального пересмотра.
Высокая скорость 🚀
При одинаковых условиях, мы всегда ожидаем от компьютера быстрого отклика. Никому не нравятся веб-страницы, которые загружаются дольше, чем за 2-3 секунды. Никто не любит приложения, которые требуют внезапного скачивания обновлений размером в несколько гигабайт. Я не встречал человека, который был бы в восторге от неожиданного вечернего обновления Windows перед выключением ноутбука.

При создании программ необходимо учитывать их оптимальную производительность в предоставленных условиях. Выбирайте эффективные алгоритмы и методы проектирования, которые напрямую решают поставленные задачи. Простота - залог успеха. Экономьте свое время как разработчика, уважайте время пользователей и берегите ресурсы оборудования.
Если у тебя есть проект, который может обойтись без использования jQuery, это просто замечательно. Если для создания программы не требуется внедрение Symfony / Doctrine / Yii или других крупных фреймворков и библиотек, то ты настоящий волшебник. Попробуй обойтись без FontAwesome, если нужна всего лишь одна иконка.
Тестируемость 🔨
Продолжая разговор о надежности программирования. Качественный код - это код, который прошел тщательное тестирование. Даже если кажется, что написанный код абсолютно безупречен. Всегда найдутся уникальные ситуации, когда ожидаемое поведение программы становится неожиданным. Чем лучше протестирован ваш код, тем меньше затрат потребуется на его поддержку в будущем. Не забывайте о важности тестирования.
Extra - бонус: правило "уточки" 🦆
Существует забавный анекдот, который касается качества (или, возможно, это не анекдот, а реальность) - "Если в вашем окружении нет эксцентриков, у меня для вас некоторые новости". Из этого анекдота вытекает следующий принцип: "Если вы считаете, что все вокруг ошибаются в каком-то вопросе, лучше подумайте об этом еще раз".

Важно находить оптимальный баланс в программировании (и не только). Это состояние равновесия между собственными убеждениями и мнениями окружающих. Не стоит слепо следовать чужим советам, но и не стоит игнорировать опыт коллег и более опытных специалистов. Ищите золотую середину, мой друг. Будьте в гармонии! Не становитесь уткой!
Недавно вышла вторая часть. Рассматривается личность "Плохого" и его основные принципы.

🔥 Нравится? Подпишись! Вместе мы одержим победу над восстанием роботов! 🔥

🚀 P.S. Если вы хотите не только читать о программировании, но и начать свой путь джедая прямо сейчас, то приглашаю вас на Boosty! Там вы найдете эксклюзивный обучающий материал по программированию для любого уровня подготовки. Кроме того, вы сможете увидеть, как выглядит автор в реальной жизни. Нажмите здесь и отправляйтесь в путь!🚀
У меня также имеется Telegram-канал, где публикуются более простые и веселые посты. Ссылка на канал доступна.П.С.3 Приглашаю обмениваться в комментариях своим личным мнением о лучших подходах к программированию. Буду рад услышать случаи из жизни и учебные истории из мира IT!
Comments