K
K
krautkraft2021-01-21 13:21:37
Java
krautkraft, 2021-01-21 13:21:37

Java junior, server software, what tasks to solve in order to understand the structure of the system?

Good afternoon!
I ask for your professional advice on the further direction of development.

4th year student, specialty - applied mathematics and informatics. Computer disciplines were practically not taught, he taught himself. He worked in the technical support of the university, at the same time he taught the basics of linux and networks, plus Java - from scratch, wrote simple training programs.
Now I am a June in the department dealing with software deployment on distributed system servers, Postgres database administration. We write some of our software in Spring.

The real work, roughly speaking, is to edit sh-scripts. Juna is prudently not allowed to be sold. Finding out the details of our technical process and getting into the code that they supply to us is problematic for security reasons and trade secrets. It is inconvenient for colleagues to take time for stupid questions.

They let you learn useful things: Spring microservices, tools for working with distributed systems (Kafka, Zookeeper), Elasticsearch and ELK stack, Spring JPA, database replication. It turns out so far at the level of tutorials and quick start-s. The sale is far away.

My code is bad, at my leisure I try to solve problems for basic algorithms (Kernighan, Pike “Programming Practice”).
High-level Java frameworks and an intuitive API seem simple against the background of C and recursion are misleading. It is difficult to get to the bottom and understand how, say, the kernel and drivers are related to abstractions and wrappers.
Therefore, when it comes to a real task, everything collapses due to a lack of understanding of basic things.

My goal is to write good code for serious tasks, to understand how everything works from the inside.

Tell me, please, in which direction to go now, what tasks to solve? What should be emphasized in order to acquire the very unique experience needed for real tasks?

Thanks in advance.

Answer the question

In order to leave comments, you need to log in

2 answer(s)
V
Vladimir, 2021-01-21
@krautkraft

If you already have some experience with spring, then I advise you to watch "Spring Ripper" (2 parts) from Evgeny Borisov on YouTube. He explained well how the spring works from the inside. There is a lot of magic, you can figure it out.
After that, you can start reading the documentation for the spring modules of interest. It is usually very detailed and understandable. Here is an example documentation for Spring Jpa.
After that, try to write some simple spring application from scratch without using tutorials, quick-starts and spring initializr, only maven / gradle (depending on what you use in your team) and documentation. Let's say 3 user roles (admin, user, anonymous), 3 endpoints: 1 is available to everyone, 1 is available to the admin and the user, 1 is available only to the admin. For starters, users can be hardcoded. Then add postgres to store them, then add elastic for logs, etc.
After that, add several tests, both tests that directly pull the methods of services and repositories, and tests that emulate a user: send http requests to log in to the system, and then pull endpoints and check that endpoint restrictions by roles work correctly.
All this is desirable without tutorials, just look for the name of the desired spring module, open its reference documentation and work on it.
In a couple of weeks, slowly, it is quite realistic to do. After that, if possible, ask someone more experienced to look at the code and tell you what and how to fix, preferably with an explanation of why.
Understanding recursion and basic algorithms is useful, but this will not happen often in the corporate segment: business processes in most cases will be written either by a business analyst or by the customer himself, and most data structures and algorithms for working with them are already available in the standard library, Apache Commons Lang 3 and Google Guava.

S
Saboteur, 2021-01-21
@saboteur_kiev

Good code comes with experience, it's problematic to purposefully learn to write good code, it's like learning experience purposefully.
In this regard, you just need to understand why what is being done.
And so - the direction is a joint work. Understand the entire development cycle. How to predict task deadlines, how to properly split them, how to interact with other developers or teams.
All the tools you come across - try to make it work, then ask how it works. The same kafka - what she can do at all. The same ELK stack - you can learn how to parse logs to find the things you need, or you can fix the logger in the application itself so that it sends more convenient data for parsing to the ELK. And so with each service / technology - you, as a developer, can change it from the side of the application, and from the side of the service you can see what you can take from it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question