Попробуй ответить на поставленный в заголовке вопрос. Вижу работу мысли на твоем слегка нахмуренном лбу. Давно ничего не сдавал? Или сия чаша тебя миновала? Сейчас это неважно. Итак, начали.
Вот ты встрепенулся и с радостью посмотрел на меня… точнее, на название статьи. Конечно же, создание сложной программы, и срочной к тому же! Ответ — неправильный. Речь, естественно, не идет о тех, для которых наша работа — каторга. Для них — любой шаг может быть в тягость, кроме получения денег, разумеется. Я говорю об увлеченном программисте, которого сложность завораживает, а сроки будоражат воображение. Он, по сути дела, и является настоящим программистом. С проблемой справится и получит колоссальное удовлетворение вместе с… небольшими деньгами.
Вижу, экзаменуемый задумался. Вторая попытка. Корректировка чужой программы! Лоб разгладился. На лице — понимающая улыбка. И правильно! «Влезать» в чужую программу порой гораздо сложнее, чем с нуля написать свою. Не все на это быстро решаются. Но если надо? Тогда приходится. Чужая мысль, чужое мышление. Вобрать его в себя не всегда удается. Можно исправить одно, а зацепить совсем другое. Так, вот в чем трудность, подытожишь ты. Ни в коем случае! Освоение программы уволившегося сотрудника — процесс все-таки достаточно увлекательный, хотя и очень каверзный. При победе (а куда ж она денется, если со всех сторон насели?) — триумф куда больше. Одним словом — это тяжко, но не смертельно.
Пауза длиннее. Задумчивость глубже. Наконец, озарение! Слово «тяжко» — оно говорит само за себя! Перетаскивать тяжелые вещи. Технику, столы при ремонте помещения или переселении в другую аудиторию. Для этого отрывают от любимого дела, иногда на день или два, а то и больше. Не хочется? Конечно! Посторонняя работа находит не только особей мужского пола. Женщинам приходится подметать, вытирать все от пыли и оберегать горшки с цветами, чтоб «мальчики» их ненароком не задели. Помню, как у нас в бюро делали срочный ремонт к приезду иностранных партнеров. Без нашего участия, конечно, не обошлось. Мы всемерно старались ускорить процесс, тем более что ютиться в «гостях» у соседей было крайне неуютно. Мы даже сами прокладывали сетевой кабель, не дождавшись соответствующей службы. У моего начальника хорошо получалось работать и молотком и дрелью, а я терпеливо держал под ним стул, чтобы эта дрель ненароком не упала… Других мужчин в бюро не было… Не было и чувства невыносимости. В конце концов все закончилось, и мы приступили к своему обычному делу, довольные и радостные.
Непростой экзамен, да? Ответы не проходят, мысли уже путаются, а я навис над душой чуть ли не в материальной оболочке и требую, требую… Ага! Дошло! Работа с заказчиками! Какими противными и неугомонными они бывают! Все соки выжмут и никогда не скажут, что довольны. Просто промолчат. Звонят только тогда, когда что-то не идет. Но и с ними программист может сладить. Выкрутиться, договориться, а если оказать маленькую толику опережающего внимания, то клиент — твой! Звонишь ему немножко раньше, чем он, и спрашиваешь, как ведет себя разработка. А он часто не готов ответить, потому что еще не брал в руки мышку и к клавиатуре со вчерашнего дня не прикасался. Отвечает чуть ли не извиняющимся тоном. А потом, когда столкнется с проблемой, уже не налетит на тебя, как бомбардировщик, а будет мягко просить.
Вижу, что-то хочешь вставить, дорогой читатель. Знаю, что. Промолчи, пожалуйста. Сам скажу. Внедрение программы. Опять ошибешься. Оно не без подводных камней, спору нет. Но это самый замечательный этап в жизни программиста. Все уже отлажено. Не надо мучительно думать, изобретать, приспосабливать. Продукт готов (с точки зрения исполнителя, конечно), надо только привязать его к другой технике. Даже если выявились проблемы, непривязанным он долго болтаться не будет. Программист сообразит, где, что нужно и кому нужно.
Вот и все. Программа создана, доработки сделаны, ремонт в родном помещении тоже, заказчик приручен, внедрение успешно прошло. Так где же настоящая супертяжелая трудность? Молчишь, читатель? Хорошо, помогу. Кроме всего вышеописанного есть одна неотъемлемая часть, без которой никто программу эксплуатировать не будет.
Инструкция! К ней нужна подробная и понятная инструкция! Это и есть камень преткновения для до сих пор не унывавшего программиста. Он может быстро сообразить, что нужно пользователю и с налету добиться результата. Поставленная задача почти моментально переводится в операторы конкретного языка. И этого никто не замечает! Порой даже сам программист. Но несколько папок писанины, которую необходимо сдать, он не заметить не может. Пусть, не писанины, а компьютерного набора текста, пусть не несколько папок, а всего одна. Все равно, для привыкшего летать резкое приземление равносильно крушению.
Помню, как сам я, на большой скорости отладив очередную программу, собрал всю силу воли для написания инструкции. Я спешил быстрее скинуть с плеч ненавистный груз, делая массу ошибок и не слишком внятно описывая режимы работ. Начальник долго сидел со мной, изменяя, где мог, обороты и приводя «труд» к сносному виду. Внутренне я очень сердился. Потом была следующая программа (как интересно!) и следующая инструкция (скорей бы отделаться!). На каком-то этапе я научился их выплевывать, а, точнее сплевывать. Но что-то не договаривалось, а что-то отображалось укрупненным планом. Не думаю, что я был одинок.
Часто описание великолепно работающих систем с мировым именем бывает лаконичным и оставляющим вопросы неотвеченными. Правда, орфография и стилистика там лучше. Но нюансы часто опускаются, а последние изменения в программах порой не успевают отражаться. Программный продукт всегда хоть немного опережает свою инструкцию. Нередко бывает, что программу делает один человек, а документацию совершенно другой, более к этому приспособленный. Естественно, возникают неувязки, ставящие в тупик пользователя.
Самое удивительное, что я встречал и программы, исходные тексты которых походили на инструкцию по их созданию. Аккуратные комментарии описывали, что делает каждый оператор. Представляю, сколько времени уходило на то, чтобы выполнить требование начальника. Эти программы, правда, было легче исправлять. Но как далеко можно было продвинуться без комментариев! Хотя работа велась по принципу «медленно, но верно и удобно в будущем». Программы в то ЕС-овско = СМ-овское время делались на десятки лет, а актуальность они потеряли гораздо раньше, года через два.
В творениях асов часто не встретишь не то что комментария, а и логически понятного стиля. Все так своеобразно накручено, что опасно прикасаться, и удивляешься, на каких принципах программа работает? А работает она правильно, пока ее не тронешь. Чем выше уровень программиста, тем меньше тяга к написанию документации. Он готов всегда объяснить на пальцах понятные для себя вещи и искренне удивлен, что они не всегда понятны другим.
Вот мы и ответили на поставленный вопрос. Экзамен окончен. Но куда ты, милый читатель? Давай зачетку. Как зачем? Поставлю отличную оценку. Почему отличную? Ты так старался. Перебрал все варианты, думал. А пока ты размышлял, я и сам окончательно понял, что же самое тяжкое для программиста…