Перевод статьи Итамара Тернера-Трауринга «The next career step for Senior Software Engineers (that isn’t management)».
Вы работаете программистом уже несколько лет, получили одно-два повышения и теперь думаете, что же дальше. До этого момента путь был достаточно прямым: вы учились работать самостоятельно, затем вас повысили до старшего инженера или какого-то равнозначного тайтла.
Но теперь дальнейший путь неясен.
Становиться менеджером и завязывать с программированием?
Просто изучать новые технологии или этого все же не достаточно?
На что нацеливаться?
В этом посте я представлю альтернативное карьерное продвижение. Этот путь даст вам больше автономности и усилит ваши позиции при ведении переговоров с компаниями. В отличие от варианта «стать менеджером», вы по-прежнему сможете программировать.
От кодинга к решению проблем
Конечное назначение нашей деятельности как программистов это решение проблем, а вовсе не написание программ. Для решения проблемы нужно уметь:
- Находить и идентифицировать проблему.
- Выдвигать варианты решения.
- Реализовывать решение.
Каждый из этих пунктов можно рассматривать как набор навыков, которые можно нарабатывать по отдельности и параллельно. Однако на практике вам зачастую придется это делать в обратном порядке, начиная с третьего набора навыков, и, по мере накопления опыта, добавлять остальные.
Рэндал Каутник описывает это в виде особых тайтлов, соответствующих прогрессу карьеры: Implementers (реализаторы), Solvers (те, кто решает проблемы) и Finders (те, кто отыскивает проблемы).
Implementer
Это неопытный программист, задачи которого определяются кем-то другим. Он лишь реализует маленькие, четко определенные куски кода.
Давайте представим, что вы работаете в компании, которая создает сайт для владельцев животных. Вы приходите на работу и вам дают задание: «Добавить выпадающее меню вот здесь. В меню должны перечисляться все болезни игуан (взять их можно из таблицы IGUANA_DISEASE). Когда пользователь выбирает пункт меню, он должен перенаправляться на соответствующую страницу».
Вы не знаете, зачем пользователь будет смотреть список болезней игуан, и вам не нужно тратить много времени на то, чтобы понять, как реализовать данную задачу. Вы просто делаете, что вам сказали сделать.
Solver
Накопив побольше опыта, вы становитесь Solver-ом. Теперь вы способны предлагать решения для не столь хорошо определенных проблем.
Вам озвучивают проблему: «Нам нужно добавить на сайт секцию, где владельцы домашних животных смогут определить, не заболел ли их любимец». Вы прикидываете, какие данные у вас есть и какие APIs вы можете использовать. Вместе с дизайнером вы продумываете UI, а затем создаете план реализации. После этого вы начинаете писать код.
Finder
В конечном счете вы становитесь Finder-ом: вы начинаете самостоятельно определять проблемы и находить, что за ними стоит.
Вы идете поговорить со своим менеджером об игуанах. Их практически никто не держит, так зачем выделять им на экране столько же места, как котам и собакам? Не говоря уже о том, что написание отдельного игуано-ориентированного кода кажется просто тратой времени. Почему бы не написать какой-то общий код, который будет работать для всех видов животных?
Еще немного пообсуждав эти вопросы, вы понимаете: чтобы не писать новый код каждый раз, когда приходится добавлять новое животное, нужно изменить архитектуру сайта, бизнес-логику и дизайн. С правильной архитектурой добавление нового животного будет занимать какой-то час работы. Таким образом, с небольшими вложениями, компания сможет обслуживать владельцев самых разнообразных животных. Над разработкой и реализацией этого решения, скорее всего, придется поработать, этим вы и займетесь со всей командой.
Чем выгодно быть Finder-ом?
Многие программисты останавливаются на уровне Solver-ов и не знают, куда двигаться дальше. Если менеджмент не для вас, то следующим отличным шагом будет стать Finder-ом. Причины для этого две: автономность и продуктивность.
Основная мысль Каутника в том, что каждая из стадий дает вам все больше автономности. У Implementer-а автономности совсем мало, у Solver-а ее больше, а у Finder-а вполне достаточно: вам дают кучу неопределенных целей и ограничений, а что со всем этим делать, решаете вы.
Но есть и другое преимущество: продвигаясь от Implementer-а к Solver-у, а от него – к Finder-у, вы становитесь все продуктивнее, поскольку выполняете все меньше ненужной работы.
- Реализовывая решение, определенное кем-то другим, вы можете застрять из-за того, что придуманное решение оказалось неэффективным.
- Если вы только придумываете решение проблемы, которую обозначил для вас кто-то другой, то в конечном итоге может оказаться, что вы решали не ту проблему, поскольку есть другая, более фундаментальная, которая и вызывает сложности.
Чем лучше вы умеете диагностировать и идентифицировать проблемы, лежащие в основе, придумывать решения и сотрудничать с другими людьми, тем меньше ненужной работы вы будете выполнять и тем более продуктивным станете.
Что дает продуктивность
Если вы Finder, то вы очень продуктивны, а это делает вас гораздо более ценным работником. Вы человек, находящий дорогостоящие проблемы, выявляющий возможные заторы, о которых никто и не подозревал, раскрывающий настоящие желания клиента.
А это значит, что у вас больше преимуществ при ведении переговоров с компаниями:
- вы с легкостью можете выторговать прибавку к зарплате;
- вам доступны лучшие вакансии, даже связанные с технологиями, которые вы не знаете;
- вы можете выторговать себе не два (как у всех), а три дня выходных.
Так что, если вы хотите продолжать программировать, но при этом продвигаться дальше по карьерной стезе, начинайте искать проблемы. И если вы будете уделять этому внимание, то найдете их повсюду.
[customscript]techrocks_custom_after_post_html[/customscript]
[customscript]techrocks_custom_script[/customscript]