Рефлексия – штука любопытная. Еще интересней, если она базируется на многолетнем опыте. Под катом рассказ о судьбе программиста устами директора по разработке Parallels RAS Игоря Марната от первого лица. Enjoy!
«Если вы не двигаетесь вперёд, то вы не стоите на месте. Мир движется вперёд, а вы - нет. Тем самым, вы двигаетесь назад!». © (Кто-то очень умный)


Эпиграф

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

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

Движение вглубь


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

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

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

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

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

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

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

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

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

Движение вбок


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

Параллельно с разработкой встраиваемого ПО для телефонии я работал над распределённой системой сбора информации и выставления счетов пользователям – и это совершенно другой мир, другие языки, другие платформы. Рядом — автоматизация развёртывания, конфигурирования и тестирования, это уже третий мир, всё снова другое. 

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

Движение вширь


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

Как понять незнакомого человека за короткое время? Как оценить его профессионализм и личные качества? Они вообще важны, эти личные качества? Или важен только профессионализм? На что вообще нужно обращать внимание при найме? И как именно его обращать? Сейчас всё это кажется довольно очевидным, но при найме первого инженера для меня - это был для меня настоящий тёмный лес. 

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

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

Например, agile появился сравнительно недавно, меньше двадцати лет назад, CI — около тридцати, классической книге Фредерика Брукса уже около пятидесяти лет. Другие же аспекты, связанные с управлением командой, психологией, мотивацией, управлением процессами в организации в целом, организацией коммуникаций - универсальны, пришли из других предметных областей уже много лет назад, и отлично применимы и в области разработки.

Я читал довольно много литературы на тему управления командой. Мне кажется, наиболее детально и глубоко эта тема изучена в Америке и Японии. Помимо классических книг о разработке, инженерном процессе, менеджменте, я бы рекомендовал книги советских и российских авиаконструкторов и конструкторов ракет. Кроме того, NASA, NAVY, Toyota — эти организации и компании вкладывают огромные средства в оптимизацию своих процессов, проводят внутренние конференции для своих менеджеров, материалы по ним доступны в сети, есть много интересных художественных книг от них и о них. Кроме того, помимо отличной информации о процессах управлении, выстроенных в этих компаниях, читать об автомобилях, самолётах, ракетах, кораблях и их разработке просто очень интересно.

В общем, простор для повышения своей компетенции в области управления огромный, задачи тоже очень разные. Начать можно с организации своей собственной работы, с внедрения лучших инженерных практик типа unit-тестов, ревью кода, continuous integration и continuous delivery, остановиться можно очень далеко. А лучше и не останавливаться:)

Заключение 


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

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

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

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

Несколько хороших книг, много желания и немного движения могут всё сильно изменить в лучшую сторону. Удачи!

З.Ы. Делитесь своим опытом и лайфхаками в комментариях. К сожалению, Игоря пока нет на Хабре, качаю карму для того, чтобы можно было его пригласить. А пока переадресую ему ваши вопросы, если такие возникнут. Спасибо за проявленный интерес.

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


  1. dimoff66
    29.11.2018 11:21
    +1

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

    Если работа превратилась в рутину, можно ее бросить на несколько месяцев и уехать к океану, дальше человек почувствует что ему делать.


    1. shai_hulud
      29.11.2018 12:18

      Del


    1. shai_hulud
      29.11.2018 12:21
      +2

      А давно на Хабре программистов, а не гостей профессии, начали называть «умственно отсталыми» и плюсовать?


      1. dimoff66
        29.11.2018 13:29

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


        1. shai_hulud
          29.11.2018 15:58

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


        1. iOrange
          29.11.2018 19:12
          +5

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


          1. dimoff66
            29.11.2018 19:46
            -3

            Как вы можете оказаться умственно отсталым только из-за того, что кто-то это написал. Если кто-то пишет что вы умственно отсталый, а вы им не являетесь, значит этот человек ошибается, он сам глуп, и здесь нет повода для расстройства или обиды. Если вы так реагируете на чужие слова, которые даже не касаются вас ни прямо, ни косвенно — а они не касаются, я не писал, что любой человек, кто пишет код — умственно отсталый, я говорил это про тех, кто делает это всю жизнь, и это так, я не могу ничего с этим поделать, даже если вы меня сминусуете 40 раз, то есть вы даже не способны внимательно прочитать, что пишет собеседник и спешите защитить свое задетое эго… Чем вы отличаетесь от религиозных фанатиков, которые по любому поводу говорят об их оскорбленных религиозных чувствах? Ничем.


            1. 0xd34df00d
              29.11.2018 20:49
              +2

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


              1. dimoff66
                29.11.2018 20:59
                -2

                Ничего такого, нужно всегда делать то, что нравится. Я писал для тех, кому это надоело.


    1. JC_IIB
      29.11.2018 16:22
      +1

      Любому разумному человеку рано или поздно надоедает кодить.

      Зачем вы так сильно размахиваете квантором всеобщности?

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

      «Чувствую, вы на Хабре не задержитесь» (С) VlK

      просто нужно сокращать время работы

      Кому нужно и почему нужно?

      уехать к океану

      "- Ага. Значит, именно на петеяровом?
      — Именно.
      — А если на сливочном?
      — А если на сливочном — то не получится." (С)

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


    1. pronvis
      29.11.2018 16:47

      Через чур категорично, но в целом согласен. Но, думаю, это можно про любую профессию сказать. «Хватит рисовать эти картины, любому нормальному человеку это надоест, уж тем более за 10 лет. Начни уже управлять теми кто рисует, открой своё дело, etc.» Но есть люди которым просто нравится делать то что они делают.
      Меня вот последнее время не отпускают мысли что мне надоело быть деталью чьей-то системы, но…


      1. dimoff66
        29.11.2018 17:18
        -2

        Начни уже управлять теми кто рисует, открой своё дело


        Я ничего подобного не писал.


    1. trueMoRoZ
      29.11.2018 17:56
      +2

      нужно быть умственно отсталым, чтобы оценивать интеллект других по их выбору профессионального пути)))


    1. tmaxx
      30.11.2018 10:41
      +1

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


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


      1. dimoff66
        30.11.2018 17:52

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

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

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


  1. Jackhetfield
    29.11.2018 11:27

    Если не сложно — можно в список рекомендаций всю описываемую литературу?
    Был бы очень благодарен, т.к. тема довольно актуальна :)


    1. SmirkinDA Автор
      30.11.2018 15:12

      Привет!
      Спросил у Игоря. Вот что он прислал:
      NASA Manager's Handbook for Software Development

      NASA Virtual PM Challenge

      Dale Carnegie

      Steve Mcconnell

      Максим Батырев

      Joel Spolsky

      Lido Anthony «Lee» Iacocca

      Ichak Kalderon Adizes

      Peter Ferdinand Drucker

      Fred Brooks

      Tom DeMarco

      Черток Борис

      Michael Abrashoff

      Тайити Оно


  1. tangro
    29.11.2018 13:13

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


    1. Trediol
      29.11.2018 17:56

      Согласен, без кардинальной смены контекста по выходным можно быстро перегореть


  1. Likvin
    29.11.2018 13:43

    Поддерживаю, тема очень актуальна)
    Тоже интересует литература по системе сбора информации и выставления счетов пользователям. Спасибо)


    1. SmirkinDA Автор
      30.11.2018 15:12

      Привет!
      Спросил у Игоря. Вот что он прислал:
      NASA Manager's Handbook for Software Development

      NASA Virtual PM Challenge

      Dale Carnegie

      Steve Mcconnell

      Максим Батырев

      Joel Spolsky

      Lido Anthony «Lee» Iacocca

      Ichak Kalderon Adizes

      Peter Ferdinand Drucker

      Fred Brooks

      Tom DeMarco

      Черток Борис

      Michael Abrashoff

      Тайити Оно


  1. Methos
    29.11.2018 19:26

    ответ на вопрос в заголовке


    начать снова кодить бесплатно, чтобы был запал.


    1. mkshma
      29.11.2018 19:36
      -4

      Программирование забесплатно — пустая трата времени.


      1. 0xd34df00d
        29.11.2018 20:48
        +3

        Вы забесплатно, я так понимаю, даже на велосипеде не покатаетесь, скажем?


      1. iOrange
        29.11.2018 21:34

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


  1. alex_mayak
    30.11.2018 10:25

    Здравствуйте.
    А есть зафиксированный список книг для прочтения?


    1. SmirkinDA Автор
      30.11.2018 15:11

      Привет!
      Спросил у Игоря. Вот что он прислал:
      NASA Manager's Handbook for Software Development

      NASA Virtual PM Challenge

      Dale Carnegie

      Steve Mcconnell

      Максим Батырев

      Joel Spolsky

      Lido Anthony «Lee» Iacocca

      Ichak Kalderon Adizes

      Peter Ferdinand Drucker

      Fred Brooks

      Tom DeMarco

      Черток Борис

      Michael Abrashoff

      Тайити Оно