Умер Тони Хоар. Тот самый, который гениально ускорил работу компьютеров и случайно создал самую разрушительную уязвимость в истории IT

leer en español

Умер Тони Хоар. Тот самый, который гениально ускорил работу компьютеров и случайно создал самую разрушительную уязвимость в истории IT

Прощай, отец Quicksort и null, без которого современной разработки не было бы.

image

Умер Чарльз Энтони Ричард Хоар - один из людей, которые в буквальном смысле помогли создать современное программирование в его нынешнем виде. Ему было 92 года. Даже те, кто никогда не слышал полного имени Хоара, скорее всего сталкивались с его идеями напрямую: через алгоритмы сортировки, через способы проверки кода на корректность, через модели параллельной работы программ и даже через старую, болезненно знакомую ошибку с null.

Чаще всего Хоара вспоминают как создателя Quicksort. Алгоритм он придумал в 1959 году, а первую реализацию написал в Elliott Computers в 1960-м. По воспоминаниям современников, толчком стал спор с начальником. История выглядит почти буднично, но результат оказался редким по живучести. Спустя десятилетия Quicksort всё ещё остаётся одним из самых быстрых и удобных способов сортировки во множестве практических задач.

Смысл Quicksort на первый взгляд простой. Программа выбирает один элемент как опорный, затем раскладывает все остальные значения по двум группам: меньше опорного и больше него. После этого та же операция повторяется для каждой группы отдельно, пока массив не выстроится в порядок. Важность идеи в том, что Хоар предложил очень удачное сочетание скорости, простоты и практичности. Алгоритм не просто красиво смотрелся в теории, а отлично работал на реальных машинах. Именно поэтому Quicksort использовали в реализации команды sort в Unix, а затем включали в библиотеки разных языков программирования. Для студентов и преподавателей он давно стал классическим примером того, как рекурсия и хороший инженерный расчёт дают решение, которое не стареет вместе с железом.

Но одной сортировкой вклад Хоара не ограничился. В конце 1960-х он разработал то, что позже стали называть логикой Хоара. Звучит сухо, однако суть у этой работы очень прикладная. Когда программист пишет код, всегда возникает вопрос: как доказать, что программа действительно делает именно то, что задумано, а не просто кажется правильной на нескольких тестах? Логика Хоара предложила для этого строгий метод. Она позволяет формулировать условия до выполнения фрагмента программы и после него, а затем проверять, сохраняется ли нужный результат. В упрощённом виде подход выглядит так: если на входе верно одно утверждение, то после выполнения команды должно стать верным другое. Для мира разработки такой способ рассуждения оказался крайне важен. С его помощью можно не только искать баги, но и заранее доказывать корректность особенно критичных систем, где ошибка слишком дорого стоит.

Позже Хоар занялся ещё одной трудной областью - конкурентными вычислениями. Речь идёт о программах, где несколько процессов работают одновременно, обмениваются данными и влияют друг на друга. На практике именно здесь начинаются самые неприятные и трудноуловимые сбои: зависания, гонки данных, взаимные блокировки, поведение, которое невозможно стабильно воспроизвести. Чтобы описывать такие вещи не на уровне догадок, а в ясных правилах, Хоар предложил модель Communicating Sequential Processes, или CSP.

Суть CSP в том, что параллельную систему удобно рассматривать как набор отдельных процессов, которые выполняются независимо, а взаимодействуют через обмен сообщениями. Такой подход помогает не смешивать всё в один хаотичный поток состояний, а разложить поведение программы на понятные части: кто что делает, в какой момент ждёт данные, когда отправляет результат и где может возникнуть тупик. Для теории программирования модель стала очень важной, а для практики она повлияла на то, как устроены механизмы параллельной работы в разных языках, включая Erlang, Go и Clojure. Иными словами, Хоар помог сформулировать язык, на котором программисты до сих пор обсуждают одновременное выполнение задач без путаницы.

Хоара ценили не только за техническую глубину его идей, но и за редкую ясность формулировок. В 1973 году, говоря об ALGOL 60, он заметил, что язык настолько опередил своё время, что оказался лучше не только предшественников, но и почти всех последователей. За такой фразой стояло не желание блеснуть остроумием, а взгляд человека, который видел развитие языков программирования изнутри и хорошо понимал, как быстро удачные идеи тонут под слоем усложнений, компромиссов и неудачных надстроек.

В 1980 году Хоар получил премию Тьюринга - самую престижную награду в информатике. Ещё шире разошлась его лекция The Emperor's Old Clothes. Именно оттуда пошла одна из самых известных мыслей о проектировании программ: систему можно сделать настолько простой, что недостатки будут сразу заметны, или настолько сложной, что явных недостатков уже никто не увидит. Разработчики цитируют эту фразу не потому, что она звучит эффектно, а потому, что в ней слишком много правды. Сложность в софте часто не решает проблемы, а просто лучше прячет слабые места.

Есть в биографии Хоара и разработка, о которой он позже говорил уже с сожалением. Вместе с Никлаусом Виртом он участвовал в создании ALGOL W, одного из вариантов развития ALGOL 60. Комитет, занимавшийся будущим языка, в итоге сделал ставку на ALGOL 68. Такое решение фактически оборвало линию, которая могла развиваться иначе. При этом идеи ALGOL W не исчезли бесследно: позднее они повлияли на Pascal.

Именно в этой работе Хоар добавил механизм, который потом назовёт своей ошибкой миллиард. Речь о нулевом указателе, или нулевой ссылке. С практической стороны идея выглядела очень удобной: программа могла хранить специальное значение, которое обозначает отсутствие объекта или данных. Реализовать такой механизм было просто, и поначалу решение казалось разумным. Проблема проявилась позже. Как только код забывает проверить, есть ли за такой ссылкой реальный объект, программа падает или начинает вести себя непредсказуемо. Из таких ситуаций выросло огромное число сбоев, уязвимостей и аварий по всему миру. Хоар позднее прямо говорил, что добавил null слишком легко, не оценив, сколько проблем принесёт такая удобная на вид конструкция.

Биография самого Хоара складывалась необычно. Он родился в 1934 году в Коломбо, на территории нынешней Шри-Ланки. Во время Второй мировой войны семья вместе с матерью, двумя младшими братьями и двумя младшими сёстрами переехала в Южную Родезию, нынешнее Зимбабве. Позже семья перебралась в Великобританию. Там Хоар поступил в колледж Мертон при Оксфордском университете, причём первое его образование не было связано ни с математикой, ни с инженерией. Он изучал Literae humaniores, знаменитый оксфордский курс Greats, куда входят латынь, древнегреческий язык, философия и античная история. Такая академическая школа многое объясняет в его дальнейшей манере мыслить: Хоар умел не только строить строгие схемы, но и предельно точно формулировать мысли.

Во время национальной службы Хоар выучил русский язык и по обмену попал в МГУ. Там он занимался машинным переводом под руководством Андрея Колмогорова. На первый взгляд связь между переводом и будущим Quicksort неочевидна, но именно в тот период перед Хоаром встала вполне конкретная задача: нужно было упорядочить список русских слов для словаря. Работа над сортировкой слов и подтолкнула его к идее будущего алгоритма. Воплотить замысел позже помог ALGOL с поддержкой рекурсии. Получилась характерная для большой науки цепочка, где одна прикладная задача вдруг приводит к появлению метода, переживающего десятилетия и поколения машин.

В 1962 году Хоар женился на Джилл Пим. В семье родились трое детей: Том, Джоанна и Мэттью. Мэттью умер от лейкемии в 1982 году. В поздние годы Хоар оставался почётным профессором Оксфорда и работал почётным исследователем в Microsoft Research. Даже в статусе мэтра он не превратился в фигуру из учебника, про которую вспоминают только по юбилеям. Его работы продолжали обсуждать как живую основу целых направлений в программировании.

В 2024 году июльский выпуск FACS, бюллетеня по формальным аспектам вычислительной науки, посвятили 90-летию Хоара. После его смерти появились новые тексты памяти, в том числе публикации Computer History Museum и личные воспоминания коллег. По этим откликам хорошо видно, каким его запомнили. Хоара вспоминают не просто как автора Quicksort или лауреата премии Тьюринга. Коллеги пишут о человеке, который умел придумывать фундаментальные вещи, честно признавал собственные ошибки и оставлял после себя идеи, которые до сих пор работают внутри повседневного кода.

Смерть Хоара закрывает не просто большую личную историю, а целую главу в развитии информатики. Quicksort научил программы быстро наводить порядок в данных. Логика Хоара дала разработчикам способ строго проверять правильность кода. CSP помогла объяснить, как должны общаться параллельные процессы. Даже история с null осталась важным уроком о том, как удобное решение может десятилетиями вредить всей отрасли. Такой набор работ встречается редко даже среди крупнейших имён компьютерной науки.

FREE
100%
Кибербезопасность · Обучение
УЧИСЬ!
ИЛИ
ВЗЛОМАЮТ
Лучшие ИБ-мероприятия
и вебинары — в одном месте
ПОДПИШИСЬ
T.ME/SECWEBINARS