Читатели хабра, категорически вас приветствую! Я прошел путь от стажера до разработчика Java с опытом в 5+ лет. За это время было принято не мало хороших решений, но плохие тоже не отставали, о последних и возможном способе их решения я хочу рассказать, и возможно кому то это поможет не наступить на те же грабли что и я, или же менее болезненно “отодрать” их от своих ног, если вы уже попали на них.
В самом начале я думал: «Вряд ли есть что-то настолько же важное как сам код», а как оказалось вокруг есть еще очень много важных аспектов, о которых было бы здорово услышать заранее. Материал будет разбит на две части: онбординг, работа с задачами, код-ревью, тесты и чистые код и архитектура.
1. Онбординг: не бояться спрашивать и просить помощи
Многие люди боятся спрашивать, потому что кажется: «Я и так должен сам разобраться». В итоге вы можете сидеть часами множить неудачные попытки с чем-то разобраться, и винить себя в некомпетентности, хотя очень вероятно, что проблема не в вас. На самом деле никто не ждет от вновь прибывшего сотрудника, тем более у которого еще нет многолетнего опыта за спиной, что он с ходу разберется во всем.
Задача онбординга – с наибольшим комфортом и за наименьшее время помочь вам влиться в процессы компании и команды. Поэтому смело задавайте вопросы и просите помощи при необходимости у ответственных лиц. При этом не забывая о балансе, есть вещи которые предполагается что вы знаете, например установить среду разработки, склонить проект, установить и настроить СУБД по конфигу и тому подобное. А есть вещи специфические для конкретной компании или команды, который вы не можете знать изначально, например где лежат конфигурации для различных стендов, какие политики именования веток в системе контроля версий, где взять доступы к внутренним API и так далее. И помните, вашем быстром и комфортном онбординге заинтересован бизнес, вы имеете полное право на него.
Например когда я пришел начинающим разработчиком в одну из компаний, где я работал, мне в первый день дали древнюю документацию, и сказали пройти по ней тестирование по знанию продукта, а после развернуть его, с тестированием я сходу справился, а вот с разверткой проекта возникла трудность, проект никак не стартовал. Я несколько часов штудировал доку и пытался найти чего же мне не хватает для поднятия проекта. Ведь мне дали большую доку, где, казалось бы, все необходимое уже точно есть, ведь люди наверняка поддерживают актуальность доки, но, к сожалению, я ошибался. Оказалось, что конфиги для поднятия проекта не актуальные, и я никак не смог бы сделать это самостоятельно. И прежде, чем корить себя после долгих неудачных попыток, лучше пойти и задать вопрос ответственному коллеге, ведь нет ничего зазорного в том, чтобы спрашивать о том, чего не могли значить чисто физически.
2. Не стесняться спрашивать того, кто дал задачу, но подходить к этому с умом
В начале карьеры (после тоже немало) особенно часто могут возникать ситуации, когда вы не поняли, что требуется в задаче. Не нужно думать, что вы не обладаете достаточным количеством знаний чтобы с ходу понять задачу. Проблема постановки задач преследует огромное количество специалистов, как начинающих, так и очень опытных. Но важно помнить о балансе, не нужно бегать с абсолютно любыми вопросами. Необходимо сначала постараться разобраться в вопросе, применить свои знания и опыт, а так же умение поиска информации, и только после этого идти к коллеге с собранной пачкой грамотно сформулированных вопросов.
Например, в одной из компании у меня была ситуация, когда на очередном распределении задач, я получил свою, в ней как мне, казалось, было все очень подробно расписано, с широко развернутым текстовым описанием, примерами, изображениями с уточняющей информацией и выглядело это как нечто внушающее доверие. Но у меня никак не получалось интегрировать функциональность в то место куда требовалось, я прилично времени сидел вчитывался в ТЗ, изучал целевой участок проекта, документацию по нему (в этом проекте она была хорошей в отличие от примера из первого пункта), но никак не мог ее интегрировать. Я думал: «Не пойму, такая красивая задача, все так хорошо описано, столько дополнительной информации, хорошая документация, а я не могу с ней справится». Оказалось, все довольно прозаично. Оказалось, что аналитик просто указал не тот участок приложения, а схожий, извинился и внес изменения в ТЗ.
Поэтому нужно смело уточнять все что вам не понятно, это естественная часть процесса решения задач. Лучше всего собрать список вопросов и подойти к ответственному сотруднику и обсудить максимум вопросов за раз. Это гораздо лучше каждые 5 минут бегать к коллеге с 1 новым вопросом.
Бывает, что сидишь с какой-то задачей, уже вопросы все задал, но все равно не получается ее решить. Скорее всего просто не хватает опыта решения задач в условиях реальной работы, и это нормально. Не нужно сидеть и заниматься самобичеванием, адекватные опытные коллеги не будут осуждать начинающего специалиста, они скорее с удовольствием помогут, ведь на самом деле отрадно и полезно помогать своим младшим коллегам.
3. Код-ревью. Защищаться и получать выгоду
Сомнительное ревью — вам могут сказать что-то вроде «Так пишут студенты», «Решение так себе» и не объясняют почему. Это не про вас. Это про неумение ревьюера в коммуникации.
Как-то раз мне сказали: «Мне не нравится, надо переписывать». Я спросил: «А что не так?» - «Так писать нельзя». И только после третьего вопроса «Почему именно не устроило решение?» я наконец получил внятный ответ. Хороший способ провести "эффективное" ревью. С тех пор я не стесняюсь переспрашивать. Уточните: «Расскажи, что именно не так». Если не помогает - фраза «Не понимаю, что вы говорите» часто отрезвляет. Она не обвиняет явно, но подчёркивает, что человек говорит невразумительно, и лучше бы ему изъясняться по-человечески.
Но оно бывает и таким: разговор начинается с того, что хорошо, но вот тут можно сделать более качественно - есть несколько подходов, вот первый, вот второй, вот примеры, где посмотреть. Если возникнут вопросы — сразу спрашивай, я помогу. Это бесплатный урок. Даже если ревьюер не сделал никаких замечаний, у таких коллег лучше лишний раз спросить: «А как бы вы сделали? Насколько вам нравится моё решение? Может, что-то можно улучшить?». Так можно быстрее улучшить свою экспертизу.
4. Сразу уделять большое внимание чистоте кода и архитектуры(уровень классов, сервисов и тп)
Лучше всего как можно раньше начать уделять большое вниманием этим аспектам, даже если вы видите, что в вашей команде кто-то на это забивал. Так как чем раньше начнете, тем меньше будет размер технического долга (скорость реализации в обмен на возможность поддержки и развития решения). Фраза «Потом отрефакторим», часто в действительности означает «Никогда»). А в результате мучительные и долгие правки которые делать либо вам, либо вашим коллегам, выслушивая много “лестных” слов в свой адрес, а вероятно и оба варианта сразу.
Например, в одной из компаний, где я работал, была практика выносить в отдельный общий модуль вещи, которые могут использоваться сразу в нескольких участках проекта и имеют идентичную структуру данных и функциональность и кажется, что для всех мест, где они используются - будут одинаковые изменения. Несколько месяцев, может лет, и в какой-то момент вполне предсказуемо изменения для разных участков проекта начали отличаться, не вносить их нельзя, так как заказчик уже стоит за дверью с мешком золота, и требует свои хотелки, причем побыстрее. А на этой вещи завязано множество критичных участков, и часть из них естественна не покрыта качественными тестами, следовательно, просто взять выкинуть старое и впихнуть туда новое не выйдет, нужно как минимум обеспечить хоть какие-то гарантии, что после изменений все зависимые участки не сломаются. И в итоге вам нужна куча времени, а как следствие и прилично денег компании на то, чтобы исполнить волю заказчика, который в ожидании своей хотелки то и думает, не пойти ли ему со своим мешком золота к более ответственным ребятам.
Таким образом, заботясь сразу о чистоте вашего кода и архитектуры, вы заплатите в разы меньше времени, а возможно и на порядок, чем если выберите подход “пока и так нормально”.
5. Не откладывать написание тестов
После того как вы реализовали какую-то функциональность, и прошло какое-то время, а тем более если это чужая функциональность, выбить время на покрытие ее тестами, будет сильно сложнее. Проще сразу заложить время на написание тестов в планируемое время на реализацию задачи.
Если у вас в команде плохо с культурой тестирования, можно сказать, что прежде, чем приступить к новой задаче, вы покроете тестами функционал предыдущей задачи.
Как-то раз была ситуация, когда нашей команде нужно было обновлять версию одной библиотеки для работы, и как на зло, с обновлением у нее изменился API, а тестов на участках, где она использовалась, было крайне мало. И помимо того, что тебе нужно разобраться с новым API, так тебе еще предварительно нужно покрыть все задействованные участки качественными тестами, а вспомнить как должны эти участки работать гораздо сложнее через несколько лет, чем в момент их создания. Поэтому, не забывая про тесты, вы сильно упрощаете себе жизнь на дистанции. И не забывайте о том, что тесты, это тоже код, и он тоже должен быть качественно спроектирован и реализован, и главное здесь не количество, а качество. Наличие бесполезных тестов хуже, чем их отсутствие, в основном бесполезные тесты дают ложное чувство безопасности, замедляют рефакторинг, множат себе подобных (плохой пример для других) и тратят время CI/CD.
Резюмируя
Это не исчерпывающих список, это то, что на мой взгляд было самое важное из опыта. Я постарался вкратце рассказать о каждом аспекте и если вам захочется что-то обсудить, с радостью отвечу в комментариях, а, если нужно будет раскрыть получше какой - либо из аспектов, могу написать дополнительный материал по ним.
В следующей части я расскажу про карьеру, отдых, синдром самозванца, споры, и саморазвитие. Спасибо большое за внимание, надеюсь эти статьи будет вам полезны.
Комментарии (11)

moonster
06.06.2026 17:581. Онбординг: не бояться спрашивать и просить помощи.
Да, но есть вещи, понимание которых предполагается по умолчанию. Как минимум, это всё то, что можно подчерпнуть из документации, как из публичной, так и внутреннего пространства проекта и компании.
2. Не стесняться дергать того, кто дал задачу.
Задача должна быть поставлена так, чтоб исполнитель, с учетом уровня вовлеченности и компетентности, мог решить ее самостоятельно. Конечно, это в зоне ответственности руководителя, но и доля ответственности исполнителя тут есть. Нужно или в моменте проанализировать задачу, и если показалось, что есть невнятные моменты, то взять время на более углубленное знакомство с последующей запланированной встречей, где исполнитель сможет провалидировать понимание. А "дергать" лишний раз не надо, про это тут уже много написано.
3. Код-ревью. Защищаться и получать выгоду.
А тут всё верно. "Не нравится" - это плохое замечание, нужна конкретика. Но бвает и так, что "не нравится" потому, что проще с нуля переписать, чем объективно критиковать PR, каждая строчка которого вызывает нервный тик и кровоточение глаз.
4. Сразу уделять большое внимание чистоте кода и архитектуры(уровень классов, сервисов и тд).
Чтоб принимать правильные архитектурные решения, нужно обладать достаточной компетентностью, иметь качественные требования и полную информацию о прочих разных аспектах окружения. Если чего-то из этого нет - лучше сделать максимально просто и покрыть тестами, скорее всего интеграционными, чтоб потом можно было отрефакторить, и обязательно заложить этот рефакторинг в план. Да, придется следить за техдолгом, придется продать рефакторинг менеджменту, но это все равно проще, чем прыгнуть выше своей компетентности и значительно проще, чем предсказать будущее.
Иными слрвами, код должен быть максимально прост, и он не должен опираться на неподтвержденную информацию.
5. Писать больше тестов сразу.
Тестов нужно писать столько, сколько нужно. ) Серьезно. Я видел ситуации, в которых одна и та же функциональность с разной реализацией имела количество тестов, отличающееся на порядок. Мидл наколбасил реализацию и более 100 тестов, сениор отрефакторил, задекомпозил, получил 4е класса вместо одного, для 3х написал простейшие юниты, для 4го, который зависел от предыдущих 3х, написал юнит на моках. Тестов стало около 15.
Тесты - тоже код, а кода чем меньше - тем лучше.

Alex_software_dev Автор
06.06.2026 17:58Спасибо большое за очень полезную и развернутую обратную связь. Я внес некоторые коррективы в статью. Вы действительно помогли сделать ее лучше для читателей. Немного соображений на тему:
Уточнил, что есть общие вещи которые предполагается что вы знаете заранее.
Добавил что необходимо сначала углубиться в задачу, используя ваш опыт, знания, умение искать информацию попытаться самостоятельно найти ответы на вопросы, и только после этого пойти к ответственному коллеге с хорошо продуманным набором вопросов
Согласен и разделяю вашу боль, иной раз хочется взять и написать все самому, но я бы все равно объяснил что «к сожалению каждую строчку этого кода (куска *) нужно переделать, так как а,б,ц,д». А если такое возникает регулярно, то нужно задуматься о целесообразности нахождения сотрудника в команде, или на данных задачах. Это исключительно мнение из опыта, ни на что больше не претендую.
Согласен, но либо мне и всем моим знакомым из индустрии так везло, либо довольно часто происходит так, что фраза «потом отрефакторим» перерастает в «никогда». А компетенции для изначально грамотного проектирования на низком уровне системного дизайна по моему мнению должны быть.
-
Про тесты немного исправил название и добавил про важность качества а не количества, и про существенный вред бесполезных тестов
Спасибо огромное за помощь в улучшении статьи

LeshaRB
06.06.2026 17:5810 вещей, которые бы я хотел услышать в первый год работы.
В одну статью все 10 вещей не поместились?

gybson_63
06.06.2026 17:58Когда я еще был совсем юн, мне часто повторяли
- Думай, что делаешь
- Посмотри, что ты делаешь
- Что ты делаешь?
И это был не абьюз. Это было очень неумелое, но важное обучение. Всегда необходимо думать что ты делаешь и знать что ты делаешь. Тогда большинство проблем отсекается. Вам нельзя сказать : "Так не пишут". Так в принципе люди с высшим образованием не должны даже сметь сказать, но всякие бывают (это про пункт 3)
Если вы хотите знать, что делаете, то вы совершенно естественно спрашиваете и учитесь. Потому что вы знаете, что сейчас не знаете что делаете, но должны узнать (это пункты 1 и 2)
4 и 5 тоже логично вытекают.
Всегда знайте что вы делаете. В любой момент вы должны четко и ясно рассказать что вы делаете.
И после этого уже переходим к "зачем" :) Это тоже важно.
Это очень простая, но необходимая база вообще для любой деятельности. А для такой сложной, как программирование, особенно.
Всегда знайте что вы (или ваш ИИ) делаете.
Alex_software_dev Автор
06.06.2026 17:58Спасибо вам большое. Очень точно сказано - всегда необходимо думать что ты делаешь и знать что именно. Это действительно момент, без которого всё остальное не работает

vadimr
06.06.2026 17:58Какие все нежные стали.
Когда я устроился после обучения в вузе на первую в своей жизни работу (в финансах), мне сказали: “Вот программа "работа с таким-то банком", её разработчик разбился в ДТП, больше никто не знает, как она работает, ты должен разобраться и продолжить разработку. А да, ещё она несовместима с тестовой базой, поэтому отлаживаться будешь на рабочей, смотри ничего там не сломай". Ну и пришлось разобраться. Отлаживался, создавая вымышленные платежи от филиала фирмы Алкатель в стране Австрия, так как он был первым из клиентов по алфавиту, потом эти платежи аннулировал. 90-е годы, простые были нравы. Убить человека стоило сто долларов, так что при программировании движения денежных средств приходилось быть аккуратным.

MishaBucha
06.06.2026 17:58Не стесняться дергать того, кто дал задачу.
Я с вами согласен, но я бы добавил кое что. Не нужно без разбора бежать к другому разработчику или автору.
Есть 2 грани, вообще не ходить или ходить каждый раз, даже когда все уже описано.
Я встречал таких) вместо того, чтобы посидеть самому, разобраться, сразу идут за помощью
Я уже полчаса не могу найти причину
А в это время ты сидишь и решаешь баг 10 часов)
Так что я бы сказал всем, кто вначале - сначала пробуйте разобраться сами, всегда, как бы тяжело не было, это вырабатывает самостоятельность.
Если уже чат гпт или 10 страниц Гугла не помогли, попросите помощи, в этом ничего плохо нет, но всегда сначала разбирайтесь сами)

Alex_software_dev Автор
06.06.2026 17:58Спасибо большое за конструктивную обратную связь, полностью с вами согласен, в первом варианте статьи я забыл сказать про эти моменты и внес изменения в статью касаемо того, что перед тем как бегать с вопросами к старшим коллегам, необходимо применить весь свой опыт, знания, умения искать информацию и если не сработало, с качественно собранным списком всех вопросов (не бегать по 1 каждые 5 минут), пойти за помощью к старшему коллеге
Android1983
Привет автор.
По сути статья написана достаточно качественно понятно как для новичка. Я уверен что вопросы могут возникнуть у тех кто хоть одной ногой уже в теме.
Так же похвалю автора за статью, так как тпакие статьи полезны тем чтобы устроившись на работу не вылететь с неё косяча казалось бы по таким пустякам.
Жду с нетерпением следующую главу. В ней затронуты тоже важные вопросы разобрав которые получиться избежать много проблем. Особенно интересно узнать что сейчас актуально и нужно изучать чтобы быть востребованным на рынке труда и не потратить время на изучение лишнего.
Alex_software_dev Автор
Здравствуйте, спасибо большое за теплые слова. Постараюсь хорошо сделать вторую часть. Тема изучения будет частично затронута во второй части.