Всем новичкам советуют написать калькулятор. Тот самый проект, над которым интервьюеры ухмыляются, листая твоё портфолио, — закатывают глаза ещё до того, как открыли репозиторий. Я всё равно его написал. И где-то между делением на ноль и пользователем, который лупит по кнопке «равно», эта скромная сетка кнопок научила меня мыслить как инженер. Десять лет спустя, уже работая с облачной инфраструктурой, я опираюсь на этот урок каждый день.
Проект, который никто не уважает
Мой первый настоящий проект — калькулятор. JavaScript для логики. HTML для сетки кнопок. CSS Grid для вёрстки — тогда я взял его в руки впервые. Никаких фреймворков. Никаких библиотек. Никакого готового API, который сделал бы за меня всю грязную работу. Только я, DOM и столько console.log, сколько я ни за что не признаю на собеседовании.
Думал, управлюсь за день. Провозился всю неделю.
Где «простое» рассыпается
Математика оказалась самой лёгкой частью. Сложить, вычесть, умножить, разделить — по паре строк. Счастливый путь заработал за вечер, и я почувствовал себя гением. А потом начал по-настоящему им пользоваться.
Нажал «равно» дважды — получил полную чушь. Соединил три операции подряд — на экране появилось что-то, что даже не число. Кто-то ввёл две точки подряд — и всё намертво зависло. А деление на ноль выкинуло такое, о чём до сих пор не хочется вспоминать.
Ничего из этого не было математикой. Всё это было инженерией.
State management ещё до того, как я узнал это слово
Словаря у меня тогда не было. Фразы «state management» я ни разу не слышал. Но именно в ней я и тонул. Калькулятор — это не задачка по математике, это крошечный конечный автомат. Какое число сейчас на экране? Какая операция ждёт своей очереди? Последнее нажатие завершило вычисление или продолжает его? Следующая цифра начинает новое число или дописывает старое?
Каждый баг был вопросом о состоянии:
- Что будет, если нажать «равно» дважды?
- А если соединить операции без «равно» между ними?
- А если поставить точку после уже поставленной точки?
- Какую самую тупую вещь может выкинуть пользователь — и переживёт ли это программа?
Последний вопрос перевернул моё мышление. Оно перестало быть «работает ли это?» и стало «какой самый худший ввод способен придумать человек — и выстоит ли программа?». Вот в этих зазорах между счастливыми путями и живёт настоящая инженерия.
От калькулятора к облачной инфраструктуре
А вот чего я не предвидел: каждый из этих навыков пошёл за мной следом.
Обработка событий. State management. Мышление про edge cases. И простая дисциплина — доводить до конца, а не бросать на восьмидесяти процентах. Всеми четырьмя я пользуюсь каждый день — теперь управляя облачной инфраструктурой такого масштаба, какой новичок во мне и вообразить не мог: сотни виртуалок, Terraform, CI/CD-пайплайны, Azure.
Контекст сменился. Инстинкт — нет. Ввод пользователя непредсказуем — будь то лишняя точка или кривой API-запрос. Состояние важно даже в маленьких системах — особенно в маленьких, потому что именно там ты убеждаешь себя, что оно неважно. И edge cases — это не досадные исключения из «настоящей» работы. Edge cases и есть настоящая работа.
Когда я сегодня ревьюю Terraform-модуль или проектирую пайплайн, первая мысль всё та же, что вбил в меня тот калькулятор: что это сломает? Не «как заставить работать» — заставить работать я всегда сумею. А как оно переживёт того, кто семь раз подряд жмёт «равно»?
Самый простой проект — самый глубокий урок
Все хотят построить следующую большую штуку. О калькуляторе не мечтает никто. Но амбиция сделать нечто впечатляющее и умение сделать нечто корректное — это две разные мышцы, и вторую качают именно на скучных проектах.
Заставить работать — легко. Заставить выжить под реальным пользователем — вот это инженерия. Калькулятор, который правильно считает 0.1 + 0.2, не виснет на двойной точке и выдаёт верный ответ, когда по «равно» лупят как попало, — тихо доказывает, что ты понимаешь больше многих.
Так что напиши калькулятор. Напиши без библиотек. Сломай его нарочно. Самый простой проект способен преподать самый глубокий урок — если ты ему позволишь.
А что самое простое ты когда-нибудь собирал — и чему оно научило тебя больше всего?