На главную

IT сообщество своими руками

11-07-2019

Московский клуб программистов

В фильме «Покровские ворота» персонаж, блестяще сыгранный Леонидом Броневым — Велюров, артист эстрады — утверждал, что прежде, чем приступать к основной программе «всем рассказать немедля надо, кто ты, зачем и почему». Опираясь на завет классика, расскажу, что мы за клуб программистов.

Взглянем на карту технических сообществ сайта meetup.com. Первое место по количеству людей здесь занимает одна из старейших тусовок Москвы Inspired by Agile, которая насчитывает 3800 человек.

Среди лидеров находится и Яндекс, с 2700 участниками.

Где мы? На втором месте. 11 июля 2019 года нас 2970.

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

Можно делиться историей успеха. Но есть ли у нас основания обобщить свой опыт и считать его весомым?

Оказывается, нет. Всё из-за штуки, которая называется ошибка выжившего.

Представьте, что вы работаете авиационным конструктором во время второй мировой войны. Не все ваши самолёты возвращаются из боевых вылетов. На тех, которые возвращаются, есть пробоины, и вы собираете статистику, где именно эти пробоины встречаются. Больше всего их на фюзеляже, а меньше всего — в районе двигателя. Самолёт не танк — вы не можете усилить броню везде, иначе он не взлетит. Вопрос: где усиливать броню? Очевидный ответ — там, где больше всего пробоин. Так?

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

Какое отношение ошибка выжившего имеет к нам? Более чем непосредственное: наш опыт односторонен. Чтобы получить объёмное представление о живучих сообществах, полезно исследовать и опыт тех — а может быть и именно тех — кто не выжил.

Где собрать такие данные? Проводить исследования? Искать организаторов мёртвых сообществ на meetup.com и проводить с ними интервью? Большая, неподъемная задача. Как быть? Ответ пришел внезапно, из уст актера Леонида Филатова.

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

Но Филатов не только прекрасный поэт, но и прекрасный пародист. В цикле “Таганка 75” он пародировал известных поэтов того времени: Евтушенко, Вознесенского, Рождественского. Филатов рассказывает: “Если читать всё творчество Евгения Александровича, можно вывести две закономерности. Во-первых, выясняется, что нет ни одного мало-мальски известного человека в мире, с которым бы Евтушенко не состоял в близких дружеских отношениях. Во-вторых, оказывается, что каждый выезд Евтушенко за рубеж, сопряжен с какой-то опасностью для его жизни”.

Не очень важно, что было на самом деле, важно, как об этом рассказать. Кто мешает мне представляться “почти расстрелянным” и травить страшные сказки об организации сообществ?

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

Трудности

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

Inspired by Agile тоже демонстрирует высокий рост, при этом на meetup.com они пришли годом раньше нас.

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

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

Есть и гораздо более грустный график — график активных участников.

Активные участники

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

Но сначала поведаю об организационных трудностях.

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

Типичная подготовка встречи похожа на алгоритм. Сначала я ищу того, кто захочет прочитать доклад. Большинство участников этого не хотят, и поиск докладчика превращается в занимательный квест. Ситуация осложняется тем, что докладчику предстоит выступать бесплатно. Не на конференции Microsoft. Не на семинаре Яндекса. На заседании неизвестного “клуба программистов”. Не все на это согласны.

Но, предположим, докладчик найден.

Теперь нам нужно помещение. Обычно мы собираемся в анти-кафе, где каждый платит за себя, но там нельзя бесплатно забронировать зал с проектором. Бесплатный зал с проектором есть во ФРИИ (Фонд Развития Интернет Инициатив), но я не могу просто так его забронировать. Надо списаться с администратором, договориться о встрече, прийти, защитить тему, и только после этого мне могут дать (а могу и не дать) зал.

Представим, что зал найден. Теперь самое интересное.

Вместимость зала тридцать человек. Я открываю регистрацию, и через два дня количество участников приближается к пятидесяти. “Где они сидеть-то будут?”, — думаю я обречённо и закрываю регистрацию.

Наступает день доклада. Я переживаю, придет ли докладчик, но он приходит. Бывало и так, что не приходил.

Докладчик начинает читать. Для тех пятнадцати человек, которые и в самом деле добрались до встречи. Читает он не так чтобы сверхинтересно. Половина людей зевает, но другая, кажется, слушает. В конце доклада слушатели активно задают вопросы. Завязывается дискуссия. Люди выглядят довольными. Кое-кто даже говорит вам спасибо.

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

Каковы итоги?

Вы провели несколько дней как главный герой пьесы «Женитьба Фигаро». Вместо того, чтобы ехать домой после работы, вы ехали на переговоры. Вы писали анонсы. Вы правдами и неправдами уговаривали докладчика. А на следующий день на сайте meetup.com вам оставят обратную связь.

Всё было ужасно. Недавно на семинаре Microsoft кормили пиццей. Это была исключительная пицца. Сразу видно, что компания Microsoft на гостях не экономит. А на семинаре mail.ru в прошлую среду был огромный зал и большой проектор. А Яндекс на новый год не поскупился и привёз самого Торвальдса. Вот это был доклад! У вас всё плохо, скучно и дезорганизовано.

Самое обидное, что часть претензий абсолютно обоснована.

Но бог с ней, с обидой — это всего лишь эмоция, субстанция эфемерная. Совсем другое дело, когда речь идёт о глубоко ползучем материализме.

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

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

В моём возрасте люди начинают думать о вечном и делать что-то не только для себя. Каждые полгода meetup.com снимает с моей карты 25 долларов, и каждый год 700 рублей уходят в пользу РУ-ЦЕНТРА. Я несколько раз оплачивал залы, и не всегда мне удавалось выйти в ноль. Последний раз я «попал», собирая новогоднюю встречу в баре и бронируя «столик» на тридцать человек.

Я ни на что не жалуюсь и воспринимаю эти траты как вложение в дело, которое мне нравится. Давным-давно другие люди — мои старшие товарищи — точно также вкладывали в меня и в таких, как я.

Я не монетизирую клуб не из благородства, а потому, что по-плохому не хочу, а как по-хорошему — пока не придумал.

Резюмируя: слухи о баснословных прибылях организаторов сильно преувеличены. Готовьтесь быть в, пусть небольшом, но минусе.

На этой позитивной ноте перейдём к освещению самой трудной темы.

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

И этим, к сожалению, иногда пытаются пользоваться.

Скажем, сотрудники отдела кадров. Я прекрасно понимаю, что работа рекрутера в индустрии нелегка. И я прекрасно понимаю, что некоторые сотрудники предпочитают простые решения.

Например, у нас есть бездна программистов, которые сами собираются в одном месте! Давайте будем хантить среди них!

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

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

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

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

Стартаперы. Они настырнее рекрутеров. Они верят в себя. Они умеют работать с возражениями. Они аргументированно доводят вас до состояния, которые физиологи называют «бей или беги». Иногда «бей, потом беги».

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

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

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

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

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

Врочем, стартаперы безобидны. Есть третья, действительно опасная категория.

Это городские сумасшедшие.

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

Он поделится с вами соображениями, как организовать процесс разработки.

И расскажет гениальную идею — социальная сеть, которая одновременно и сайт знакомств.

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

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

Так выглядит наша «история успеха» изнутри. Осталось ответить на вопрос, зачем я этим занимаюсь, если всё так плохо. А ответ простой — потому что всё не так плохо.

Приятные мелочи

Расскажу одну оптимистичную историю. Она начинается в 1975 году, когда в закромах электронных конференций появились первые версии так называемого Jargon File. Это словарь программистского сленга.

Вы найдёте там бездну уморительных и необычных терминов. Один из них это deep magic, что по русски означает “тайная магия”. Deep magic — это удивительная и таинственная техника, без которой некоторые сложные программы просто не работают. Она не описана в литературе, и разобраться в ней может только мега-программист из мега-программистов.

Иными словами, deep magic — это что-то очень сложное и очень интересное. К тайной магии относятся, например, оптимизация компиляторов и искусственный интеллект. Удивительно, но часть этих самых нетривиальных задач удобно решать на функциональных языках программирования.

Функциональные языки достаточно необычны для большинства программистов. Непривычны. Таинственны. И вызывают большой интерес. Я разрабатываю под платформу .NET. На платформе доступны разные языки программирования, главный из которых это C#. Но в .NET есть и функциональный язык программирования — F#.

Не все знают, что C# и F# означают до-диез и фа-диез.

Я очень хотел выучить F#, но была одна беда — с литературой. В какой-то момент у нас вышла всего одна книга, написанная Крисом Смитом, одним из авторов F#. Потом появилась вторая, под авторством Дмитрия Сошникова.

Дмитрий — специалист по логическому и функциональному программированию, преподаватель МАИ, МФТИ и ВШЭ, автор книг, евангелист Microsoft. Он рубит фишку в функциональном программировании.

Первые уроки по F# я получил, читая книги Смита и Сошникова. Прошло много лет. Я организовал клуб программистов.

Однажды я получил письмо от барышни Ирины, сотрудницы Microsoft.

Ирина писала о том, что ее заинтересовала наша группа. По ее словам, Microsoft сотрудничает с техническими сообществами и готова предоставить кого-то из своих евангелистов, чтобы он рассказал нам что-нибудь захватывающее.

Я посоветовался с Алексеем Пироговым, своим коллегой по общественной работе. Я хотел пригласить именно Сошникова, и Алексей — матёрый функциональный программист — ответил: «конечно, Сошникова, кого же еще?»

Я задержал дыхание и спросил Ирину, можем ли мы позвать Сошникова. Ирина ответила: «да, конечно», и мы его позвали.

Дмитрий сделал доклад про F#. Алексей сделал доклад про ELM. В конце встречи я подошёл к Дмитрию и, на правах организатора, поговорил с ним о том о сём. Напоследок я протянул ему книгу и попросил автограф.

Теперь у меня есть автограф Сошникова, и всё благодаря клубу.

Конкретика

Что в сухом остатке? Проанализировав наши трудные ситуации, я выделил шесть важных пунктов, на которые стоит обратить внимание.

Первый пункт касается цели.

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

Главные для нас буквы это A — Attainable и T — Time-bound, которые означают Достижимость и Крайний срок. Вам не нужно ни первое, ни второе.

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

Считается, что формулировать миссию полезно, однако делать это очень непросто. Я сам долго думал и пытался нащупать правильные слова. Три года я не мог этого сделать.

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

Покрутите её. Возможно, наша миссия поможет вам сформулировать свою.

Второй пункт касается ресурсов. Вы не работаете за зарплату и не распределяете рекламный бюджет. Какие ресурсы у вас есть?

Время, силы, деньги.

И всё это может закончиться.

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

Чтобы не проводить всё время за организацией встреч , я предпочитаю налаженные схемы. Мы встречаемся всегда по четвергам. Всегда через две недели. Всегда в семь часов. Почти всегда в одном и том же месте, хотя и ходим изредка в гости.

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

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

Много времени отнимает подготовка докладов. И здесь я предпочитаю не делать всё один. Я постоянно ищу людей, которым интересно докладывать, писать, модерировать, организовывать. Бывает, что я устаю, но ещё ни разу усталость не подходила к опасной отметке.

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

Я уже рассказывал, что на первое заседание нашего клуба никто не пришел. На второе я позвал друзей-программистов, и нас собралось три человека. Возможно, дело заключалось в том, что название наших встреч никого особо не вдохновляло. Что-то вроде: «Давайте соберемся и поговорим о всяком интересном». Возможно, следовало точнее определить тему встречи? Например: «Как проходить собеседования»?

Именно так я и сделал. И на третью встречу пришли около двадцати человек.

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

Одно из важнейших правил — не надо бояться экспериментов. Если что-то пойдет не так, это коснётся только одной встречи.

Четвёртый пункт нашего списка — сильные стороны.

Я неплохо пишу. Именно поэтому все тексты на нашем сайте, все анонсы на meetup.com, все рассылки написаны лично мной. Почти все, за редкими исключениями. Подозреваю, что люди записываются на встречи из-за божественного стиля моих анонсов. Конечно, это не так, но мне нравится так думать.

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

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

Подспорьем мне служил и так называемый план Б. Не имея докладчика, всегда можно провести обсуждение, практикуя то, что в современном корпоративном мире называется модерированием дискуссий и фасилитацией.

Пятый пункт касается команды.

Очевидно, команда нужна. Одному не потянуть, людей надо искать — все эти истины вы знаете и так. У них есть один, но существенный недостаток — неясно, что конкретно делать. Если у вас нет денег, чем вы будете платить своей команде?

Респектом и уважухой? Иногда да. Вы занимаетесь общественной работой, это благородно, и вы можете просить о помощи, но люди вам ничего не должны. Что существенного вы можете им предложить? Свой ответ я дам позже.

Крупнейшая встреча клуба состоялась в Лаборатории Касперского. На неё пришли больше ста человек. Организационными вопросами занималась Нина Пакшина, доклады делали Алексей Пирогов и Юра Сыровецкий. Нина и Юра сотрудники Лаборатории, но здесь они выступали, как члены клуба. Сам я палец о палец не ударил — просто пришел, сел и стал и слушать доклады.

Я очень горжусь именно этой встречей и тем, как сработали ребята.

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

В то же самое время я общался с бизнесом, который спрашивал: какая от нас польза? Можно ли у нас рекрутировать программистов? Нельзя? Эффективность рекрутинга нулевая? Если эффективность рекрутинга нулевая, мы бизнесу неинтересны.

В конце концов я понял, что мы можем быть полезны и докладчикам, и компаниям. В индустрии существует возрастная проблема — зрелых программистов вытесняют в менеджеры, несмотря на то, что менеджерствовать они не любят. Они любят программировать и моглы бы стать экспертами и наставниками. Одновременно в индустрии существует проблема с кадрами. На фоне тотальной нехватки программистов некоторые компании, скажем, Лаборатория Касперского, ищут новые методы привлечения сотрудников. Чтобы найти хороших программистов на C++, можно участвовать в конференциях по C++ или самим проводить конференции по C++. Можно делать доклады и рассказывать о крутых задачах, которые решают сотрудники на своих рабочих местах. Можно писать об этом в блогах.

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

Мой ответ — у вас. Проведя пятьдесят встреч и выслушав сорок докладов, вы заработаете профессиональную травму — хронически вывихнутую челюсть. Вместе с травмой вы начнёте разбираться в том, как делать интересные доклады.

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

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

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

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

Новое понимание привело к повороту в жизни клуба. Мы собираемся в компании Leroy Merlin, и у нас стало гораздо больше докладов. Бывает даже очередь среди докладчиков. К нам приходят компании, чтобы обкатать свои материалы на технической аудитории. Мы стали принимать участие в конференциях, принося подготовленные и обкатанные доклады.

Я не утверждаю, что вам надо делать то же самое. Посмотрите на наши идеи, и прикиньте, какие из них подойдут вам. А потом придумайте свои.

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