Рефлексия – штука любопытная. Еще интересней, если она базируется на многолетнем опыте. Под катом рассказ о судьбе программиста устами директора по разработке Parallels RAS Игоря Марната от первого лица. Enjoy!
«Если вы не двигаетесь вперёд, то вы не стоите на месте. Мир движется вперёд, а вы - нет. Тем самым, вы двигаетесь назад!». © (Кто-то очень умный)
Эпиграф
Для меня программирование до сих пор не стало рутиной, хотя я занимаюсь разработкой больше двадцати лет. Думаю, это связано с тем, что я предпринимал определённые действия до того, как мой запал окончательно иссяк.
Если программирование стало для вас рутиной, то, возможно, мой опыт будет вам полезен. Хотите, чтобы что-то изменилось? Надо хотя бы что-то менять (глубокая мысль, не правда ли?). Надо куда-то двигаться. И вот, в разное время, я пробовал движение вглубь, движение вбок и движение вширь.
Движение вглубь
Особенность нашей работы в том, что каждый разработчик должен быть специалистом в двух областях — программировании, как таковом, и в той предметной области, для которой он создает программное обеспечение. Чем лучше и глубже разработчик разбирается в этих двух сферах, тем более интересные задачи он сможет решать. Чем интереснее и масштабнее задачи, тем более заметный получается результат.
Программисты, в большинстве своем, черпают мотивацию в верхних уровнях пирамиды Маслоу — познание, самореализация, потребность в уважении. Для этого необходимо, чтобы, во-первых, результат их работы был заметен. Во-вторых, этот результат должен увидеть свет, им должны пользоваться люди. Видимость результата, очевидно, тесно связана с размером этого результата, с его значением, весом.
Во времена разработки программного обеспечения для телекома, я вложил много времени и сил в изучение новой для себя предметной области: устройство процессоров общего назначения и DSP, памяти, систем хранения, сетевых протоколов, видов сигнализации, алгоритмов обработки сигналов, в общем, кучу разных интересных вещей из телефонии, схемотехники, сетей.
На это ушло несколько лет (в течение которых я работал заметно больше восьми часов в день). Лет через пять я работал на уровне архитектора, участвуя в создании структуры программного обеспечения новых телефонных станций, архитектуры их компонент. Кода я писал меньше, занимаясь разработкой спецификаций для команды, ревью сложного кода, работой над некоторыми критическими компонентами, протоколами и драйверами. Хорошее понимание устройства каждого компонента, принципов его работы, связи с остальными позволяет заниматься разработкой архитектуры продукта, протоколов связи, внешних интерфейсов.
Очевидно, любой программный продукт — результат работы всей команды, но при своем уровне участия в проекте я чувствовал себя причастным к созданию не отдельных компонентов, а продукта целиком. Драйв при этом получаешь неимоверный, ответственности тоже больше.
В общем, чем глубже программист погружен в предметную область, с которой он работает, чем лучше владеет контекстом, чем шире его кругозор, тем интереснее он может сделать свою работу.
Это относится не только к внутреннему устройству компонентов продукта. Чем лучше вы будете знать своих пользователей, то, как они используют продукт, почему так, а не иначе, какие у них бывают проблемы, как устроены продукты конкурентов, тем интереснее вам будет работать.
Узнать всё это просто — нужно больше общаться с командами поддержки, тестирования, внедрения, с конечными пользователями продукта. Если удастся наладить рабочее взаимодействие, порешать для них какие-то задачи, поучаствовать в совместной работе – то вообще супер.
Кстати, тут есть еще одно замечание по поводу организации самого рабочего процесса, которого придерживаются, в частности, философия DevOps и подход к разработке и operations известный как SRE, изначально пришедший из Google. Необходимо стремиться устранить разделение между командами разработки, внедрения и поддержки, движение к совместной работе.
На всякий случай, отмечу, что RFC, книги с животными на обложке, документация производителей, переписка в большинстве сообществ open source используют английский язык в качестве стандартного средства общения. Информации в переводах меньше, она зачастую искажается и почти всегда запаздывает. Многие производители вообще не заморачиваются переводами документации. Поэтому, как минимум, способность читать книги на английском языке — довольно базовое, так сказать, санитарно-гигиеническое требование к разработчику, который хочет развиваться.
Движение вбок
Во многом интерес программиста к его деятельности определяется интересом к предметной области, в которой он работает. Например, вам может быть скучно работать с финансовыми приложениями, но будет интересно работать над инфраструктурой для работы таких приложений.
Параллельно с разработкой встраиваемого ПО для телефонии я работал над распределённой системой сбора информации и выставления счетов пользователям – и это совершенно другой мир, другие языки, другие платформы. Рядом — автоматизация развёртывания, конфигурирования и тестирования, это уже третий мир, всё снова другое.
Возможно, для оживления вашей заинтересованности вам стоит поговорить с коллегой или начальником, посмотреть, чем занимаются команды рядом. Даже небольшой шаг в сторону от привычной деятельности может многое изменить в вашей работе, дать вам иной взгляд на вещи. Как говорится, точка местонахождения определяет угол зрения
Движение вширь
По мере погружения в телефонию оказалось, что я не успеваю уделять достаточно времени и внимания другим проектам, над которыми я работал. Выход был очевиден — я стал работать еще больше. Но масштабируется это не сильно. При долгой работе по ночам и выходным через какое-то время и работать уже не хочется, и жить некогда. Мы с шефом приняли решение — нанять еще одного программиста в нашу команду. Я довольно самонадеянно провёл пару собеседований с наскока (первых в своей жизни по другую сторону стола), и понял, что взять толкового человека к себе в команду не так просто, как кажется.
Как понять незнакомого человека за короткое время? Как оценить его профессионализм и личные качества? Они вообще важны, эти личные качества? Или важен только профессионализм? На что вообще нужно обращать внимание при найме? И как именно его обращать? Сейчас всё это кажется довольно очевидным, но при найме первого инженера для меня - это был для меня настоящий тёмный лес.
Как обычно, я начал с Google. Нашёл несколько статей Джоэла Спольски, проглотил их, прочитал книги, на которые он ссылался, затем ссылки из этих книг, пошёл учиться более системно, и так, постепенно, начал погружение в новую предметную область — управление проектами, командой, управление cамим процессом разработки.
Процесс разработки программного обеспечения, как и любой другой производственный процесс, имеет своих исследователей, историю развития, лучшие практики, подходы к организации. Многие его аспекты, связанные непосредственно с разработкой, лучшими инженерными практиками, достаточно молоды.
Например, agile появился сравнительно недавно, меньше двадцати лет назад, CI — около тридцати, классической книге Фредерика Брукса уже около пятидесяти лет. Другие же аспекты, связанные с управлением командой, психологией, мотивацией, управлением процессами в организации в целом, организацией коммуникаций - универсальны, пришли из других предметных областей уже много лет назад, и отлично применимы и в области разработки.
Я читал довольно много литературы на тему управления командой. Мне кажется, наиболее детально и глубоко эта тема изучена в Америке и Японии. Помимо классических книг о разработке, инженерном процессе, менеджменте, я бы рекомендовал книги советских и российских авиаконструкторов и конструкторов ракет. Кроме того, NASA, NAVY, Toyota — эти организации и компании вкладывают огромные средства в оптимизацию своих процессов, проводят внутренние конференции для своих менеджеров, материалы по ним доступны в сети, есть много интересных художественных книг от них и о них. Кроме того, помимо отличной информации о процессах управлении, выстроенных в этих компаниях, читать об автомобилях, самолётах, ракетах, кораблях и их разработке просто очень интересно.
В общем, простор для повышения своей компетенции в области управления огромный, задачи тоже очень разные. Начать можно с организации своей собственной работы, с внедрения лучших инженерных практик типа unit-тестов, ревью кода, continuous integration и continuous delivery, остановиться можно очень далеко. А лучше и не останавливаться:)
Заключение
Практика показывает, что если вы начнёте активно двигаться хотя бы в одном из вышеупомянутых направлений, через некоторое время неизбежно произойдет и еще одно движение — вверх по иерархической лестнице. Если такое желание есть, то это тоже очень интересный вариант. Главное при этом - не забывать о необходимом балансе между организационной и технической работой, который вы бы хотели сохранить.
Разработка софта — марафон, который длится всю жизнь. Всегда есть дедлайны, сроки, всё время надо еще чуть-чуть поднажать. Чтобы сохранить энергию и мотивацию, защитить себя от выгорания, нужно обязательно переключаться, поднимать голову над рутиной, оглядываться по сторонам и смотреть на себя и свою работу со стороны. Театры, музыка, концерты, хорошие книги и фильмы — обязательны к периодическому применению. Или дача. Или походы. В общем, что-то, кроме работы. Иначе через два-три года работа в любом случае перестанет быть в радость.
Что же касается работы, никто не позаботится о вашей мотивации и карьере лучше, чем вы сами. Честно говоря, не то, что никто не позаботится лучше — просто вообще никто не позаботится. Книги по специальности, смежным областям, конференции, общение с коллегами, митапы — движение, которое, как известно, есть жизнь.
Если вы чувствуете, что пора что-то изменить — начать можно с небольших шагов. Для этого не нужно разрешение сверху, бюджет или работа в большой организации. Все шаги, о которых я написал, выше я прошёл в маленькой компании, в командах от двух до десяти человек.
Несколько хороших книг, много желания и немного движения могут всё сильно изменить в лучшую сторону. Удачи!
З.Ы. Делитесь своим опытом и лайфхаками в комментариях. К сожалению, Игоря пока нет на Хабре, качаю карму для того, чтобы можно было его пригласить. А пока переадресую ему ваши вопросы, если такие возникнут. Спасибо за проявленный интерес.
Комментарии (27)
Jackhetfield
29.11.2018 11:27Если не сложно — можно в список рекомендаций всю описываемую литературу?
Был бы очень благодарен, т.к. тема довольно актуальна :)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
Тайити Оно
tangro
29.11.2018 13:13Хорошо помогает вернуть интерес к программированию заниматься чем-то совершенно оторванным от компьютеров и телефонов по вечерам, выходным, в отпуске. Приходят выходные: один день с семьёй за грибами, второй день строим будку собаке из подручных материалов. Приходит понедельник: о боже, комьютер, программирование, ура! А если два дня просидеть в ютюбчике и фейсбуке, то в понедельник будет «блин, опять этот компьютер, это программирование, как оно осточертело...»
Trediol
29.11.2018 17:56Согласен, без кардинальной смены контекста по выходным можно быстро перегореть
Likvin
29.11.2018 13:43Поддерживаю, тема очень актуальна)
Тоже интересует литература по системе сбора информации и выставления счетов пользователям. Спасибо)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
Тайити Оно
Methos
29.11.2018 19:26ответ на вопрос в заголовке
начать снова кодить бесплатно, чтобы был запал.
mkshma
29.11.2018 19:36-4Программирование забесплатно — пустая трата времени.
0xd34df00d
29.11.2018 20:48+3Вы забесплатно, я так понимаю, даже на велосипеде не покатаетесь, скажем?
iOrange
29.11.2018 21:34Ценность чего либо не всегда выражается деньгами.
Приобщенность к определенной комьюнити, чувство полезности — для кого-то могут быть такими же ценными, как для вас деньги.
alex_mayak
30.11.2018 10:25Здравствуйте.
А есть зафиксированный список книг для прочтения?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
Тайити Оно
dimoff66
Любому разумному человеку рано или поздно надоедает кодить. В жизни есть огромное количество куда более интересных вещей. Нужно быть умственно отсталым, чтобы провести всю жизнь, уткнувшись в программный код. Это не значит что нужно бросать работу совсем, просто нужно сокращать время работы и использовать разработку как заработок.
Если работа превратилась в рутину, можно ее бросить на несколько месяцев и уехать к океану, дальше человек почувствует что ему делать.
shai_hulud
Del
shai_hulud
А давно на Хабре программистов, а не гостей профессии, начали называть «умственно отсталыми» и плюсовать?
dimoff66
Я не знал что хабр — секта, где есть незыблемые каноны, мешающие человеку высказывать свое видение. Хотя минусы в карму после подобных сообщений наводят на мысль, но я все же продолжаю верить, что это не так, и что здесь есть разумные люди, готовые смотреть на мир под разными углами и не затыкать рот каждому, чье мнение расходится с каноническим.
shai_hulud
Ну, унижения групп людей на хабре, как и в приличном обществе, не разрешены. Я вас не минусил, только указал на грубость.
iOrange
А я минусил, не за собственное мнение, а за оскорбление. Лично я обожаю именно писать код, получаю от этого наслаждения. Мне не нравится что теперь я, оказывается, «умственно отсталый».
dimoff66
Как вы можете оказаться умственно отсталым только из-за того, что кто-то это написал. Если кто-то пишет что вы умственно отсталый, а вы им не являетесь, значит этот человек ошибается, он сам глуп, и здесь нет повода для расстройства или обиды. Если вы так реагируете на чужие слова, которые даже не касаются вас ни прямо, ни косвенно — а они не касаются, я не писал, что любой человек, кто пишет код — умственно отсталый, я говорил это про тех, кто делает это всю жизнь, и это так, я не могу ничего с этим поделать, даже если вы меня сминусуете 40 раз, то есть вы даже не способны внимательно прочитать, что пишет собеседник и спешите защитить свое задетое эго… Чем вы отличаетесь от религиозных фанатиков, которые по любому поводу говорят об их оскорбленных религиозных чувствах? Ничем.
0xd34df00d
А что такого в том, чтобы писать код всю жизнь, если это очень нравится?
dimoff66
Ничего такого, нужно всегда делать то, что нравится. Я писал для тех, кому это надоело.
JC_IIB
Зачем вы так сильно размахиваете квантором всеобщности?
«Чувствую, вы на Хабре не задержитесь» (С) VlK
Кому нужно и почему нужно?
"- Ага. Значит, именно на петеяровом?
— Именно.
— А если на сливочном?
— А если на сливочном — то не получится." (С)
Так и вижу берега океанов, сплошь усеянные неумственноотсталыми программистами.
pronvis
Через чур категорично, но в целом согласен. Но, думаю, это можно про любую профессию сказать. «Хватит рисовать эти картины, любому нормальному человеку это надоест, уж тем более за 10 лет. Начни уже управлять теми кто рисует, открой своё дело, etc.» Но есть люди которым просто нравится делать то что они делают.
Меня вот последнее время не отпускают мысли что мне надоело быть деталью чьей-то системы, но…
dimoff66
Я ничего подобного не писал.
trueMoRoZ
нужно быть умственно отсталым, чтобы оценивать интеллект других по их выбору профессионального пути)))
tmaxx
Нужно быть недалеким закомплексованным хамлом, чтобы пренебрежительно относиться к людям, посвятившим жизнь любимому делу (любому), вместо того чтобы рваться в бизнесмены или менеджеры среднего звена.
Кстати, если вас задел мой комментарий, просто скажите себе: «этот человек ошибается, он сам глуп, и здесь нет повода для расстройства или обиды.»
dimoff66
Нет, меня не задел ваш комментарий. Мне досадно видеть всю эту патологичную реакцию, но задеть она меня лично конечно же не может.
Еще раз всем униженным и оскорбленным минусовщикам предлагаю внимательно посмотреть контекст комментария: это не статья о том, как человек кодит всю жизнь и писает от этого кипятком. Это статья о людях и для людей, которые потеряли мотивацию, и весь мой комментарий нацелен лишь на то, чтобы сказать им, что потеря мотивации и интереса к программированию это возможно не так уж плохо, потому что программирование еще не вся жизнь, и потеря мотивации к занятию программированием может открыть человеку иные куда более интересные горизонты.
И если это вас обижает, это просто показывает, что программирование сделало вас детсадовскими незрелыми личностями, которых может задеть и обидеть вообще что угодно.И я просто громоотвод для вашей патологии, благодарите меня за это и плюсуйте.