Просто наблюдение (которое я имею возможность вести уже много лет). Если вы заказали у мастера стол, а он потратил на его создание в два раза больше времени, чем обещал, закупил некачественное дерево, а сам стол – кривой, с трещинами, а одна ножка вот-вот отвалится, то и ежу понятно, что стол этот – дерьмо, а мастер вместе с ним. Но если вы заказали у программиста программу, а он профукал все возможные сроки, программа делает совсем не то, что вы от нее хотели, работает медленно и падает раз в час, забыв сохранить важные данные (это еще если вам повезет и она не запорет что-то важное), то как вы думаете, кто будет виноват?
Кто угодно, но только не он! В первую очередь, разумеется вы. Потом – Билл Гейтс. Потом – менеджер, который не умеет организовать процесс, потом – тестировщики, которые не заметили ошибку. А потом программист? Нет, программист – вообще не виноват. Виноваты ваши папа с мамой – плохие гены вам оставили.
Что, коллеги, я утрирую? Не сильно. Не замечаю я в нашем племени одну очень важную вещь. Не оцениваем мы результаты своего труда по оценке конечных пользователей/заказчиков. Исключения есть – но это капля в море.
Казалось бы – очевидная вещь. Если пользователи не довольны, если они не хотят применять программу на практике, значит программа – плохая, а ее авторы с работой не справились. Ан нет, связывать свой профессионализм с мнением конечного потребителя программисты не хотят. Ответ простой "да они же ничего в программировании не понимают". Но коллеги, чтобы увидеть, что у дома кривые стены, быть профессиональным строителем не обязательно. Если пациенты доктора все время умирают, у него нет никаких оснований считать себя хорошим врачом.
Примерно также построены у программистов отношения с начальством. Стоит на форумах IT-специалистов кому-нибудь из PM-ов рассказать про проблемы в команде – любые проблемы, суть тут никакой роли не играет, его заваливают советами "убить себя ап стенку", потому как "да ты же ничего в программировании не понимаешь", а единственная задача менеджера в проекте – не путаться под ногами у программистов и вовремя варить кофе. Почему во всех специальностях регулярные конфликты с начальством считаются признаком "проблемности" у работника, а программисты вообще не могут быть неправыми в отношении с начальством, улаживание всех возможных конфликтов – дело самих менеджеров? А все очень просто – "да оно же ничего в программировании не понимает".
Как же программисты, вроде бы неглупые люди, ухитряются так "своеобразно" рассуждать? О! тут им приходит на помощь хитрый психологический трюк. Они же, видете ли, не несут ответственности за конечный результат. За постановку несут ответственность аналитики, за сроки – менеджеры, за качество – тестировщики, а программисты ни за что ответственности не несут, кроме разве что качества кода, но это вещь достаточно субьективная.
Имеет ли такая постановка право на существование? Конечно, да! В конце-концов, разве может нести уборщица ответственность за финансовые показатели банка, в котором она работает?
Зы пыль – может, за мусор под ковром - может и должна. А за финансовые успехи – нет уж, увольте, не ее это дело.
И все бы ничего, вот только когда к этим программистам начинают соответственно относиться – именно они же громче всего и возмущаются. "Не лезьте ко мне с вашими сроками!". "Так делать нельзя, объясните это своим тупым юзерам!". Коллеги, на двух стульях одновременно усидеть невозможно. Либо вы – тупые кодеры и тогда по социальному статусу ничем прнципиально не отличаетесь от уборщиц и грузчиков, либо вы профессиональные программисты.
Если ты – тупой кодер – нет проблем. Никто не будет ждать от тебя ответственности, самостоятельной работы, готовности отвечать за качество и сроки работы.
Не будут от тебя требовать и создания проектной документации. Но тогда будь готов к тому, что твое мнение никого не интересует, а слово "дисциплина" должно быть лейтмотивом в твоих отношениях с остальной частью проектной команды. Какое там XP? Какая, нафиг, команда равных? Копай от забора и до обеда, если ни на что другое не способен. А если ты себя позиционируешь, как профессионала... Тогда откуда берутся эти странные отмазки про отсутствие ответственности за... да буквально за все?
Тогда ты обязан брать на себя ответственность. Обязан учитывать вопросы планирования рабочего времени. Обязан работать над требованиями и тест-планами вместе с людьми, которые за это отвечают. И еще много чего ты обязан делать, если хочешь, чтобы профессионалом тебя считал еще кто-то, кроме тебя и твоей мамы.
Вот эта самая ответственность и отличает профи от любителя (в первую очередь). И если седой уже дядька, обвешенный сертификатами, гордо заявляет, что сроки, планирование, совещания и прочая фигня его не интересует, это просто-напросто означает, что за годы работы профессионалом от так и не стал (и вряд ли уже станет).
Подводя итоги – хорошие программисты есть. Я лично знаю таких не меньше десятка. Но плохих программистов – гораздо, на порядки, больше. Причем даже студенты-первокурсники без опыта работы почему-то считают себя компетентными в вопросах управления проектами и бросаются заявлениями типа "ну я же не тупой кодер".
Именно этот массовый апломб посредственностей и делает работу менеджеров в IT вдвойне, а то и втройне сложной.
Да, профессионалам нужно обеспечивать все условия для комфортной работы и не нужно путаться под ногами с мелочной опекой.
Да, большинство программистов нуждается в постоянной опеке и направляющих пинках. Верно и то и другое утверждение. Просто две стороны конфликта крайне неодинаково оценивают реальное соотношение этих двух составляющих.