Короткий ответ: одного «самого сильного» программиста не существует. Длинный ответ: сила зависит от метрики. Одни меняют науку, другие двигают индустрию, третьи делают так, что миллиарды устройств просто работают.
О чём вообще говорить, когда говорим «сильный»? Про скорость доставки фич, про качество и надёжность, про уровень сложности задач, про вклад в инструменты и стандарты, про влияние на команды и экосистемы. Это разные плоскости, и в каждой есть свои чемпионы.
Если мерить по делу, пригодны приземлённые показатели: время цикла от идеи до продакшена, дефекты на тысячу строк кода, среднее время поиска и исправления инцидента, процент откатанных релизов без боли, влияние на других через ревью, документацию и менторство. Microsoft Research предлагает рамку SPACE: не путать активность с результатом и учитывать командный контекст.
Факт, который многих отрезвляет: ещё в 1968 году исследование Sackman-Erikson-Grant показало кратные различия между разработчиками по времени и качеству. Разброс был не на проценты, а на порядки. То же показали и более поздние наблюдения в индустрии: талант и опыт важны, но среда, инструменты и процессы дают львиную долю «икса».
Теперь к именам. Алгоритмы и теория: Дональд Кнут систематизировал анализ алгоритмов и создал TeX. Системы и ядра: Кен Томпсон и Деннис Ритчи сделали Unix и C; Линус Торвальдс - Linux и Git. Масштабные платформы: Джефф Дин и Санжей Гемават спроектировали MapReduce и Bigtable, определив архитектуру крупных дата-платформ на годы. Игровые движки и математика производительности: Джон Кармак и легендарный fast inverse sqrt из Quake. Криптография и безопасность: Дэн Бернстайн (NaCl, Curve25519). Базы данных в каждом телефоне: Ричард Хипп и SQLite, где огромная часть кода - его рук. Инженерия надёжности: Маргарет Гамильтон и софт для Apollo, где цена ошибки - человеческие жизни.
Разные люди, разные задачи, общий признак силы - устойчивые результаты на сложных масштабах. В одном случае это миллион строк кода, который живёт десятилетиями. В другом - одна идея, которая меняет подходы у тысяч команд.
Хочется практики? Начните мерить своё: время цикла задач, долю багов, скорость код-ревью, сколько незавершённой работы висит неделями, сколько часов в неделю реально уходит на глубокую работу без чатов. Эти числа быстро показывают узкие места.
Дальше - прокачка по осям. Системное мышление: напишите простой key-value storage на диске, чтобы почувствовать буферы, fsync и форматы страниц. Алгоритмы: решайте задачи не ради чекбокса, а ради выбора правильных структур данных в проде. Надёжность: ведите журнал постмортемов и превращайте каждый инцидент в одну правку процесса или инструмента.
И ещё один рычаг силы, о котором часто забывают: умение умножать других. Хороший дизайн-док экономит сотни часов команды. Чёткое API с примером снимает десятки вопросов. Быстрое, доброжелательное ревью поднимает планку качества без микроменеджмента.
- Что значит «сильный программист»
- Как мерить силу: метрики и ошибки
- Кейсы и имена, что задали планку
- Как стать сильнее: практичные шаги
Что значит «сильный программист»
Запрос на «самый сильный программист» рождает спор, потому что сила в коде - это не про количество строк и не про редкие трюки. Это про устойчивые результаты при реальных ограничениях: сроки, неопределённость, деньги, масштаб и ответственность за прод.
Проще разложить «силу» на понятные оси. Тогда исчезают мифы и остаются измеримые вещи, которые можно развивать.
- Результаты, а не активность. Доводит фичи до продакшена, держит низкий процент откатов, улучшает задержки и стоимость владения.
- Сложность под контролем. Умеет резать задачу на части, выделять инварианты, выбирать структуры данных и протоколы, которые реально упрощают жизнь.
- Масштаб и надёжность. Проектирует границы, учитывает отказоустойчивость, деградации, backpressure, идемпотентность, миграции данных.
- Инженерная гигиена. Пишет тесты там, где важна цена ошибки, настраивает наблюдаемость (логирование, метрики, трейсинг), автоматизирует рутину в CI/CD.
- Умножение команды. Делает понятные дизайн-доки, проводит ревью с смыслом, менторит. Снижает bus factor и ускоряет всех вокруг.
Как это мерить без самообмана? В 2021 Google представил рамку SPACE (Storey, Maddila, Zimmermann, Forsgren): оценивать не одну цифру, а комбинацию - удовлетворённость, производительность, активность, коммуникации и эффективность. Это защищает от «псевдометрик» вроде линий кода или числа коммитов в день.
На уровне команд лучше всего работают DORA-метрики. Это не индивидуальные KPI, но сильный инженер заметно тянет их вверх: дробит изменения, ускоряет пайплайн, снижает риск релизов.
Метрика | Короткое объяснение | Бенчмарк элиты | Источник |
---|---|---|---|
Частота деплоев | Как часто выкатываются изменения в прод | Несколько раз в день | DORA, State of DevOps 2021-2022 |
Lead Time for Changes | Время от коммита до продакшена | < 1 дня | DORA, State of DevOps 2021-2022 |
Change Failure Rate | Доля релизов с инцидентами | 0-15% | DORA, State of DevOps 2021-2022 |
MTTR | Среднее время восстановления после инцидента | < 1 часа | DORA, State of DevOps 2021-2022 |
Что делает инженер, который реально влияет на эти цифры? Он двигает архитектуру к маленьким, обратимым изменениям: фичефлаги, канареечные релизы, автотесты на критичный путь, алерты по SLO, runbook для типовых аварий, инструментирует код, чтобы находить узкие места не «на пальцах», а по трейсам и метрикам.
Есть и жёсткие факты про разброс уровня. Классическое исследование Sackman-Erikson-Grant (1968) показало кратные различия продуктивности между программистами - не проценты, а порядки (десятки раз по времени и числу ошибок). Это не магия «таланта»: среда, хорошие инструменты, короткая обратная связь и понятные процессы сильно уменьшают разброс.
Если хотите быстро прикинуть свой профиль, пройдитесь по чек-листу:
- Ваши изменения обычно небольшие (до ~200-400 строк в PR) и проходят ревью < 24 часов?
- У критичных частей кода есть тесты, которые ловят регресс за минуты, а не за дни?
- На каждый сервис есть понятный откат/фича-флаг, и вы уже делали rollback без паники?
- Вы держите цикл «идея → прод» для типовой задачи в пределах 1-3 дней?
- В постмортемах после инцидента вы меняете процесс или автоматизацию, а не только «чините баг»?
- Ваши дизайн-доки экономят чужое время: по ним можно реализовать фичу без вашей постоянной подсказки?
Если на большинство пунктов ответ «да» - вы действуете как сильный инженер. Не потому что «кодите быстрее», а потому что делаете систему предсказуемой, обратимой и обучающей команду работать лучше.
Как мерить силу: метрики и ошибки
Одной метрикой силу не померяешь. Когда спорим, кто самый сильный программист, разговор быстро упирается в систему измерения. В работе лучше держать набор показателей: скорость поставки, надёжность, качество, влияние на команду. Это не соревнование по строкам кода, а многофакторная история.
Самый проверенный каркас для командных метрик - DORA. Его описали в книге Accelerate (Николь Форсгрен, Джез Хамбл, Джин Ким) и в ежегодных State of DevOps Reports. Там фокус на четырёх показателях потока изменений: частота деплоев, время от коммита до продакшена, доля неудачных изменений и время восстановления после инцидента. В отчёте DORA 2021 «элитные» команды деплоят несколько раз в день, выводят изменения за день и чинят инциденты обычно быстрее часа; доля неудачных изменений - в районе 0-15%.
Метрика (DORA) | Что меряет | Как посчитать | Бенчмарк «элиты» | Источник |
---|---|---|---|---|
Deployment Frequency | Как часто выкатываем | Количество успешных прод-деплоев за период | Несколько раз в день / по требованию | DORA 2021 |
Lead Time for Changes | Скорость поставки | Время от PR/коммита до продакшена | Менее 1 дня (часто < 1 часа) | DORA 2021 |
Change Fail Rate | Стабильность релизов | % деплоев, вызвавших инцидент/откат | 0-15% | DORA 2021 |
Time to Restore | Скорость восстановления | Время от инцидента до нормальной работы | < 1 часа | DORA 2021 |
Для продуктивности разработчиков в целом удобно смотреть через SPACE (Forsgren, Storey, Maddila и др., 2021): Удовлетворённость, Результативность, Активность, Коммуникация, Эффективность/поток. Идея простая: активность (коммиты, часы) не равна результату. Балансируйте жёсткие цифры (время цикла) и «мягкие» сигналы (опросы, ощущение потока, качество отзывов на ревью).
Поставьте метрики на трёх уровнях - личный, командный, продукт/система:
- Личный: время до первого отклика на PR, глубина ревью (осмысленные комментарии, не «nit»), коэффициент «перекрытия знаний» (сколько людей может поддержать модуль).
- Командный: полный цикл задачи (coding → PR → review → deploy) с распадом по этапам, среднее и P90; доля задач, зависших > 5 дней; незавершёнка (WIP).
- Система: доступность по SLO, расход бюджета ошибок, MTTR по инцидентам, скорость обратного развёртывания.
Как аккуратно посчитать ключевые вещи без боли:
- Опишите поток ценности: от идеи до пользователя. Отметьте точки времени: «создана задача», «открыт PR», «первый отзыв», «merge», «в проде».
- Соберите события из GitHub/GitLab/Bitbucket и CI/CD. Готовое: Google Four Keys (open-source) строит DORA-дашборд за пару часов.
- Для lead time берите метку PR opened → момент деплоя в прод. Считайте медиану и P90 по неделям, сегментируйте по сервисам.
- Time to first review - целевое SLO 4 рабочих часа. Если не укладываетесь, вводите «дежурного ревьюера» и правило «меньше 300 строк на PR».
- Change fail rate - любой деплой, вызвавший инцидент S1-S2, откат, hotfix. Правило одно для всех сервисов.
- MTTR - время от создания инцидента до закрытия. Пишите короткий постмортем и одну процессную правку на каждый высокий инцидент.
На что не смотреть (или смотреть осторожно):
- Строки кода, количество коммитов, «скорость» в стори-поинтах. Это поддаётся накрутке и плохо коррелирует с ценностью. Закон Гудхарта: как только метрика становится целью, она перестаёт быть хорошей метрикой.
- Процент покрытия тестами. Полезно как сигнал, но 90% пустых тестов - хуже, чем 60% умных.
- Среднее без распределения. Смотрите медиану и крайние перцентили (P90/P95), иначе скрываете хвосты проблем.
Из фактов, которые остужают мифы: эксперимент Sackman-Erikson-Grant (1968) фиксировал разброс производительности разработчиков до 28 раз по времени и заметные различия по числу ошибок при решении одних и тех же задач. Вывод практичный: варьируется не только талант, но и контекст. Улучшая инструменты и процесс, вы поднимаете планку для всех.
Хорошая практика - держать «набор приборов» и не смешивать назначения:
- Поток: DORA + цикл задачи (медиана, P90), WIP, очереди на ревью.
- Качество: дефекты на 1kLOC/изменение, доля регрессий, флейки в CI, время стабилизации ветки.
- Коммуникация: время до первого ответа в PR/issue, доля PR без описания, процент дизайндоков, одобренных без правок - это тревожный знак.
- Люди: квартальные опросы по шкале Лайкерта (поток, смысл, инструменты). Низкая удовлетворённость часто предсказывает падение скорости через 1-2 спринта.
Как не наломать дров при внедрении метрик:
- Декларируйте цель: улучшение системы, а не рейтинг людей. Персональные «топы» разрушают доверие и портят данные.
- Прозрачность: метки, формулы, источники данных открыты. Каждый может воспроизвести график.
- Сравнивайте команду с ней самой, не между разными доменами. Бэкенд с регуляторными аудитами не равен SPA.
- Выбирайте 3-5 метрик на квартал. Остальное - фоновые графики.
- Каждую неделю 15 минут: что ухудшилось, почему, какую одну правку пробуем (лимит WIP, шаблон PR, автотест на регрессию).
Мини-гайд по сокращению цикла поставки на 20-30% за месяц:
- Мелкие PR: цель - до 300 строк. Крупные разбивайте заранее.
- Авто-мердж после зелёного CI и двух ревью - экономит часы простаивания.
- Обязательные предпросмотры/стенды на PR - меньше сюрпризов в проде.
- Фича-флаги - выкатываем чаще, рискуем меньше.
- Слоты ревью в календаре - два окна в день, чтобы не растягивать отклик.
Главная мысль: меряйте поток ценности и стабильность, а не активность. Держите баланс DORA и SPACE, считайте перцентили, избегайте метрик, которые легко накрутить, и используйте данные, чтобы убирать узкие места, а не искать виноватых.

Кейсы и имена, что задали планку
Честно говоря, у ярлыка «самый сильный программист» нет одного лица. Но есть люди и кейсы, по которым удобно сверять компас: что такое уровень, который двигает отрасль вперёд, и как к нему приближаться.
Дональд Кнут. В 1968 вышел первый том The Art of Computer Programming; проект жив до сих пор. В 1977-1982 он создал TeX и METAFONT и ввёл «литературное программирование» (WEB), где код и текст живут вместе. Сильная сторона - системность: формальные методы, доказуемость, культура точности.
- Что взять: писать дизайн-заметки до кода, считать асимптотику не «для собеседований», а чтобы выбирать структуры данных в проде. Держать репозитории с примерами, как у Кнута - код как учебник.
Кен Томпсон и Деннис Ритчи. Unix родился в Bell Labs в 1969-1972, язык C - в 1972. Thompson сделал утилиту grep (1973). Они получили премию Тьюринга в 1983. Их вклад - минимализм интерфейсов и переносимость.
- Что взять: строить «малые, хорошо сочетающиеся» компоненты. API проще - системы надёжнее. Делайте инструменты, которые легко скриптовать и комбинировать.
Линус Торвальдс. Linux стартовал в 1991 как хобби-проект. Сейчас это ядро Android и основа большинства облаков. В 2005 Линус запустил Git - систему контроля версий под высокие нагрузки ядра. Вклад - процесс разработки и масштабное ревью.
- Что взять: короткие ветки, быстрые ревью, чёткие правила коммитов. Дизайн-доки до кода, «Maintainers» как институция, а не герой-одиночка.
Джефф Дин и Санжей Гемават. MapReduce (OSDI 2004) и Bigtable (OSDI 2006) стали матрицей для Hadoop, HBase и всего лагеря больших данных; позже они сделали LevelDB (2011). Их стиль - простые абстракции поверх тысяч машин.
- Что взять: сначала протокол и инварианты, потом оптимизации. Пишите документ с чёткими «что гарантируем/чего не гарантируем». Тестируйте деградации и backpressure, а не только happy-path.
Джон Кармак. Doom (1993), Quake (1996), открытые исходники Quake III (1999), где прославилась fast inverse square root (тот самый 0x5f3759df). Его сильная сторона - «профилировать, пока не станет ясно», плюс простые данные вместо сложных объектов в горячих циклах.
- Что взять: сначала профайлер, потом идеи. Циклы - плоские, данные - плотные. Уметь выкидывать красоту ради FPS и задержки.
Дэниел Дж. Бернстайн (DJB). Кривая Curve25519 (публикация 2006) стала базой для современного ECDH; NaCl (2008) задала стиль «криптография по умолчанию: безопасно и просто». Акцент - безопасные примитивы без остроконечных API.
- Что взять: опасные ручки - за флагами. Стандартизировать безопасные настройки по умолчанию. Короткие, проверяемые API.
Ричард Хипп. SQLite запущен в 2000. Она встроена в iOS и Android, лежит в Chrome, Firefox, Safari. База - это один файл, библиотека - встраиваемая. Вклад - надёжность и простота деплоя на миллиард устройств.
- Что взять: меньше инфраструктуры - меньше точек отказа. Файловые форматы с жёсткой обратной совместимостью и чёткой спецификацией.
Маргарет Гамильтон. Руководила разработкой ПО для Apollo в MIT Instrumentation Lab. 20 июля 1969 её система приоритизации задач выдержала 1201/1202 alarms во время посадки Apollo 11 - задачи низкого приоритета были сброшены, полёт продолжился.
- Что взять: проектировать деградацию и приоритеты до того, как случится инцидент. Безжалостно тренировать команды на фейлах, писать постмортемы.
Гвидо ван Россум. Python появился в 1991; со временем вырос в дефолт «клеевой» язык для науки, DevOps и обучения. Урок - читаемость, простые стандарты (PEP 8, PEP 20) и стабильная эволюция (PEP-процесс).
- Что взять: стиль-гайды, PEP-подобный процесс принятия решений, культура «readability counts» как часть ревью.
Имя | Ключевые работы (год) | Область | Почему это важно |
---|---|---|---|
Дональд Кнут | TAOCP (1968-), TeX (1977-1982) | Алгоритмы, инструменты | Стандарты точности и научная база для практики |
К. Томпсон, Д. Ритчи | Unix (1969-1972), C (1972), grep (1973) | ОС и языки | Минимализм интерфейсов, переносимость, Turing Award 1983 |
Линус Торвальдс | Linux (1991-), Git (2005) | Ядро, VCS | Процессы и масштаб open source; ядро Android |
Джефф Дин, С. Гемават | MapReduce (2004), Bigtable (2006), LevelDB (2011) | Распределённые системы | Шаблоны для больших данных, простые абстракции |
Джон Кармак | Doom (1993), Quake (1996), Quake III (1999) | Графика, оптимизация | Практичная математика и работа с горячими путями |
Д. Дж. Бернстайн | Curve25519 (2006), NaCl (2008) | Криптография | Безопасные по умолчанию примитивы и API |
Ричард Хипп | SQLite (2000-) | Базы данных | Самая распространённая встраиваемая БД; iOS/Android/браузеры |
Маргарет Гамильтон | Apollo Guidance Software (1960-е) | Надёжность | Приоритизация задач спасла посадку Apollo 11 (1201/1202) |
Гвидо ван Россум | Python (1991-) | Языки | Читаемость и быстрая разработка; PEP-процесс |
Как применить это в своей работе:
- Перед фичей - короткий дизайн-док: цель, инварианты, «что не делаем». Это дисциплина Кнута и Дина.
- Режьте системы на маленькие, сочетаемые части. Мысленно спрашивайте: «Как это вызовется из shell?» - урок Unix.
- Стандартизируйте процесс ревью и релизов. Уберите долгоживущие ветки - опыт Git и Linux.
- Меряйте горячие пути профайлером, а не ощущениями. Подход Кармака окупается быстрее, чем кажется.
- Ставьте безопасные по умолчанию конфиги и простые крипто-API. Идеи DJB спасают от классов багов.
- Выбирайте простые форматы и развёртывание «без сервера», если можно. SQLite напоминает: меньше инфраструктуры - меньше падений.
- Заранее проектируйте дедградацию и приоритеты. Аппарат Гамильтон - не только для космоса, он нужен любому продакшену.
Как стать сильнее: практичные шаги
Гонка за титул «самый сильный программист» не про героизм, а про систему. Сила растёт, когда у тебя есть метрики, ритуалы, практики и среда, которая не мешает работать глубоко.
Начнём с фактов. DORA-исследования (команда Google/DevOps Research) много лет показывают: «элитные» команды выпускают изменения несколько раз в день, ведут фичу до продакшена меньше чем за сутки, держат долю неудачных релизов в диапазоне 0-15% и восстанавливаются после инцидента в течение часа. Ещё один исторический факт: в исследовании Sackman-Erikson-Grant (1968) разброс продуктивности между отдельными разработчиками доходил до 28× по времени. Вывод простой - меряй и улучшай то, что контролируешь.
1) Меряй то, что улучшаешь
Выбери 5-7 метрик и собирай их автоматически. Без таблиц вручную и героизма по пятницам. Эти числа быстро покажут, где тормозит поток работы.
Метрика | Что это | Как считать | Ориентир |
---|---|---|---|
Deployment Frequency | Как часто выкатываешь | Кол-во прод-релизов за день/неделю | Несколько раз в день (DORA) |
Lead Time for Changes | От коммита до прод | Среднее по PR/пайплайну CI/CD | < 1 суток (DORA) |
Change Failure Rate | Доля релизов с инцидентом | Инциденты / релизы | 0-15% (DORA) |
MTTR | Среднее время восстановления | От алерта до полной нормализации | < 1 часа (DORA) |
PR First Response | Ожидание первого ревью | Медиана по PR | ≤ 24 часов (практика) |
Cycle Time | От старта задачи до прод | Issue tracker + релизы | 1-5 дней (практика) |
Escaped Defects | Критичные баги в проде | Sev1-Sev2 на релиз | Близко к 0 (практика) |
Подойдёт простая связка: Git + CI/CD метрики + баг-трекер + дашборд (Grafana/Looker/Datadog). Не смешивай активность (коммиты/строки) с результатом (время, дефекты, стабильность). SPACE-рамка от Microsoft Research напоминает: учитывай не только «скорость», но и удовлетворённость, коммуникацию и координацию.
2) Еженедельные ритуалы, которые тянут вверх
- План на неделю: 3 итоговых результата, не задачи. Каждому - дедлайн и критерий готовности.
- Два блока глубокой работы по 90 минут в день без чатов и звонков. Телефон - в режим полёта.
- Мини-ретро в пятницу: что замедлило? что повторить? какую одну вещь уберём/автоматизируем на следующей неделе?
3) Системное мышление: делай и измеряй
- Собери свой k/v storage с append-only логом. Замерь задержку fsync на твоём диске (обычно миллисекунды до десятков миллисекунд) и посмотри, как она ломает «на глаз» быстрый код.
- Потренируйся в профилировании: Linux perf + FlameGraph (методику популяризировал Brendan Gregg), для Go - pprof, для Python - scalene/py-spy, для Node - clinic.js. Сначала измеряй, потом оптимизируй.
- Разберись в системных вызовах: strace покажет, за что реально платишь. Часто «медленно» - это лишние syscalls и аллокации.
4) Алгоритмы и структуры - прикладной режим
Цель не «решить 1000 задач», а научиться выбирать правильную структуру данных в проде.
- Раз в неделю «боевой» разбор: возьми один свой сервис и подумай, где пригодятся очередь с приоритетом, Bloom filter или LRU-кэш.
- Основа теории - хватит 1-2 главы в неделю из CLRS (4-е издание, 2022), но с короткой реализацией и микробенчмарком.
- Память важнее CPU. Проверь, как меняется латентность при переходе с массивов на списки и наоборот, когда данные перестают влезать в кеш.
5) Надёжность как привычка
- SLO/SLI и error budget (подход из Google SRE): сформулируй целевой уровень доступности и латентности. Если бюджет сгорел - заморозь фичи, чини стабильность.
- Постмортемы без поиска виноватых: один факт - одна коррекция процесса/инструмента. Хранить в общей базе, возвращаться через месяц.
- Учись находить регрессии быстро: git bisect даёт бинарный поиск по истории коммитов - O(log n) проверок вместо «угадайки».
6) Производительность без магии
- Сначала профилируй 5 минут, только потом меняй код. 80% времени часто уходит в 20% горячих мест.
- Главное - латентность P95/P99. Смотри гистограммы, не среднее значение. Алгоритм «быстр в среднем» может убивать хвосты.
- Кэшируй дорогое, но ставь TTL и лимиты. Проверь hit ratio и влияние на память.
7) Умножай влияние: документы, API, ревью
- Дизайн-док до кода: цель, альтернативы, риски, SLO, план отката. 2-3 страницы хватает, если мысль ясная.
- Чек-лист ревью: границы и инварианты, ошибки и исключения, тесты, наблюдаемость (логи/метрики/трейсы), деградация под нагрузкой.
- Документация к API: минимум - 3 рабочих примера и раздел «подводные камни». Это сэкономит десятки вопросов.
8) Инструменты и среда
- Автоматизируй рутину: pre-commit хуки (линтеры, форматтер, секрет-скан), шаблоны PR/issue, генерация CHANGELOG.
- Санитайзеры и фаззинг: ASan/UBSan/TSan, libFuzzer/AFL находят классы ошибок, которые сложно поймать тестами. QuickCheck/Property-based тесты (идея 2000 года, Claessen & Hughes) покрывают инварианты.
- Сборка и кэш: ccache/sccache, инкрементальные билды, локальный зеркальный кеш зависимостей.
9) Учебный цикл на квартал
- 1 большой проект «вглубь» (4-6 недель): написать сервис с нуля с наблюдаемостью и нагрузочным тестом.
- 3 технологических демо (по 1 неделе): новая БД, другой брокер, новый профайлер.
- 12 коротких заметок: конспекты по одной главе книги/доклада в неделю. Делись с командой - это закрепляет знания.
Чтобы всё это поехало, начни с малого: выбери две метрики, один ритуал и один учебный слот в неделю. Через месяц добавь ещё. Сила растёт из стабильных привычек, а не из редких рывков.
Написать комментарий