📜 ⬆️ ⬇️

Becoming in demand in the labor market: what topics need a Java developer to know?

We are often asked questions about the training program: why we offer just such a program and why we believe that it is the specialists who have studied the topics that we consider on the course will be in demand in the market.

In preparing the program of the “Java - Developer” course, we, first of all, were repelled by the requirements of employers for the vacant positions of the middle level, the beginning of the senior market. We cooperate with a large number of large IT-companies: systematization of their requirements for specialists together with our own experience of interviewing Java SE developers allowed us to make the most objective picture of the needs of the labor market and conclude agreements with partner companies about interviewing the best students for vacant positions.

It is practically impossible to put all the requirements of the market into the framework of the five-month course, so it was decided to outline the necessary knowledge base and highlight the key skills necessary for advanced training.

We concluded that in addition to core-java, it is necessary to take into account specialties:
')
• java web server specialist:
• specialist working with databases from java applications;
• a specialist in networking java applications, etc.

As a result, we have a table of levels of knowledge of java and specialties: the columns of the table reflect the specialties: core java, DB, web / net, devops; table columns: difficulty levels. The program of the Java Developer course in Otus.ru is based on this table.



Thus, we assume that by the beginning of the course, students are already familiar with most of the lower-left cell. That is why our students are waiting for the introductory testing: to master the course requires a confident basic knowledge of the subject. There will be no time for learning the basics - the program is very dense.

We start the training program in the first month with setting up the environment and setting options in various operating systems, an overview of the operation of the build and dependency management systems, as well as launching applications and launch parameters. This topic is extremely important if you are going to create applications from scratch, say for your startup. However, joining an existing project also does not interfere with the skill of setting up the environment and the project. We still included some topics from the core java base level into the program and look at them deeper than usual in Java courses: we look at the contents of jar files — metadata and bytecode; and the effectiveness of their algorithms. We believe that a deep understanding of how JVM works, how to work with memory and data types is important for a specialist who claims to be in the middle level, senior senior. At positions of this level, the specialist must apply the most effective solution possible, and for this it is necessary to understand which solution is most effective.

Several times during the course, we review the work of garbage collectors, memory organization and GC algorithms. GC is all you have to free up memory. If you do not want to guess from what you have on the server once an hour a stop-the-world pause for 5 minutes - you need to understand which GCs to use and how to configure them.

From the settings of the development environment and the analysis of the basic principles, we turn to the settings for launching applications and testing them. We understand the popular test frameworks, their principles of operation and methods of use. Can an application without tests work correctly? Maybe, but only before the first edit. We analyze annotations in detail, creating our own annotations and annotation processing at runtime, at the compilation stage and when loading classes. Annotations are a very important element of the work of many frameworks: test, for servlets and web sockets, for working with the base. Even the tool for processing annotations at the compilation stage understands the setting by annotations.

After a detailed analysis of the features of the Java language and platform, we proceed to the principles of application design and patterns — we analyze them both in the key of use in Java and independently of the language. Knowledge of design principles and patterns is very important for the developer, and, however strange it may sound, not so much to design. This knowledge is necessary to increase the effectiveness of the dialogue between developers - if both know the patterns, the conversation about the architecture will be held in the same language.

The next block of course topics is devoted to interacting with the environment: working with files using IO and NIO, working with databases using JDBC and ORM frameworks and working with a special type of client - a web browser. We added sockets to the topic about files, NoSQL and caching to the relational database topic, web servers to the topic about web servers, how to run in a container and how to integrate a web server into your application. The java-application itself (especially the server) is of little interest to the user. It is important that the application can respond to requests and interact with the environment. In this topic, we analyze the most common solutions to the problem of interaction with the most popular systems and servers.

The latest and most complex topics of the course are the topics of multithreading, inter-thread and inter-process communication. We understand how to create threads, how to manage their life cycle, how to safely organize the interaction of threads using the library and JMM tools. Modern Java-based applications are usually distributed across servers on a network and contain several dozen streams; without an understanding of the principles of multi-threaded and distributed systems, it is impossible to make them reliable and secure.
The course does not include Java EE topics. Why? Because we plan to tell Java EE in a separate course :)

In addition to theoretical knowledge, the program includes a practical part for each section. To maximize the effectiveness of teaching students are encouraged to do their homework (with a detailed analysis and discussion). It is the practical part and the work on the common project that consolidates the theoretical knowledge obtained during the lectures. It is the work on the project that can later be offered to a potential employer as a portfolio.

Interested? Come to us to study. New Java group starts training on June 3rd!

Source: https://habr.com/ru/post/329458/


All Articles