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