История про шляпу или словесный рефакторинг

Вычитал одну забавную историю в книге по рефакторингу.

Шляпных дел мастер

Джону нужна была вывеска для магазина. Изначально он составил такую:

Джон Томпсон, шляпных дел мастер, изготавливает и продает шляпы за наличный расчет

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

Теперь вывеска гласила: "Джон Томпсон продает шляпы".

"Продает шляпы!" - сказал еще один друг. - "Да ведь никто и не ожидает, что ты будешь раздавать их даром. Какая тогда польза от это слова?". "Продает" было вычеркнуто. К этому моменту не было никакой пользы от слова "шляпы", т.к. шляпа была нарисована на вывеске. Итак, в конечном счете, вывеска сократилась до такой:

John Thompson

Действительно это достаточно просто и лаконично, и главное вопросы мало у кого могут возникнуть на тему того чем же занимается человек в магазине с такой вывеской. Рефакторинг в действии.

Прочитать

XP и игра слов

Во время подготовки презентации к своему курсу "Экстремальное программирование" в книге с одноименным названием наткнулся на очень классные мысли, которые уже наверное были неоднократно высказаны кем-либо, а возможно и просто нагло скопипи*жены. Суть не в этом. Мне нравится находить игру слов и тут будет именно про неё.

К примеру, готов поставить памятник ребятам, которые сделали рекламу для РОСНО, в ней было использовано различие между корнями слов "страховая" в английском и русском языках. Слоган "РОСНО — The insurance company" до сих пор сидит в голове(к сожалению не смог отыскать ролик на просторах Youtube).

Вернемся к XP. Достаточно давно, хотя в рамках человеческой истории совсем недавно, многие компании использовали инженерный подход к разработке программного обеспечения. Сначала тонна бумаги и согласований, затем код. Это великолепно работает при проектировки зданий, мостов и других объектов, которые должны стоять в одном положении на протяжении многих лет. Это также рождает определенные трудности, как например, внесение изменений в процессе разработки. Как же так, план согласован и нельзя уже отходить от него ни на шаг.

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

Рассмотрим этот вброс подробнее:

  • Программное обеспечение на англ языке звучит как "software"
  • Аппаратное обеспечение — "hardware"

Hard - тяжелый, жесткий
Soft - легкий, гибкий, непостоянный

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

Поэтому люди все-таки пришли к гибким (см. одно из значений слова soft) методологиям и поэтому они сглаживают кривую роста затрат на внесение изменений. Такие подходы изначально рассчитаны на постоянную эволюцию ПО.

Прочитать