Чем занимается Junior разработчик.

Автор: Петр Арсентьев


Junior work

Чем занимается Junior разработчик.

В этой статья Я расскажу, чем занимается Java Junior разработчик. Здесь я приведу ответы трех моих учеников, а в конце статьи расскажу про свой опыт и сделаю вывод.

Роман, 35 лет, Java-программист. Опыт коммерческой работы 3 месяца.


Меня приняли на работу в молодую компанию, основная часть сотрудников которой работают удаленно со всей России и не только. Основная деятельность компании — технологии распознавания речи, автоматизация и роботизация обратной связи клиентам крупных компаний. Кроме, того, мы внимательно следим за потребностями рынка, и если клиенты высказывают какие-то имеющиеся проблемы и потребности, мы рассматриваем их с точки зрения создания коммерческого продукта. Как следствие, 90% кода мы пишем практически с нуля. Так же работа в компании требует взаимозаменяемости, так как необходимо подключаться к другим проектам, если того требуют сроки. Каждый из нас должен уметь писать и фронт и бэк. Причем, часто, один пишет фронт, другой бэк, и наоборот, поэтому нужно писать так, чтобы у коллеги не было проблем с твоей частью. До обучения на Job4j.ru я не имел к компьютерам никакого отношения, поэтому для тех, кто ранее имел опыт системного администратора или программиста других языков, некоторые проблемы, возможно, не будут актуальны.

Итак, какие составляющие обучения не кажутся важными, но в коммерческой разработке имеют большое значение:
— Командная строка. У компании есть сервера. Многие операции быстрее и удобнее сделать через нее. Нередко, некоторые операции можно сделать только через нее.
— Этапы сборки Maven-проекта и их смысл. Тут, кстати, тоже пригодится знание командной строки, например, для сборки проекта без запуска тестов.
— REST-архитектура. Из того, что есть на русском языке трудно понять, что это. Но рекомендую потратить время, для того, чтобы вникнуть в суть этого понятия и как оно реализуется на практике. Методы GET и POST нужно понимать не хуже, чем арифметику
— Нужно вникнуть, что означают и как реализуются такие понятия, как Entity, DTO, Repository, Controller и их взаимосвязь друг с другом при написании кода
— Совместная работа в репозитарии (Git): merge, rebase, откат к предыдущей версии
— Уметь логгировать код (у меня откладка занимает в 4-5 раз больше времени, чем написание кода)
— Обязательно обрабатывать все возможные исключения. В коммерческой разработке не стоит допускать остановки приложения. А если это случилось, как правило, времени на исправление дается немного
— Платформа JHipster и ее неотъемлемая составляющая Angular (фронт в Angular пишется на TypeScript). Это путь к быстрой и качественной разработке коммерческих приложений. Да, придется потратить на освоение не мало времени, но оно того, стоит, через пару месяцев начнете восхищаться этими инструментами и забудете про другие
— HTML5, CSS3, JS(JQuery) стоит уделить больше внимания, чем требуют задания курса
— Основные методы из API работы со строками и коллекциями. Их желательно знать наизусть. Сильно экономит время
— Еще раз ОТЛАДКА. Придется научиться искать решение любой проблемы в Google. Вряд ли Вы первый в мире с ней столкнулись, но скорее всего, Вы первый русский :), поэтому учите технический английский. Необходимо выстраивать отношения с коллегами: иногда они будут Вам помогать и, чем больше они будут Вам помогать, тем быстрее Вы научитесь коммерческой разработке. И да, со многими проблемами отладки Ваши более опытные коллеги уже сталкивались
— Методика написания кода. Сначала пишешь абстракции (название метода с пониманием, какую задачу он решает). Когда есть общая логика взаимодействия системы, начинаешь наполнять методы кодом
— Работа на результат и в установленный срок

Нужно понимать, без этих знаний можно не только устроиться на работу, но и достаточно успешно ее выполнять. Вопрос в том, что с этими знаниями ты становишься программистом, который может создавать коммерческий продукт с нуля. Не буду вдаваться в подробности, почему это важно и полезно.

Из хорошего:
— лично меня, задачи из курса настолько натаскали по Java Core, что ни к Шилдтсу, ни к Хорстманну я еще ни разу не обратился, после трудоустройства. Если что-то уточнить, смотришь в справке по API в IDEA, но, скорее удостовериться, чем узнать что-то новое
— если что-то совсем не получается, тебе всегда помогут, подключится вся команда и проблема будет решена (возможно, так не везде)
— не бойтесь задавать вопросы, будет странно, если Вы их не задаете (либо ничего не понимаете, либо ничего не делаете). Все в команде когда-то были на Вашем месте и к одному и тому же вопросу первые 2-3 раза отнесутся нормально

Александр. 52 года. Java-программист. Опыт коммерческой работы 2 месяца.


Общая ситуация:
К сожалению, в конторе не принято / не установлено ни шефство, ни код ревью. В результате: каждый как бы предоставлен сам себе, что / как хочу, то так и делаю.

Плюсы:
- удобно для новичков. Если я чего-то не знаю или что-то делаю криво - никто об этом как бы не узнает, не проверяет. Делай как угодно криво, лишь бы хоть как-то работало.
- Можно спокойно набираться практики.

Минусы:
- Т.к. никто не контролирует, не проверяет, не говорит "как правильно" - ничего нового мы не узнаем, не обучаемся, не постигаем. Можем годами писать медленно работающий г-код, считая себя вундеркиндами.

Парень, который работал до меня много чего полезного хорошего написал, но наделал большое количество ошибок из-за того что совсем не разбирался в БД. (данные пытался сохранять на сервере в виде xml-табличек, затем копировать в DB, при необходимости получения данных - обратный процесс: достаем из БД, кладем на сервер, открываем, разбираем на массивы или коллекции, производим необходимые операции.
Понятно, что скорость написания и надежность кода с подобным подходом довольно низкая. В результате ему в помощь подыскали меня.

При этом парне проект так и не заработал. (Oracle + Java + JS + C)
Пришлось искать ошибки уже без него. На это у нас ушло около 2-ух недель. Код плохо читаем, без комментариев. Стиль написания - явно не лучший. (классы по 600 строк - не лучший стиль). Ошибка оказалась в работе потоков. Один из поток, который считывал результаты, обращался за данными раньше, чем другой поток их успевал создать. На этом сервер падал без всяких записей в логах.
Поправил логику на "нормальную". Ушло 2 дня - все заработало. Они не могли найти и вычистить эту ошибку около 3-ех месяцев.

Приходится заниматься:

1) PL/SQL запросы и пакеты - 20% времени
(хотя и относительно немного, но как оказалось - безумно важная часть, т.к. не знание, не понимание возможностей обработки на уровни базы приводило к серьезным осложнениям работы приложения. 1-2 дня работы с пакетом на Oracle. сокращал работу на Jave-е где-то на 5-10 дней. Не говоря уже о повышении надежности и увеличении скорости работы)

2) Сама Java: классика, массивы, коллекции, jsp, servlet, jstl - где-то 30-40% времени.
(никакого Hibernate бинов и т.п.).

3) Все остальное время - чтение логов, попытка найти и исправить ошибки. (по первым 2-ум пунктам), в основном допущенные предыдущим разработчиком.

Ситуация осложняется не возможностью запускать приложение в debug-mode из-за наличия исполняемых сборок (на С), которые запускаются только под Linux.

Что бы побороть эту ситуацию, мне сейчас придется ставить на свой собственный компьютер линукс, разворачивать на нем приложение и добиваться возможности запускать приложение в debug-mode.

4) Написание отчетов. (20-40 минут в день или два)

5) Конечно SVN. Закачка обновлений и выкладывание изменений, которые делаешь сам.
Я уже раз 10 запарывал версии. Просто перестают работать (видимо случайно что-то портил). Откатываешь до последней стабильной версии и копируешь изменения - все работает... А war-ник из директории, где правишь - слишком часто "нет".

Из обучения: Не хватает знания JS и Linux. Если первое нужно далеко не всем, то начальное знакомство с Linux нужно наверное большинству разработчиков, т.к. сервера чаще всего стоят на Linux и часть операций необходимо производить там (проверка / убийство процессов, перезагрузка приложения, чтение лог-файлов без ftp и т.п.).

Александр, 35 лет. Java-программист. Опыт коммерческой разработки – 6 месяц.


В целом пришлось очень много поработать по фронту: jquery, работа c асинхронными операциями класса deferred, постоянно приходится искать и изучать различные js проекты для решения задач типа таблиц, галерей, загрузчиком, кропа картинок. Также очень много thymeleaf для отрисовки статической информации, форматирование чисел и дат с помощью numbers и temporals. На бэке - все на прямых запросах через jdbctemplate для ускорения работы, отсюда куча джойнов таблиц + еще пришлось разбираться с пагинацией для запросов, чтобы ограничить выгрузку для пользователя. На spring security пришлось сделать кучу вещей в виде разрешений для пользователей и сохранение данных сессий в куки для remember-me сервиса (автовход). Плюс менеджерам нужно постоянно загружать прайсы и данные в базу, для этого используем apache poi для парсинга документов и заливки полученных данных в БД. Ну и самое интересное - задачи на сервере, выполняемые по расписанию - рассылка нотификаций, писем, сбор прайсов с почтового ящика, там приходится использовать Quartz scheduler, а там много подводных камней =)) Так что разных новых задач хватает =)

Теперь я расскажу о своем первой опыте (Арсентьев Петр, опыт работы 10 лет).


Первые задачи касались исправления багов. Обычно это мелкие ошибки на стороне front-end связанные, либо с неверных отображением на JSP или данные загружались с ошибкой в контроллере. Львиную долю времени приходилось сидеть в debug режиме, чтобы найти, в чем проблема. Так же начальник говорил, что если что-то не понятно ищи в google. Причем вся информация была только на английском, поэтому уровень английского пришлось подтянуть. Было много задач с технологиями, про которые я слышал в первый раз. Много задач касались интеграции со сторонними система. Разворачивать их проще всего было в Linux среде. Я помню задачу про импорт данных из active directory. Чтобы настроить это приложение, нужно было поставить windows 2003 или любой дистрибьютив Linux. Причем на Linux AD разворачивался одной командой, это очень удобно по сравнению с конфигурированием Windows. Основной навык, который я прокачал на первой работе был навык поиска информации и умение применить ее в проекте. Так же, часть задач касались SQL. В целом сложилось впечатления, что кроме Java нужно еще знать много сопутствующих технологий.

Давайте сделаем вывод.


Как мы видим спектр задач, которые дают начинающему программист очень обширный. Здесь не получиться выучить один раз технологию и потом всю жизнь ее использовал. В проекте постоянно будут добавляться новые задачи, с которыми программист еще не работал. Иногда в курсе (http://job4j.ru/courses/java_with_zero_to_job.html) студенты возмущаются, почему я в некоторых тестовых заданиях добавляю технологии, про которые не рассказывал в видео. Я делаю это специально, чтобы подготовиться ученика к реальному проекту. Например, в тестовом задании темы SQL дается указания распарсить xml с помощью SAX. Задача не сложная и полностью расписана на официальном сайте https://docs.oracle.com/javase/tutorial/jaxp/sax/parsing.html. Ученик привыкает к состоянию, когда в задаче есть не понятные вещи и нужно найти решение самостоятельно.

Давайте теперь выделим основные навыки, которыми должен владеть начинающий программист.


1. Java – это основной язык на который нужно фокусироваться.
Начните с этого материала ссылка.
2. JS – все программисты указали, что есть ряд задач, в которых нужно применения этого языка.
Java программист начинает использовать JS, когда дошел до JEE. Такой человек понял, что он хочет стать профессиональным программистом. Поэтому я советую рассмотреть вот этот курс - ссылка
3. SQL – используется опять же везде. SQL JDBC Hibernate Spring Data подробно рассматриваются в курсе - ссылка
4. Linux – основные команды. Все что нужно для Java программиста собрано в открытом курсе тут - ссылка
5. Дебаг и отладка приложения – посмотрите видео - ссылка
6. Английский – Мы готовим серию статей – «Английский для программиста».
7. Google. Я поставил этот пункт в конце. Но по важности его нужно поставить в самое начало. Когда решаете любую задачу, старайтесь пользователь поисков. Кто-то уже решил вашу задачу, нужно просто найти кто и где.