Java — строго типизированный объектно-ориентированный язык программирования. Мир «джавы» — это тысячи проектов open source, в разработке и поддержке которых теоретически может участвовать любой желающий. Пометка «контрибьючу в опенсорс» со ссылками на профиль разработчика делает резюме более солидным и подчеркивает опыт. В статье мы разбираем, что такое contribution, как выбрать опенсорс на Джаве, предложить код, пройти код-ревью и дождаться добавления в основную ветку.
Введение в Java и open source
Open source на Java можно разделить на несколько категорий:
- фреймворки и библиотеки — Spring, Google Guava, Apache Commons, Play Framework, Atmosphere, Electronicarts Orbit, Spark, Netflix Ribbon, Spring Boot;
- базы данных и хранилища — Thinkaurelius Titan, Apache Cassandra, Amplab Tachyon, Leveldb;
- тестирование — Junit, Selenium, Mockito, JavaHamcrest, Cucumber jvm, JaCoCo;
- Machine Learning и нейросети — Airbnb Aerosolve, Deeplearning4j, Apache Mahout, Stanfordnlp CoreNLP, Apache OpenNLP;
- работа с облаками — Elasticsearch, Syncany, Apache Airavata, Aws sdk java;
- парсинг и web-crawling — Sparklemotion Nokogiri, Jsoup, Webmagic, Antlr4, Apache Nutch.
На «джаве» созданы и поддерживаются решения для работы с веб-серверами и серверами приложений, сокетами, http и ssh, интеграциями API различных систем. Инструментов так много, что для их сбора проще написать парсер с нужными характеристиками (количество звезд, дата обновления). На платформе GitVerse есть возможность отсортировать репозитории по языкам программирования. Реализован импорт репо из других платформ: копируются не только файлы, но и история изменений, ветки и коммиты.
К примеру, spring-framework — репозиторий, который активно развивается. У него больше 30 000 коммитов. Разработчики фреймворка поддерживают коммьюнити: участники описывают проблемы (баги, падение тестов) и предлагают решения для усовершенствования (enhancement).
Запросы на изменение Spring представлены в разделе «Запросы» (Pull Request). Отправкой пулл реквеста автор как бы говорит владельцам репозитория (создателям): «Смотрите, я внес изменения в код. Не хотите ли принять и влить их?».
На GitVerse можно зайти в репозиторий (repository), увидеть количество веток, коммитов, форков, запросов.
Почему стоит присоединяться к open source проектам на Java
Java Open Source projects — способ прокачать технические навыки, улучшить резюме, заявить о себе сообществу разработчиков.
Контрибьюшен в опенсорсе позволяет пройти весь цикл разработки:
- Специалист использует библиотеку, фреймворк или другой продукт в повседневной работе и обнаруживает проблему. К примеру, отсутствует интеграция с нужным сервисом или нет полезной функции. Можно оставить комментарий в Issues и ждать, что кто-то из разработчиков решает проблему. А можно предложить изменения самостоятельно.
- Разработчик делает форк, пишет/изменяет код.
- Автор изменений предлагает их владельцам репозитория (отправляет pull request).
- Pull request проходит код-ревью. В какие сроки старшие разработчики посмотрят пулл реквест, сказать сложно (зависит от проекта, важности задачи и других факторов).
- Пул реквест одобряют, делают merge (мердж, слияние) с main- / master-веткой или другой. Реализованную функциональность и код контрибьютора теперь, возможно, будут использовать тысячи разработчиков (developers) по всему миру.
Не всегда pull request сразу получает статус Approved: предложенные изменения могут отклонить, оставить без рассмотрения или запросить дополнительные данные от автора кода.
Контрибьютить в опенсорсные репозитории важно еще и по той причине, что профиль разработчика попадает в список ревьюеров (Contributors).
HR-менеджеры или другие девелоперы могут зайти в профиль, проследить активность специалиста, посмотреть рейтинг, оценить написанный им код. На GitVerse можно запросить список пользователей с сортировкой по заданным критериям, а также перейти в карточку конкретного девелопера.
Как выбрать подходящий open source проект на Java
Крупные репо с тысячами контрибьюторов часто сложны для новичков. Конкуренция высока, мелкие баги быстро фиксят, а крупные изменения под силу реализовать только специалистам уровня Senior.
Но есть способы найти готовые проекты, в которые можно законтрибьютить изменения:
- Искать новые репозитории, в которых не так много контрибьюторов и нет конкуренции. Важно, чтобы репозиторий не был заброшен. Не подходят репо, в которых нет активности больше 3–6 месяцев.
- Использовать рекомендации разработчиков. Задачи, которые относительно быстро может реализовать специалист с небольшим опытом, владельцы репозитория часто помечают как good first issue. Появился сервис goodfirstissue.dev, где можно найти задачи на Java и других ЯП.
- Контрибьютить изменения документации. Самый простой способ стать контрибьютором опенсорс-проекта для junior- и middle-специалиста — предложить обновления в этой области.
У каждого репозитория есть файл readme.md. В нем может находиться информация:
- что за продукт, для чего используется, кому подходит;
- как установить и начать работу (токены, примеры запросов);
- примеры кода, функциональности;
- ответы на типичные вопросы пользователей и разработчиков, а также другие.
Часто у создателей нет времени, чтобы написать подробную документацию по началу работы с продуктом. Контрибьют в readme.md с высокой вероятностью могут одобрить.
На этапе развития репозитория также происходят изменения, которые не всегда отражены в документации. Если разработчик видит, что методы/запросы/response/переменные и т.д. устарели, также может обновить информацию и отправить пулреквест на рассмотрение владельцев репозитория.
Также можно:
- Оценить feature request. В разделе Issues можно выбрать темы с пометками discuss, help wanted, feedback_needed. Они означают, что появился спорный вопрос. Ответы, дискуссии, помощь — это тоже вклад в опенсорс. Пространство для обмена идеями и общения в GitVerse будет доступно в разделе «Обсуждения». Оно будет реализовано по примеру Гитхаба. На GitVerse есть воозможность отправлять «Предложения от сообщества» через запрос на слияние.
- Отревьюить pull request. Вариант подходит для случаев, когда на пользователя назначен пулреквест. Можно оставить пометки, как лучше назвать класс или метод, как исправить стиль написания кода и так далее.
Как начать работу
Чтобы создать первый пул-реквест для ревью и проверить, как это работает на практике, software developer может:
- создать или импортировать репозиторий на github. В настройках можно указать владельца, название репозитория, описание, выставить public или private, добавить файл Readme.md, gitignore и т.д. GitVerse позволяет перенести репозиторий проекта из других источников;
- перейти в настройки и добавить пользователя, от имени которого можно отправить запрос на pull request (с предлагаемыми изменениями). Добавлять ревьюеров на GitVerse можно только из списка соавторов;
- создать пулл реквест через «Запросы» и добавить изменения. К примеру, обновить текст в пустом Readme.md;
- добавить ревью с комментарием и описанием;
- смерджить пулл реквест (одобрить запрос на слияние);
Изменения, которые предложил пользователь и которые мы подтвердили, появляются в проекте. Посмотреть коммиты пулл реквеста и изменения можно в разделе «Коммиты».
GitVerse позволяет закрыть запрос без слияния.
Для репозиториев на языке Java на GitVerse доступна опция AI-ревью. При отправке пулл реквеста можно получить анализ кода от искусственного интеллекта. Для этого необходимо создать pull request и нажать «Начать AI-ревью».
После выбора языка анализа кода (RU, ENG) появляется информация по обнаруженным ошибкам, реализованным в коммите изменениям, рекомендациям по исправлению.
В случае с опенсорсными проектами на Java или других языках программирования схема похожа. Нужно сделать fork, внести изменения, отправить pull request и дождаться одобрения, чтобы подлить свои предложения в текущий опенсорс-проект.