Первые годы работы
1 пост
1 пост
Дорогие читатели, категорически вас приветствую! Я прошел путь от стажера до разработчика Java с опытом в 5+ лет. За это время было принято не мало хороших решений, но плохие тоже не отставали, о последних и возможном способе их решения я хочу рассказать, и возможно кому то это поможет не наступить на те же грабли что и я, или же менее болезненно “отодрать” их от своих ног, если вы уже попали на них.
В самом начале я думал: «Вряд ли есть что-то настолько же важное как сам код», а как оказалось вокруг есть еще очень много важных аспектов, о которых было бы здорово услышать заранее. Материал будет разбит на две части, в этой: онбординг, работа с задачами, код-ревью, тесты и чистые код и архитектура.
1. Онбординг: не бояться спрашивать и просить помощи
Многие люди боятся спрашивать, потому что кажется: «Я и так должен сам разобраться». В итоге вы можете сидеть часами множить неудачные попытки с чем-то разобраться, и винить себя в некомпетентности, хотя очень вероятно, что проблема не в вас. На самом деле никто не ждет от вновь прибывшего сотрудника, тем более у которого еще нет многолетнего опыта за спиной, что он с ходу разберется во всем.
Задача онбординга – с наибольшим комфортом и за наименьшее время помочь вам влиться в процессы компании и команды. Поэтому смело задавайте вопросы и просите помощи при необходимости у ответственных лиц. При этом не забывая о балансе, есть вещи которые предполагается что вы знаете, например установить среду разработки, склонить проект, установить и настроить СУБД по конфигу и тому подобное. А есть вещи специфические для конкретной компании или команды, который вы не можете знать изначально, например где лежат конфигурации для различных стендов, какие политики именования веток в системе контроля версий, где взять доступы к внутренним API и так далее. И помните, вашем быстром и комфортном онбординге заинтересован бизнес, вы имеете полное право на него.
Например когда я пришел начинающим разработчиком в одну из компаний, где я работал, мне в первый день дали древнюю документацию, и сказали пройти по ней тестирование по знанию продукта, а после развернуть его, с тестированием я сходу справился, а вот с разверткой проекта возникла трудность, проект никак не стартовал. Я несколько часов штудировал доку и пытался найти чего же мне не хватает для поднятия проекта. Ведь мне дали большую доку, где, казалось бы, все необходимое уже точно есть, ведь люди наверняка поддерживают актуальность доки, но, к сожалению, я ошибался. Оказалось, что конфиги для поднятия проекта не актуальные, и я никак не смог бы сделать это самостоятельно. И прежде, чем корить себя после долгих неудачных попыток, лучше пойти и задать вопрос ответственному коллеге, ведь нет ничего зазорного в том, чтобы спрашивать о том, чего не могли значить чисто физически.
2. Не стесняться спрашивать того, кто дал задачу, но подходить к этому с умом
В начале карьеры (после тоже немало) особенно часто могут возникать ситуации, когда вы не поняли, что требуется в задаче. Не нужно думать, что вы не обладаете достаточным количеством знаний чтобы с ходу понять задачу. Проблема постановки задач преследует огромное количество специалистов, как начинающих, так и очень опытных. Но важно помнить о балансе, не нужно бегать с абсолютно любыми вопросами. Необходимо сначала постараться разобраться в вопросе, применить свои знания и опыт, а так же умение поиска информации, и только после этого идти к коллеге с собранной пачкой грамотно сформулированных вопросов.
Например, в одной из компании у меня была ситуация, когда на очередном распределении задач, я получил свою, в ней как мне, казалось, было все очень подробно расписано, с широко развернутым текстовым описанием, примерами, изображениями с уточняющей информацией и выглядело это как нечто внушающее доверие. Но у меня никак не получалось интегрировать функциональность в то место куда требовалось, я прилично времени сидел вчитывался в ТЗ, изучал целевой участок проекта, документацию по нему (в этом проекте она была хорошей в отличие от примера из первого пункта), но никак не мог ее интегрировать. Я думал: «Не пойму, такая красивая задача, все так хорошо описано, столько дополнительной информации, хорошая документация, а я не могу с ней справится». Оказалось, все довольно прозаично. Оказалось, что аналитик просто указал не тот участок приложения, а схожий, извинился и внес изменения в ТЗ.
Поэтому нужно смело уточнять все что вам не понятно, это естественная часть процесса решения задач. Лучше всего собрать список вопросов и подойти к ответственному сотруднику и обсудить максимум вопросов за раз. Это гораздо лучше каждые 5 минут бегать к коллеге с 1 новым вопросом.
Бывает, что сидишь с какой-то задачей, уже вопросы все задал, но все равно не получается ее решить. Скорее всего просто не хватает опыта решения задач в условиях реальной работы, и это нормально. Не нужно сидеть и заниматься самобичеванием, адекватные опытные коллеги не будут осуждать начинающего специалиста, они скорее с удовольствием помогут, ведь на самом деле отрадно и полезно помогать своим младшим коллегам.
3. Код-ревью. Защищаться и получать выгоду
Сомнительное ревью — вам могут сказать что-то вроде «Так пишут студенты», «Решение так себе» и не объясняют почему. Это не про вас. Это про неумение ревьюера в коммуникации.
Как-то раз мне сказали: «Мне не нравится, надо переписывать». Я спросил: «А что не так?» - «Так писать нельзя». И только после третьего вопроса «Почему именно не устроило решение?» я наконец получил внятный ответ. Хороший способ провести "эффективное" ревью. С тех пор я не стесняюсь переспрашивать. Уточните: «Расскажи, что именно не так». Если не помогает - фраза «Не понимаю, что вы говорите» часто отрезвляет. Она не обвиняет явно, но подчёркивает, что человек говорит невразумительно, и лучше бы ему изъясняться по-человечески.
Но оно бывает и таким: разговор начинается с того, что хорошо, но вот тут можно сделать более качественно - есть несколько подходов, вот первый, вот второй, вот примеры, где посмотреть. Если возникнут вопросы — сразу спрашивай, я помогу. Это бесплатный урок. Даже если ревьюер не сделал никаких замечаний, у таких коллег лучше лишний раз спросить: «А как бы вы сделали? Насколько вам нравится моё решение? Может, что-то можно улучшить?». Так можно быстрее улучшить свою экспертизу.
4. Сразу уделять большое внимание чистоте кода и архитектуры(уровень классов, сервисов и тп)
Лучше всего как можно раньше начать уделять большое вниманием этим аспектам, даже если вы видите, что в вашей команде кто-то на это забивал. Так как чем раньше начнете, тем меньше будет размер технического долга (скорость реализации в обмен на возможность поддержки и развития решения). Фраза «Потом отрефакторим», часто в действительности означает «Никогда»). А в результате мучительные и долгие правки которые делать либо вам, либо вашим коллегам, выслушивая много “лестных” слов в свой адрес, а вероятно и оба варианта сразу.
Например, в одной из компаний, где я работал, была практика выносить в отдельный общий модуль вещи, которые могут использоваться сразу в нескольких участках проекта и имеют идентичную структуру данных и функциональность и кажется, что для всех мест, где они используются - будут одинаковые изменения. Несколько месяцев, может лет, и в какой-то момент вполне предсказуемо изменения для разных участков проекта начали отличаться, не вносить их нельзя, так как заказчик уже стоит за дверью с мешком золота, и требует свои хотелки, причем побыстрее. А на этой вещи завязано множество критичных участков, и часть из них естественна не покрыта качественными тестами, следовательно, просто взять выкинуть старое и впихнуть туда новое не выйдет, нужно как минимум обеспечить хоть какие-то гарантии, что после изменений все зависимые участки не сломаются. И в итоге вам нужна куча времени, а как следствие и прилично денег компании на то, чтобы исполнить волю заказчика, который в ожидании своей хотелки то и думает, не пойти ли ему со своим мешком золота к более ответственным ребятам.
Таким образом, заботясь сразу о чистоте вашего кода и архитектуры, вы заплатите в разы меньше времени, а возможно и на порядок, чем если выберите подход “пока и так нормально”.
5. Не откладывать написание тестов
После того как вы реализовали какую-то функциональность, и прошло какое-то время, а тем более если это чужая функциональность, выбить время на покрытие ее тестами, будет сильно сложнее. Проще сразу заложить время на написание тестов в планируемое время на реализацию задачи.
Если у вас в команде плохо с культурой тестирования, можно сказать, что прежде, чем приступить к новой задаче, вы покроете тестами функционал предыдущей задачи.
Как-то раз была ситуация, когда нашей команде нужно было обновлять версию одной библиотеки для работы, и как на зло, с обновлением у нее изменился API, а тестов на участках, где она использовалась, было крайне мало. И помимо того, что тебе нужно разобраться с новым API, так тебе еще предварительно нужно покрыть все задействованные участки качественными тестами, а вспомнить как должны эти участки работать гораздо сложнее через несколько лет, чем в момент их создания. Поэтому, не забывая про тесты, вы сильно упрощаете себе жизнь на дистанции. И не забывайте о том, что тесты, это тоже код, и он тоже должен быть качественно спроектирован и реализован, и главное здесь не количество, а качество. Наличие бесполезных тестов хуже, чем их отсутствие, в основном бесполезные тесты дают ложное чувство безопасности, замедляют рефакторинг, множат себе подобных (плохой пример для других) и тратят время CI/CD.
6. Синдром самозванца
Синдром самозванца — это состояние, при котором специалист, независимо от реального уровня знаний, считает себя недостаточно компетентным. Вот несколько заблуждений, которые были у меня, которые я наблюдал у коллег и о которых слышал от знакомых разработчиков:
Кажется, что я обманул всех: случайно прошёл собеседование, испытательный срок, а теперь месяцами (или даже годами) обманываю наставника, старших коллег и руководство.
Когда я решаю сложные задачи — мне просто везёт. А если коллеги не справились до меня, значит, они уже частично решили задачу, и мне оставалось лишь «добить» ее.
Если я не могу решить задачу сам, прошу помощи или трачу много времени — причина только в моей некомпетентности.
И, конечно, кажется, рано или поздно придёт «настоящий эксперт» и разоблачит наглого диверсанта, который шифруется под программиста.
Полностью избавиться от этого состояния вряд ли получится, но с ним вполне можно работать. Лично мне и тем, кого я знаю, помогали следующие способы:
Фиксировать достижения. Точное знание, что за время карьеры вы достигли конкретных результатов, помогает увидеть более реальную картину. Это может быть список в заметках, история в таск — трекере, граф коммитов — что угодно. Когда становится совсем грустно — полезно открыть этот список и напомнить себе: вообще‑то вот тут я разобрался с нетривиальной задачей, тут предложил решение, тут мне доверили сложный участок.
Общаться с руководителем. Руководитель, как правило, видит картину целиком. Он может сказать, что вы на самом деле двигаетесь в правильном направлении, или помочь скорректировать вектор развития. Периодически инициировать такой разговор — нормально и полезно. Хорошему руководителю важно, чтобы сотрудник был заинтересован в росте, поэтому диалог пойдёт на пользу обоим.
7. Не изучать всё подряд
В первый год хочется охватить как можно больше: новые языки, фреймворки, инструменты — всё кажется важным и нужным. Но на ранних этапах такое распыление скорее мешает. Я в начале интересовался другими высокоуровневыми и низкоуровневыми языками, и кучей фреймворков, которые не использовались в работе. Прошло время, и выяснилось, что на практике мне сильнее всего не хватало знаний о рефакторинге, тестировании, архитектуре и производительности.
На старте эффективнее сфокусироваться на том, что используется в вашем проекте, а свободное время тратить на фундаментальные вещи. Такой подход даёт больше пользы и для текущей работы, и для роста как специалиста в целом.
8. Не злоупотреблять переработками
В начале карьеры кажется, что чем больше работаешь, тем быстрее растёшь. 12–14 часов в день, работа ночью, в выходные, в отпуске — я тоже таким промышлял. И у большинства тех, кто так делал, исход примерно одинаковый: кратковременный всплеск продуктивности, а затем резкое и уверенное снижение эффективности и движение в сторону истощения.
Стоит вспомнить одно старое сказание: сидишь до ночи над задачей — ничего не выходит, а утром садишься и решаешь её за 10 минут. Усталость сильнейшим образом влияет и на скорость, и на качество решений.
Конечно, бывают исключения: важный релиз, демо, срочная хотелка заказчика, который уже выслал своего курьера с мешком золота, в жажде важной фичи. Но если переработки становятся нормой — пора перерабатывать свой график. У каждого есть лимит часов, в которые он может выдавать качественный результат за разумное время.
9. Не бояться просить повышения
Вы растёте как специалист, и вместе с этим растёт ваша стоимость на рынке. Некоторые компании сами подходят и говорят: «Мы тебя повышаем». Но бывают и такие, где повышение нужно просить самостоятельно.
Ещё на этапе собеседования стоит узнавать, как в компании устроен карьерный рост: по каким критериям оценивают, как часто пересматривают зарплату, что нужно сделать, чтобы вырасти, и до куда примерно это возможно. Понимание этих правил поможет избежать неприятных ситуаций в будущем.
10. Не бояться проявлять инициативу
Если вы видите, что какой‑то процесс в команде или компании систематически создаёт проблемы, не нужно молчать только потому, что у вас мало опыта.
Пример: у вас в команде есть условный «человек‑знаток», который один знает ответы на специфичные для вашей компании/команды вопросы. Пока он на месте — все работают. Как только уходит в отпуск — процессы встают. Со стороны это выглядит как явная уязвимость процесса, и предложение завести базу знаний или хотя бы описывать где‑то типовые проблемы кажется логичным.
Если сомневаетесь, имеете ли право поднимать такие вопросы, — обсудите их с коллегами. Возможно, они думают о том же, и вместе вам будет проще сформулировать проблему и предложить решение.
Резюмируя
Это не исчерпывающих список, это то, что на мой взгляд было самое важное из опыта. Я постарался вкратце рассказать о каждом аспекте и если вам захочется что-то обсудить, с радостью отвечу в комментариях, а, если нужно будет раскрыть получше какой - либо из аспектов, могу написать дополнительный материал по ним.
«Сначала проверь компанию, а потом уже трать на неё время». Звучит просто, но многие делают наоборот: откликаются, ходят на собеседования, готовятся к вопросам — и только потом, уже на месте, начинают понимать, куда попали. Иногда это заканчивается разрушенными ожиданиями, а иногда испорченной трудовой и незапланированной сменой работы. Поэтому небольшая разведка до похода на интервью — не паранойя, а способ сэкономить время и нервы.
В этой статье я собрал свой чек‑лист проверки компании перед собеседованием. Он состоит из двух блоков: базовая проверка через открытые интернет‑ресурсы и дополнительная — через реестры и базы.
Начнем с простого — что лежит на поверхности и помогает составить примерный образ компании.
В вакансиях зачастую встречается скудное описание продукта, над которым предстоит работать, и не менее редко оно попросту отсутствует. Описание остальных продуктов компании встречается и того реже, даже если смотреть ее профиль. Поэтому неплохим решением будет сходить на их сайт и изучить предоставленную информацию:
Как давно и какими задачами занимается
Какие проекты она разрабатывает (документация по ним)
С какими заказчиками и партнерами работает
Какие у нее есть дополнительные информационные ресурсы для изучения
Контактная информация (куда можно дополнительно постучаться при желании)
Изучив даже такой набор информации, можно не только получить первичное представление о компании, но и собрать довольно приличный набор вопросов на собеседовании для ее представителей.
Хорошо, если у компании есть профиль на Хабре. Там есть вероятность получить множество интересной информации о ней:
С какими технологиями действительно работает компания
Как устроены процессы и подходы (ревью, тесты, качество, техдолг)
Решением каких проблем она занимается
Есть ли какая‑то свобода у авторов или все пишут по методичке
Пишут ли рядовые разработчики или только «главные по блогу»
В социальных сетях и на видеохостингах тоже можно получить некоторое количество дополнительной информации о компании.
Очень важно обратить внимание на то, как сотрудники компании отзываются о ней. На популярных сервисах можно увидеть не только мнение человека о компании, но и то, сколько времени он там работал. Таким образом можно составить примерный образ компании, а также получить примерное представление о текучке кадров.
Особенно важно обращать внимание на повторяющиеся паттерны — в них можно заприметить наиболее вероятные положительные или негативные стороны компании. Я сам однажды недостаточно внимательно просмотрел отзывы о компании, от которой получил приглашение, и пропустил серьёзные сигналы о проблемах. В итоге — зря потраченное время, плохая запись в трудовой и вынужденная смена работы.
Самый лучший вариант — это если у вас прокачан нетворкинг или вы готовы потратить силы и время.
Для начала можно попытать ваших знакомых или знакомых их знакомых и так далее — есть ли у них опыт работы в выбранной вами компании, и смогут ли они дать вам информацию о целесообразности похода на собеседование. Также можно попробовать задать вопросы о том же в чаты по поиску работы и в любые другие чаты, связанные с нашей сферой.
Если есть профиль компании на Хабре, можно попробовать найти среди публикаций такие, авторами которых являются сотрудники компании (об этом бывает написано в профиле), и написать им о том, какой вы крутой специалист, что вам интересна данная компания, вы хотите в ней работать, и узнать информацию N.
А если компания проводит какие‑либо мероприятия, и она вам очень сильно понравилась, можно попробовать сходить на них и как минимум узнать важную информацию по работе в компании, или даже заболтаться с руководителем отдела разработки ПО, друг другу понравиться и получить приглашение на собеседование, как было давненько у меня с одной известной российской компанией.
Если компания маленького или среднего размера, можно попробовать посмотреть ее упоминания в интернете по идентифицирующим данным (название, ИНН, ОГРН). Так есть вероятность найти упоминания в СМИ о скандалах, увольнениях, аналитике компании и тому подобном. Также это может служить дополнительным источником отзывов сотрудников и партнеров в виде статей, постов и комментариев.
Базовая проверка дает общее представление. Теперь перейдем к более глубоким инструментам — реестрам и открытым базам, которые помогают отсечь совсем негативные варианты.
Когда базовая картина сложилась, и компания все еще кажется интересной, стоит заглянуть в различные реестры и базы. Это может помочь понять юридическую и финансовую сторону: в порядке ли отчетность, нет ли долгов, множества судов и других проблем.
Прозрачный бизнес (ФНС)
Это официальный сервис налоговой для комплексной проверки налогоплательщика. Иными словами, место, где видно, что компания в целом исправно существует как юридическое лицо, и чем живет с точки зрения налогов.
Заходим на сайт «Прозрачный бизнес», вбиваем ИНН или ОГРН — и смотрим:
Налоги, доходы, задолженности и нарушения
Среднесписочную численность сотрудников
Основной вид деятельности (ОКВЭД)
Участие в других юридических лицах
Сведения из бухгалтерской отчетности
Если у компании есть налоговые задолженности, нарушения или она находится в процессе ликвидации — это повод отказаться от нее. А численность сотрудников помогает понять реальный размер бизнеса, который не всегда совпадает с красивым описанием на сайте.
Ссылка: https://pb.nalog.ru/index.html
ФССП
Это база исполнительных производств — иными словами, долгов, которые уже взыскивают принудительно.
Заходим на сайт ФССП, вбиваем ИНН или название — и смотрим, есть ли у компании производства.
Если их много и на приличные суммы, это повод насторожиться. Значит, компания может иметь проблемы с деньгами или с обязательствами перед партнерами и сотрудниками.
Ссылка: https://fssp.gov.ru/iss/ip/
Картотека арбитражных дел
Это база судебных дел по экономическим спорам и другим разбирательствам в арбитражных судах. Там видно, с кем и из‑за чего судится компания.
Заходим на сайт, вбиваем ИНН или название — и смотрим дела.
Важно не только то, что компания вообще участвует в судах, но и в какой роли она выступает: истец или ответчик. Если компания регулярно оказывается ответчиком по трудовым или договорным спорам — это повод задуматься.
Ссылка: https://kad.arbitr.ru/
Еще один способ оценить компанию — взглянуть на финансовую отчетность. По цифрам можно примерно прикинуть, как по документам себя чувствует компания. Как я это делаю:
Шаг 1. Захожу на сайт ФНС БФО (https://bo.nalog.ru/) и по ИНН нахожу финансовую отчетность компании.
Шаг 2. Скачиваю отчеты в формате xlsx.
Шаг 3. Прогоняю их через небольшую программу на Python. Она принимает путь к файлам отчетов и преобразует все страницы в CSV. Дальше эти данные можно скормить ИИ, которому вы доверяете, и получить аналитику.
Код программы для конвертации Excel файлов в CSV в статье на Habr.
В отчетах можно увидеть:
Растет ли выручка или падает
Есть ли прибыль или компания в убытках
Как меняются активы и обязательства
Не растет ли долговая нагрузка
Достаточно ли денег для текущей деятельности
Иногда по отчетности видны явные сигналы: компания стабильно работает в минус, активы тают, долги копятся. Или наоборот — уверенный рост, с которым спокойнее идти на собеседование.
Я не говорю, что нужно превращать поиск работы в полноценное расследование. Но потратив n‑времени на проверку, можно сэкономить ощутимое количество времени работы в компании, которая вам не подходит. Лучше заранее заметить тревожные сигналы, чем потом с полным разочарованием и испорченной трудовой искать другое место.
Все пункты чек‑листа — это не обязательная программа, а варианты инструментов. Где‑то достаточно пробежаться по сайту и отзывам. Где‑то — копнуть глубже: реестры, суды, отчетность. Каждый сам решает, насколько глубоко заходить в отдельно взятом случае.
Если у вас есть свои способы проверки компаний и хотите поделиться, с радостью бы почитал, и уверен, что это будет полезно для сообщества.
