Всем привет! Хочу поделиться с вами подробностями работы 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 программиста. Стать разработчиком вполне реально, но нужно потратить достаточно времени и сил на изучение. Задавайте вопросы.
Сергей
40 уровень
суперменасына маминой подруги.