Все приёмы прошлых лекций — локализация, сравнение, гипотезы — держатся на одном условии: надо видеть, что происходит. Но беда сломанного в том, что самое важное обычно скрыто: внутренние состояния, промежуточные значения, события слишком быстрые, чтобы заметить, или слишком редкие, чтобы застать. Диагностика без наблюдения слепа — нельзя починить того, чего не видишь. Поэтому у диагноста есть отдельное искусство: делать невидимое видимым. Измерить скрытое, записать мимолётное, пометить неуловимое, усилить слабое, замедлить быстрое. И одно золотое правило — смотреть на реальность, а не рассуждать о том, как должно быть. Сегодня разберём инструменты наблюдения и правило «смотри, не предполагай», без которых все остальные приёмы бесполезны.
1. Диагностика слепа без наблюдения. 2. Инструменты наблюдения. 3. Читай сообщение. 4. Смотри, а не предполагай. 5. Наблюдай там, где проверяешь. 6. Когда наблюдение мешает. 7. Как применять.
1. Диагностика слепа без наблюдения
Вспомните всё, что мы делали в прошлых лекциях: проверяли на границах, сравнивали работающее и сломанное, выводили из гипотезы предсказание и проверяли его. Каждый раз в основе — наблюдение: посмотреть, замерить, увидеть. Если увидеть нельзя, весь метод повисает в воздухе: как проверить границу, если не видно, что в этой точке; как сравнить, если не видно состояний; как проверить предсказание, если его следствие скрыто. Наблюдение — это глаза диагностики, и без них она слепа.
А беда в том, что в поломках самое главное почти всегда спрятано. Мы видим лишь конечный симптом — прибор не включается, — но не видим, что творится внутри: доходит ли ток, что происходит в середине процесса, какие значения бегут по проводам. Многое скрыто по своей природе: внутренние состояния не видны снаружи; события в доли секунды глаз не ловит; редкий сбой случается, пока мы не смотрим. Поэтому первая задача диагноста — не рассуждать о скрытом, а вытащить его на свет: сделать невидимое видимым. Пока вы не видите, что реально происходит внутри, вы гадаете; как только увидели — начинается настоящая диагностика. К счастью, есть целый арсенал приёмов, как приподнять завесу.
2. Инструменты наблюдения
Приёмы, делающие скрытое видимым, собраны на схеме; пройдёмся по ним. Измерить — самый прямой: приложить прибор и получить число вместо догадки. Сколько тока в этой точке, какая температура, какое давление, сколько времени заняла операция. Число не соврёт и не оставит места для «наверное». Записать в журнал (лог) — фиксировать, что и когда происходило. Это спасает, когда событие мимолётно или редко: вы не можете сидеть и караулить сутками, а журнал запишет всё сам, и потом вы разберёте, что случилось в момент сбоя, даже если вас там не было. Пометить — поставить в нужном месте маячок и проверить, добралось ли до него то, что должно: дошёл ли сигнал, выполнилось ли действие, побывало ли управление в этой ветке.
Усилить — сделать слабый, незаметный признак явным. Если что-то едва заметно (лёгкая вибрация, крохотная утечка, слабый сигнал), его усиливают, чтобы вообще было что наблюдать. Замедлить или остановить — управиться со слишком быстрым: разложить событие на кадры, застопорить процесс в нужный миг и спокойно рассмотреть то, что в реальном темпе мелькает неуловимо. Каждый из этих приёмов открывает свой класс скрытого: измерение — величины, лог — историю событий, метка — прохождение, усиление — слабое, замедление — быстрое. Хороший диагност держит весь набор наготове и, столкнувшись со скрытым, спрашивает: чем я могу это увидеть — измерить, записать, пометить, усилить, замедлить? Вложение в наблюдение почти всегда окупается: один взгляд на то, что реально происходит, стоит часа рассуждений о том, что происходить должно.
3. Читай сообщение
Отдельно стоит сказать о самом дешёвом и самом игнорируемом источнике наблюдения — о сообщениях, которые система сама о себе выдаёт. Прибор мигает определённым кодом, программа выводит текст ошибки, механизм издаёт характерный звук. Поразительно, как часто люди отмахиваются от этих сообщений — закрывают окно с ошибкой не читая, не смотрят на код индикатора, — и идут гадать о причине, которая прямо перед ними написана.
Сообщение об ошибке — это система, которая своими словами говорит вам, что с ней не так. Игнорировать его — всё равно что не слушать пациента, жалующегося на конкретную боль. Поэтому железное правило: прежде чем что-либо предполагать, прочитайте, что система сообщает, — целиком и внимательно. Часто там уже половина ответа, а то и весь: код неисправности прямо называет узел, текст ошибки — что именно не сошлось. Даже если сообщение непонятно, оно — зацепка: его можно расшифровать, поискать, сопоставить. И шире: вслушивайтесь и всматривайтесь в любые сигналы, которые подаёт система, — необычный звук, запах, нагрев, мигание. Это бесплатные улики, которые она сама вам протягивает. Диагност, который сначала внимательно смотрит и слушает, что говорит система, а уж потом строит версии, экономит уйму времени по сравнению с тем, кто с ходу бросается предполагать, пропустив прямую подсказку.
4. Смотри, а не предполагай
Теперь главное правило всего наблюдения, ради которого стоит завести отдельную заповедь: смотри, а не предполагай. Огромная доля диагностических ошибок растёт из того, что человек рассуждает о том, как должно быть, вместо того чтобы посмотреть, как есть на самом деле.
Ловушка выглядит невинно, как показано на схеме. Мы хорошо знаем (или думаем, что знаем) устройство: «здесь должен идти сигнал, тут должно быть напряжение, эта деталь исправна, я её недавно ставил». И на основе этой картины «как должно быть» решаем, где причина, минуя проверку. А диагност делает иначе: идёт и смотрит — и нередко обнаруживает, что «должно быть» и «на самом деле» расходятся. Именно в этом расхождении и живёт поломка: если бы всё шло, как задумано, ничего бы не сломалось; раз сломалось — где-то реальность отклонилась от модели. Найти это место можно, только глядя на реальность, а не на свою уверенность. Отсюда практический вывод, поначалу неприятный: не доверяйте своим «это точно работает». Как раз то, в чём вы совершенно уверены и потому не проверяете, чаще всего и оказывается сломанным — ведь если бы вы честно это проверили, то давно бы нашли. Опытные диагносты знают за собой этот грех и специально проверяют «очевидное»: воткнут ли вообще вилка в розетку, та ли это деталь, включено ли то, что «всегда включено». Не спорьте с реальностью и не верьте предположениям — пойдите и посмотрите. Это скучный, приземлённый навык, но он экономит больше времени, чем любой изощрённый приём.
5. Наблюдай там, где проверяешь
Наблюдение — не самоцель, а слуга остальных приёмов, и работает оно лучше всего, когда прицельно направлено туда, где вы сейчас ведёте поиск. Вспомните локализацию из третьей лекции: мы проверяем на границах между узлами, где хорошее становится плохим. Так вот, инструменты наблюдения — это и есть то, чем мы проверяем эти границы. Хотите узнать, что на выходе из узла, — измерьте там, поставьте метку, посмотрите лог именно в этой точке. Наблюдение и локализация работают в паре: локализация говорит, где смотреть, наблюдение даёт возможность увидеть.
Отсюда практичный принцип: добавляйте видимость там, где идёт поиск, а не где попало. Бессмысленно обвешивать приборами всю систему разом — это утонет в данных. Разумно сделать видимой ту границу, ту точку, которую вы сейчас проверяете по методу половинного деления или по цепочке гипотез. Проверяете, дошёл ли сигнал до середины, — сделайте видимой середину. Это соединяет весь наш метод в одно: гипотеза говорит, что проверить; локализация — где; наблюдение — чем это увидеть. И ещё: наблюдение стоит закладывать заранее. В хорошо сделанных системах видимость встроена изначально — приборы, индикаторы, журналы уже на месте, и, когда что-то ломается, диагносту есть на что смотреть. Если вы что-то создаёте или настраиваете, подумайте наперёд: а как я увижу, что тут пошло не так? Заранее встроенная видимость превращает будущую мучительную диагностику вслепую в спокойный взгляд на показания.
6. Когда наблюдение мешает
Честно оговорим и обратную сторону: иногда сам акт наблюдения меняет то, что мы наблюдаем, и это может сбить с толку. Приложили прибор — и своим вмешательством чуть изменили режим; включили подробную запись — и она замедлила систему; стали пристально следить — и редкий сбой, как назло, перестал воспроизводиться (а стоит перестать смотреть, возвращается). Такие случаи, когда наблюдение влияет на поведение, — известная ловушка; диагносты в шутку зовут особо вредких из них «баг, исчезающий под взглядом».
Что с этим делать? Во-первых, помнить о самой возможности: если сбой ведёт себя иначе, стоит вам начать наблюдать, — заподозрите, что виновато само наблюдение, а не то, что причина «испугалась». Во-вторых, по возможности выбирайте способы наблюдения, которые меньше вмешиваются: измерять, не разрывая цепь; записывать так, чтобы это почти не нагружало систему; смотреть со стороны, а не влезать внутрь. В-третьих, учитывайте эффект наблюдения при выводах: если знаете, что ваш прибор чуть меняет режим, делайте на это поправку. И отдельная осторожность — данные наблюдения тоже могут врать: прибор бывает неисправен или неверно подключён, журнал — неполон, метка — поставлена не туда. Полезная привычка — иногда проверять сам инструмент: показывает ли прибор заведомо известное значение правильно, пишет ли лог то, что точно произошло. Наблюдение — мощнейший инструмент, но не безупречный: смотрите, но не забывайте, что и на взгляд бывает кривое стекло. Это не повод не наблюдать — это повод наблюдать с умом.
7. Как применять
Соберём в практику. Столкнувшись со сбоем, прежде чем гадать о причине, спросите себя: а что я реально вижу, и что тут скрыто? Всё, что важно, но невидимо, попробуйте вытащить на свет подходящим приёмом: измерить величину, записать ход событий в журнал, поставить метку и проверить прохождение, усилить слабое, замедлить быстрое. Обязательно прочитайте всё, что система сама сообщает, — коды, ошибки, звуки: там часто уже лежит подсказка. И направляйте наблюдение туда, где сейчас идёт поиск, — делайте видимой ту границу, которую проверяете. А главное — держите заповедь «смотри, а не предполагай»: не доверяйте своим «должно быть» и «это точно работает», а идите и проверяйте, особенно очевидное.
И, как весь курс, это работает шире техники — по сути, это привычка опираться на факты, а не на догадки. Разбираетесь, почему не сходятся деньги, буксует проект, портится самочувствие, — не стройте теорий в пустоте, а сначала соберите наблюдения: замерьте, запишите, посмотрите, что реально происходит, а не что должно. Кажется, что «и так всё ясно», — вот тут и проверьте, потому что «ясное» непроверенное чаще всего и обманывает. Умение сделать невидимое видимым и смотреть на реальность, а не на свою картину мира, — один из самых отрезвляющих навыков вообще, и он выручает далеко за пределами ремонта. В следующей, предпоследней лекции возьмёмся за главного невидимого врага диагноста — за ловушки его собственного ума, которые сбивают с толку даже при хорошем наблюдении.
Итоги
- Диагностика слепа без наблюдения: нельзя починить того, чего не видишь. А в поломках главное обычно скрыто — внутренние состояния, промежуточные значения, слишком быстрые или редкие события.
- Инструменты наблюдения: измерить (число вместо догадки), записать в журнал (поймать мимолётное и редкое), пометить (проверить прохождение), усилить (слабое сделать явным), замедлить или остановить (разглядеть быстрое).
- Читай сообщение: система сама говорит, что с ней не так, — коды, ошибки, звуки. Не отмахивайся; там часто половина ответа. Это бесплатные улики.
- Смотри, а не предполагай: поломка живёт там, где «должно быть» расходится с «на самом деле». Не доверяй своим «это точно работает» — очевидное, которое не проверяют, чаще всего и сломано.
- Направляй наблюдение туда, где идёт поиск: делай видимой ту границу, которую проверяешь. Наблюдение и локализация работают в паре; видимость полезно встраивать заранее.
- Наблюдение может мешать: сам акт наблюдения иногда меняет поведение, а данные приборов и журналов тоже бывают ложны. Наблюдай с умом, при случае проверяй сам инструмент.
Вопросы для самопроверки
- Почему без наблюдения все остальные приёмы диагностики бесполезны? Что обычно скрыто в поломках?
- Назовите инструменты наблюдения и укажите, какой класс скрытого открывает каждый.
- Почему нельзя игнорировать сообщения об ошибке и другие сигналы системы?
- В чём смысл правила «смотри, а не предполагай»? Почему особенно опасно «очевидное»?
- Возьмите задачу и перечислите, что в ней скрыто и каким приёмом наблюдения это можно увидеть.
Литература
- Дэвид Аганс. «Отладка. 9 незыблемых правил» — правила «смотри» и «сделай видимым».
- Брайан Керниган, Роб Пайк. «Практика программирования» — наблюдение, логи и вывод состояния при отладке.
- Атул Гаванде. «Всё возможное» — сила внимательного наблюдения в медицинской диагностике.
🧠 Увидеть скрытое с Фреди
Причина где-то внутри, а вам её не видно? Разберите с Фреди, что в вашей задаче скрыто и как это вытащить на свет: что измерить, что записать, где поставить метку, какое сообщение прочитать. И проверьте «очевидное» — именно там, в непроверенном, чаще всего и прячется поломка.
Это восьмая лекция курса «Траблшутинг». В следующей, предпоследней, возьмёмся за главного невидимого врага диагноста — за ловушки его собственного ума, которые сбивают с толку даже при хорошем наблюдении. А сообразить, что и чем сделать видимым в своей задаче, всегда можно вместе с Фреди.