Я работаю программистом.

Многим непонятно, чем программисты вообще занимаются. Многие думают, что программисты — это такие особо закомплексованные офисные работники, которые днями напролет просиживают штаны за компьютерами, лазая по интернету и рассматривая голых теток, каждые 10 минут выбегая в туалет (покурить).

Также считается, что программисты — это самые недисциплинированные работники в мире, так как никогда не соблюдают планов сдачи проектов, установленных ими же.

Многими голливудскими режиссерами давно доказано, что программисты — патлатые, немытые, да и вообще деструктивные анархисты.

Разубеждать граждан не буду, так как это бес толку. Стереотип не удается изгнать даже из сознания членов собственной семьи, что уж говорить о ком-то постороннем. Тем более, что все вышеописанное — чистая правда. Но с оговорками.

В основе всех данных утверждений лежат наблюдения непосвященных за реальными периодами работы/жизни программистов.

Чем они вообще занимаются?
Результатом  работы программистов являются компьютерные программы. Программы не видны невооруженным глазом в виде ящиков с тушенкой или выточенных на станке деталей. Даже если посмотреть в итоговые дистрибутивы, то результаты работы программистов в скомпилированном виде занимают не более нескольких Мб в парочке файлов. Стоимость работы программистов окупается не сразу, а только после внедрения программы в жизнь. Если изначальная постановка задачи была безграмотной или нечеткой, то программы могут никогда не внедриться и работа программиста может пропасть даром. Программа — это изначально нечто эфемерное, бестелесное. То, что не ощущается, то почти не существует. Именно поэтому у большинства людей вызывает недоумение тот факт, что программы стоят денег. «Как? За что? Я ведь купил компьютер за 1000$, и мне еще надо ПОКУПАТЬ ПРОГРАММЫ К НЕМУ?!» Программы воспринимаются просто как неотъемлемая часть компьютера. Поэтому ждать от людей полного осознания смысла работы программистов не следует ни сейчас, ни в будущем. Разве что в очень далеком будущем, мы не доживем.

Они недисциплинированные, ничего не делают в срок.
Можно сколько угодно устанавливать сроки, пока задача программисту полностью не поставлена и не описана с максимальной достоверностью, и не понята программистом. Все равно эти сроки будут нереальными. Как достичь всех этих условий — вопрос архисложный, решается путем долгих упражнений в создании технических заданий и спецификаций будущего программного продукта. Только после того, как задача формализована, можно приступать к макетированию и планированию работы программистов. Обычно же программисты в наших учреждениях работают с задачами, которые постоянно меняются-уточняются в очень широких пределах. Это вина как программистов, ленящихся самим уточнять постановки и писать функциональные спецификации (причем обязательно до того, как говорить, что «все это будет готово через неделю»), так и их заказчиков, которые не представляют себе сложности полного изменения архитектуры программы где-то посреди процесса создания проекта, и не собираются оплачивать эти издержки. Без этого ни о каких достоверных сроках говорить не приходится, забудьте о них.

Они немытые и патлатые анархисты, пьянь и рвань.
Вот она, протестантская субкультура Linux, ха-ха! Открою тайну: патлатые, неопрятные, сосущие пиво подростки, разговаривающие о компьютерах на улице и в игровых клубах, и те, кто разрабатывает для них программы — совершенно разные люди. Из таких подростков могут получиться программисты, если они не пропьют свои мозги и сохранят интерес к тому, о чем разговаривают. А больше всего о компьютерах разговаривают те, кто знает о них сравнительно мало. Конечно, некоторые программисты по умственному развитию остаются оборванными подростками на всю оставшуюся жизнь, но и профессиональные качества у них обычно соответствуют внешнему виду. А люди не замечают тех, кто молчит и особо не выделяется из толпы. Люди замечают тех, кто громко разговаривает о компьютерах и выглядит оборванным волосатым алкашом.

Я все время застаю программистов за бесцельным лазаньем по интернету.
Подходим к самому интересному, ради чего я начинал все это писать. Работа программиста — это 10% рутины вроде написания кода программы и 90% ежесекундной напряженной работы мозга над двумя мегазадачами: системный анализ и системный синтез. Системный анализ — это когда человек в голове или на бумаге дробит поставленную задачу на более мелкие подзадачи. Системный синтез — это когда мелкие задачи должны сложиться в стройную систему классов и процедур на нужном языке программирования. Непосредственно перед синтезом необходимо продумать архитектуру программы — это некая глобальная стратегия синтеза, которой надо следовать, иначе программа не сможет со временем наращивать свои функциональные возможности по желанию заказчика и помрет от старости. Задачи анализа и синтеза нетривиальны. Они действительно сложные. Они требуют не только глубоких логических размышлений, но также интуиции и таланта, а также 100% концентрации внимания человека. Не всегда анализ и синтез в голове у программиста как-то разграничиваются, они обычно идут «одним пакетом» в потоке мыслей.

Следствие всего сказанного в том, что я не могу просто сесть за компьютер и начать писать программу. Нужно одновременное совпадение нескольких условий:
1) Желание созидать.
2) Четкое знание текущей подзадачи.
3) Ничто не должно отвлекать от мыслительного процесса.
Если хотя бы одно из указанных условий не выполняется, ни о каком программировании не может быть и речи, т.к. написанный в эти моменты программный код можно будет смело выкинуть в мусорное ведро.

Если условия [2] и [3] относительно легко достижимы при минимальных усилиях, то относительно «желания созидать» не все и всегда гладко. Обычно именно ради этого желания люди идут в программисты, а вовсе не из-за того, что «программистам много платят» (хотя, поискать еще надо у нас программистов, которым платят больше, чем штукатурам). Программа — это чистый интеллектуальный продукт и лично я получаю огромное удовольствие, когда мои программы работают и решают поставленные задачи. Я-то в курсе, сколько моих сил было затрачено на их реализацию.

Проблема в том, что желание созидать заходит в мою голову со строгой периодичностью. Последние пару месяцев я решил понаблюдать за собой и вот что увидел: у меня есть периоды продуктивности, длящиеся в среднем полторы недели, и периоды «выпадения в осадок» (2—2,5 недели), когда мозг отказывается думать о чем-то более сложном, чем расчет траектории движения тела с работы домой и обратно. В такие дни я фактически не существую как программист. Я сижу за компьютером, но ни одной строчки исходного кода не выдаю. А сижу я за компьютером просто потому, что так надо по моим служебным обязанностям. Хотя с радостью в такие моменты попил бы чаёк и потрепался бы с друзьями. Вот. Хотя, ведь я же могу это сделать! Интернет — великое изобретение. Он позволяет сделать вид, что ты работаешь, усиленно стукая по клавиатуре, хотя на самом деле отстукивается сообщение в аську другому такому же коллеге, который тоже спалил все баки своего серого вещества.

Поймать программиста за таким отлыниванием от работы проще простого, потому что программист неработоспособен большую часть рабочего времени (например, я, как показал практика, в 1,5 раза больше разгильдяй, чем программист). Особо сообразительные начальники пытаются отключить программистам интернет в надежде, что они будут больше работать. Жаль, но нельзя заставить человека качественно анализировать и синтезировать, если он этого не хочет.

Однако, когда программист в рабочее время был пойман начальником на рабочем месте за разглядыванием голой Анджелины Джоли (было бы еще, на что смотреть), непременно возникает впечатление, что он — злостный разгильдяй. О чем начальник с горечью рассказывает знакомым работницам в отделе кадров, а те уже рассказывают всем, кого поймают.

Вот как они рождаются, эти стереотипы.