Когда у вашей компании не хватает опыта в инструментарии или технологиях, которые могут сделать её более продуктивной, у неё есть «долг знаний» (knowledge debt).

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

Задачи
— Разработка ядра системы и компонентов бекенда
— Анализ и улучшение эффективности, масштабируемости и стабильности различных ресурсов системы

Требования
— Магистр в Computer Science или смежной области
— 2+ года опыта в Java
— Эксперт в реляционных базах данных и оптимизации запросов в MySQL

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

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

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

Распознание долга знаний


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

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

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

Боритесь с долгом знаний экспериментируя


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

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

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

Инструменты, которые вы используете для собственной продуктивности — одни из лучших кандидатов для экспериментов. Попробуйте новый редактор для кода, вроде Netbeans или Emacs. Если вы привыкли к Subversion для контроля версий, попробуйте Git для новых проектов или для ваших open-source проектов.

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

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

Боритесь с долгом знаний наймом людей


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

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

Заключение


Кроме долгосрочной выгоды, поддержка долга знаний на низком уровне имеет и более тонкие преимущества. Низкий долг знаний может помочь с набором людей, поскольку хорошие программисты зачастую хотят работать с последними и современными инструментами и технологиями. Борьба с долгом знаний также открывает вам несколько различных способов смотреть на проблемы, что делает вас более эффективными даже со старыми технологиями. Как пример последнего утверждения, у Эрика Реймонда есть известная цитата про Lisp: "[изучение Lisp] сделает вас более лучшим программистом до конца жизни, даже если вы никогда не будете активно использовать Lisp"

Так что выходите из своей зоны комфорта и выплачивайте свой долг знаний. Вы не пожалеете.

Комментарии (11)


  1. bm13kk
    01.02.2016 16:23

    Ниочем.

    Описана одна сторона медали. Без понимания «где золотая середина» и «когда мы перегибаем палку», написанный текст — трата времени.


    1. divan0
      01.02.2016 16:26

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


  1. amaksr
    01.02.2016 20:19

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

    А что не так с Enterprise Java?


  1. worldmind
    01.02.2016 22:17

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

    суперправильно, настоящий профессионал освоит любую технологию и будет выдавать хороший результат


  1. 4umak
    02.02.2016 08:08

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

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


    1. divan0
      02.02.2016 13:56

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


      1. 4umak
        02.02.2016 14:01

        О, про перевод и не заметил, точно. Тогда вопрос перенаправляется автору оригинала:)

        Пример действительно утрирован, потому что зависит от того, какую проблему решают этой печатной машинкой:) Если «быстро напечатать немного текста для себя» — вполне. А если «издавать еженедельник с тиражом в 100тыс копий», то это совсем другое. И для каждой задачи свой инструмент.

        А если мы три года делаем готовый продукт на LAMP, а тут к нам приходит хипстер и говорит «вы чо такие унылые консервы, всё переписываем на Rust!», то его закономерно пошлют по известному адресу в абсолютном большинстве живых примеров:)


        1. divan0
          02.02.2016 14:14

          Естественно, что хипстеры, которые тянут незрелый и неоправданный инструментарий в прод — это тема для отдельной статьи. Но если команде внезапно понадобится шустрый микросервис-числомолотилка, а команда вся набрана под LAMP, то они и будут делать его на PHP, теряя в продуктивности и ещё больше подвязывая себя на именно этот стек.