Часть третья: Компьютерная школа
Машина
Мне было двенадцать, когда я впервые сел за компьютер. В мою жизнь он вошёл благодаря отчиму.
В то время отчим работал системным администратором в единственной компьютерной школе нашего маленького города. Он не преподавал, а только отвечал за работу машин. Он увидел, как меня тянет к компьютерам, и записал меня на курс. А на занятиях я его почти не видел: я приходил в класс, а он был где-то в здании и следил за машинами, которыми остальные лишь пользовались.
А компьютер в классе увлёк меня целиком. Источников у этого увлечения было два.
Первый — сама машина. Она была мощная и могла выводить на экран графику — прежде всего игры, которые захватили меня, как и многих других детей. Я их любил. Но не меньше меня тянуло другое: машине можно было сказать, что делать, и она это делала. Можно было записать последовательность команд — программу, — машина выполняла их в точности, и в конце возникало то, чего прежде не существовало. Играть означало запускать команды, написанные кем-то другим; я хотел писать свои. В то время оба желания были во мне одинаково сильны, но дальше в этой части я буду следовать только за вторым: дальше речь пойдёт о том, как делают своё, а не о том, как пользуются чужим. Я увидел, как делают то, чего сам ещё не умел, и уже не мог оставить это в покое.
У этого огня был и второй источник — человек.
Отчим был для меня авторитетом — таким, каким взрослый мужчина бывает для мальчика, которому ещё не с кого брать пример. Я хотел стать таким, как он. А его работа была в нашем городе и в те годы совершенно новой. Мне казалось, что те немногие, кто занимался компьютерами, ушли туда, куда остальные ещё не добрались. Отчим был одним из них, и я тоже хотел туда попасть.
Вот подробность этой истории, вес которой я почувствовал лишь много позже. Он был самоучкой. По образованию он был учителем физики. Компьютеры тогда только появились в нашем маленьком городе, и никто там ещё не умел с ними обращаться. Учиться отчиму было негде: ни школы, ни учителя, который разбирался бы в компьютерах, в городе ещё не было. Он освоил это дело по целой полке книг. Советоваться он мог только со знакомыми, но они были такими же самоучками, как он. Человека, который зажёг мой огонь, некому было провести внутрь. Путь он нашёл сам, и проводником ему были эти книги. В двенадцать лет я об этом не рассуждал. Я лишь чувствовал жар, который от него шёл. Это возможно: человек может войти в страну, которой ещё нет ни на одной карте, и выйти оттуда, уже зная её. Этот жар и стал тем огнём, с которым я пришёл на занятия.
Заметьте одно, потому что от этого зависит следующий поворот книги. Огонь я принёс с собой неистощённым. До того как я сел за компьютер, ничто не успело его истощить.
Всё это происходило одновременно. В том же городе, в те же детские годы мальчик каждую неделю проходил мимо открытой двери дня композиции в художественной школе — к тому времени уже слишком уставший, чтобы повернуть ручку. И это был тот же мальчик, который в двенадцать лет сел за эту клавиатуру, полный огня. В тех двух комнатах различался не мальчик. Ещё совсем маленьким он пришёл с огнём и в художественную школу. Различалось то, что каждая комната делала с огнём, который он в неё принёс.
1. Всё встало на свои места
Сначала курс не произвёл на меня особого впечатления.
Мы занимались теорией, и она очень напоминала математику, которую я проходил в обычной школе. Булева алгебра. Системы счисления — двоичная, восьмеричная, шестнадцатеричная. Блок-схемы. Алгоритмы. Я толком не понимал, для чего всё это нужно. Я записывал и учил материал, потому что решил, что он наверняка важен. Но он был отвлечённым и сухим. Сам по себе он ничего во мне не зажигал.
Потом мы сели за машины, и всё встало на свои места.
Почти каждый кусок сухой теории оказался тем, что теперь было мне нужно. Системы счисления объясняли, как машина считает. Алгоритм был планом работы, который выполняла программа. Блок-схема была тем же планом, нарисованным на бумаге: она показывала его целиком, ещё до того как была написана хоть одна строка. То, что меня заставили выучить, оказалось основанием для нынешней работы, и, стоя на нём, я чувствовал его прочность. Помню, я думал с благодарностью о том, как хорошо и правильно нам всё это преподали.
Нашим языком был Pascal. Мы начали с самых простых программ: вывести на экран строку текста; вычислить какую-нибудь формулу и показать ответ. Неделя за неделей задания становились понемногу сложнее.
Предыдущая часть была полна скучного повторения, которое никуда не вело. Поэтому легко решить, будто врагом была сама монотонная работа: будто сухая теория, упражнения и абстрактные правила без видимой цели не дают начинающим стать художниками. И будто выход — пропустить всё это и сразу перейти к настоящей работе. Это неверный и опасный вывод, потому что без монотонной работы не обойтись. В этой комнате она тоже была. Теория здесь была не менее сухой, чем натюрморты у мольберта, и я проходил через неё с тем же непониманием, с каким четвёртую неделю рисовал один и тот же кувшин. В обеих комнатах русло роют скучной работой; ни в том, ни в другом деле от рытья не уйти.
Разница была не в том, что здесь мы пропустили скучный этап. Разница была в том, что здесь этот этап соединялся с остальным. По руслу пошла вода. На одной неделе я переписывал абстрактные правила, которым не видел применения, а несколько недель спустя уже опирался на многие из них и создавал то, что работало. В другой комнате — у мольберта — я рыл годами, но вода так и не пришла, и я вынес оттуда неверный урок: виновато само рытьё.
Поэтому, если сейчас вы проходите скучный этап, спрашивать нужно не о том, скучно ли вам. Будет скучно; это ничего не доказывает. Нужно спрашивать, соединяется ли эта работа с чем-нибудь — начинают ли куски сухой теории, урок за уроком, превращаться в то, к чему тянутся ваши руки. Скука, которая служит построению руки, — цена любого искусства. Скука, которая замыкается в круг и ни к чему не приходит, — это тот круг, похожий на дорогу, о котором я рассказывал в предыдущей части. Поначалу изнутри они ощущаются почти одинаково. Научиться различать их трудно, но от этого зависит, останетесь вы в этой комнате или пойдёте искать другую.
2. Рука, которая отступила
За три года способ, которым учитель давал нам задания, постепенно менялся. Странно, что я не замечал этих перемен, пока они происходили. Только теперь я вижу, как это было устроено, от начала до конца.
Сначала он просто давал нам текст программы. Мы набирали его в точности, как было написано, запускали и смотрели, как программа работает.
Потом он перестал давать нам программу. Вместо неё он давал блок-схему — изображение алгоритма, логику будущей программы, — а саму программу по этой схеме мы должны были написать сами.
Затем он перестал давать и блок-схему. Он говорил несколько слов о том, как можно подступиться к задаче, — указывал направление, не больше, — а остальное нам предстояло найти самим.
Год за годом мы чувствовали, что всё лучше находим путь к решению сами. И один из признаков этого был прямо у нас перед глазами, хотя тогда я не понимал, на что смотрю: программы, которыми мы решали одну и ту же задачу, всё меньше походили друг на друга. Раньше весь класс написал бы почти одинаковые строки. Теперь, получив одну задачу, каждый возвращался с решением, устроенным по-своему, потому что каждый сам нашёл к нему путь.
Мне нужно поставить это рядом с тем, что шло в другой комнате — в художественной школе, те же годы, мольберт, — потому что нигде больше в этой книге не видно так ясно, что комната делает с ребёнком, а я учился в обеих одновременно.
У мольберта умелая рука опускалась на наши законченные листы — та же уверенная тень, тот же точно поставленный блик. Опускалась она не на каждый лист: учительница не трогала работы, которые получились особенно удачными или были сделаны совсем не в её манере, — боялась их испортить. Но на остальных, как бы по-разному ни начинались рисунки, сверху оказывалась одна и та же рука — рука учительницы. В компьютерном классе рука отступала. Понемногу, с каждым годом, образец намеренно убирали, пока наши работы не начали всё меньше походить друг на друга и всё больше становиться нашими собственными.
Две комнаты, одни и те же годы, и в обеих — новички, которым ещё предстояло построить руку. Главным, что их различало, была рука учителя. В детстве я не мог поставить эти два движения рядом: в одной комнате я восхищался рукой, которая опускалась сверху, а в другой рука учителя тихо отступала, и я этого даже не замечал.
3. Экзамен
Через три года нас ждал выпускной экзамен. Я нервничал, хотя меня считали одним из сильных учеников в классе. Экзаменационная задача должна была оказаться труднее всего, что нам давали, и я смутно чувствовал, что к ней не готов.
Мне досталась такая задача: написать программу, которая решает квадратное уравнение. Пользователь вводит коэффициенты — a, b, c, — а программа выдаёт решение.
Я прочитал условие и сделал то, что делал всегда. Стал ждать подсказки учителя.
Он её не дал. Он сказал, что экзаменационную работу я должен выполнить полностью самостоятельно. Это выбило меня из колеи. Три года я опирался на его подсказки, сам того не замечая. Теперь опоры не стало, и я засомневался, что справлюсь.
Тогда он дал мне один совет, и с тех пор я помню его слово в слово. Он сказал: «Сначала реши задачу сам. Тогда поймёшь, каким должен быть алгоритм». Больше он ничего не сказал, отошёл к следующему ученику и оставил меня наедине с задачей. Весь класс сдавал экзамен одновременно, каждый за своей машиной, а учитель ходил между нами. С того момента я должен был справляться сам.
То, что он сделал в ту минуту, выглядело почти как ничто. Но это было не так.
Он отказался дать подсказку — а затем дал нечто куда большее, замаскированное под подсказку. Подсказка даёт часть пути. Он полностью убрал путь и оставил мне лишь цель: правильный ответ есть, найди к нему собственную дорогу. Он сказал мне — теми немногими словами, какие вместила та минута, — придумать собственное решение.
Я так и сделал. Не за компьютером — на листе бумаги. Я сел над уравнением и стал решать его, как на уроке математики. После нескольких неудачных попыток я нашёл общую формулу для его решения. Затем задал следующий вопрос, в котором, как оказалось, и заключалась суть программирования: как заставить машину шаг за шагом повторить то, что я только что проделал на бумаге? Я ещё раз прошёл по собственному решению, шаг за шагом, и превратил каждое своё действие в команду, которую могла выполнить машина. Так из шагов моего решения появился алгоритм. После этого программу я написал быстро. Самое трудное уже было сделано — на бумаге.
Когда программа запустилась и выдала правильные ответы, я был потрясён.
Мне казалось, будто я сделал большой шаг вперёд. И так оно и было. Впервые я придумал собственное решение задачи, построил из него собственный алгоритм и заставил программу работать. Никто не дал мне готового пути. Я проложил его сам, и он оказался верным.
Со стороны всё это выглядело незначительным. Мальчик среди других детей решает квадратное уравнение, а затем пишет программу, которая делает то же самое. Любой взрослый, заглянувший в класс, увидел бы ребёнка, который сидит над самой обычной задачей школьной математики. На самом деле этот мальчик достиг освобождения — того, к чему книга и ведёт. Часто освобождение проходит незаметно для окружающих: оно выглядит как небольшая задача, которую человек наконец решил сам, а не по образцу.
И что-то во мне изменилось — насовсем. После того экзамена я перестал опасаться сложных задач. Над тем уравнением я впервые почувствовал всё движение целиком: не знать, проложить путь самому, дойти. Почувствовав его один раз, я стал ему доверять. Теперь мне казалось, что решить можно любую задачу. Дело было только во времени и в работе.
4. Самая простая дверь
Здесь мне нужно кое-что сказать — иначе эту часть можно прочесть неверно.
Я не считаю программирование искусством. Для меня это скорее ремесло. В конце работы есть правильный ответ: программа либо запускается, либо нет; уравнение либо решено, либо нет — и это всегда можно проверить. В искусствах, о которых в основном говорит эта книга, такого ответа в конце нет. Проверить нечем. И это большая разница.
Я говорю это не для того, чтобы поставить одно выше другого: ремесло не ниже искусства, и эта книга начинается с резчика, который называл себя ремесленником. Я говорю это потому, что именно верный ответ в конце объясняет, почему я поместил эту историю так рано — перед более трудными.
В ремесле, где в конце ждёт правильный ответ, освобождение ничем не скрыто. Виден весь механизм в работе, и ничто не прячет ни одной его детали: образец убран, путь человек проложил сам, обученная рука прошла этот путь до конца. А затем появляется простое, проверяемое доказательство — программа работает. С программой, выдающей правильные ответы, не поспоришь. Освобождение произошло — вот и подтверждение.
В искусстве подтверждения нет. Здесь ничто не может просто запуститься или не запуститься. Ни одна формула в учебнике не скажет вам, что эту вещь вы сделали сами, а не по образцу, и что шаг, который вы совершили, и есть освобождение. Оно должно произойти и в искусстве — образец убран, путь человек проложил сам, рука прошла этот путь до конца, — но происходит в темноте, а в конце нет ничего, что могло бы его подтвердить. Поэтому его куда труднее увидеть — в себе или в другом человеке. Именно в эту страну ведут дальнейшие части книги.
Я хотел один раз показать вам освобождение при ясном свете, в самой простой комнате, в которой мне довелось оказаться, прежде чем мы войдём в комнаты, где света мало.
И ещё одно. Это первая история в книге, где этот шаг случился со мной, а не с человеком, рядом с которым я стоял и смотрел. В предыдущей части освобождения достиг другой мальчик, а я был свидетелем. Здесь освобождения достиг я сам. Вот только условия были самыми простыми, какие можно пожелать: в конце меня ждал правильный ответ, который подтвердил, что я дошёл. Этого достаточно, чтобы сказать: освобождение не выдумка и до него можно дойти. Но этого совершенно недостаточно, чтобы учить вас создавать.
5. Следующие годы
Когда курс закончился, мы с отчимом начали вместе создавать разные программы.
Небольшие игры. Систему управления содержимым сайта. Несколько других проектов, которые ни к чему не привели — да и не должны были. Новые языки программирования мы осваивали сами — человек, который зажёг огонь, и мальчик, который его подхватил. Где-то в те годы расстояние между учителем и мальчиком стало сокращаться, пока мы не начали работать почти как равные: двое, которые вместе шли по стране без карты и передавали друг другу инструменты. Много лет спустя я окончил университет и стал работать программистом. Этим я обязан ему и компьютерной школе. Мне это всегда было ясно.
Художественная школа кончилась тем, что с плеч свалился груз: последние годы я досиживал у мольберта по привычке, в месте, где меня просто берегли. Эта часть кончается без груза на плечах. Ничто здесь не превратилось в то, от чего я ждал избавления. Огонь нашёл русло, русло продолжило его нести и несёт до сих пор. А само движение — не знать, проложить путь самому, дойти — оказалось не привязано к одному ремеслу. Эту книгу я пишу тем же движением: образца, по которому её писать, у меня нет, и путь к ней я прокладываю сам.
Обе школы вместе научили меня тому, чего я не понял бы, если бы прошёл только одну.
Может быть, вы когда-то сидели в комнате, где ваш огонь затих. Чувствовали, как любимое дело остывает, и вышли с убеждением, что этот холод говорит что-то о вас. Вот что я знаю: возможно, он говорит не о вас, а о комнате. В те самые месяцы, когда мой огонь гас у мольберта, тот же мальчик горел чисто и жарко в другом конце того же города — в комнате, которая питала его, а не истощала. Гореть я умел, а значит, холод у мольберта ничего не говорил обо мне. Приговор одной комнаты — ещё не приговор. Это всего лишь одна комната. Огонь, который вы считаете потерянным, может просто оставаться в темноте того места, где его оставили без пищи, и ждать места, умеющего его питать. Поэтому ищите другую комнату. Такие комнаты существуют. Мне повезло оказаться в одной почти случайно: в двенадцать лет меня записал туда человек, который отвечал за работу машин. Не каждому выпадает такая случайность. Но искать может каждый, и теперь вы знаете, что искать есть что.
Яснее показать освобождение, чем здесь, я не могу: правильный ответ в конце, учитель, который знал, когда убрать руку, и огонь, который нашлось кому питать.
В следующей комнате правильного ответа в конце не будет. Там настоящее искусство, а перед классом стоит учитель. На этот раз история будет не об образце, а о самом учителе: о самом важном, что учитель может дать ученику помимо любой техники, и о том, что происходит с тем же учеником в том же искусстве, когда этого дара в комнате нет. И то и другое я узнал в одном искусстве от двух человек. Об этом следующая часть.