МЫСЛИ: Программазм как cоcтояние души
МЫСЛИ: Программазм как cоcтояние души
Недавно случилось так, что для одного большого и срочного проекта мне пришлось самому «взять в руки шашку» и заняться программированием. Правда, весьма высокоуровневым (на Communiware), но все-таки… Причем значительная часть работы пришлась не на реализацию функциональности конкретного сайта (имеющего ТЗ), а на доделку и переделку ряда общеупотребительных пакетов - то есть на задачу, не имеющую четкой постановки и границ.
Не прошло и нескольких дней, как я впал в знакомое, но давно забытое состояние, которое сам для себя окрестил программазмом. Кроме изменившегося самоощущения, это стало проявляться и во внешней жизни - прогулки с собакой сводились к пятиминутному «вывести пописать»; жена жаловалась, что со мной невозможно общаться, потому что я ее не слышу и все время нахожусь в раздражении; я же ничего не успевал, и важные деловые встречи и звонки стали «висеть» по несколько дней.
Состояние программазма характеризуется
- полной «забитостью»;
- смещением жизненных приоритетов.
И для этого есть объективные предпосылки, определяемые самим характером деятельности. Писание программ в ситуации, когда ты на себя замыкаешь цикл «постановка - архитектура - кодирование», является творческим процессом и очень благодарным в смысле быстроты получения результата. Но «мягкость» материала, с которым ты работаешь, и быстрота технологического цикла «придумал-сделал» начинают играть злую шутку.
Поскольку совершенство недостижимо, над тобой всегда висит множество нереализованных возможностей. А когда все вроде бы сделано, ты некоторое время кайфуешь, наблюдая дело рук своих, а потом вдруг понимаешь, что можно было сделать гораздо лучше… И либо начинаешь тут же делать это (ведь компьютер всегда под рукой), либо это понимание остается раной в твоей душе, лишающей покоя и сна.
В результате создается сильная обратная связь, основанная как на положительных, так и на отрицательных подкреплениях - как у наркоманов кайф от дозы (удовлетворение от сделанного) сочетается с ломкой при ее (дозы) отсутствии (страдания по недоделанному). И рукотворный мир твоей программы начинает тебя засасывать вплоть до значительного ослабления связей с реальностью.
Последний неисправленный баг и недоделанная фича субъективно становится важнее, чем какие-то деловые и жизненные проблемы, в том числе и «внешние» проблемы с той самой программой, которую ты делаешь.
А поскольку при реализации мало-мальски сложных вещей их нужно полностью держать в памяти, то и ресурсы твоего «центрального процессора» оказываются сильно загружены. Что, естественно, замедляет скорость и ухудшает реакцию на внешние раздражители.
На самом деле, именно такое состояние характерно для большинства людей, занимающихся программированием «по-русски», когда один человек в значительной степени совмещает в себе постановщика задачи, архитектора, кодировщика, проект-менеджера, тестировщика, аккаунт-менеджера (общение с клиентом) и черт знает кого еще.
И именно это является объективным источником множества баек и анекдотов о неадекватных программистах. Не приходится удивляться, что большинство русских программистов не в состоянии сколько-нибудь адекватно продавать свой труд и его результаты - им просто не до того.
Эффект «трудоголизма», вообще говоря, известен и описан, но я утверждаю, что ни в одной другой деятельности он не является столь массовым и остро проявляющимся. Потому что программирование обладает рядом особенностей:
- программирование является деятельностью чисто ментальной и не требует практически никакого ресурсного обеспечения;
- программист имеет дело с объемными и долгоживущими ментальными объектами (образами программ);
- результат работы является в некотором смысле «живым»: программа как-то себя ведет, с нею возможно интерактивное взаимодействие, иногда - с непредсказуемым даже для творца результатом.
Первые две особенности свойственны не только программированию (например, ими обладает также литературное творчество крупных форм, и известно, что писатели тоже глубоко вживаются в описываемую ими реальность), то последняя особенность, позволяющая программисту чувствовать себя демиургом, уникальна.
Причем засасывает программазм крепко. Я знаю пару людей, которые уже много лет не пишут софт, а занимаются менеджерскими делами, но остались в состоянии программазма, причем, похоже, навсегда.
Я давно отрефлексировал это состояние и вроде как умею с ним работать, но все равно переключение между бизнес-режимом и режимом программирования дается мне с колоссальным трудом, а после нескольких дней программазма выводить себя из него удается только с помощью серьезной физической нагрузки или изрядной дозы алкоголя.
В этом смысле очень дисциплинирующим образом действует разделение функций - если ты, например, находишься в позиции архитектора, постановщика или менеджера, ты тоже можешь хоть каждый день придумывать новые возможности. Но поскольку твоим инструментом является не компьютер, а исполнители (кодировщики), то реализация твоих идей, получение морального «подкрепления» откладывается на неопределенный срок, и цепочка обратной связи не создается.
Аналогично - если ты кодируешь, но не сам ставишь себе задачу и оцениваешь результат, у тебя в заметной степени исчезает удовлетворение от сделанного и стремление к совершенству, подменяясь рациональными социальными стимулами - одобрением, зарплатой и др.
И в этом одно из главных достоинств так называемых промышленных подходов к разработке программного обеспечения. Они, искусственно ослабляя обратные связи, позволяют всем участникам процесса сохранять адекватность. Однако платить за это приходится значительным падением «пиковой» производительности. Так что при разработке не очень больших систем одиночки могут давать фору крупным коллективам.