Всем привет! Хочу поделиться с вами подробностями работы middle java программиста, рассказать, чем junior отличается от middle что должен знать и какие задачи перед вами будет ставить начальство. О себе: я работаю программистом больше двух лет, сменил три компании, множество проектов и технологий. Я постоянно изучаю программирование, и продолжаю изучать также как на javarush. Уровень задач становился все сложнее и сложнее, но обо всем по порядку... Выходя на первую работу многие переживают, смогут ли разобраться, справиться. Скажу коротко - переживать не стоит. Работодатель понимает кого он берет и многово не ожидает. Вам будут давать задачи с которыми можете справиться. Отношение к джунам всегда снисходительное. Проект скорее всего уже написан. Конечно, после учебных проектов, коммерческий кажется нереально сложным. Но никто не будет требовать написать такой же. От вас требуется разобраться в чужом коде и сделать по аналогии. Иногда добавить небольшую фичу. Исправить баг. Причем все задачи будут объяснять как делать. По буквам диктовать конечно не станут, но по шагам скажут как ее решать. В непонятной ситуации подскажут. Короче, ничего сверх сложного, да и ответственности мало. Каждую строчку будут проверять, следить чтобы ничего не сломали. В основном вы будете разбираться с java кодом, а работать с другими технологиями редко. Да и всегда можно сказать, я это не знаю. Это нормально. Вообще джунов неохотно берут на работу по двум причинам. Первая - непонятно чего от него ожидать, какой его уровень, сможет ли он что-то сделать. И глядя на темы форума начинаешь понимать, что такие опасения не напрасны. Один раз я слышал про человека, который на собесседовании не мог 'Hello world' написать. Вторая причина в том, что работы для джунов не так много. Вы не можете дать джуну сделать новый сервис, интеграцию, оптимизацию, не типовую задачу, автоматизацию процесса сборки и т.п. Джун без опыта и с опытом - совершенно разный уровень и работодатель это понимает. Задачи в реальных проектах очень сильно прокачивают, ведь они координально отличаются от учебных. Постепенно код становится понятным, фремворки знакомыми. И вот вы уже программист. Здесь у многих складывается впечатление что программирование не такое уж и сложное занятие. Но все меняется когда вы становитесь мидлом. Прежде всего от мидла ждут самостоятельности. Впринципе других программистов в команде может и не быть. Подсказать как работает код бывает некому. Предполагается что миддл способен выполнить любую задачу. Можно выделить следущие категории: Интеграция. Системы взаимодействуют между собой по различным протоколам: http, mq, soap, а также через файловую систему и базу. Нужно сделать подключение и наладить обмен сообщениями определенного формата. Требует знание протоколов и соответствующих фремворков. А фремворков существует много. Исправление бага. Требует понимание работы вашей системы, а также внутреннего устройства фремворков, которые вы используете. Фича. Может быть что угодно, но java разработчики чаще всего имеют дело с данными: взять откуда-то объекты, поменять значения, положить в другое место. Поменять поля у объекта и т.п. Развертывание проекта на серверах. Вообще для администрирования приложений как своих так и сторонних есть специальный человек - DevOps. Но он есть далеко не во всех командах. Угадайте, кто это будет делать? Да, джавы станет меньше. Нужно подучить системы автоматизации. Для управления конфигурацией серверов используются такие программы как Puppet и Ansible. Но сейчас тенденция идет в сторону виртуальных серверов, где используют Kubernetes, OpenShift, AWS. Также есть различные системы логгирования и мониторинга, которые тоже нужно настраивать. Создание микросервиса. Все выше описанное собрать вместе. И для этого есть свои фремвоки. Доработка кода на другом языке. Да-да. Рано или поздно вы с этим сталкнетесь. Различные части системы написаны на разных языках. Вам нужно будет сначала разобраться с синтаксисом и фремворком, а потом делать само задание. Фронт пишут на javascript или typescript, автоматическое развертывание на серверах - скриптами groovy, а сами сервера на linux и там bash скрипты. Нетипичные задачи. Самое сложное что может быть. Бывают не часто, но если попадется - то держитесь. Из команды никто подобной задачи раньше не делал, спросить помощи не у кого. Приходится разбираться с редкими технологиями. Во вторых от мидла требуется знание технологий, необходимых для решения задач описаных выше. И тут на вас сваливается весь зоопарк фреймворков, библиотек, программ. Слова 'не знаю' уже нет. Можно сказать, 'я это не делал, буду изучать'. В отличии от джуна, нужно не только знать много технологий, но и понимать тонкости работы. А также иметь представление о создании сервисов с нуля до выхода в прод. Вам предстоит практически постоянно читать документацию. В третьих от мидла требуется писать качественный код. По стилю и чистоте уже можно говорить об уровне разработчика. Код должен быть логически разбит на классы, между которыми понятно взаимодействие, они сгруппированы в пакеты, а в самих классах методы легко читаются. Об этом можно долго рассказывать. Короче, относитесь ответственно к каждой строчке. В четвертых ответственность. Никто особо ваш код проверять не будет, вернее разбираться как он работает. Все ваши косяки будут вылезать на тесте или в проде. Нужно проявлять инициативу в решении задач. Где-то придется погрузиться в бизнес процесс, переписываться с другими людьми, проводить встречи. От вас ждут результат, независимо от трудностей. Итак, как идет процесс. Главный человек в команде - владелец продукта - ставит бизнес задание, которое принесет прибыль продутку. Системный аналитик прорабатывает задачу: продумывает процесс в системе, составляет требования, пишет документацию. Далее задание отдается техлиду, а он дает вам. Никто не будет говорить как его решать, у вас есть только требование как должно работать. Почти всегда нужно подучить новую библиотеку. Накидаю примеров заданий: - Сделать авторизацию с помощью jwt токена. - Принять запрос по http, сохранить в базу, сделать из него xml определенного формата и отправить в mq. - Переделать запросы к базе под новое поле в объекте. - На фронте сделать кнопку которая из бэка получает данные. Отобразить новое поле объекта. - Отправлять логи в определенном формате в другую систему через kafka. - Написать тесты для всего выше описанного. - Развернуть ваше приложение в OpenShift Скажу что сложность скрывается в мелочах. Вроде все должно работать, но не работает. И вот сидишь и буквально по строчке проверяешь правильность создаешь прототип кода, сравниваешь. И все из-за того что код, который ты используешь делает не то что ты ожидаешь. Вот и все что я хотел написать. Надеюсь, после прочитанного у вас появилось представление о работе java программиста. Стать разработчиком вполне реально, но нужно потратить достаточно времени и сил на изучение. Задавайте вопросы.