Легко и просто
June 5, 2012 in Engineering philosophyПрограммисты склонны путать представления о внутренней и внешней простоте своих программ.
Более того, часто я вижу предпочтение внутренней простоты перед внешней. Например, если тебе нужно предоставить возможность редактирования статей на сайте, ты решишь вставить обыкновенную TEXTAREA и предложишь клиенту изучить HTML, “это ведь несложно”.
Проблема кроется в том, что потребителю твоей программы (модуля, библиотеки) его внутренняя сложность не видна и, таким образом, не важна. А внешняя сложность бросается в лицо. Поэтому никогда нельзя пренебрегать внешней простотой программы ради простоты внутренней.
Сложно написать алгоритм автоматического определения выдержки и диафрагмы в фотоаппарате. Легко нажать спусковую кнопку и снять классную фотографию.
Легко вывалить на пользователя простыню из полей для заполнения структуры данных. Но легко заполнить красиво продуманную, простую форму. Которую сложно спроектировать.
(Когда ты представляешь простую форму, о чем ты думаешь - о структурно простой форме из полей да подписей, или о простой в использовании форме с подсказками и проверками?)
Легко загружать параметры статьи на блоге из внедренного в неё фрагмента YAML. Сложно редактировать эти параметры при публикации (чтобы не говорили, а нажать кнопку “сохранить” в онлайн-редакторе WordPress все равно проще, чем опубликовать статью через Jekyll.)
Это даже касается внутренних продуктов, написанных программистами для программистов. Легко принимать в функции API хеш параметров и передавать его во все внутренние вызовы, используя параметры то тут, то там. Сложно при использовании API понять, какие вообще есть параметры и какой параметр нужно изменить в конкретном случае.
По крайней, мы уже понимаем ценность внешней простоты применительно к себе: легко добавить в программу грубый хак; сложно через н-цать месяцев понять, как этот хак работает.
Предлагаю в своей работе ценить также и внешнюю простоту применительно к другим.
Понравился пост? Купи мне кофе