На главную

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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Расскажу одну оптимистичную историю. Она начинается в 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, которые означают Достижимость и Крайний срок. Вам не нужно ни первое, ни второе.

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

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

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

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

Ресурсы

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

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

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

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

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

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

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

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

На вопрос «чем платить докладчикам» я отвечу позже. Если у вас нет ни докладчика, ни времени, используйте План Б — проведите тематическую дискуссию.

Прелесть дискуссии в том, что её не надо готовить — люди просто приходят и начинают спорить. Это прекрасное времяпрепровождение, гораздо менее травмоопасное, чем какой-нибудь Бойцовский клуб. Ставьте на середину комнаты флипчарт, берите фломастеры и фиксируйте результаты. Модерируйте дискуссию — эта полезная практика пригодится вам на работе, где есть программисты, которые спорят.

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

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

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

Такую практику даёт модерируемая дискуссия. Экономьте свои силы — предлагайте участникам сообщества побыть модераторами.

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

  1. Как проходить и проводить собеседование. Кто такой хороший работодатель.
  2. Что изучать, чтобы быть хорошим программистом. Методы обучения. Способы восстановления сил.
  3. Как договариваться с коллегами. Командообразование. Конфликты. Soft Skills.
  4. Эффективность программистов. Критерии качества работы.
  5. Организация (удалённого) процесса разработки.
  6. Технический долг. Agile.
  7. Есть ли жизнь после сорока?

Эксперименты

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

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

На третью встречу пришли двадцать четыре человека.

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

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

Расплата

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

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

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

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

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

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

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

Вы ведь догадались, какой ответ правильный?

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

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

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

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

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

Развиваться в сторону управления помогают модерация и участие в организации.

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

Доклады, подготовленные и обкатанные в клубе, мы несём в компании и на конференции. Организаторы нас любят. Компании приглашают нас, чтобы мы провели встречу на их территории и поработали с их докладчиками. Докладчики бесплатно участвуют в интересных конференциях, обрастают контактами, становятся известны в профессиональных кругах.

Это то, что вы делаете для них.

Выводы

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

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