# Аскетика в отладке
hugeping(ping,1) — All
2021-10-18 16:29:58
Последние несколько дней находился в отладке, искал хитрый баг. Вообще, процесс отладки вызывает во мне смешанные чувства. С одной стороны, это заноза, которая не даёт спокойно жить (есть, спать, отдыхать). С другой стороны -- чувство эйфории или катарсис, когда все фрагменты головоломки вдруг складываются и лишних частей не остаётся... Что я имею в виду?
Когда-то, разрабатывая драйверы ещё в Windows, я пользовался SoftIce. Это был такой легендарный отладчик уровня ядра. Когда я перешёл на Linux, отладчиков такого уровня я не нашёл. Это был удар. Я не мог понять как вообще можно отлаживать код без отладчика? Но шло время и постепенно я стал замечать, что основное затруднение вызывают баги такого рода, когда отладчик никак не поможет... Обычно это проблемы синхронизации, гонок, или фундаментальные проблемы (когда архитектурные решения основывались на ложных предпосылках). И вот для такого рода ошибок, как оказалось, отладчик бесполезен. Нужно только проводить эксперименты и думать, пытаться сложить все наблюдения в одну картину.
В особенно сложных случаях факты рассыпаются и, кажется, что нет никакой системы. Кажется, что ситуация просто невозможна. Невозможна даже теоретически, так как ты не можешь придумать гипотезу (хотя бы и фантастически маловероятную), которая бы разрешила все логические конфликты.
Учась в институте, когда мы-студенты уже считали себя крутыми программистами, сталкиваясь с необъяснимыми ситуациями, мы часто ссылались на "ошибки компилятора". Как же хочется и сегодня иногда свалить всё на "ошибку компилятора".
- Такого не может быть!
- Это проблема в тесте!
- Может быть, виноваты битые провода?
Ну, и тому подобное... Да, когда ситуация не подчиняется логике есть соблазн войти в отрицание, самоутвердиться таким образом. Свою логику возвести в абсолют. Поставить себя в центре. Но это не работает. Никогда не работает. Напротив, когда программист закрывается от проблемы таким образом, он отсекает шансы на самостоятельное решение проблемы.
Работает прямо противоположный подход. Я бы назвал его аскетическим. Есть факт, и этот факт прост -- в твоей программе баг. Она несовершенна. Ты не понимаешь сути происходящего, но реальность подчиняется логике. Ты просто не видишь всей картины. Нужно смириться, собирать факты (улики) и думать, думать, думать. Не можешь связать все улики воедино? Не стоит отчаиваться! Все баги, которые ты встречал до сих пор в своей в жизни, ты решил. Каждый раз объяснение находилось, и каждый раз оно было и очевидным, и неожиданным одновременно. Так будет и в этот раз, хотя сейчас в это сложно поверить. Просто думай.
Объяснение нашлось. Как именно это происходит, я не знаю. В какой-то момент просыпается интуиция и говорит в чём дело. Поэтому отладка для меня это всегда источник страха. Потому что я не понимаю до конца, как именно решаю проблему. Есть здесь что-то иррациональное. Я просто собираю факты, обсуждаю их с кем-нибудь, думаю и потом что-то происходит. Но я, как буд-то, не контролирую этот процесс. А вдруг, в этот раз не сработает?
Ещё интересное наблюдение. Сейчас проблема была архитектурной. То, что я считал аксиомой -- оказалось ложным предположением. Именно поэтому я так долго находился в состоянии "отрицания". А ещё, проблема оказалась каскадной. То-есть, пофиксив один баг, я не решил проблему в целом. Интересное ощущение, когда логика отказывает второй раз подряд и ты вдруг понимаешь, что реакции "чёрного ящика" снова стали непредсказуемыми. Ощущение, что реальность рассыпается на кусочки.
В общем, я так и не понял, люблю я отладку или нет. Иногда мне кажется, что я люблю её больше, чем само программирование и что именно она влияет на моё мышление. Иногда, мне хочется чтобы это состояние стресса никогда не наступало. Но только оно обязательно наступит... Надеюсь, к этому времени я успею собраться. :)
# Re: Аскетика в отладке
vvs(ping,12) — hugeping
2021-10-18 17:29:23
Ну надо же, как тесен мир. Я тоже пользовался SoftIce, а до него Periscope, ещё когда использовал DOS. И тоже был обескуражен, что в Линуксе нет ничего похожего. Правда сейчас и софтайса давно уже нет.
То, о чём здесь идёт речь и есть экспериментальная наука. Если свойства программы не доказываются формально, то кроме эксперимента и теоретизирования ничего другого и не остаётся. Я раньше упоминал о языках с зависимыми типами, так они, в том числе, и для верификации программ используются, в том числе компиляторов. Это отдельная область исследований в информатике.
А вообще интересный вопрос: существует ли экспериментальная математика? Да, существует. И здесь находится что-то общее с физикой. Этим и Стивен Вольфрам увлёкся. Думает, что так откроет законы, управляющие вселенной. Занимается ли он отладкой вселенского компьютера, находясь внутри него? Интересная аналогия, да?
# Re: Аскетика в отладке
Andrew Lobanov(tavern,1) — hugeping
2021-10-19 12:00:17
hugeping> В общем, я так и не понял, люблю я отладку или нет. Иногда мне кажется, что я люблю её больше, чем само программирование и что именно она влияет на моё мышление. Иногда, мне хочется чтобы это состояние стресса никогда не наступало. Но только оно обязательно наступит... Надеюсь, к этому времени я успею собраться. :)
Отладка это то, что я ненавижу и что обожаю. Когда улики уже есть, но выводы всё ещё неверны и все предположения оказываются ошибочными, я испытываю чувство близкое к бессилию. Это очень тяжёлое эмоционально состояние, конечно. Но с другой стороны, кайф, испытываемый после того, как пазл сложился, не сравнить ни с чем. Ощущение, что я неглуп, что я могу решать проблемы, даже если они кажутся неразрешимыми изначально.
Эмоциональная сложность отладки делает её гораздо более стрессовой, чем простое написание кода. Но зато и кайф в конце более сильный. Может, эти "эмоциональные качели" вредят, но именно сильные эмоции сильнее привязывают меня к этому занятию.
# Re: Аскетика в отладке
Andrew Lobanov(tavern,1) — vvs
2021-10-19 12:00:18
vvs> А вообще интересный вопрос: существует ли экспериментальная математика? Да, существует. И здесь находится что-то общее с физикой. Этим и Стивен Вольфрам увлёкся. Думает, что так откроет законы, управляющие вселенной. Занимается ли он отладкой вселенского компьютера, находясь внутри него? Интересная аналогия, да?
Вопрос лежит больше в философской плоскости. Возможно ли полностью изучить систему, являясь частью систему и действуя по её законам? Есть что-нибудь не сильно сложное в восприятии из рассуждений на эту тему?
# Re: Аскетика в отладке
vvs(ping,12) — hugeping
2021-10-19 13:56:56
То, что я тут намекаю на цифровую физику вовсе не означает, что я разделяю такие взгляды. Сомневаюсь я и что вся вселенная функционирует по принципам теории алгоритмов. Я слишком пессимистически отношусь к познаваемости мира вообше - я агностик и скептик. Всякая спекулятивная эпистемология для меня поэтому более не убедительна. Всё это скорее напоминает фантастическую литературу, которая выглядит местами даже интереснее :) И к этим исследованиям Стивена Вольфрама отношусь скептически. В лучшем случае может и будет какая-то польза для абстрактной математики. Я уж точно не верю в применимость цифровых методов к человеческим отношениям, о чем уже шла речь в соседней теме. Да и такие отношения относятся уже скорее к аксиологии, что явно не случайно.
Из всех видов философии же я отдаю предпочтение тем, которые занимаются мышлением и языком. Из них наиболее практичными нахожу цели аналитической философии и философии математики. Вообще, весь мой интерес к философии явно чисто утилитарный, что не удивительно и, следовательно, по самой своей природе - дилетантский. Всё свободное время предпочитаю лучше отдавать точным наукам, иначе ощущаю сильное беспокойство, что трачу время зря.