Category Archives: Ниачом

О языке производственного общения

На прошлой работе, где народу в подчинении было на десятичный порядок больше, сделал любопытные наблюдения на стыке лингвистики, управления проектами, когнитивной психологии и половой дискриминации.

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

Простой пример: для того чтобы сложные проблемы были подъёмны, их разделяют на уровни абстракции – это позволяет определять одну функциональность в терминах другой, оставляя на каждом уровне приемлемое для анализа количество сложности. Это замечательно работает и позволяет разделять такие задачи по нескольким исполнителям, посредством чего доводить общую сложность систем до неприличных величин. Проблемы начинаются тогда, когда возникают нестыковки и приходится анализировать поведение механизмов, разделённых несколькими уровнями абстракции. Грубая аналогия: это чем-то похоже на попытку определения человеческих отношений в терминах биохимических процессов в мозге – приходится иметь в виду огромное количество деталей с крайне неочевидным влиянием на конечные результаты.

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

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

Как-то я обратил внимание на то, что подобные дискуссии с участием представительниц прекрасного пола проходят с существенно меньшей эффективностью. Точных чисел с процентами у меня, разумеется, нет, но падение эффективности было достаточным для того, чтобы учитывать его при принятии решений о том, кому следует поручать разбор какой-либо проблемы. Причём, проявлялось это не только на уровне их персонального вклада в обсуждение, снижалась эффективность передачи информации и между остальными участниками дискуссии.

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

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

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

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

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

Во-первых, переопределение терминов в контексте обсуждения приводит к необходимости осознанно различать использование слова по назначению и в качестве ссылки на введённое понятие. При каждом упоминании слова, необходимо принять решение о том, буквально оно использовано или иносказательно. В то время как вокабулярий русского мата достаточно редко используется в буквальном смысле (для обозначения элементов репродуктивной системы, её процессов и девиаций), а подавляющее большинство его применений иносказательно. Таким образом, его и его производные можно рассматривать как набор универсальных, контекстно-свободных слов, допускающих применение для обозначения любого, даже самого тяжело формализуемого, понятия. И, что немаловажно, не требующих оценки буквальности при каждом применении.

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

Таким образом, разработчики, лишённые из-за необходимости «фильтровать базар» выразительных возможностей мата, вынуждены нести дополнительную когнитивную нагрузку, чтобы это скомпенсировать. Разумеется, это сказывается на эффективности коммуникаций самым плачевным образом.

По результатам наблюдений были сделаны следующие практические выводы:

1. Дейкстра был прав: «Besides a mathematical inclination, an exceptionally good mastery of one’s native tongue is the most vital asset of a competent programmer». Способность витиевато изъясняться, как цензурно, так и наоборот, даёт серьёзный плюс к способности обсуждать запредельно сложные вещи.

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

3. Раздражающая многих привычка хохмить по поводу и без бывает в некоторых случаях полезна – удачная шутка или аллюзия на неё формирует надёжную ассоциацию и может в дальнейшем использоваться для привязки понятий.

4. По возможности следует воздерживаться от участия женщин в обсуждении действительно сложных проблем, например тех, которые требуют коммуникаций между разработчиками на нескольких уровнях абстракции. И ни в коем случае не подключать их к уже идущему обсуждению, чтобы не разрушить стихийно сформированный понятийный аппарат, лишив участников возможности применения половины понятий.

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

Twenty twelve, google maps и корень зла

В очередной раз обновили вордпресс.  Поставив новую, ещё более минималистическую тему, привычно уже обнаружили то, что новая тема по-новому кривит встроенную на странице контактов карту.

Прошлогодняя тема twenty eleven ставила максимальную ширину картинкам, так что тайлы карты съёживались, открывая промежутки между ними (обсуждение можно найти, например, тут).

Новая тема twenty twelve добавляет картинкам элегантные тени, от чего карта начинает выглядеть так, будто её хранили в сложенном виде, и, расправив, не смогли разгладить на сгибах.

Если вдруг кому интересно, то лечится это, как и раньше, банальным добавлением стиля, с отменой этого эффекта у картинок – потомков контейнера с картой:

<style><!--
#map_canvas img { max-width: none; box-shadow: none; }
--></style>

Сложностей, в принципе, никаких: всё решается за пару минут тыканья в каком-нибудь фаербаге.  Тем не менее, при всей своей незначительности, это – проявление настоящей проблемы, куда большей и на данный момент принципиально неразрешимой.

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

В частности, каскадность стилей (первая C из CSS) – вещь замечательная и незаменимая, но её наличие делает невозможным построение компонентов, которые гарантированно получится использовать повторно.  Просто потому, что отображение внутреннего содержимого компонента зависит и от того, где он помещён.

Даже если компонент явно укажет все используемые стили, в том числе и те, значения которых берутся по умолчанию, этого всё равно будет недостаточно – развитие технологий рано или поздно приведёт к появлению новых стилей, влияющих неизвестным заранее способом.  Причём, это происходит регулярно: производители каждого браузера постоянно добавляют свои возможности разной степени экспериментальности, с вендорными префиксами или без.

Некоторую надежду вселяет то, что попытки изобрести способ совместить несовместимое всё-таки предпринимаются.  Спецификация Web Components пока на самой ранней стадии обсуждения, но именно с ней связаны основные на данный момент надежды на решение, в том числе, и вышеозначенной проблемы изоляции компонента от контекста.  Правда, то, что там описано, судя по всему, потребует выворачивания наизнанку всей логики работы браузера, со всеми вытекающими последствиями.

Hello world!

Спонтанно решили завести себе конторский бложек.

До большого сайта “как у взрослых” руки не доходят уже много лет, да и необходимости в нём особенной не было.  На мой взгляд, у мелких контор между сайтом и бизнесом имеется обратная зависимость: пока есть заказы – нету времени на сайт, заказы кончаются – появляется время для сайта, с сайта приходят новые заказы – на сайт снова не хватает времени.  Поэтому, отсутствие сайта у мелкой айтишной конторы в целом можно считать хорошим признаком.

Тем не менее, периодически хочется записать результат каких-нибудь произведённых раскопок, просто чтобы не потерялось.  Сильно привязанные к проектам вещи разумно отмечать на конторской вики, а то, что более или менее воспринимается отдельно, вполне можно выкладывать в интернеты.  Чем мы, собственно, и займёмся.

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

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

Обещать регулярности обновлений разумеется не будем.  Равно как и того, что написанное будет хоть кому-нибудь кроме нас интересно.  Но если вас всё-таки угораздило забрести на наш бложек – милости просим, чувствуйте себя как дома.