Category: it

не катет

Mission statement

Я давно собирался написать некий "mission statement" - документ, описывающий задачи и планы на ближайшее будущее - для организации собственной деятельности. Однако, писать тексты у меня получается гораздо лучше, если я представляю, что их будет читать кто-то кроме меня. К тому же, содержание может показаться кому-то любопытным. Поэтому я решил написать его в ЖЖ. Не исключено, что его придется потом менять, но я использую Markdown + Mercurial, так что это должно быть легко.

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

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

Поиск взаимопонимания

Мы живем в стране, где очень остро стоят вопросы межкультурного взаимодействия. И дело не только во взаимодействиях коренные-приезжие. С падением СССР советская культура стала неактуальной, и людям пришлось переосмысливать многие вопросы организации своей жизни. Ныне активные молодые люди (к которым я отношусь) росли во время, когда люди старательно отказывались от старых моральных оринетиров, а новых еще не придумали. Это, с одной стороны, приводит к тому, что люди больше сами думают, а не пользуются общественными стереотипами, а с другой - приводит к изоляции человека - в том смысле, что людям становится сложнее найти общий язык. Это два противоположных социальных параметра - самостоятельное мышление и взаимопонимание.

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

Говори или делай

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

Описание противостояния групп догматически мыслящих менеджеров (которые говорят) и креативных исполнителей (которые делают) довольно часто в массовой культуре. Кто-то восхищается доктором Хаусом или Шерлоком (из сериала BBC One) за способность нарушать правила для достижения результата. Кто-то читает "Атланта" Айн Рэнд по рекомендации из блога Чичваркина. Суть одна - исполнитель-индивидуалист отказывается от социализации для достижения реальных результатов в своей работе. Менеджеры его не понимают, но вынуждены терпеть - потому, что им нужны его результаты.

Техническое мышление

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

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

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

Менеджерам в этом смысле повезло меньше - результат их работы зависит от людей, а не от техники, и все гораздо менее формально. Невозможно понять точно, подпишет Иван Иваныч договор, или нет. А если подписал, невозможно точно понять, почему. Если у менеджера и было "формальное мышление" на выходе из ВУЗа, за годы работы оно теряется за ненадобностью. Нужно подчеркнуть - это происходит только с теми менеджерами, которые работают с другими менеджерами (например, с Иваном Иванычем). Менеджеры проектов, например, работают большую часть времени с непосредственными исполнителями и способность мыслить формально не теряют.

Менеджмент без менеджеров

Именно отсутствие у менеджеров навыков формального мышления приводит к непониманию между ними и исполнителями. Интернет полон историй о том, какие дураки эти заказчики/начальники, что не понимают простой логики, какое дурацкое они прислали ТЗ/задание и как сложно с ними об этом говорить. Я вижу тут задачу поиска взаимопонимания, но отнюдь не между менеджерами и исполнителями. Вот главный вопрос: зачем мы вообще используем менеджеров для организации собственной деятельности? Если речь идет о выполнении строго технической работы, нельзя ли найти способ техническим специалистам разных отделов и компаний договариваться друг с другом, не используя прослойку из административного персонала, не умеющего мыслить формально?

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

Опыт программистов

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

Программирование - формальное выражение человеческих мыслей. Самая типичная задачка в IT всегда содержит два вкусных места: то, где нужно понять какую-то часть предметной области со слов эксперта/собтвенных мыслей и выдать формальную структуру данных, с которой потом нужно работать, и то, где нужно придуманный способ решения задачки закодить так, чтобы другие люди могли понять его исключительно по коду.

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

Другая вещь, которая всегда будоражила меня в программировании - это идея о том, что для него нужен только компьютер. Можно подумать о разных крутых программах - о тех, что помогают анализировать огромные массивы медицинских данных, или о тех, которые реализуют видеосвязь между людьми в разных точках мира - все эти программы при должном уровне компетенции могут быть написаны на самом дряном нетбуке за $100.

Эти два факта начали будоражить меня впервые, когда я узнал о движении Open Source. Если только подумать, насколько сложным программным продуктом является, например, ядро Linux, мысль о том, что программисты со всего мира (говорящие на разных языках, имеющие разное образование и жизненный опыт) пишут его вместе, сообща, и без помощи менеджеров, завораживает. И программистами этими могут быть кто угодно, от Нью-Йоркских богатеньких студентов до африканских старшеклассников.

Потом уже я познакомился с проектами GitHub и Bitbucket, позволяющими людям эффективно работать над программными продуктами. Пользователям предлагается использовать систему контроля версий, issue tracker, wiki и другие средства, помогающие менеджить работу над проектом. Задачи:

  • назначения задач и контроля их выполнения
  • отслеживания изменений в проекте и их аннотации
  • документирования проекта

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

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

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

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

Не только программисты

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

  • Книги выкладывают на GitHub для работы над черновиками и отслеживания ошибок. Например, CouchDB Guide.
  • Помимо StackOverflow и SuperUser, проектов исключительно технической тематики, платформа StackExchange содержит около 80 сайтов по самым разным тематикам, в том числе по вопросам культуры и искусства.
  • Open-sourced blueprints - инициатива по применению идей open-source на средства производства.

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

Моя цель

Нужно, чтобы прецеденты, описанные выше, возникали как можно чаще - по причинам, описанным выше. Программисты сейчас могут чувствовать абсолютную творческую свободу - все знания доступны, все средства разработки доступны, можно просто садиться и делать все, что захочется сделать! Не нужно, чтобы тебя взяли куда-то на работу, не нужно знать правильных людей. Очень важно сделать так, чтобы это было верно и во всех остальных областях человеческой деятельности. Чтобы можно было сдать квартиру без риелтора, организовать удобку дома без ЖЕКа, выпустить книгу без издателя. Нужно, чтобы люди могли сами организовывать любую свою деятельность.

А для этого нужна комбинация двух факторов - открытости информации и удобных средств работы с этой информацией.

С открытостью информации сейчас все налаживается. Поверьте человеку, который не ходил на лекции с второго курса (тогда закончилась физика) и слушал подкасты MIT before it was mainstream :) Кто бы мог подумать, что когда-нибудь будет такая вещь, как Courcera или Udacity. Теперь легко не только получать, но и публиковать информацию - к давно известным блогам прибавились социальные сети с их крутым фунционалом опросов, репостов, лайков.

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

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

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