📜 ⬆️ ⬇️

My experience in conducting Java courses for new employees

Hello!

Today, the practice of conducting courses before employment is quite common in many companies, I myself once began my career with completing training, but it was always interesting for me to try myself as a teacher. And this spring I learned that in our company in the spring and summer they will take courses on the basis of which teams will be replenished with fighters in several areas: Android, Java, Javascript and QA. At the suggestion of the head of the department, my colleagues and I had the opportunity to conduct courses in the direction of Java. I would like to tell dear Habra about the details of this exciting event.

Selection of candidates



')
What is required of a potential employee in our department? In short, we use a fairly typical stack of technologies: Java 8, Spring Framework, Hibernate / MyBatis, PostgreSQL. Therefore, it is necessary to touch on all the key elements listed above, but since the level of applicants will be low, some may have to face a number of titles for the first time, so the courses were supposed (and left) to be quite dense in content. The only thing we didn’t want was to touch on quite childish topics like data types, explanations of class, interface keywords, cycles, branch operators, so at the first stage our staff members organized remote testing with two simple tasks that should convince us that at least somehow know how to program. There are about 150 applications for our Java direction, mostly senior students or recent graduates. There were also quite exotic representatives like 40-year-old managers-entrepreneurs or students from Africa. When checking introductory tasks, I paid more attention to how a person relates to the design of his work, and not to how sophisticated a person “walks through the array”. In the tasks of the Hello World level, the run-up for this is not too big, and trying to be done can be met by checking out the puzzling question “Why is it so difficult?”. In general, someone sent screenshots from the development environment, someone inserted pieces of code into a Word document, and someone who was pleased sent a link to github. Behind this, let us move on to the second stage, when the letters of happiness with the news of enrollment were scattered among their addressees.

Course program


We identified the basic themes as a Java Core:

Session 1.

Introduction A short story about the history of the language, a little about the work of the JVM and cross-platform, the principles of OOP (three whales, SOLID, KISS, YAGNI) and the tools of the modern Java developer (IDE, CI, VCS, bugtracker).

Comment: the topics are quite diverse, but they, in our opinion, give a good “entry into the topic”. From myself I will add that the part about OOP is rather difficult at the first lesson, but its presence allows you to refer to it later when checking homework or future lectures.

Session 2.

Exceptions, I / O streams, serialization.

Comment: here all the topics complement each other quite well, you can demonstrate closing the flows in a “classic style” in the finally block and show an analogue with try-with-resources. Wrappers like DataInputStream and DataOutputStream are a simple and illustrative example of the Decorator pattern, so there is an opportunity to refer to the first lesson.

Session 3.

Collections

Comment: all those who have ever passed a technical interview, know that they cannot do without collections, because Here lies a whole storehouse of nuances that allows you to determine the level of knowledge of a specialist at Junior-Middle-Senior levels. Apart from the internal structure of data structures, such topics are discussed: classic ArrayList vs LinkedList comparison, HashMap “key” problems (how to lose value, collision resolution types), fast-fail vs fast-safe types, special collections like EnumSet. During the lecture I often refer to posts tarzan82 , I really like the clarity and consistency of the presentation.

Session 4.

Multithreading

Comment: This lesson gives the basics of writing multi-threaded code, introduces the most popular problems (livelock, deadlock, starvation), as well as the conditionally “lower level” (Thread, Runnable) and “upper level” parallel API (java.util.concurrent), synchronized and thread-safe collections.

Session 5.

Java 8 innovations.

Comment: since the projects actively use the Stream API, lambda expressions and functional interfaces, that is, the need to talk about innovations and modern approaches to data processing in the same collections.

Session 6.

Summarizing Java Core block.

Comment: Generics, Reflection API, Enum and everything that was mentioned, but not discussed in detail in previous lessons, fall into this block. The format is more in the form of "question-answer".

Classes 7 and 8.

Spring Framework and Hibernate.

Comment: Get Started quick review with useful links and recommendations for studying, you will not be able to achieve a special depth in 1 lesson with any desire. Each framework deserves a separate course.

Classes 9-10.

SQL Basic.

Comment: In the final lessons, the basics of writing SQL queries are explained, the join algorithms (hashjoin, merge-sort join, nested loop) are explained, how to write queries more efficiently.

Total


Two more colleagues expressed their desire to conduct the courses, so we pulled a straw for the right to conduct a particular topic. In parallel with the lectures, all students were given a task (desktop application and Spring-based web application). According to the results of the courses, we recommended some guys for an interview, so we had three new Junior Java Developer, which successfully rolled into the project.

In order for the topic to be fully disclosed, I will describe a number of problems we have encountered:


1. Initially, the group consisted of 18 people, most of the time of training fell in June, when students have a session. On the one hand, time is not the best - those who have problems with studies will not be able to devote adequate time to courses, on the other hand, the additional burden served as a natural filter from lazy people. After all, where is the guarantee that after employment, problems with studies will not force an employee to also get a job? The issue of the time of the meeting is very controversial, it did not depend on me and other teachers. The whole course took place in 2 classes per week.

2. The homework check took place according to a number of criteria:


The students sent the assignment to the post office, then I or my colleagues wrote a small cover letter in response, which reported the verdict (accepted or not) and gave a number of comments on the shortcomings. Such iterations per task reached a maximum of 3, we did not set any limits. It was found out by experience that even if you pay particular attention to some common mistake at a lecture or show best practice, there will still be a group of people who will miss it. Thus, the presentation of the lecture became a handy reference book in which you can poke the nose to send the guilty to enlightenment.

3. Judging by the number of questions, parallel programming (maximum number) and OOP (minimum - no questions) caused the greatest difficulty. Everything is clear with the first one, the topic is very deep and it needs to be dealt with separately. Immediately, a large amount of information, in which there are a lot of nuances, immediately fails to digest. With the second, more interesting, because Most of the principles of object-oriented programming are expressed in sentences of a recommendatory nature, in simple human language, without being tied to something specific, then, in my opinion, at the first meeting, students do not take it too seriously and try to wait for the material with code listings where in their opinion there is a visible practical value. Truth as soon as it comes to practice - this is where the greatest number of problems.

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


All Articles