Что такое хардкод

– Алло, это хардкор?

– Алло, это харткот?

– Техническая поддержка, здравствуйте! Время пришло.

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

Проведя небольшой опрос среди наиболее осведомленных клиентов, коллег и соискателей, что же они понимают под термином “Хардкод” (Hard coding), я получил множество самых неожиданных ответов. Удивительно, но оказалось и сами разработчики не всегда понимают глубинный смысл хардкода – даже считают его некачественным кодом и путают с “говнокодом”.

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

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

Стоимость разработки.

Нет, здесь я не буду говорить о ценообразовании – это отдельная история. Сегодня я ваш капитан-очевидность и со всей ответственностью заявляю: “Цена – это критерий номер раз!”

Сроки выполнения работ.

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

Работоспособность.

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

Дальнейшая поддержка кода.

Как говорится “last but not least – последний, но от этого не менее важный”, и, к несчастью, это самый недооцененный фактор.

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

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

Хардкод «на котиках»

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

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

Для этого цены в магазине должны быть как минимум в долларах и евро.

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

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

Что делать? Надо спешить, пока никто еще не поставляет эти уникальные товары на зарубежные рынки, ведь так важно оказаться первым.

И вот через два месяца с новым магазином или доработанным старым вы получаете:

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

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

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

Сплошная польза и очевидный профит.

Стоимость, сроки.

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

Работоспособность.

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

Дальнейшее сопровождение, доработки.

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

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

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