среда, 8 сентября 2010 г.

[prog] Неожиданное продолжение истории об 1K строк на C в день

Чуть меньше года назад я задал в своем блоге риторический (как оказалось) вопрос о том, как можно писать по 1K (тысяче строк) на языке C в день на продолжении длительного времени. Вчера герой моего вопроса – Лев Валкин – написал в своем ЖЖ большую заметку “RSI — как бороться с туннельным синдромом”, в которой раскрыл эту тему подробнее.

Выяснились две довольно очевидные вещи:

  1. Выдавать 1K отлаженных строк ежедневно в течении более-менее длительного времени невозможно. (См.комментарии номер раз и номер два: мало того, что число 1K получилось не как число результирующий строк, а является числом измененных (переписанных) строк, так еще и не отлаженных);
  2. Работать в таком темпе вредно для здоровья.

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

Посему остановлюсь вот на чем: “А что, 1K строк ежедневно – это доблесть?” Читая Льва Валкина у меня складывается впечатление, что да, доблесть. Человек с гордостью говорит о том, что он мог работать в таком темпе. Более того, в комментариях прозвучала фраза “Но я, конечно, не дорос ещё до 1К строчек в день.”, поэтому, боюсь, доблесть видит в этом далеко не один человек.

Я хочу, чтобы читатель задумался о том, что значит 1K строк в день.

Обычный рабочий день составляет 8 часов. Всего 480 минут. И 1000 строк. Больше, чем две строки в минуту. Только набирать нужно больше двух строк в минуту! А когда же думать над тем, что пишешь?

Пусть каждая строка после написания переписывается два раза. Т.е. выдача “на гора” составляет ~330 строк. Т.е. около 1.5 минут на строку. Из которых часть времени занимает ее набор и исправление (т.е. физические действия), поэтому на обдумывание остается меньше времени. Путь будет 1 минута. Т.е. на обдумывание кода уходит, вроде бы, ~5.5 часов. Кажется, что неплохо – больше пяти часов на обдумывание кода в день.

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

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

А вот если бы она присутствовала, фаза эта? Представьте себе, что сначала пять часов тратиться на обдумывание, на рисование каракулей на бумаге или доске, на написание отдельных фрагментов на бумаге. Вплоть до тех пор, пока разработчик не поймет, что у него перед глазами прошло все, что он хотел набрать на компьютере. Сколько в результате получится строк? Да, в худшем случае, те же самые триста с плюсиком. Хватит ли оставшихся трех часов, чтобы спокойно и не напрягаясь набрать их? Как два байта…

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

Цифры “валовой продукции”, конечно, будут намного меньше. Не 1K, и даже не 300. А около 100 строк в день (это я цифры для C++ привожу, для других языков может быть и того меньше).

Что заставило меня написать столь много слов на данную тему? Будучи человеком среднего ума я, однако, являюсь хорошим программистом (не супер-пупер, к сожалению, но хорошим). А вокруг намного более умные люди, чем я, пишут отвратительный и неработающий код. По одной простой, как мне кажется, причине – они думают в процессе написания кода, а не до этого :(

Последствия “обдумывания кода во время написания” зачастую сказываются на мне. Два дня назад в библиотеке, разработанной полтора года назад думающим-в-процессе-программистом, внезапно всплыл злобный баг и мне предстоит убить еще день на окончательное преобразование говнокода во что-то более-менее нормальное.

В последнее время это, мягко говоря, задалбывает. Поэтому я поступлю цинично и вопрошу:

Любишь колбасить по тысяче строк в день, вместо того, чтобы потратить три-четыре-пять-шесть часов на предварительное обдумывание?
Думаешь, что это круто – работать в таком темпе?
Думаешь, что таким количеством говнокода ты двигаешь проект вперед?
Если да, то готов ли ты к встрече с туннельным синдромом?
A?

Отправить комментарий