Недавно случилось так, что для одного большого и срочного проекта мне пришлось самому "взять в руки шашку" и заняться программированием. Правда, весьма высокоуровневым (на Communiware), но все-таки... Причем значительная часть этого программирования пришлась не на реализацию функционала конкретного сайта (имеющего ТЗ), а на доделку и переделку ряда общеупотребительных пакетов – т.е. деятельность, не имеющую четкой постановки и границ. И не прошло и нескольких дней такой работы, как я впал в знакомое, но давно забытое состояние, которое я для себя окрестил "программазм". Кроме изменения самоощущения это стало проявляться и во внешней жизни - прогулки с собакой начали сводиться к пятиминутному "вывести пописать", жена стала жаловаться, что со мной невозможно общаться потому что я ее не слышу и все время нахожусь в раздражении, я начал ничего не успевать, и важные деловые встречи и звонки стали "висеть" по несколько дней. Характерно состояние "программазма" - полной "забитостью"
- смещением жизненных приоритетов
И для этого есть вполне объективные предпосылки, определяемые самим характером деятельности. Писание программ, в ситуации, когда ты на себя замыкаешь цикл "постановка – архитектура - кодирование" является очень творческий процессом, и очень благодарным в смысле быстроты получения результата. Но ровно эта "мягкость" материала, с которым ты работаешь, и быстрота технологического цикла "придумал-сделал", начинает играть злую шутку. Поскольку совершенство недостижимо, то над тобой всегда висит множество нереализованных возможностей. А когда вроде все сделано, ты некоторое время кайфуешь, наблюдая дело рук своих, а потому вдруг понимаешь, что можно было сделать намного лучше... И либо начинаешь тут же делать это (учитывая, что компьютер всегда под рукой), либо это понимание остается раной в твоей душе, лишающей покоя и сна. В результате создается сильная положительная обратная связь, основанная как на положительных, так и отрицательных подкреплениях, как у наркоманов - кайф от дозы (удовлетворение от сделанного) сочетается с ломкой от отсутствия таковой (страдания по недоделанному). И рукотворный мир твоей программы начинает тебя засасывать вплоть до значительного ослабления связей с реальностью. Последняя неисправленная бага и недоделанная фича субъективно становится важней, чем какие-то реальные деловые и жизненные проблемы, в том числе и "внешние" проблемы с той самой программой, которую ты делаешь. А поскольку реализации сколько-нибудь сложных вещей их нужно полностью держать в памяти, и ресурсы твоего "центрального процессора" оказываются в заметной степени "забиты". Что естественно, замедляет скорость и ухудшает качество реакцию на внешние раздражители. На самом деле именно такое состояние характерно для большинства людей, занимающихся программированием "по-русски", когда один человек в значительной степени совмещает в себе постановщика задачи, архитектора, кодировщика, проект-менеджера, тестировщика, а порой еще еще и аккунт-менеджера (общение с клиентом) и поддержки. И именно это является объективным источником множества баек и анекдотов о неадекватных программистах. Не приходится удивляться, что большинство русских программистов не в состоянии сколько-нибудь адекватно продавать свой труд и его результаты - им просто не до того :) Эффект "трудоголизма" вообще говоря известен и описан, но я утверждаю, что ни в одной другой деятельности он не является столь массовыми и остро проявляющимся. Потому что программирование обладает рядом особенностей: - Программирование является деятельностью чисто ментальной и не требует практически никакого ресурсного обеспечения
- Программист имеет дело с объемными и долгоживущими ментальными объектами (образами программ)
- Результат работы является в некотором смысле "живым" – программа как-то себя ведет, с ней возможно интерактивное взаимодействие, иногда – с непредсказуемым даже для творца результатом.
Первые две особенности свойственны не только программированию (например, ими обладает также литературное творчество крупных форм, и известно что писатели тоже в сильной степени "вживаются" в описываемую ими реальность), то последняя особенность, позволяющая программисту чувствовать себя демиургом, уникальна. Причем "засасывает" программазм очень серьезно. Я знаю пару людей, которые много лет уже ничего не программируют, а занимаются менеджерской работой, но остались в состоянии программазма, причем, похоже, пожизненно. Я давно отрефлексировал это состояние, и вроде как умею с ним работать, но все равно переключение между бизнес-режимом и режимом программирования дается мне с колоссальным трудом, а после нескольких дней программазма выводить себя из него удается только с помощью серьезной физической нагрузки или изрядной дозы алкоголя. В этом смысле крайне дисциплинирующим образом действует разделение функций - если ты, например, находишься в позиции архитектора, постановщика или менеджера, ты тоже можешь хоть каждый день придумывать новые возможности. Но поскольку и твоим инструментом является не компьютер, а исполнители (кодировщики), то реализация твоих идей, и, соответственно, получение морального "подкрепления" откладывается на неопределенный срок, и цепочка обратной связи не создается. Аналогично - если ты кодируешь, но не сам ставишь себе задачу и оцениваешь результат, у тебя в заметной степени исчезает удовлетворение от сделанного и стремление к совершенству, подменяясь рациональными социальными стимулами – одобрением, зарплатой и др. И в этом - одно из основных достоинств так называемых "промышленных подходов" к разработке программного обеспечения. Они, искусственно ослабляя обратные связи, позволяют всем участникам процесса сохранять адекватность. Ценой этого, конечно, является значительное падение "пиковой" производительности. Поэтому при разработке каких-то не очень больших систем одиночки могут давать фору большим коллективам...
(
написано 16.07.2004,
опубликовано 08.11.2004)
|