Антон Сергеевич поставил флешку на стол и сказал:
— Молодец, Климов. Серьёзная работа.
Денис кивнул и посмотрел в окно.
Вот и всё, что было. Кивок и взгляд в окно. Но Антон Сергеевич вёл кружок одиннадцать лет, и за одиннадцать лет он видел, как дети реагируют на похвалу за своё. Они краснеют. Или улыбаются так, что видны дёсны. Или начинают объяснять — торопливо, сбиваясь, потому что внутри всё ещё кипит. Денис не сделал ничего из этого.
Он просто кивнул. И посмотрел в окно.
На флешке был проект — система визуализации сортировочных алгоритмов с интерфейсом, которому позавидовал бы второкурсник приличного технического вуза. Чистый React, комментарии в коде на английском, анимации через requestAnimationFrame. Антон Сергеевич провёл в программировании двадцать два года, из них восемь — в коммерческой разработке, прежде чем ушёл в школу. Он знал, что это такое.
Денису было четырнадцать.
— Откуда ты это знаешь? — спросил Антон Сергеевич.
— Учил, — сказал Денис. — В интернете.
— React?
— Ну да.
Антон Сергеевич убрал флешку в ящик стола.
— Хорошо. На городской конкурс подаём в пятницу.
Денис снова кивнул и вышел.
Антон Сергеевич остался один в кабинете, где пахло старыми системными блоками и засохшим маркером. За окном была большая перемена, слышался топот в коридоре, чей-то визг. Он открыл ящик, достал флешку, повертел в руках.
Положил обратно.
За восемь лет в коммерческой разработке он участвовал в двух собеседованиях, где кандидаты приносили чужой код. Оба раза это было видно сразу — по тому, как они не могли объяснить ни одного своего решения. Как плавали в простых вопросах по собственному же проекту. Как смотрели в окно.
Он достал телефон и написал Денису в мессенджер: «Завтра останься после кружка, разберём твой проект подробнее».
Денис прочитал. Не ответил.
Ночью Антон Сергеевич открыл код с флешки на своём ноутбуке и просидел над ним полтора часа. Код был хорош. Структура — чистая, с умом, без лишнего. Комментарии были там, где нужно, и не было их там, где опытный человек обходится без них. Так не пишут по туториалам. Так пишут люди, которые уже набили много шишек и знают, где будет больно.
Антон Сергеевич закрыл ноутбук.
Его зарплата в школе была тридцать восемь тысяч рублей. Плюс надбавка за кружок — четыре двести. В коммерческой разработке он получал в четыре раза больше, но там было другое, о чём он не хотел сейчас думать. Городской конкурс давал школе баллы в рейтинге. Директриса Валентина Юрьевна ему об этом напомнила в сентябре, в октябре и в ноябре.
Утром он пришёл на кружок и провёл занятие про циклы. Денис сидел в третьем ряду и правильно отвечал на вопросы. Правильно, но без интереса — как отвечают на вопросы о том, что давно известно.
После кружка остались двое: Денис и Маша Горелова, которая вечно забывала флешку и переписывала задание в тетрадь от руки.
— Маша, завтра, — сказал Антон Сергеевич.
Маша обиженно собрала тетрадь и вышла, стуча табуреткой о ножку стола.
Они остались вдвоём. Денис сидел прямо, руки на коленях.
— Объясни мне вот это место, — Антон Сергеевич развернул ноутбук с открытым кодом. Экран — на Дениса.
Денис посмотрел. Молчал секунд десять.
— Это рендеринг, — сказал он наконец.
— Я вижу, что рендеринг. Почему здесь useCallback, а не просто функция внутри компонента?
Пауза была длинная. Антон Сергеевич считал про себя: раз, два, три, четыре, пять.
— Оптимизация, — сказал Денис.
— От чего?
— Ну... чтобы не пересоздавалась.
— Что не пересоздавалось?
Денис смотрел в экран. Антон Сергеевич видел, как двигается его кадык.
— Функция.
— Хорошо. А когда это важно, а когда нет?
Тишина.
Антон Сергеевич закрыл ноутбук.
— Денис.
— Что.
— Кто писал этот проект?
Денис молчал. Смотрел на закрытый ноутбук.
— Я помогал, — сказал он наконец.
— Кто писал?
— Папа.
Антон Сергеевич откинулся на спинку стула. За окном кабинета был школьный двор, голые ноябрьские тополя, железная горка с отколотой краской. Он смотрел на горку и думал о том, что правильно сделать сейчас — он знал. Он знал это совершенно точно. Снять проект с конкурса. Поговорить с родителями. Объяснить Денису, почему это неправильно — не занудно, а по-настоящему, так чтобы дошло.
— Папа — программист? — спросил он.
— Тимлид, — сказал Денис тихо. — В Яндексе.
Антон Сергеевич кивнул.
— Иди, — сказал он. — Завтра поговорим.
Денис встал, застегнул куртку — молча, ни слова — и вышел. Дверь закрылась без хлопка.
Антон Сергеевич сидел в пустом кабинете. Системный блок под столом гудел, как всегда гудел — ровно, без перебоев, уже три года в таком режиме. Он достал телефон и нашёл переписку с Валентиной Юрьевной. Последнее сообщение было от неё, в прошлую пятницу: «Антон Сергеевич, напомните — Климов точно участвует? Мне для отчёта».
Он набрал: «Валентина Юрьевна, по проекту Климова есть вопросы. Можем завтра поговорить?»
Она ответила через минуту: «Конечно. Всё в порядке с проектом?»
Он написал: «Разбираемся».
Отправил. Закрыл телефон.
Ночью он не спал до двух. Лежал и смотрел в потолок, где от фонаря с улицы ползла длинная светлая полоса. Думал о том, что Денис — умный мальчик. Это было видно. Он правильно отвечал на вопросах по циклам, по условиям, по функциям. Он понимал логику. Просто папа сделал красиво, а Денис не успел догнать красоту своим пониманием.
Думал о том, что конкурс — это баллы. Что баллы — это рейтинг. Что рейтинг — это финансирование, кабинет информатики, новые компьютеры взамен этих, которым по восемь лет.
Думал о том, как в две тысячи шестнадцатом году на собеседовании в одну хорошую компанию ему сказали: «Ваш тестовый проект сильный», — а он сам его и писал, без чужой помощи, три недели, по ночам после основной работы. И как это было важно — что сам.
В семь утра он встал, сварил кофе и написал Денису: «Приходи в восемь, до уроков».
Денис пришёл в восемь пятнадцать — явно не спал, под глазами синева.
Антон Сергеевич налил ему чай из термоса. Денис взял кружку обеими руками.
— Ты понимаешь, что это нечестно? — спросил Антон Сергеевич.
— Понимаю, — сказал Денис сразу, без паузы. Значит, думал об этом.
— Тогда зачем?
Денис смотрел в кружку.
— Папа сказал, что все так делают. Что это просто помощь. Что в реальной жизни всё равно командная работа.
— В реальной жизни — да. На конкурсе от твоего имени — нет.
Денис молчал.
— Что ты умеешь сам? — спросил Антон Сергеевич.
Денис поднял голову.
— Ну... циклы. Функции. На Python могу написать простое.
— Можешь написать что-нибудь своё за три недели? Что-то настоящее, по силам?
— До конкурса три недели?
— Да.
— Нет. Не успею сделать такое же.
— Не такое же. Своё.
Денис думал. Антон Сергеевич ждал, не торопил.
— Может, — сказал Денис наконец. — Я хотел сделать штуку, которая считает, сколько шагов до подъезда от метро по разным маршрутам. Я ходил и считал сам, просто интересно было.
Антон Сергеевич посмотрел на него.
— Ты ходил и считал шаги?
— Ну да. Глупость, наверное.
— Нет, — сказал Антон Сергеевич. — Не глупость.
Они помолчали. За окном двор начинал заполняться — первые ученики, ранние, с огромными рюкзаками.
— С папиным проектом мы на конкурс не идём, — сказал Антон Сергеевич. — Я скажу Валентине Юрьевне, что проект не готов.
— Она расстроится.
— Да.
— Вы из-за меня проблемы получите.
— Это мои проблемы, — сказал Антон Сергеевич. — А твои — вот: три недели. Пишешь про шаги и маршруты. Всё сам. Я помогаю только когда совсем не знаешь как, и каждый раз объясняю почему так, а не иначе. Идёт?
Денис смотрел на него.
— А если не успею?
— Тогда не идём на конкурс. Но напишешь своё.
Разговор с Валентиной Юрьевной случился в тот же день, после третьего урока. Он пришёл к ней сам, в кабинет с фикусом и грамотами в рамках. Она сидела за столом и смотрела поверх очков.
— Проект Климова снимаем, — сказал Антон Сергеевич. — Он не готов.
— Как не готов? Вы же сказали — сильная работа.
— Я ошибся.
Она смотрела на него долго. Потом сняла очки, протёрла стёкла платком. Надела.
— Антон Сергеевич. Это единственный проект на конкурс от школы в этом году.
— Я понимаю.
— Рейтинг. Финансирование.
— Я понимаю.
— Может быть, доработать? Ещё неделя есть.
— Нет.
Она смотрела на него. Он не отводил взгляда — не из упрямства, а потому что устал отводить. Это он понял прямо сейчас, в её кабинете, с фикусом и грамотами: устал отводить взгляд. Восемь лет назад в коммерческой разработке он отводил взгляд, когда надо было говорить вслух неудобное. Ушёл в школу — думал, здесь по-другому. Здесь было то же самое, просто за другие деньги.
— Хорошо, — сказала Валентина Юрьевна. — Ваше решение.
Три недели Денис приходил на кружок раньше всех и оставался позже всех. Антон Сергеевич смотрел, как он пишет, — медленно, с ошибками, иногда всё удалял и начинал снова. Один раз сказал: «Не получается». Антон Сергеевич не стал говорить, что получится. Сел рядом и спросил: «Где конкретно?»
За день до дедлайна Денис прислал файл.
Это была простая программа. Никакого React, никаких анимаций. Консоль, ввод адреса, вывод таблицы с маршрутами и шагами. Данные Денис собирал сам — ходил, считал, записывал в таблицу. Комментарии в коде были смешные: «# здесь я сначала сделал по-другому но так лучше» и «# это работает не знаю почему но работает, разобраться».
Антон Сергеевич сидел над этим кодом и думал о чём-то, чему не было точного названия.
Они не пошли на городской конкурс.
В декабре Валентина Юрьевна при случае сказала ему в коридоре: «Жаль, конечно». Он кивнул.
В феврале Денис записался на онлайн-курс по Python и показал Антону Сергеевичу сертификат за первый модуль. Антон Сергеевич сказал: «Хорошо». Денис ушёл — и на этот раз у него было другое лицо. Не то, что было в ноябре у окна.
На флешке с папиным проектом было написано маркером «Денис К.» и дата: октябрь.
Антон Сергеевич достал флешку, подержал и выбросил в мусорную корзину под столом.
Системный блок гудел ровно.
За окном стоял февраль, серый и долгий, но снег уже начинал таять с краёв дорожки вдоль школьного забора — чуть-чуть, почти незаметно, совсем немного.