Sunday, December 7, 2008

Как стать хорошим программистом (часть 4. Extra): влияние на межличностые контакты

Как я уже писал, описать все аспекты существования программиста практически невозможно, но в последнем посте я сознательно не затронул еще один очень важный аспект, о котором было бы просто недобросовестно не написать. А именно, как это влияет на ваши межличностные контакты, общение с другими людьми.

Конечно, опять же описать всю проблему невозможно, но я попробую просто привести несколько примеров.

Да-да, тоже с персонального блога...

Плотность информационного канала

В программировании каждая строчка вашего кода делает что-то полезное. В крайнем случае это комментарий, который обьясняет код, или пустая строка, которая делает его более читаемым. Но все равно, каждая строка и каждый знак имеет значение. Хороший программист знает, что код, который не делает что-то полезное, почти наверняка делает что-то плохое. Как минимум, удлиняет код, делает его менее понятным и вносит вероятность бага. В остальных случаях он просто вносит баг.

Усвоив это в искуственных языках, сей принцип влияет на вашу личность и начинает просачиваться в естественные. Вы начинаете замечать, что большинство непрограммистов очень часто страдает тем, что я называю «словесный понос». Ну, если кто еще помнит – в стиле выступлений Горбачева, говорит, говорит, а о чем похоже и сам не знает. Воодушевленный менеджер может распинаться перед командой целый час так и не сказав что-либо полезное. В обыденном общении «легкие разговоры» часто становятся невыносимой мукой. Нет, вы с удовольствием готовы поболтать с собратьями-программистами (и отдельными представителями других инженерных профессий, владеющих человеческой речью) на любые темы от хобби и шоппинга до кулинарии и политики, но ваши нейронные цепи уже настроены на каналы с низким уровнем шума.

Чтоб далеко не ходить, приведу пример. В Америке в большинстве фирм регулярно происходят митинги, посвященные пеп-ток. Это такой американский вариант политинформаций с пропагандой компании или группы в которой ты работаешь, обычно посвященной мудрости менеджмента, осуществляющего очередное изменение оргструктуры и пересаживавние медведей и мартышек между музыкальными инструментами. Так вот, на таких митингах лично я обычно физически начинаю отключаться через 15-20 минут, через 10, если я пытаюсь слушать о чем они говорят... Нет, правда. Глаза начинают слипаться и появляется риск треснуться лбом об стол...

Другой пример: некоторые читатели говорят, что им здорово мешает обилие вводных, междометий и прочих неинформативных элементов в моих статьях. Так вот, я этому сознательно учился, и знаете почему? Если вы принадлежите к этой группе читателей, возьмите любую мою статью, которая вам нравится, и попробуйте убрать все эти вводные и неинформативные слова. Мой опыт показывает что у подавляющего большинства людей от подобного текста просто заклинивает каналы обработки информации. Знаете как иногда с компьютерами бывает – процессор утилизован на 100%, диск крутится как сумасшедший и ничего не происходит. Не шучу.

Это еще сильнее заметно в устном общении. Если вы не уделяете спецально внимания общению с обычными людьми, то обьяснить свою точку зрения и «продать идею» менеджменту часто оказывается практически невозможно. Их информационные каналы просто не рассчитаны на концентрацию, с которой изьясняетесь вы. Нужно ли обьяснять, насколько это осложняет вашу жизнь и карьеру? Лично мне пришлось в свое время потратить немало времени, чтобы научиться искусству оценки собеседника и выбора правильного уровня речи в презентации своих мыслей.

Вы можете сказать, что это очевидно, но это вам очевидно, после обьяснения выше. Большинству программистов, которых я знаю, это не очевидно. Впрочем большинству непрограммистов это может и очевидно, но они понятия не имеют как это делать. И в любом случае суть в том, что вам придется этому учиться и никакого отношения к программированию это иметь не будет.

Бартер лжи

«Fidelity to reality» - «верность истине», о которой я уже писал, имеет целый ряд отрицательных последствий для социальных контактов. К сожалению, целый ряд социальных взаимодействий основан на лжи или по крайней мере на приятии лжи. Любой пеп-ток, пропаганда всегда основаны на этом. Очень часто отношения людей включают в себя элемент лжи. Еще более часто способность вписаться в какую-нибудь очень полезную в плане карьеры или денег структуру вроде КПСС или американского корпоративного менеджмента основана на способности искренне и убежденно врать. Про более приземленные примеры вроде продажи витаминов, средств похудания или там новой информационной системы заказчику я уж и не говорю. Знаю-знаю, сейчас раздадутся возмущенные голоса. Да, вы часто и сами верите в то, о чем говорите, во многих случаях это требование. Вам действительно нужно верить в мудрость вашего сегодняшнего менеджера, иначе очень трудно глядеть на него восхищенными глазами молодой студентки, когда он лепит горбатого про бизнес-цели вашей организации. И это делает ситуацию еще хуже. Поскольку врать себе – еще хуже чем врать другим.

Я уже обьяснял, что программирование не терпит вранья. Если вы пытаетесь соврать компьютеру, вы получаете баг, вот все. Что приучает вас к тому, что это занятие не только бессмысленное, но и сугубо вредное. Но в человеческом общении сплошь и рядом случаются противоположные ситуации. Как неверие в коммунизм мешало в карьере в СССР, так неверие в великую миссию унитазов с компьютерным управлением помешает вашей карьере в американской фирме, производящей оные унитазы.

Причем, мне кажется, что трудности с верой в ложные утверждения у хорошего программиста даже глубже, чем реакция компьютеров на баги. Честно предупрежу – это лишь моя теория, но лично мне она кажется правдоподобной. Такое ощущение, что в некоторых науках, дизайне сложных систем и программировании человечество достигло пределов эксплуатации нейронных сетей человеческого мозга. Если нейронная сеть используется на 1%, как, например, в профессиях вроде уборки мусора, вы можете лгать и верить в чушь используя остальные 99% мозга и ваша способность убирать мусор от этого не страдает. Когда нейронная сеть используется на пределе, у вас нет этой роскоши. Как только вы перестаете отличать правду от лжи, вы перестаете отличать баг от фичи, потому что вы используете одни и те же нейронные цепи. Продолжая аналогию, если у вас в ящике с инструментами лежит микроскоп и молоток, то вы можете забить молотком гвоздь, и микроскоп по-прежнему будет работать. Если у вас весь ящик занят большим микроскопом, то забейте им гвоздь, и он станет бесполезен как микроскоп. Он просто сломается. Это то как ложь действует на человеческий мозг. Большинству хватает ломаного микроскопа в голове, программисту, если он хочет быть хорошим программистом – нет. Уверуйте в развевающееся знамя, программу партии, WMD в Ираке или мудрость корпоративного менеджмента, и ваш код станет хуже.

Опять же, это лишь моя теория.

«Надо»

Третий и последний пример, о котором я хотел бы написать, это слово «надо». В программировании нету отдельностоящего слова «надо», он всегда сопровождается дополнением отвечающим на вопросы «Зачем?», «Для чего?» или «Почему?»

Комментировать программу надо чтобы ее можно было понять. Когда это обьянение пропущено и непонято, получаются строчки кода вроде:

X = 5; // Присвоить переменной X значение 5

With надо использовать, чтобы гарантировать вызов Dispose().

Автопойнтеры полезно использовать, чтобы не было утечек памяти.

Если вы не понимаете зачем что-то «надо», вы скорее всего будете делать это неправильно. Когда вы это осваиваете, это тоже выплескивается в ваше общение с собратьями, если не по разуму, то по крайней мере по биологическому виду.

Дело в том, что к сожалению, большинство мемовирусов устроено так, что они активно используют слово «надо» и программируют свои носители на агрессию на вопрос «зачем?» Попробуйте спросить националиста с окраин бывшего СССР зачем ему его «маленькая но независимая». Попробуйте спросить новообращенного христианина зачем верить в Бога. Попробуйте спросить алкоголика зачем он пьет. Далеко не всегда мемовирусы вредны – некоторые из них являются симбиотами, которые помогают носителю. Здравый патриотизм обеспечивает поддержку и создание среды, в которой легче жить всем. Воздержание от «нечистой» свинины предотвращало отравления в жарких странах. Но в любом случае, «надо» без ответа на вопрос «зачем» плохо лезет в голову программиста, а вопрос «зачем» очень часто оканчивается агрессивной реакцией.

С одной стороны, в экстремальных случаях вроде приведенных выше, это свойство личности программиста защищает вас и только на пользу. Но в граничных, «размытых» случаях оно все равно приносит много проблем.

Например, если ваше дите требует новую видеокарту. Разумеется, это «надо»! Вы, разумеется, спрашиваете «зачем». Вы просто хотите услышать полную версию, вы не понимаете что такое «надо» без обьяснения зачем. Вам может даже вполне устроить ответ «потому что хочется!» или там, «у меня без нее игрушка не идет!» Более того, на второй ответ вы можете заставить ребенка разобраться точно, чего именно не хватает и что именно нужно – поскольку теперь понятна цель и понятен критерий. То есть вы могли бы продолжать и сделать то, что от вас хотят. Что непрограммист слышит в ответ – это то, что вы не хотите купить видеокарту. Дальше в зависимости от отношений в семье вместо ответа на ваш вопрос начинаются игры, чтобы вас уломать, что не только не отвечает на ваш вопрос, а вообще запутывает его до состояния когда вообще ничего не понять. А учитывая то, что непрограммисты не страдают fidelity to reality, то Роулинг отдыхает, дите обижается, а вы получаете лишнюю головную боль.

Вот такое вот вредное слово «надо»...

На этом я, пожалуй, закончу серию статей. Просто для тех, кто хочет стать программистом, я хотел описать некоторые моменты, которые их ждут по другую сторону. В принципе, ничего страшного.

No comments: