В мире разработки программного обеспечения фраза «Готово. 20 строк» звучит как вызов, как достижение и как философия одновременно. Это не просто отчет о выполненной работе — это манифест лаконичности, доказательство того, что элегантность часто прячется в ограничениях.
Почему «20 строк» — это магия?
Число 20 — произвольно, но символично. Оно достаточно велико, чтобы реализовать нетривиальную логику (парсер, мини-сервер, генератор фракталов, нейросеть «на коленке»), но достаточно мало, чтобы поместиться на одном экране без прокрутки. Это когнитивный лимит: человек способен удержать в рабочей памяти и полностью осознать программу именно такого размера.
Преимущества радикальной краткости
- Читаемость: Весь контекст виден сразу. Не нужно прыгать между файлами, модулями и классами.
- Отсутствие багов: Меньше кода, меньше мест, где может скрыться ошибка. Статистика неумолима: плотность дефектов коррелирует с объемом кода.
- Скорость рефакторинга: Переписать 20 строк за 10 минут проще, чем рефакторить модуль на 2000 строк за неделю.
- Фокус на сути: Ограничение заставляет отсекать всё лишнее: абстракции ради абстракций, «на будущее», избыточное логирование и boilerplate.
Что можно уместить в 20 строк? (Примеры)
История программирования полна примеров, когда 20 строк меняли мир или просто приносили эстетическое удовольствие.
Веб-сервер на Python (стандартная библиотека)
# Python 3
from http.server import HTTPServer, SimpleHTTPRequestHandler
HTTPServer(('', 8000), SimpleHTTPRequestHandler).serve_forever Всего 2 строки. Остальные 18 можно потратить на кастомную маршрутизацию или WebSocket.
Рекурсивный обход директорий (Bash/One-liner стиль)
find . -type f -name "*.log" -exec grep -l "ERROR" {} ; | xargs rm -f Мощный админский инструмент в одну строку. Опасно, но эффективно.
Минимастический Ray Tracer (C/C++ — классика IOCCC)
Знаменитый Кейв Дудли (K. Dudley) уместил трассировщик лучей с отражениями, тенями и сферами в несколько десятков строк C. Это демонстрация: алгоритмы важнее фреймворков.
Нейросеть «на коленке» (NumPy)
import numpy as np
X, y = np.random.randn(100, 3), np.random.randint(0, 2, 100)
W = np.random.randn(3, 1)
for _ in range(1000):
pred = 1 / (1 + np.exp(-X @ W))
W += 0.1 * X.T @ (y.reshape(-1,1) ⎯ pred) * pred * (1 ─ pred) Прямой и обратный распространение градиента без PyTorch/TensorFlow. Чистая математика.
Психология «Готово»
Момент, когда разработчик пишет в коммит или в чат: «Готово. 20 строк» — это пик дофамина. Это победа над энтропией. В индустрии, где проекты тянутся годами, технический долг накапливается гигабайтами, а требования меняются еженедельно — способность закрыть задачу минимальным, понятным, работающим куском кода — это суперсила.
«Перfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.»
— Антуан де Сент-Экзюпери
Когда 20 строк, это плохо?
Справедливости ради, минимализм имеет темную сторону. «Готово. 20 строк» становится антипаттерном, если:
- Гольф-код (Code Golf): Код сжат до нечитаемости (однобуквенные переменные, трюки с приоритетом операторов, отсутствие пробелов) только для удовлетворения счетчика строк.
- Игнорирование edge-cases: Обработка ошибок, валидация входных данных, логирование, тесты — всё это «съедает» строки. Если 20 строк работают только в идеальном мире — это прототип, а не продакшн.
- Отсутствие документации: Если через месяц никто (включая автора) не поймет, как и зачем это работает, 20 строк обернутся часами дебаггинга.
- Преждевременная оптимизация: Сокрытие сложности в «умных» однострочниках, которые компилятор все равно развернет, а человек не прочитает.
Чек-лист: Являются ли ваши 20 строк хорошими?
- [ ] Есть ли обработка базовых ошибок (try/except, проверка nil/null)?
- [ ] Понятны ли имена переменных и функций без комментариев?
- [ ] Покрыто ли это тестами (хотя бы один интеграционный)?
- [ ] Соответствует ли это стилю кодовой базы (code style)?
- [ ] Может ли это прочитать джуниор-разработчик?
Практика: Как научиться писать «Готово. 20 строк»
Это навык, который тренируется. Не нужно специально урезать код до неработоспособности. Нужно учиться не писать лишнее с самого начала.
Принципы обучения лаконичности:
- Знайте стандартную библиотеку. 90% «велосипедов» пишутся из-за незнания
itertools,collections,stream API, LINQ и т.д. - Используйте декларативный стиль.
map,filter,reduce, list comprehensions, SQL-подобные запросы к коллекциям заменяют 10 строк цикловforна одну строку намерения. - Правило «Boy Scout Rule» (Правило бойскаута). Оставьте код чище, чем нашли. Рефакторьте во время написания, а не после.
- Удаляйте мертвый код безжалостно. Закомментированные блоки, неиспользуемые импорты, «на всякий случай» — всё в корзину. Git помнит историю.
- Пишите тесты сначала (TDD). Тест задает интерфейс. Реализация, проходящая тест, по определению достаточна. Часто она получается удивительно короткой.
Фраза «Готово. 20 строк» — это не про количество. Это про плотность смысла. Это про соотношение сигнал/шум. Это про уважение к времени коллег, которые будут это читать, и к своему будущему «я».
В следующий раз, когда вы завершите задачу, посмотрите на дифф (diff). Если вы удалили больше строк, чем добавили — вы на верном пути. Если решение поместилось на экране и читается как книга — вы мастер.