Строки кода как мера сложности ПО и работы программиста

Количество строк кода — одна из самых понятных метрик размера программного обеспечения. По ней можно примерно представить масштаб системы: несколько тысяч строк — небольшой проект, миллионы — крупное приложение, десятки и сотни миллионов — огромная программная платформа. Поэтому строки кода исторически использовались и как ориентир при оценке объёма разработки.

Для программиста строки кода также являются своеобразной физической мерой результата работы. Однако с появлением AI IDE и генеративного ИИ значение этой метрики меняется: машина способна создавать тысячи строк за считанные минуты, тогда как ценность работы всё больше определяется не объёмом написанного кода, а качеством архитектуры и решаемой задачи.

Понятная метрика

Строки исходного кода (Lines of Code, LOC) — простой способ оценить размер программного проекта. Метрика показывает, сколько строк занимает исходный код системы, хотя конкретный способ подсчёта может различаться.

Она удобна прежде всего своей наглядностью. Можно сравнить проекты, оценить масштаб репозитория или посмотреть, насколько выросла система после нескольких лет разработки. Для руководителя ИТ это также даёт первое представление о потенциальном масштабе сопровождения.

Миллион строк кода — это не миллион единиц функциональности. Одна и та же задача может быть реализована разным количеством строк в зависимости от языка, архитектуры и стиля программирования.

Поэтому LOC лучше рассматривать как индикатор размера, а не точную меру сложности. Две программы одинакового размера могут радикально различаться по архитектуре, производительности, надёжности и бизнес-ценности.

Хотя можно было бы и по символам

Технически размер программы можно измерять не только строками, но и количеством символов, байтов, токенов или операторов. Такой подход иногда оказывается даже точнее, если разработчики используют сильно различающийся стиль форматирования.

Например, одна строка может содержать всего несколько символов, а другая — сотни. Поэтому 1000 строк одного проекта и 1000 строк другого совсем не обязательно представляют одинаковый объём работы.

Сколько строк кода в известных решениях

Чтобы почувствовать масштаб современных программных продуктов, полезно сравнить их по количеству строк исходного кода. Цифры ниже являются оценками, а не универсальными официальными показателями: разные источники считают разные версии, компоненты и типы кода.

Программное обеспечение

Для SAP Business Suite встречается оценка около 400 млн строк кода, тогда как для отдельных крупных компонентов SAP приводятся и другие показатели. Для сравнения, в распространённых оценках для 1С фигурирует около 10 млн строк. Исторические данные по Windows 10 также часто оценивают его кодовую базу более чем в 60 млн строк.

Решение Оценочное количество строк кода
SAP Business Suite около 400 млн
около 10 млн
Windows 10 более 60 млн
Windows 11 примерно 60–100 млн
Linux 4.11.7 около 20 млн
Android около 12 млн

Для Windows 11 официального количества строк Microsoft не публиковала. Встречаются оценки порядка 60–100 млн строк, но их следует воспринимать именно как приблизительные: состав Windows постоянно меняется, а разные методы подсчёта дают разные результаты.

Для Linux ситуация немного другая: это открытый проект, поэтому его исходный код можно непосредственно анализировать. Например, для ядра Linux 4.11.7 приводилась оценка около 20 млн строк. Android в подобных сравнениях часто оценивается примерно в 12 млн строк. Эти цифры относятся к конкретным версиям и составам исходного кода, поэтому напрямую сравнивать их с целыми коммерческими платформами нужно осторожно.

Программист пишет не «500 строк в день» как универсальную норму. Производительность сильно зависит от языка, сложности задачи, архитектуры, тестирования и количества уже существующего кода. При этом десятки, сотни и тысячи строк, генерируемых low-code-платформами, обычно не имеет смысла напрямую сравнивать с ручным программированием.

СУБД

Количество строк исходного кода хорошо показывает масштаб СУБД. Небольшие и относительно компактные решения могут содержать сотни тысяч строк, тогда как крупные промышленные СУБД — миллионы и десятки миллионов. При этом строки включают не только реализацию SQL, но и механизмы хранения данных, индексы, транзакции, оптимизатор запросов, репликацию, отказоустойчивость, безопасность, сетевые протоколы и множество других подсистем.

СУБД Язык Количество строк кода
Oracle C 35–40 млн
Digital Q.DataBase 4,6 млн
MySQL C/C++ 2,4 млн
PostgreSQL C 2,1 млн
MongoDB C++ более 2 млн
ClickHouse C++ 1,5 млн
SQLite C 145 тыс.

Для сравнения, кодовая база Oracle значительно больше остальных СУБД в списке. При этом отдельные подсистемы Oracle сами по себе сопоставимы по размеру со всей кодовой базой PostgreSQL: RAC насчитывает около 1,6 млн строк, а In-Memory — почти 2 млн.

В Digital Q.DataBase — около 4,6 млн строк исходного кода, что более чем вдвое превышает приведённую оценку для PostgreSQL и примерно втрое — для ClickHouse.

Игры

Для игр оценки менее точны. Для GTA V встречается оценка около 36 млн строк кода, хотя в разных источниках можно встретить значительно более высокие значения. Для Minecraft оценки Java Edition находятся примерно от нескольких сотен тысяч до нескольких миллионов строк в зависимости от версии и того, что именно считать.

Решение Оценочное количество строк кода
Grand Theft Auto V около 36 млн*
Minecraft сотни тысяч — несколько миллионов
The Sims несколько миллионов

Известный пример Minecraft особенно хорошо показывает проблему метрики. На экране игры иногда появлялась надпись «4815162342 lines of code», но это не реальное количество строк: это отсылка к числам из сериала Lost. Реальные оценки значительно меньше.

По The Sims также нельзя назвать одну достоверную цифру для всей серии. Игры постоянно развивались, менялись движки, добавлялись новые функции и компоненты. Показательно, что разработчики отмечали ситуации, когда для оптимизации отдельных участков приходилось бы переписывать сотни тысяч строк существующего кода.

Если условно принять производительность программиста за несколько сотен строк в день, становится понятно, почему крупные программные системы создаются командами годами. Но это сравнение условно: создать строку кода и создать работающую, протестированную и поддерживаемую функциональность — совершенно разные задачи.

Проблемы метрики

Главная проблема LOC заключается в том, что строка кода не является стандартной единицей сложности. Одна строка может содержать простое присваивание, а может реализовывать сложную логику. Кроме того, один и тот же алгоритм можно записать компактно или развернуть на множество строк.

Поэтому строки кода полезны для оценки масштаба, но плохо подходят для оценки производительности конкретного программиста. Сегодня особенно важно учитывать качество решения, количество реализованных функций, архитектурную сложность и бизнес-результат.

Простой пример: сортировка пузырьком на 10 и 20 строк кода

Один и тот же алгоритм можно записать с разным количеством строк. Например, пузырьковая сортировка на PHP в более подробном варианте может выглядеть так:

<?php

$numbers = [5, 3, 8, 4, 2, 7, 1, 6];

$count = count($numbers);

for ($i = 0; $i < $count; $i++) {
    for ($j = 0; $j < $count - $i - 1; $j++) {
        if ($numbers[$j] > $numbers[$j + 1]) {
            $temporaryValue = $numbers[$j];
            $numbers[$j] = $numbers[$j + 1];
            $numbers[$j + 1] = $temporaryValue;
        }
    }
}

foreach ($numbers as $number) {
    echo $number;
    echo PHP_EOL;
}
?>

Тот же алгоритм можно записать значительно компактнее, сохранив несколько строк для читаемости:

<?php

$a = [5, 3, 8, 4, 2, 7, 1, 6];

for ($i = 0, $n = count($a); $i < $n; $i++)
    for ($j = 0; $j < $n - $i - 1; $j++)
        if ($a[$j] > $a[$j + 1])
            [$a[$j], $a[$j + 1]] = [$a[$j + 1], $a[$j]];

print_r($a);

Функционально оба примера решают одну и ту же задачу. При этом первый вариант занимает значительно больше строк, хотя алгоритм и результат практически не меняются. Это хорошо показывает ограниченность строк кода как меры производительности программиста.

Хитрый программист всегда придумает как расширить код, и обоснует это

Если считать все строки, включая пустые, получаются следующие значения:

  • Первый вариант — 21 строка.
  • Второй вариант — 10 строк.
  • Разница — 11 строк.
  • Второй вариант короче на 52,4%.

Если учитывать только непустые строки кода:

  • Первый вариант — 18 строк.
  • Второй вариант — 7 строк.
  • Разница — 11 строк.
  • Второй вариант короче на 61,1%.

Таким образом, один и тот же алгоритм можно реализовать в 21 или 10 строк, не меняя его основной функциональности. Это наглядно показывает, почему количество строк кода не может быть точной мерой производительности программиста.

Длина строки кода

Даже если две программы содержат одинаковое количество строк, их фактический объём может сильно различаться. Строка из 20 символов и строка из 300 символов формально являются одной строкой. Поэтому LOC не учитывает плотность кода.

Именно поэтому существуют дополнительные метрики — количество символов, операторов, функций, классов, цикломатическая сложность и другие показатели. На практике для серьёзного анализа используют несколько метрик одновременно.

Некоторые символы могут занимать отдельную строку

Стиль форматирования также способен искусственно менять количество строк. Например, в PHP фигурная скобка { может находиться в конце предыдущей строки или быть вынесена на отдельную строку. Функционально код останется тем же, а значение LOC изменится.

То же относится к переносам длинных выражений, цепочкам методов, условиям и другим конструкциям. Поэтому сравнивать количество строк двух проектов без учёта правил форматирования не совсем корректно.

Один и тот же код можно записать в 10 или 15 строк, не изменив его функциональность. Поэтому LOC зависит не только от сложности программы, но и от стиля программирования.

ИИ пишет очень правильно и генерирует очень много строк кода

Генеративный ИИ меняет саму экономику написания кода. Модель способна быстро создать большой объём синтаксически корректного и хорошо структурированного кода. Количество строк перестаёт быть хорошим показателем объёма человеческого труда, поскольку значительная часть кода может создаваться автоматически.

При этом большое количество сгенерированного кода не обязательно является преимуществом. Чем больше кодовая база, тем больше её необходимо тестировать, документировать, сопровождать и загружать в контекст ИИ при последующей работе. Поэтому в AI-native разработке становится особенно важным принцип «меньше лишнего кода — больше полезной функциональности».

Частые вопросы

Количество строк кода кажется простой величиной, но на практике вокруг него возникает множество вопросов. Ниже — наиболее распространённые задачи, связанные с подсчётом, форматированием и оценкой стоимости кода.

Как подсчитать число строк кода

Самый простой способ — посчитать строки в исходных файлах проекта. Но для практической оценки лучше использовать специализированные инструменты, которые умеют отдельно учитывать строки кода, пустые строки и комментарии.

При сравнении проектов важно заранее определить правила подсчёта. Например, будут ли учитываться автоматически сгенерированные файлы, конфигурации, тесты, комментарии и сторонние библиотеки.

Как посмотреть число строк кода

В небольшом проекте количество строк можно оценить средствами редактора или командной строки. В больших репозиториях используются специальные анализаторы исходного кода, которые рекурсивно проходят по файлам и формируют статистику.

Для Git-репозитория также можно анализировать статистику изменений: сколько строк добавлено, удалено и изменено в конкретном коммите или за определённый период. Это уже позволяет оценивать не размер системы, а динамику разработки.

Как закомментировать строку кода

Способ зависит от языка программирования. Например, в C-подобных языках для однострочного комментария часто используется //, в Python — #, а в SQL — --.

Комментарий превращает строку в текст, который обычно не выполняется программой. Комментарии полезны для пояснения логики, но чрезмерное комментирование может усложнить сопровождение.

Как закомментировать несколько строк кода

Во многих IDE и редакторах можно выделить несколько строк и использовать сочетание клавиш для добавления или удаления комментариев сразу во всём выделении. Конкретная комбинация зависит от редактора.

Некоторые языки поддерживают многострочные комментарии. Например, в PHP можно использовать конструкцию /* ... */. При этом важно понимать различие между комментариями и временным отключением большого блока кода: для долгосрочного хранения старой версии лучше использовать систему контроля версий, а не оставлять большие закомментированные фрагменты в программе.

Как разделить длинную строку кода в VBA

В VBA для продолжения выражения на следующей строке используется символ подчёркивания _, которому обычно предшествует пробел. Это позволяет сделать длинную инструкцию более читаемой.

Например, длинное выражение можно визуально разделить на несколько строк, сохранив его выполнение как одной инструкции. Однако у VBA есть ограничения на количество продолжений строки, поэтому чрезмерно длинные конструкции лучше дополнительно разбивать на отдельные переменные или функции.

Как перенести строку кода в Python

В Python длинные выражения часто можно переносить автоматически внутри круглых, квадратных или фигурных скобок. Например, список или вызов функции можно записать на нескольких строках без специального символа продолжения.

Для других случаев используется обратный слэш \, однако современный стиль Python обычно рекомендует по возможности использовать неявное продолжение внутри скобок. Это делает код более читаемым и менее подверженным ошибкам.

Сколько стоит строка кода (спойлер: 30 руб.)

Универсальной стоимости строки кода не существует. Стоимость зависит от квалификации специалиста, языка программирования, архитектуры, сложности задачи, требований к безопасности и тестированию, а также от того, создаётся ли код вручную или генерируется ИИ.

При зарплате программиста 300 000 ₽ в месяц, 20 рабочих днях и условной производительности 500 строк кода в день получается 10 000 строк в месяц. Таким образом, стоимость одной строки — около 30 ₽.

Для работодателя стоимость строки кода оказывается значительно выше прямой стоимости труда программиста. С учётом налогов и страховых взносов, управления, организации рабочего места, оборудования, программного обеспечения, инфраструктуры и других накладных расходов она может быть в 3–5 раз выше. Кроме того, в коммерческой разработке в стоимость необходимо закладывать маржинальность компании.

Программисту за строку кода платят порядка 30 рублей

Компании строка кода обходится в 100-150 рублей 

Две строки могут стоить совершенно по-разному: простое присваивание создаётся за секунды, а две строки сложного алгоритма могут потребовать часов анализа и тестирования. Поэтому в современной разработке оценивать стоимость по LOC всё менее рационально.

Особенно это заметно с распространением ИИ. Если агент генерирует тысячу строк за несколько минут, цена этих строк определяется уже не временем их непосредственного написания, а стоимостью проектирования, проверки, тестирования, интеграции и последующего сопровождения. Именно поэтому строки кода остаются полезной метрикой размера ПО, но постепенно перестают быть адекватной мерой производительности программиста.

ИИ пишет по 60 коп. за строку (в 50 раз дешевле)

Стоимость генерации кода с помощью ИИ может оказаться значительно ниже стоимости работы разработчика. Показательный пример — разработчик Iurii, который переписал TUI-редактор Rune с Go на Rust с помощью Anthropic Fable. Исходное ядро занимало около 65 тыс. строк Go без комментариев, а первая версия на Rust — примерно 60 тыс. строк.

Первые 80% работы агент выполнил практически за один проход, причём основная часть работы была сделана ночью. После этого разработчик добавил tree-sitter, подсветку синтаксиса и другие возможности. В результате объём кода вырос примерно до 150% от исходного, а общая стоимость работы с ИИ составила около $650.

Если считать только стоимость генерации кода, одна строка в этом проекте обошлась примерно в 60 копеек. Это на порядок меняет привычное представление о стоимости программирования. Впрочем, надо бы учесть и время работы программиста.

При этом сравнивать 60 копеек за строку ИИ с зарплатой программиста напрямую некорректно. Разработчик оплачивается не за количество написанных строк, а за решение задачи, принятие архитектурных решений, проверку результата и ответственность за систему. ИИ может резко снизить стоимость производства кода, но не отменяет необходимость проектирования, тестирования и контроля.

Более того, пример показывает другую важную проблему метрики LOC. После добавления новых возможностей кодовая база стала значительно больше исходной. ИИ способен генерировать код очень дёшево и быстро, поэтому количество строк перестаёт быть хорошим показателем трудозатрат. В эпоху AI-разработки всё большее значение получают качество спецификации, архитектуры, тестов и конечного результата.

CIO-NAVIGATOR