В этой статье мы делимся с вами интервью с всемирно известным американским программистом, в котором он рассказывает о создании “пыточных” тестов, “грамотном” кодинге и зачем нам столько языков. Человек-легенда, человек-загадка. Его бесподобная харизма привлекает множество людей, а увлечение историей, музыкой, искусством, математикой делает его незабываемым собеседником. За годы труда он выработал собственную философию программирования и создал несколько настольных игр, обучающих кодингу. Его дом построен вокруг двухэтажного органа, он уже написал серию книг об информатике и не собирается останавливаться на достигнутом.
Человек, который ради своих IT-экспериментов готов забыть обо всем остальном мире. Знакомьтесь, Дональд Кнут!
Дон, почему так важно находить простые решения, занимаясь программированием?
Многие люди считают, что у большинства проблем нет простого решения, поэтому очень часто сдаются, бросая дело на полпути. Важно всегда держать в голове мысль, что простое решение существует, и, следовательно, продолжать искать и мониторить варианты, не останавливаясь на первом попавшемся.
Вы говорите, что, программируя, важно уметь мысленно влазить в шкуру тестировщика, которого хлебом не корми — дай только код сломать. Как вы думаете, легко ли обычному среднестатистическому программисту дается такое перевоплощение?
Конечно, нужен особый склад мышления, чтобы создавать тестовые программы, которые смогут филигранно выявлять ошибки. Что касается меня, то могу с уверенностью сказать, что я недостаточно хитрый, чтобы стать экспертом по компьютерной безопасности.
Однако, на мой взгляд, я довольно успешно разрабатывал “пыточные” тесты для своего же собственного программного обеспечения.
Как мне это удалось? Во-первых, я постоянно представлял себя врагом, а не другом системы. Во-вторых, я писал хотя и допустимый, но довольно странный код, который потом явно никогда никому не пригодился. В-третьих, я научился мастерски встраивать одну невероятно сложную конструкцию в другую, которая была еще более непонятной.
Естественно, мои тестовые программы не всегда выявляли тех ошибок, которые я ожидал обнаружить. Однако в процессе я находил совершенно другие баги, которые бы не получилось отыскать, если бы я использовал какую-либо другую известную систему.
Я предполагаю, что еще лучших результатов можно будет достичь, если такие “пыточные” тесты создадут несколько разных людей и независимо друг от друга.
Дон Кнут в 1958 году
Как вы занимаетесь исследовательским программированием и готовите его к публикации? Поделитесь, пожалуйста, процессом!
В среднем я пишу около пяти программ каждую неделю и не успокаиваюсь, пока не сделаю их “грамотными”. Обычно первые два черновика летят в “топку”, потому что алгоритмы обычно “чудят” и функционируют не так, как я ожидаю. Я всегда тщательно изучаю код приложений, которыми пользуюсь, стараясь переосмыслить все с нуля. Поначалу я совершаю кучу ошибок, чтобы потом помочь читателям их избежать.
Что для вас язык программирования? Это инструмент для выражения идей или инструмент для выражения целей?
Язык программирования — это инструмент для преобразования мысленных образов программиста в точные операции, которые может выполнить машина. Главное, чтобы программа максимально соответствовала интуитивным действиям пользователя. Существуют самые разные пользователи и куча областей применения, поэтому нам и нужно так много разных языков программирования.
Как, по вашему мнению, вы повлияли на компьютерную индустрию, и какие уроки люди могут извлечь из вашего опыта?
Я не могу объективно сказать, какое я оказал влияние.
Однако вот чего я пытался добиться: моей главной целью было систематизировать и объяснить лучшие идеи, которые я обнаружил, занимаясь кодингом и изучая программирование в целом. Я считаю, что информатика представляет собой богатую совокупность знаний и хочу, чтобы эти знания оказались полезными, а не пылились в ящике стола.
Хотя… к чему притворяться! На самом деле мне жутко хотелось систематизировать и объяснить эти знания, и, возможно, моей единственной мотивацией было чистое интеллектуальное любопытство и желание исследовать новые захватывающие закономерности.
Что бы вы посоветовали тому, кто хочет стать лучшим в мире программистом?
Я пожелал бы ему во что бы то ни стало открыть для себя преимущества “грамотного” программирования!
Материалы для этой статьи взяты из оригинального интервью: https://www.red-gate.com/simple-talk/opinion/opinion-pieces/don-knuth-and-the-art-of-computer-programming-the-interview/
Ваш ребенок мечтает стать программистом, но не знает с чего начать? Запишите его на бесплатное пробное занятие в Progkids! Мы знаем о компьютерных технологиях все и легко научим его “грамотному” кодингу!