Java is JazzTeam’s general area of technological expertise
Since its early days, our company has been focused on Java technology. This priority was chosen by our founder, Dzmitry Harachka. He is a Java expert with over 15 years of experience. Before founding JazzTeam, he worked as a Java developer on international projects. Having gained extensive experience as a developer, architect, and consultant, Dzmitry was convinced that Java technology was one of the most universal and effective solutions for providing IT services.
The approaches we have been following for over 10 years are reflected in our “Agile Java Development” slogan. Each part of this slogan demonstrates the values and working principles of our company. JazzTeam’s expertise is over 10 years of evangelism in Java, Unit tests, and CI/CD.
JazzTeam was actively involved in an innovative project under my leadership. The team demonstrated a high professional level in architectural design, Agile processes, Unit testing, and project activities. You can safely rely on JazzTeam engineers. Trust them and be sure that the Java experts will provide you with the best result.
The focus on a specific technology and effective development practices was absolutely conscious and proved to be strategically sound. By positioning JazzTeam as a Java focused company, we quickly gained a pool of regular customers. Our customers appreciate the high level of service, professionalism, and extensive technological expertise our specialists provide. One of the defining components of our service level is extensive experience in Java development and active use of all the advantages of this technology.
In this article, we will explain why we are devoted to Java technology and what benefits it provides all JazzTeam customers.
Technological leadership of Java
The Java programming language, which became widely known more than 20 years ago, still keeps its technological leadership and is among the most popular programming languages on the IT services market. This technology is used to create products for cloud infrastructure (Amazon Web Services, Google Web Services, Oracle Cloud), machine learning, neural networks, to work with Big Data and scientific applications, and in the field of Internet of Things (IoT). Here are some examples that prove the relevance and popularity of the Java programming language.
Growth in the number of Java developers in the world:
In 2019, the total number of Java developers was about 7.6 million. Analysts predict that this upward trend will continue.
Total number of developers in the world and the number of specialists in specific technologies:
According to SlashData, there were 7.6 million Java developers worldwide in early 2019, while the total number of programmers was 18.9 million. This means that despite the active development and emergence of brand new programming languages, Java is still very popular among developers and chosen by more than ⅓ of specialists.
Number of repository change requests on GitHub from 2013 to 2020:
The annual GitHub report shows that Java and JavaScript have been top three languages in terms of repository change requests on this platform for more than 7 years. Our company is not limited to just Java, and also actively uses JavaScript, which has been at the top of this report for many years.
The ranking of Java in the international TIOBE rating from 1997 to 2022:
According to the TIOBE community, Java has been one of the top three leading programming languages for the past 15 years, which once again confirms the stability of this technology. This rating is based on counting search queries that contain the name of the language on Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube, and Baidu, etc.
Based on numerous ratings, studies, and reports, we can confidently say that Java is very popular in the IT community, and interest in it has not diminished over time. The result is quite logical because this technology has many advantages.
Java as a source of innovation and popular tools
Java has historically been a driver of best practices in eXtreme Programming and Agile development. One of the contributing factors for this has been the huge Open Source community. Millions of talented developers constantly contribute to the technology development by creating reusable libraries and their own frameworks to solve complex engineering problems. For example, the Spring Community completely changed the methodology of working in Java and created brand new paradigms, which were later used for other technologies. Among them is the design principle for writing loosely coupled code, Inversion of Control, and one of its implementations – Dependency Injection.
The Log4j logging library emerged as part of the Apache Jakarta Project, but later became a separate popular project and the gold standard for other programming languages. Even Java Runtime Environment and Java Virtual Machine themselves have several implementations. Thanks to the active contribution of the Open Source community, Java technology is constantly improving and evolving along its own trajectory, which is not as vendor-dependent as others in the field.
Java has always been a trendsetter in the world of software development. This technology was used to create many popular tools and approaches that were later transferred to other programming languages. For example, Hibernate, a tool for working with databases, was ported to .Net. MapReduce distributed computing and Object-Relational Mapping (ORM) technology, which are standard in many programming languages, have also appeared in Java. JUnit, an essential tool for test automation, is implemented in all programming languages. Jenkins, a popular tool for ensuring Continuous Integration, is written in Java. JavaScript, one of the major programming languages for web development, is based on the syntax and semantics of Java. JetBrains created its first development environments specifically for Java, and then began supporting them for other programming languages as well.
The advantages of Java
For many years, our company has been going through all the stages of Java platform development and developing internal documentation, which describes the specifics of syntax and innovations of each version. Many of our specialists still remember the days of instability and bugs, which occurred largely due to imperfections of the Java Virtual Machine. The situation has changed dramatically in recent years, and we are happy to see the high level and excellent development dynamics of this programming language. Today the Java Virtual Machine is perfect, stable, and predictable.
Java is an efficient technology that has its own important advantages.
1. As an object-oriented language, Java makes it possible to create modular programs with reusable source code. The possibility of building new JVM-based programming languages is a powerful tool that gives the market great opportunities for development. For example, JetBrains actively supported the development of Java by creating the most popular development environment, and, inspired by its results, went on to create a new JVM-based program language – Kotlin. We closely follow the trends in the development ecosystem and constantly master the latest technologies.
2. Java technology is an excellent tool for solving complex and non-typical Research & Development tasks with a technological challenge. By choosing this programming language, developers get a huge number of ready-made solutions and frameworks that can be freely used for various purposes. Java has powerful reference implementations that are suitable for almost any standard, protocol, pattern, or paradigm. Using Java ready-made tools in combination with Unit tests structures and formalizes the coding process, allowing engineers to achieve a more predictable result. Unit testing also makes it possible to control the stability of the written code.
3. Java developers usually have a higher level of engineering and are particularly effective at solving complex research tasks. Constant participation in Open Source projects facilitates the broadening of outlook and development of the specialists’ depth of thinking. Normally, they don’t have mental prejudices, are more persistent, and don’t give up when they encounter difficulties. When facing a non-trivial task they approach a challenge with interest and enthusiasm. As a result, they always find a solution by applying an engineering approach in conjunction with decomposition and estimation skills.
4. Java is a universal technology that is equally suitable for creating backends and developing web applications. The current level of this technology makes it possible to solve web development tasks incredibly quickly and efficiently, in particular because of the availability of a large number of up-to-date tools that enhance the software development performance (e.g., Spring Boot). Java implements all the necessary key standards and protocols, such as REST API, WebSocket, and React programming.
5. A large number of integration, asynchronous design patterns are standard in the world of Java development. UML diagrams and standards of accentuated design of software architecture have become the generally recognized norm for this technology. Therefore, we believe that this programming language is the choice of real engineers and architects.
JazzTeam created its own Java training program
There are a huge number of textbooks, books, and video tutorials for learning Java programming. However, not all materials are relevant and, more importantly, are rarely based on real business tasks. Java technology is quite extensive and is used in many areas. Junior developers sometimes find it difficult to identify the main nuances and correctly build the process of self-education in this area. We have extensive industrial experience with this technology, so we decided to systematize our knowledge and develop our own training program for Java engineers.
The advantages of the JazzTeam training program include:
We arrange training sessions so they reproduce the conditions and requirements of real projects as closely as possible. In addition, we initially place great emphasis on task decomposition and estimation.
Every year we arrange several practice training sessions, and iteratively improve the program based on student feedback and current trends in development after each one.
We don’t train coders, but rather engineers with systems thinking skills who can analyze, design, and work on business cases.
Our company pays special attention to soft skills practice. Our graduates are proactive, easy-going, and pleasant to interact with.
One of the most important aspects of our Java training program is the internship. This approach makes it possible to provide training in the same conditions as on a real project, and includes the following stages:
- We organize an environment that is very close to a real project for our students. On the first day, the supervisor assigns the trainee a simple task: to write a simple algorithm. However, for this algorithm it is mandatory to create a Unit test, transfer the results to the version control system, and then run the tests through Jenkins and Sonarqube. In the following days, regardless of the study topic, the trainee must make regular commits.
- The next stage of the program is learning the fundamentals of Java, which includes basic constructs, variables, conditional operators, loops, arrays, and dynamic data structures. At the same time, students receive basic knowledge in areas that are extremely important for working on a real project, such as learning Unit testing, test automation, CI/CD fundamentals, and immersion. This is for a more sophisticated approach to Data Driven Testing.
- After going through the fundamentals, students begin working with various streams: learning Input/Output, multithreading, exception handling, serialization, and solving algorithmic problems. Here it is very important for us to not only provide theoretical knowledge on certain topics, but to also create the conditions in which a student will prepare Unit tests for each of the tasks and solidify their acquired knowledge with practice. At this stage, we begin to introduce component-based development and gradually immerse trainees in design patterns.
- The next stage is the most important for forming the engineering thinking of junior engineers; the JazzTeam’s proprietary methodology, with which we fully reproduce the production scenario. Students learn OOP paradigms, scopes, interfaces, abstract classes, and basic design patterns. After that, students start making the OOP model live. We ask students to prepare a model, entities, and fields, then start adding method signatures, but not implementing them. In this way, we teach engineers to approach a problem comprehensively and systematically. They design input and output parameters, method names, display the results on the UML diagram, analyze whether everything is linked and clear, and only then begin designing use cases and form specific business cases of prepared model application. This is how a junior engineer learns working with UML, class diagrams, and Unit testing. The task activities must be decomposed and estimated, and as a result, students gain guided design skills.
- At the same time, students learn the basic web technologies: HTML5, latest JavaScript versions and standards, and CSS. Also, trainees study the details of HTTP and HTTPS protocols, solidify their skills both in basic Web concepts (cookies, all kinds of requests), and study complex features of HTML5 (communication via WebSocket, Web Workers). Among other things, our trainees study databases with a special emphasis on database normalization and an understanding of the fundamentals. High-level technologies and frameworks in Java and JavaScript are certainly great tools, but it is also necessary for a programmer to be an engineer who clearly understands what these technologies and frameworks are based on. Therefore, we pay special attention to learning the basics of servlets, native JavaScript, and jquery, and only after that do we move on to more complex approaches.
- Upon completing and making the OOP model live, our students begin learning Spring and Hibernate frameworks. The trainees apply these frameworks to their OOP model.
- Finally, the trainees create a joint project to demonstrate all the knowledge they have gained.
The program is constantly updated according to the latest trends and standards. As a result, we can guarantee that the knowledge of technical specialists who successfully completed our internship meets the current requirements of real industrial projects.
Our expertise in Java technology
While working with Java, our company is guided by the following principles and approaches:
- We follow the best engineering traditions and practices:
- Excellent coding style: loosely coupled, component-based, modular code, small methods and classes.
- Extensible programming traditions. Designing extensible (including plugin) architectures using Java technology and various XP tools.
- Professional reengineering and refactoring service. We know how to work with legacy code and legacy software architectures written in Java. During code refactoring, we evaluate the state of a product in terms of the architecture, technologies used, and processes executed, and propose options for further code development. Before we start manipulating the codebase, we try to create the necessary Unit and Data Driven tests to monitor the system’s stability during subsequent changes. All problems found are covered by Unit tests preventing the recurrence of eliminated defects. This way, we ensure regression testing of our patches in all versions of your product, which makes the refactoring process more stable.
- High level of Research & Development. JazzTeam has substantial R&D experience, effectively works on projects where the customer doesn’t yet have an exact idea of the ways to implement specific solutions for achieving a business goal. In cases such as these, we perform the necessary research and build the technological foundation. During subsequent iterations we can proceed to implementation or terminate cooperation at this phase, and provide the customer with a detailed expert analysis, estimation, architecture or prototype of the future product. The approaches we use on all projects:Implementing Continuous Integration in conjunction with automated tests (Unit, component, integration, and UI, as needed) on each project.
- The approaches we use on all projects:
- Implementing Continuous Integration in conjunction with automated tests (Unit, component, integration, and UI, as needed) on each project.
- Using Test Driven Development and Data Driven Testing approaches.
- Comprehensive and systematic knowledge of Java technology:
- Deep understanding of OOP principles, constant use of a variety of pattern types – including integration ones.
- Deep knowledge of various aspects of JSE and JEE, practical experience with JMS, EJB, JPA, JTA , which allows us to combine innovations with the fundamentals of Java technology.
- Creation of different types of Java solutions for a variety of runtimes, application servers, and runtime environments: console services, desktop programs, microservices, cloud solutions, Spring, J2SE, J2EE, SOA, OSGi applications, etc.
- Expertise in Reflection API and aspect programming (AspectJ, Spring AOP). Extensive experience with complex 3rd party tools – javassist, asm, etc. All of this allows us to design more advanced frameworks and systems.
- Proficiency in a full range of test automation tools, including JUnit, TestNG, mock frameworks, and many more.
- Systemic experience in profiling and combating memory leaks.
- Wide range of working tools and frameworks:
- Excellent knowledge of most of the top frameworks (web and general purpose), including Spring MVC, GWT, Vaadin, Grails, Play, Akka, Seam, Struts, and Apache Spark.
- Proficiency in all the important components of Spring technology — MVC, Security, Cloud, Boot, Integration, Roo, Batch, WebServices, Social, AMQP, and AOP.Intensive use of other popular frameworks and libraries, such as Hibernate, RabbitMQ, Apache Camel, Drools, Apache Karaf, Apache Zookeeper, Apache CXF, and Apache Felix.
- Experience creating our own Java-based frameworks and practical experience in extensible plugin development.
- We are happy to take on complex R&D tasks, such as:
- Professional and secure refactoring of complex systems using Data Driven Testing.
- Reverse-engineering of projects for future expansion and customization.
- Creation of expansible plugin systems.
- Creation of DSL languages and frameworks of various complexity for project needs.
- Creation of plugins for Eclipse.
- Extensive experience modifying source code and customizing various libraries.
Highly qualified with extensive expertise in Java technology, confirmed by international certificates.
Java is our conscious choice, not a religion. We successfully apply other technologies
Focus on Java is a conscious choice of our company. We are not limited to just server-side technology, and actively apply other programming languages. Constantly using Java to create backends and integration solutions has given us experience in building backends in Node.js, and have frequently used Groovy both for scripting and for creating complete backends, as well as Kotlin. We are proficient in technologies historically associated with the Java ecosystem (XML, XSLT, XSD) and professionally use JavaScript and related web technologies: HTML5/JS/CSS, AJAX, Angular.js, React.js, and Redux.
JazzTeam engineers have strong expertise in applying the MuleESB integration platform. If necessary, our specialists pass the MuleSoft Certified Developer: Integration and API Associate certification exam. Also, over the years of working with MuleESB, we have gained excellent experience in creating commercial Mule connectors.
Our company has experience working on projects where .Net is the main technology. In such cases, we initially develop only our own, new part in Java and, over time, safely migrate the entire system to Java. Of course, in today’s world, microservices and container technologies have come to the forefront of development, so what programming language is used to create separate parts of the application becomes less important. However, from the point of view of cost-effectiveness and convenience, it is better to use a single technology for backend maintenance.
While we apply new programming languages and technologies, we still remain a Java-focused company, and we constantly accumulate expertise in a particular domain to ensure we also provide the highest level of software development services possible.
JazzTeam was actively involved in an innovative project under my leadership. The team demonstrated a high professional level in architectural design, Agile processes, Unit testing, and project activities. You can safely rely on JazzTeam engineers. Trust them and be sure that the Java experts will provide you with the best result.
5 specific Java tasks completed by our team
Creation of proprietary classloaders. On a medical Java applet project, we set up bytecode transfer from the server to the UI. The applet dynamically loads Swing forms from the media server and displays them. For this we created our own classloaders.
Creation of a plugin architecture. Developing our own XML2Selenium test automation product, we created a plugin architecture based on the best Eclipse traditions.
Scaling up the system by decompiling the source code. One of the projects we worked on had neither the system kernel source code nor any accompanying documentation for the software. Our team was able to decompile the necessary parts of the source code and extend the system kernel by implementing extendible programming. We managed to overcome the problem of system kernel non-extensibility, and the product began developing successfully afterwards.
Creation of a proprietary DSL language. On one of the projects, JazzTeam developers created their own DSL language. It was quite a complex engineering task, which required a comprehensive approach and extensive research. Initially, the need of using a proprietary language was not obvious, so it was necessary to justify to the customer why this particular solution was the most effective. Upon obtaining the customer’s consent, we studied the existing technologies for developing DSL languages and, based on best practices, were able to create our own one. Using the proprietary DSL language in combination with Data Driven Testing had many benefits, which resulted in the successful accomplishment of the task.
Non-trivial engineering solutions. On one of our projects, we implemented a Swing application running in a browser. The customer’s system had a large codebase and outdated UI. Our team had to make a choice: to rewrite everything on web technologies, which would require quite a lot of time and resources, or offer a more effective option. By performing in-depth technological research, JazzTeam engineers found the optimal solution, which was allowing a Swing application to run in a browser. The system’s core was transformed so that the customer’s software could be used as the backend.
We’re focused on Java development, but we also offer other IT services:
Java software development is just one of the many strengths of our company. We have extensive experience in various areas and offer both related and separate IT services:
We are inspired by Java backend projects, but we also work professionally on other interesting tasks.