# Как экспериментировать

Великий Эдсгер Дейкстра красноречиво объяснил, что информатика не является экспериментальной наукой\[ExpCS] и не зависит от электронных устройств. Как он выразился в 1960-е годы \[Knife]:

> ...произошло худшее: предмет стал известен как “computer science”, что, собственно говоря, то же самое, что называть хирургию “knife science”. И в сознании людей прочно укоренилось, что “computer science” - это наука о машинах и периферийном оборудовании.

Программирование может и не быть экспериментальной наукой, но у большинства программистов нет возможности заниматься тем, что Дейкстра определил как “computer science”. Мы должны работать в области эксперимента подобно некоторым (но не всем) физикам. Если спустя 30 лет можно будет заниматься программированием без экспериментирования, то это будет великим достижением информатики.

Эксперименты, которые вам придется заниматься, включают:

* Тестирование систем на небольших примерах данных, чтобы убедиться в их соответствии документации, либо, чтобы понять их ответы, если документации нет
* Тестирование небольших изменений в коде, чтобы удостовериться, что они устраняют баг в программе
* Измерение производительности системы в двух различных окружениях из-за несовершенства знаний о их характеристиках производительности
* Проверка целостности данных
* Сбор статистики, которая может помочь в разрешении сложных и трудновоспроизводимых багов

Я не думаю, что в этом эссе я смогу объяснить, как проектировать эксперименты. Вам придется научиться этому самостоятельно и практиковаться. Я могу предложить два небольших совета.

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

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

Следующее: [Командные навыки. Почему важно оценивать задачи](https://braydie.gitbook.io/how-to-be-a-programmer/ru/1-beginner/team-skills/01-why-estimation-is-important)
