Почему этот чертов компьютер не работает? Ведь я все правильно ввожу! Программа опять не работает! Ну почему?
Даже самые матерые администраторы сетей на тысячи компьютеров, одним взмахом бороды устраняющие неполадки, грозящие миллионными убытками, иногда задают себе этот вопрос.
На этот сложный вопрос есть простой ответ, но, прежде чем дать его, я попытаюсь объяснить, почему он именно таков.
Представьте себя в роли хозяина новенького человекоподобного (но не гигантского) робота с блестящими металлическими боками. Это, вообще, робот эмоциональной поддержки, поэтому он любит поболтать, но не обладает никакими специализированными навыками: не знает, как готовить, не построит вам дом и не выгуляет собаку. Но он запоминает ваши команды и способен научиться тому, чему вы в состоянии его научить.
Давайте попросим его покрасить фасадную стену вашего дома.
К сожалению, команда "иди и покрась вон ту стену" не может быть выполнена: робот понимает, что такое стена и какая из них "вон та", но понятия не имеет, что такое "красить".
Ну что же, никто и не ожидал, что будет легко. Объясняем роботу, что надо взять кисточку, обмакнуть её в краску, а затем тереть кисточкой по стене, пока вся краска не переместится с кисточки на стену. Робот подходит к стене, и начинает старательно переносить краску с кисти на стену, но делает это в одной и той же точке: мы забыли рассказать, что красить надо там, где еще не покрасили.
Устраним эту ошибку: пусть красит по прежней схеме, но только там, где еще не покрашено. Робот опять берется за дело, и мы, наконец, с чувством выполненного долга идем жарить барбекю, пока ведро с болтами делает за нас нашу работу. Теперь мы программисты, которые научили компьютер делать что-то за нас!
Через полчаса мы приходим, и обнаруживаем, что стена покрыта краской, но не выше, чем робот достает, стоя на земле. Огорчившись, мы рассказываем роботу, что неплохо бы забраться на лестницу, которая (мы теперь опытные, и заранее все предусмотрели) лежит возле забора.
Робот лезет на лестницу, но опять ничего не делает: кожаные мешки забыли сказать ему, что надо взять с собой на лестницу краску и кисти.
Проклятый тупой робот! Да мы бы давно сами все покрасили!
Если вы, читая о том, чего мы натерпелись с этим "интеллектуальным" роботом, немного поразмышляли, как лучше объяснить ему задачу, поздравляю: вы уже немного поработали программистом. Разумеется, профессионал легко мог бы найти в нашей истории массу неразъясненных роботу вещей:
- Где брать краску?
- Что делать, когда кончилась банка краски?
- Какую кисточку взять: малярную или беличью из набора для рисования?
- После того, как робот вскарабкался на лестницу и покрасил все, до чего дотянулся, что делать дальше?
Но для нашего объяснения и так вполне достаточно. Несчастный владелец робота поневоле вынужден примерять на себя шкуру Урфина Джюса, страдающего от тупости своих деревянных солдат.
Помните, как дуболомы вели себя в неожиданных ситуациях? Они "рождались" способными ходить и говорить, но познавали мир лишь тогда, когда хозяин или другие дуболомы объясняли им, как себя вести. Однажды, увидев огонь, деревянные дуболомы стали совать в него пальцы, поджигая себя, товарищей и все вокруг. В другой раз дуболомы шли строем, и на пути им встретился овраг. Не разрушая строя, деревянные солдаты браво продолжали шагать, ведь они не знали, что это опасно, а команды остановиться не было.
Даже самый умный компьютер - просто машина, невероятно исполнительная и настолько же невероятно тупая. Её не интересует смысл её действий, она никогда не устает делать в точности то, что ей сказали. Чистить зубной щеткой плац отсюда и до обеда? Легко. Гонять пустые циклы, нагружая процессор, но ничего не вычисляя? Еще легче.
Любой программист знает, что "странное" поведение программы вовсе не странно для компьютера. Компьютер скрупулезно выполняет в точности то, что ему сказано, оставляя разработчику и пользователям удовольствие разгребать последствия.
Эта особенность компьютеров ежедневно выводит из себя миллионы пользователей.
Именно за неё компьютеры любят программисты. Неважно, насколько компьютер устал, как неприятна ему работа и сколько раз он выполнил её до этого. Сделано будет в точности то, что сказано. И больше ничего.
Так каков же "простой ответ"? Почему "компьютер не работает"?
Он действительно очень прост. Компьютер - работает. Что-то не так с вводными данными (пользователь вводит неверный пароль), со средой (сломался жесткий диск, с которого надо читать) или с алгоритмом (программист о чем-то забыл). Обращаясь с компьютером как с дуболомом, гораздо проще обратить внимание на истинную природу ошибки.
Хорошие программисты пишут хорошие программы: когда что-то идет не так, эти программы пытаются самостоятельно исправить ошибку или подробно сообщают, что именно пошло не так. По иронии судьбы, ошибки именно этих программистов сложнее всего локализовать и исправить.
#компьютер #программист #интересный факт #алгоритм