Java-технология — выбор ДжазТим
Java — генеральная область технологической экспертизы ДжазТим
С первых дней работы наша компания сфокусирована на Java-технологии. Такой приоритет выбрал основатель компании, Дмитрий Горячко. До основания ДжазТим он более 15 лет выступал в роли Java-разработчика на международных проектах. Получив обширный опыт как разработчик, архитектор и консультант, Дмитрий был уверен, что именно Java-технология является одним из наиболее универсальных и эффективных решений для оказания IT-услуг.
Подходы, которыми мы руководствуемся более 10 лет, отражены в нашем слогане «Agile Java Development». Каждая часть данного слогана демонстрирует ценности и принципы работы нашей компании. Экспертиза ДжазТим — это более 10 лет евангелизма в Java, Unit-тестах и CI/CD.
Фокус на конкретной технологии и эффективных практиках разработки был абсолютно осознанным и оказался стратегически верным. Позиционируя ДжазТим как Java-ориентированную компанию, мы быстро наработали пул постоянных клиентов. Наши заказчики ценят высокий уровень сервиса, профессионализм и богатую технологическую экспертизу сотрудников компании. Один из определяющих компонентов нашего уровня услуг — большой опыт в Java-разработке и активное применение преимуществ данной технологии.
В статье мы расскажем, чем обусловлена наша преданность Java-технологии и какие преимущества это предоставляет клиентам ДжазТим.
Технологическое лидерство Java
Язык программирования Java, впервые получивший широкую известность более 20 лет назад, по сей день сохраняет технологическое лидерство и занимает первые строки в рейтингах популярности на рынке IТ-услуг. Эта технология применяется в создании продуктов для облачной инфраструктуры (Amazon Web-сервисы, Google Web-сервисы, Oracle Cloud), машинного обучения, нейронных сетей, используется для работы с Big Data и прикладными научными программами, применяется в сфере Internet of Things (IoT). Приведём несколько примеров, подтверждающих актуальность и популярность языка программирования Java.
Рост количества Java-разработчиков в мире
В 2019 году общее количество Java-разработчиков составило около 7,6 млн. По прогнозам аналитиков, тенденция к росту будет только усиливаться.
Общее число разработчиков в мире и количество специалистов в конкретных технологиях
Согласно отчёту SlashData, к началу 2019 года в мире насчитывалось 7,6 млн Java-разработчиков, в то время как общее количество программистов составило 18,9 млн. Таким образом, несмотря на активное развитие и возникновение абсолютно новых языков программирования, Java по-прежнему популярна среди разработчиков и является выбором более, чем ⅓ специалистов.
Количество запросов на изменения в репозитории на GitHub с 2013 по 2020 год
Ежегодный отчёт веб-сервиса GitHub показывает, что Java и JavaScript уже более 7 лет держатся в первой тройке языков по количеству запросов на изменения в репозитории на данной платформе. Также наша компания не ограничивается языком программирования Java и активно использует JavaScript, который уже долгие годы занимает первое место в этом рейтинге.
Какое место занимал язык программирования Java в международном рейтинге TIOBE с 1997 по 2022 год?
Java на протяжении 15 лет входит в первую тройку лидирующих языков программирования по версии сообщества TIOBE, что в очередной раз подтверждает стабильный интерес к данной технологии. Рейтинг основан на результатах подсчёта поисковых запросов, содержащих название языка, в популярных поисковых системах (Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube и Baidu).
Опираясь на многочисленные рейтинги, исследования и отчёты, можно с уверенностью сказать, что Java пользуется большой популярностью в IТ-сообществе, и с течением времени интерес к ней не угасает. Такой результат вполне логичен: данная технология имеет большое количество преимуществ.
Java — источник инноваций и популярных инструментов
Java исторически является драйвером лучших практик экстремального программирования и Agile-разработки. Одним из факторов, способствующим этому, стало огромное Open Source сообщество. Миллионы талантливых разработчиков постоянно вносят свой вклад в развитие технологий, создавая повторно-используемые библиотеки и собственные фреймворки, решают сложнейшие инженерные задачи. К примеру, Spring Community полностью изменило методологию работы на Java и создало абсолютно новые парадигмы, которые впоследствии были использованы в других технологиях. В том числе принцип проектирования для написания слабо связанного кода Inversion of Control и один из видов его реализации — Dependency Injection.
Библиотека логирования Log4j развивалась в рамках «Apache Jakarta Project», но впоследствии выделилась в отдельный популярный проект, став стандартом для других языков программирования. Даже сами по себе среда выполнения и виртуальная машина Java (Java Runtime Environment) представлены в нескольких реализациях. Благодаря активному содействию Open Source сообщества Java-технология постоянно совершенствуется и развивается по своей траектории, в которой нет сильной зависимости от вендора.
Java всегда задавала тренды в мире разработки ПО. В данной технологии созданы многие востребованные инструменты и подходы, которые впоследствии были перенесены в другие языки программирования. К примеру, инструмент для работы с базами данных Hibernate был портирован в .Net. Распределённые вычисления MapReduce и технология Object-Relational Mapping (ORM), использование которых является стандартом во многих языках программирования, появились в Java. Важнейший инструмент в области автотестирования JUnit перенесён во все языки программирования. Jenkins — популярный инструмент для обеспечения процесса непрерывной интеграции — написан на Java. JavaScript — один из самых главных языков программирования в области web — основан на синтаксисе и семантике Java. Компания JetBrains создала первые среды разработки именно для Java, и уже после этого начала поддерживать их для других языков программирования.
Преимущества Java
Наша компания на протяжении многих лет проживает все этапы развития Java-платформы и развивает внутреннюю документацию, в которой описаны особенности синтаксиса и нововведений каждой версии. Многие из наших сотрудников ещё помнят времена нестабильности и багов, которые возникали в связи с несовершенством виртуальной машины Java. Спустя годы ситуация кардинально изменилась: мы рады наблюдать высокий уровень и хорошую динамику развития этого языка программирования. Сегодня виртуальная машина Java доведена до совершенства, её работа стабильна и предсказуема.
Java — эффективная технология, которая имеет важные преимущества.
1. Как объектно-ориентированный язык, Java позволяет создавать модульные программы, исходный код которых может использоваться многократно. Возможность построения новых языков программирования на основе JVM-машины — мощнейший инструмент, который даёт рынку отличные возможности для развития. Например, компания JetBrains, которая активно поддерживала развитие Java посредством создания самой популярной среды разработки, в последующем, вдохновившись своими результатами, создала на основе JVM новый язык программирования Kotlin. Мы внимательно следим за тенденциями развития экосистемы и постоянно осваиваем новые технологии.
2. Java-технология — отличный инструмент для решения сложных и нетиповых исследовательских задач (Research & Development), в которых присутствует технологический вызов. Отдавая предпочтение этому языку программирования, разработчики получают огромное количество готовых решений и фреймворков, которые можно свободно использовать для различных целей. В Java есть мощные референс-имплементации, подходящие практически для любого стандарта, протокола, паттерна или парадигмы. Применение готовых инструментов из Java в сочетании с Unit-тестами структурирует и формализует процесс кодирования, в результате чего инженеры добиваются более предсказуемого результата. Кроме того, Unit-тестирование даёт контроль над стабильностью написанного кода.
3. Java-разработчики обычно имеют более высокий уровень инженерии и очень эффективны в решении сложных исследовательских задач. Постоянное участие в Open Source проектах способствует расширению кругозора и развитию глубины мышления специалистов. Как правило, у них нет ментальных предрассудков, они более упорны и не пасуют перед сложностями. Сталкиваясь с нетривиальной задачей, подходят к вопросу с интересом и энтузиазмом. В результате они всегда находят решение задачи, применяя инженерный подход в совокупности с навыками декомпозиции и эстимации.
4. Большое количество интеграционных, асинхронных паттернов и шаблонов проектирования являются стандартом в мире Java разработки. Использование UML-диаграмм и стандарты акцентированной проработки архитектуры ПО стали общепризнанной нормой именно в данной технологии. Поэтому мы считаем, что данный язык программирования — выбор настоящих инженеров и архитекторов.
5. Java — универсальная технология, которая с одинаковым успехом подходит как для создания бэкендов, так и для разработки веб-приложений. Текущий уровень данной технологии позволяет очень быстро и эффективно решать задачи по веб-разработке. В том числе благодаря наличию большого количества актуальных инструментов, которые улучшают производительность разработки ПО (например, Spring Boot). В Java реализованы все необходимые ключевые стандарты и протоколы, такие как REST API, WebSocket, React programming.
В ДжазТим создана авторская программа обучения Java
Для обучения программированию на Java существует огромное количество учебников, книг и видеоуроков. Однако не все материалы актуальны и, что важно, не всегда основаны на реальных бизнес-задачах. Java-технология довольно обширная, применяется во многих сферах. Начинающим разработчикам порой сложно выделить главные нюансы и верно выстроить процесс самообразования в этой области. Имея большой производственный опыт работы с данной технологией, мы решили систематизировать наши знания и разработали авторскую программу обучения Java-инженеров.
Преимущества программы обучения ДжазТим:
Один из важных элементов программы подготовки Java-инженеров — учебная практика. Данный подход позволяет проводить обучение в тех же условиях, что и на реальном проекте, и включает следующие этапы:
- Мы организуем для учеников максимально приближенные к реальному проекту условия. В первый день куратор назначает практиканту простую задачу: написать несложный алгоритм. Однако для этого алгоритма обязательно необходимо подготовить Unit-тест, после чего перенести полученные результат в систему контроля версий, прогнать тесты через Jenkins и Sonarqube. Последующие дни, независимо от темы изучения, практикант должен регулярно совершать коммиты.
- Следующий этап программы — изучение основ Java (базовых конструкций, переменных, условных операторов, циклов, массивов, динамических структур данных). Наряду с этим, ученики получают базовые знания по направлениям, которые крайне важны в работе на реальном проекте. Это включает изучение Unit-тестирования, автоматизации тестирования, основ CI/CD, а также погружение в более сложный подход Data Driven Testing.
- После прохождения основ начинается работа с различными стримами: изучение Input/Output, многопоточности, обработки исключений, сериализации, а также решение задач на алгоритмику. Здесь для нас очень важно не просто дать теоретические знания по определённым темам, а создать условия, в которых ученик подготовит Unit-тесты для каждой из задач и закрепит полученные знания практике. Уже на данном этапе мы начинаем подключать компонентную разработку и постепенно погружаем практикантов в паттерны проектирования.
- Следующий этап является важнейшим в формировании инженерного мышления начинающих инженеров. Это авторская методика ДжазТим, с помощью которой мы полностью воспроизводим производственный сценарий. Ученики изучают парадигмы ООП, области видимости, интерфейсы и абстрактные классы, основные шаблоны проектирования. После этого начинается оживление ООП. Мы просим подготовить модель, сущности и поля, далее начать добавление сигнатуры методов, но не реализовывать их. Тем самым приучаем инженеров подходить к решению задачи комплексно и системно. Они проектируют входные и выходные параметры, названия методов, размещают полученные результаты на UML-диаграмме, анализируют, всё ли связано и понятно, и только после этого начинают проектировать юзкейсы и формируют конкретные бизнес-кейсы применения подготовленной модели. Таким образом начинающий инженер учится работать с UML, класс-диаграммами и Unit-тестированием. Активности по данной задаче обязательно должны быть декомпозированы и проэстимированы. В результате ученики получают навыки управляемого проектирования.
- Параллельно происходит изучение основ web-технологий: HTML5, последних версий и стандартов JavaScript, CSS. Также практиканты детально изучают протоколы HTTP и HTTPS, закрепляют навыки как по базовым концепциям веб-а (cookies, все виды запросов), так и изучают сложные особенности HTML5 (взаимодействие по веб-сокету, Web Workers). Помимо прочего, наши практиканты изучают базы данных, притом особое внимание уделяется нормализации баз данных и пониманию фундаментальных основ. Бесспорно, технологии высокого уровня и фреймворки в Java и JavaScript — это отличные инструменты. Но также необходимо, чтобы программист был инженером и чётко понимал, на чём они строятся. Поэтому особое внимание уделяем изучению основ сервлетов, native JavaScript, jquery. И только после этого переходим к более сложным подходам.
- После завершения и оживления ООП-модели начинается изучение фреймворков Spring и Hibernate. Практиканты применяют эти фреймворки к своей ООП-модели.
- В конце практиканты занимаются созданием совместного проекта, на котором демонстрируют все полученные знания.
В программу постоянно вносятся изменения с учётом актуальных трендов и стандартов. В результате мы можем гарантировать, что знания технических специалистов, успешно прошедших нашу практику, соответствуют актуальным требованиям реальных промышленных проектов.
Наша экспертиза в Java-технологии
Наша компания руководствуется следующими принципами и подходами в работе на Java:
1. Следуем лучшим инженерным традициям и практикам:
- Отличный стиль кодирования: слабосвязанный, компонентный, модульный код, небольшие методы и классы.
- Традиции расширяемого программирования. Проектирование расширяемых (в том числе плагинных) архитектур, используя Java-технологии и различные инструменты XP.
- Сервис профессионального реинжиниринга и рефакторинга. Знаем, как работать с legacy-кодом и устаревшими архитектурами ПО, написанными на Java. Выполняя рефакторинг исходного кода, мы оцениваем состояние продукта с точки зрения архитектуры, используемых технологий и выполняемых процессов и предлагаем варианты дальнейшего развития кода. Перед началом манипуляций с codebase мы стараемся создать необходимые Unit и Data Driven тесты, чтобы контролировать стабильность системы при последующих изменениях. Все найденные проблемы покрываются Unit-тестами, предупреждающими повторное появление устранённых дефектов, тем самым мы обеспечиваем регрессионное тестирование своих исправлений во всех версиях вашего продукта, что ещё больше стабилизирует процесс рефакторинга.
- Высокий уровень Research & Development. ДжазТим обладает существенным опытом в области R&D, эффективно работает над проектами, где у заказчика ещё нет точного представления о вариантах реализации конкретных решений для достижения бизнес-цели. В таком случае мы проводим необходимые исследования, выстраивая технологический фундамент. Далее в последующих итерациях мы можем приступить к реализации или же остановить сотрудничество на данной фазе, предоставив заказчику подробный экспертный анализ, эстимацию, архитектуру или прототип будущего продукта.
2. Подходы, применяемые на всех проектах:
- Внедрение Continuous Integration в связке с автоматизированными тестами (юнит, компонентные, интеграционные и UI, в зависимости от потребностей) на каждом проекте.
- Применение подходов Test Driven Development и Data Driven Testing.
3. Комплексное и системное владение Java-технологией:
- Глубокое понимание принципов ООП; постоянное использование разнообразных типов паттернов, включая интеграционные.
- Глубокое знание различных аспектов JSE и JEE, практический опыт работы с JMS, EJB, JPA, JTA, что позволяет сочетать инновации с фундаментальными основами технологии Java.
- Создание Java-решений различных типов для разнообразных рантаймов, серверов приложений и сред исполнения: консольные сервисы, десктопные программы, микросервисы, облачные решения, Spring, J2SE, J2EE, SOA, OSGi приложения и т.д.
- Высокая экспертиза в Reflection API, аспектном программировании (AspectJ, Spring AOP). Обширный опыт работы со сложным 3-rd party инструментарием — javassist, asm и др. Всё это позволяет нам проектировать более совершенные фреймворки и системы.
- Владение полным диапазоном инструментов для автотестирования — JUnit, TestNG, mock-фреймворки и многое другое.
- Системный опыт профайлинга и борьбы с memory leaks.
4. Широкий диапазон рабочих инструментов и фреймворков:
- Отличное знание большинства топовых фреймворков (web и общего назначения), включая Spring MVC, GWT, Vaadin, Grails, Play, Akka, Seam, Struts, Apache Spark.
- Профессиональное владение всеми важными компонентами технологии Spring — MVC, Security, Cloud, Boot, Integration, Roo, Batch, WebServices, Social, AMQP, AOP.
- Интенсивное использование других популярных фреймворков и библиотек, таких как Hibernate, RabbitMQ, Apache Camel, Drools, Apache Karaf, Apache Zookeeper, Apache CXF, Apache Felix.
- Опыт создания собственных фреймворков на основе Java-технологии, практический опыт расширяемой плагинной разработки.
5. С радостью берёмся за сложные R&D задачи. Примеры таких активностей:
- Профессиональный и безопасный рефакторинг сложных систем с применением Data Driven Testing.
- Реверс-инжиниринг проектов для последующего расширения и кастомизации.
- Создание расширяемых плагинных систем.
- Создание для нужд проекта DSL-языков и фреймворков различной сложности.
- Создание плагинов под Eclipse.
- Обширный опыт изменения исходного кода, кастомизации различных библиотек.
Высокая квалификация и экспертиза в Java-технологии подтверждается международными сертификатами.
Java — наш осознанный выбор, но не религия. Мы успешно применяем другие технологии
Фокус на Java — осознанный выбор нашей компании. Но мы не ограничиваемся одной server-side технологией и активно применяем другие языки. Постоянно используя Java для создания бэкендов и интеграционных решений, мы обладаем опытом и в построении бэкендов на Node.js, часто используем Groovy (как для скриптинга, так и для создания полноценных бэкендов), а также Kotlin. В совершенстве владеем технологиями, исторически связанными с экосистемой Java (XML, XSLT, XSD), профессионально используем JavaScript и сопутствующие web-технологии: HTML5/JS/CSS, AJAX, Angular.js, React.js, Redux.
Инженеры ДжазТим имеют сильную экспертизу в применении интеграционной платформы MuleESB. При необходимости наши специалисты проходят сертификацию «MuleSoft Certified Developer: Integration and API Associate». Также за годы работы с MuleESB мы получили отличный опыт создания коммерческих Mule-коннекторов.
Наша компания имеет опыт работы над проектами, где в качестве основной технологии используется .Net. В таком случае мы изначально разрабатываем на Java только свою, новую часть, а с течением времени оперативно и безопасно мигрируем всю систему в Java. Конечно, в современном мире микросервисы и контейнерные технологии вышли на первый план в разработке. Как следствие — становится менее важным, на базе какого языка программирования созданы отдельные части приложения. Однако с точки зрения экономии и удобства лучше поддерживать бэкенд на единой технологии.
Применяя новые языки и технологии программирования, мы остаёмся сфокусированной на Java компанией, которая постоянно накапливает экспертизу в конкретном домене и тем самым обеспечивает высокий уровень услуг по разработке ПО.
5 специфических Java-задач, выполненных нашей командой
Создание плагинной архитектуры. Разрабатывая собственный продукт для автоматизации тестирования XML2Selenium, мы создали плагинную архитектуру на основе лучших традиций Eclipse.
Создание собственных класс-лоадеров. На проекте по созданию Java-апплета в сфере медицины мы настроили передачу байткода с сервера на UI. Апплет динамически загружает Swing-формы с media-сервера и отображает их. Для этого мы создали собственные класс-лоадеры.
Расширение системы за счёт декомпиляции исходного кода. На одном из проектов, над которым мы работали, отсутствовали исходники ядра системы и не было сопроводительной документации к ПО. Наша команда смогла декомпилировать нужные части исходного кода и смогла расширить ядро системы путём реализации расширяемого программирования. Нам удалось преодолеть проблему нерасширяемости ядра системы, в дальнейшем продукт получил успешное развитие.
Создание собственного DSL-языка. На одном из проектов разработчики ДжазТим создали свой DSL-язык. Это была достаточно сложная инженерная задача, которая требовала комплексного подхода и проведения исследований. Изначально нужда в применении своего языка была неочевидной, поэтому требовалось обосновать заказчику, почему именно это решение является наиболее эффективным. Получив согласие заказчика, мы изучили существующие на тот момент технологии по проработке DSL-языков и, опираясь на лучшие практики, смогли создать собственный. Применение своего DSL-языка в сочетании с подходом Data Driven Testing имело массу преимуществ, что в результате позволило успешно решить поставленную задачу.
Нетривиальные инженерные решения. На одном из проектов мы реализовали запуск Swing-приложения в браузере. Система заказчика имела большой codebase и устаревший UI. Наша команда оказалась перед выбором: переписывать всё на веб-технологиях, что потребовало бы достаточно много времени и ресурсов, или предложить более эффективный вариант. За счёт глубокого технологического исследования инженеры ДжазТим нашли оптимальное решение, позволяющее запускать Swing-приложение в браузере. При этом было трансформировано ядро системы, чтобы ПО заказчика могло быть использовано в качестве бэкенда.
Фокусируясь на Java-разработке, мы также предлагаем другие IT-сервисы
Разработка ПО с помощью Java-технологии — только одна из многих сильных сторон нашей компании. Мы имеем большой опыт в разных направлениях и предлагаем как сопутствующие, так и отдельные IT-сервисы:
Нас вдохновляют проекты по созданию Java-бэкендов, но мы также профессионально работаем над другими интересными задачами.
Наши статьи о Java
Наши инструменты
Ниже приведены несколько наиболее популярных инструментов, которые мы часто используем в работе.
Spring
Hibernate
JTA
Apache Zookeeper
RabbitMQ
JMS
Apache Camel
Apache Solr
JUnit
Контакты
Мы всегда рады общению с Вами!
Пожалуйста, воспользуйтесь одной из приведённых ниже возможностей для связи:
Менеджер по привлечению талантов: talent@jazzteam.by
Специалист по продажам: sales@jazzteam.by
Телефон для связи: +375 333 225 187
Свяжитесь с нами