Для начала обсудим причины, по которым вы можете не развиваться в профессиональной области, и что с этим делать.
Перескакивание с темы на тему
Это главный грех амбициозных разработчиков. Например, когда вы скачите с темы на тему проходя курсы, особенно, когда вы новичок. Я сталкиваюсь с таким очень часто, даже на нашим собственных стартовых курсах. Видео человек смотрит, пока кушает, а задания проскакивает, поскольку они кажутся ему легкими. Потом такой человек сталкивается с более сложной проблемой, но поскольку нет опыта решения простых задач, человеку такая проблема кажется нерешаемой, и он бросает обучение. Это не про учебу и такое отношение не просто не позволит вам вырасти, оно в принципе не даст вам стать программистом.
Тоже самое касается и более опытных программистов, которые хотят освоить новый фреймвор, библиотеку или еще что-то. Посмотрели что-то по верхушкам и побежали дальше учить что-то новое. Но нет, так не работает. Для того чтобы вырасти как разработчик, нужно посидеть какое-то время (зависит от того, насколько сложная тема, насколько она для вас нова и какой у вас уже есть опыт) и разобраться с ней, поискать примеры использования, почитать документацию и пр.
Важно искать середину, убиваться об изучение каждой детали тоже не нужно. На самом деле умение найти баланс — это очень важный навык программиста. Знать, где нужно дольше поковыряться, а где можно быстро просмотреть и идти дальше. К сожалению, нет правила, благодаря которому вы точно будете знать, что можно пропусти, а с чем нужно разбираться внимательно. Вам придется ориентироваться исключительно на собственную интуицию, а интуиция — это результат набитых шишек.
Слабые основы
Особенно часто это встречается у разработчиков-самоучек. Довольно часто человек, который учился не по курсам и книгам, который пропустил всю теорию и сразу полез писать программы, может не знать базовых основ программирования. В результате мы получаем программиста, который вроде бы как что-то умеет, но при этом чувствуется, что ему чего-то не хватает. К базовым знаниям относятся знания по ООП, патернах, архитектуре. Это тоже все можно выучить самостоятельно. Такие знания являются фундаментом, который укрепит ваши практические умения.
Отсутствие цели и направления в карьере
Этот пункт применим абсолютно ко всем сферам и специальностям. Простите за этот банальный вопрос, но все же: кем вы себя видите через 5 лет? Не зря этот вопрос задают рекрутеры на собеседованиях. А вы, вероятнее всего, беситесь именно потому, что не можете на него ответить даже себе. Вам действительно важно знать (в первую очередь для самих себя), кем вы хотите быть через 5 лет. И если вы как разработчик не понимаете, чем вы хотите заниматься через 5 лет, вы будете пытаться объять сразу все.
Вам нужно понимать, идете ли вы в сторону менеджмента, архитектурных знаний, изучения предметной области или чего-то еще. Бежать одновременно во все стороны невозможно, поэтому вы и остаетесь на одном месте.
Очень много разработчиков, которые приходят ко мне на карьерные консультации, оказываются в ситуации, когда они не знают, кем они хотят быть, распыляются и поэтому стоят на месте. Самое смешное, что в эту ситуацию попадают самые толковые, мега проактивные ребята. Потому что они хотят все. А так невозможно. Нужно выбрать, куда вы идете, выбрать приоритет.
Плохие привычки
Еще один важный аспект, которые не относится к ИТ-сфере, но очень тормозит вас. Под плохими привычками я подразумеваю неправильный образ жизни: поздно ложиться спать, не уделять время спорту, не выделять время на отдых и жизнь вне работы, откладывать задания на последний момент и пр. Довольно скоро вы обнаружите проблемы со здоровьем, а с этим приходит и инертность в работе.
В профессиональной деятельности также есть плохие привычки: забивать на документирование, забивать на работу со списком задач, писать односложные комментарии к коммитам в гите и т.д. Поверьте, все это очень сильно портит вам жизнь. Например, опытный разработчик понимает, где была ошибка и что для ее устранения нужно вернуться к коммиту, который был сделан неделю-две назад. Затем разработчик открывает свой список коммитов, а там абстрактные комментарии или их вообще нет. В итоге на поиск нужного коммита уйдет пол-дня, а то и день, а если бы была привычка писать осмысленные комментарии, на это ушло бы пару минут. Особенно весело, когда разбираешься не со своими коммитами, а с чужими. Неправильные привычки могут сильно испортить вашу жизнь.
Неуверенность в себе и низкая самооценка
Очень часто я слышу, мол “Я звезд с неба не хватаю, работаю разработчиком, вроде что-то получается, а может меня просто из жалости держат, не ставьте мне сложных задач — я не справлюсь…” и все в таком духе. Такая самооценка никогда не приведет вас к успеху. Если к каждой задаче, где нужно что-то освоить, выучить, починить подходить с мыслями, что у вас все равно ничего не получится, то у вас действительно не получится. Я могу вам сказать: верьте в себя и у вас все получится. Нет, так тоже не работает. Но если вы не верите в себя, то у вас гарантировано ничего не получится.
В этом мире нет гарантированных способов что-то сделать, но в этом мире полно гарантированных способов что-то НЕ сделать.
Верим в себя. Здраво оцениваем свои преимущества и недостатки. Абсолютно у каждого человека, какой бы хороший или плохой он специалист, есть свои сильные и слабые стороны. Более того, хорошего специалиста от плохого отличает не то, какие у него есть данные и знания, а то, насколько хорошо он умеет ими пользоваться. Хороший специалист знает о своих сильных сторонах и делает ставку на них, он также знает о своих слабых сторонах и обходит их. Плохой специалист старается превозмочь слабые стороны и не уделяет внимание сильным качествам.
Например, вы хорошо коммуницируете с людьми, но считаете, что в программировании это никому не нужно, зато нужно пидалить код. При этом вы запросто можете использовать свои сильны стороны: расширить нетворкинг, завести толпу друзей-программистов, которые время от времени будут подкидывать вам крутые идеи. Вполне возможно, что это приведет вас к гораздо лучшему решению, чем если бы вы медитировали над кодом часами в ожидании озарения и пиля себя за то, что у вас не все получается. Или, наоборот. Вам трудно общаться с людьми, но зато крутя и рассматривая проблему под разными углами вы находите самые оптимальные решения. Или вы можете хорошо искать информацию. Или вы очень усидчивы и можете часами сосредоточенно работать. Так что ищите свои сильные стороны и старайтесь обходить слабые.
Почему-то низкая самооценка и синдром самозванца чаще поражает именно женщин. Они соглашаются на более низкую зарплату или не просят о повышении считая, что больше не заслуживают. Но понимите, что средняя по рынку — это средняя по рынку для обоих полов.
Мышление «кодера»
Большинство программистов никогда не отказываются от мышления кодера, они постоянно живут в коробке, где все о коде. Такой человек думает о коде, даже когда с ним говоришь о бизнесе или о жизни. Или когда стоит вопрос, стоит идти в архитектуру или в руководству, он начинает сыпать названием фреймворков. Но это задача совсем другого уровня.
Нужно учиться выходить за рамки кодера. Вы никогда не станете архитектором, если будете мыслить на уровне кодера. Архитектура вообще не про код, а про то, как все будет взаимодействовать. Вот когда вы уже понимаете, как это все вместе взаимодействует, когда вы понимаете, для чего ваша система, как она будет использоваться, какие у нее ограничения, только тогда вы доходите до выбора языка программирования. Когда вы являетесь архитектором, любовь или не любовь к какому-то языку или инструменту не имеет никакого значения. Если нелюбимый вами язык программирования/фреймворк для данной ситуации подходит лучше, то нужно выбрать именно его.
Чем раньше вы выйдете за рамки мышления кодера, тем быстрее вы вырастите до синьора и выше. Потому что тот же синьор разработчик больше думает о задаче бизнеса. Самый лучший код, это ненаписанный код. Если какую-то задачу можно решить не используя код — это будет самым лучшим программистским решением. Поэтому какую бы задачу вам не ставили, первое, о чем вы должны подумать — можно ли ее решить вообще без программирования. Например, использовать уже написанный код, придумать, как что-то с чем-то соединить методом настройки, и так далее. Люди-кодеры на сразу же начинают думать, как написать код для решения поставленной задачи и часто упускают самые оптимальные решения. Они тратят много времени чтобы написать то, что не нужно было писать, а просто настроить.
К коду мы приходим только тогда, когда вы точно понимаете, что и зачем нужно сделать. И даже когда вы начинаете работать с кодом, нужно посмотреть, возможно достаточно сделать какие-то небольшие изменения в существующем коде, а не писать все заново.
Профессиональный имидж
Это не настолько критичный аспект, как все вышеперечисленные, однако и он вносит свою лепту. Люди — существа социальные и они привыкли оценивать других людей по одежке, по внешнему виду. Да, есть топовые профессионалы, которые никак не следят за собой и всем своим внешним видом излучающие асоциальность. Они не выглядят как эксперты и мало кто захочет их видеть начальником отдела. Я не говорю о том, что вы должны ходить на работу в костюме тройке. Но посмотрите на Цукерберга и Джобса — они не носят костюмы, но выглядят адекватно.
Кроме того, одежда очень сильно влияет на настроение самого человека. Когда вы одеваете хорошую одежду, то сами к себе начинаете относиться по-другому. Можете сказать, что это женская тема. Ничего подобного, мужики также критически оценивают свой внешний вид. Вложение денег, чтобы купить ту одежду, которая вам нравится, в которой вы хорошо выглядите — это очень полезное вложение денег. Это дает вам правильный настрой, правильное самоощущение и дополнительную уверенность в себе.
Тоже самое касается и манеры общения с другими людьми. Если люди шарахаются от вас, подумайте, с кем можно обсудить этот вопрос. Возможно, поговорить с психологом, возможно, сходить к коучу или тренеру личностного роста. Я, например, учился манере общения глядя на тех людей, поведение которых мне импонировало.
Самодовольство
Последнее, но не менее важное. Несмотря на то, что разработчики всегда учатся и совершенствуются, программисты очень сильно сопротивляются изменениям. И это сопротивление приводит к самодовольству. Понимаете, о чем я? Если программист привык что-то решать при помощи какого-то инструмента или какого-то конкретного способа, он будет сопротивляться новым решениям. Даже если коллеги ему говорят, что это не самый удачный инструмент/способ. Например, привык программист не заполнять гит каммиты адекватными описаниями, он найдет десяток аргументов и будет плеваться пеной изо рта, чтобы доказать остальным, что это все бред и он этого делать не будет.
Не будьте такими. Принимайте изменения. Не любое изменение, в какой-то степени можно быть консерватором — если что-то хорошо работает, то пусть дальше работает.
Но если то, что вам предложили, будет работать лучше, то имеет смысл это попробовать. Не нужно рассказывать, что вы всегда так делали и будете продолжать делать именно так. Даже если у вас 15-20 лет стажа, вас все равно могут многому научить более молодые коллеги.
Всегда ваш Сергей Немчинский