“Don't be too proud of these technological achievements you've built. The ability to destroy a planet is nothing compared to the power of the Force." - Darth Vader on the Death Star.
The Linux Command Line by William Shotts . Read this book not as a “50 Shades of Gray” novel, but as a full-fledged interactive course - open a terminal and repeat after the author. Do you want the basics and how does Linux work? Let's not take Computer Science and the operating systems course - that's in the next part. Go to edx.org and try the easy Introduction to Linux course . There is also a book from the above-mentioned series How Linux Works: What Every Superuser Should Know by Brian Ward . A fairly illustrated publication that pays attention to networking, devices, and resource management.
Go ahead? There is an excellent book, which, by the way, I have somewhere here... yeah (shakes up dust)... here it is! Unix and Linux: System Administrator's Guide. Evi Nemeth.
Quite a large manual, well translated. To be honest, I personally didn’t master it, but I really liked the basics of administration (the first part). Naturally, you cannot ignore Shell scripting. It’s better to try all this in practice, but from books you can look at Learning the bash Shell: Unix Shell programming by Cameron Newham.
Such a huge amount of literature on Linux/Unix cannot be covered in full, especially in this article, where Linux is in the background. My colleague at work, who ate the dog at this matter, advised a rather practical thing: Download ArchLinux and try to get it up and running. In the process you will learn the most I don’t want!
For example, if you use PowerShell, check out the excellent book Windows PowerShell in Action by Manning by Bruce Payette . I understand that it’s impossible to go through 1000 pages, but at least you can keep it with you as a reference. Nothing else is needed, I think.
As a result, pay attention to the gaps in your knowledge of using Windows and look for the information you are interested in on the Internet.
For the advanced level, creating your own plugin is suitable. Don't worry about what kind of plugin you need to create, because many already exist! Try to create some kind of analogue, study the phases as two and two.
This book even discusses creating your own CI system. Let's look at the two most popular solutions in this area.
If you are so used to the turtle (TortoiseSVN, author's note) and are afraid of the console, you can, of course, download its analogue TortoiseGit, but, in my opinion, much more pleasant and aesthetically pleasing The solution is a product from Atlassian - SourceTreeApp. You can practice with remote repositories, since there are enough host services on the Internet. If you want, train locally. No? Then create an account on GitHub and work in full mode: make a couple of commits, fork some opensource project, do a couple of merges between branches, and so on.
I liked it because it pays attention to the administration of the SVN server itself. I hope I didn't miss the main points.
Of course, there's more to it than just JUnit and Mockito. Here the author introduces Matchers, offers examples of parameterized tests, and briefly walks through TDD. There is also a book that came out quite recently. This is Pragmatic Unit Testing in Java 8 by Jeff Langr.
The author introduces Hamcrest, describes Best Practices, and, of course, Java 8. You can safely read after Tomek's book. By the way, about TDD. I don’t want to raise a holivar about whether it’s worth using them, whether it’s good or bad, whether customers need them. Just remember: working in TDD is not a novelty, and many projects use this methodology, and for many people it is the only and indisputable rule. In theory, you can read the classics. Kent Beck - Test Driven Development: By Example . What I liked most was the part about TDD patterns.
Surprisingly, there is a good first-person course - Let's Play TDD (200 videos!) on Youtube. No less interesting is Fowler’s own discussion about whether or not it’s worth using TDD, whether it spoils the design, and the like. Just remember this once and for all: TDD doesn't create bad design, you create it. If you use BDD more (one does not interfere with the other) and, for example, use Cucumber on a project, then this is a slightly different plane. A good book on this is Manning BDD in Action: Behavior-driven development for the whole software lifecycle by John Ferguson Smart .
By the way, John Ferguson Smart is actively promoting this topic to the masses. If you are a Scrum Master or PM who finally does not hurt his eyes, but enjoys looking at when-if-then tests, then be sure to follow John on Twitter . Regarding Cucumber, look at the Java implementation on the official website and read the book The Cucumber Book: Behavior-Driven Development by Matt Wayne .
Intro
Probably, the next two parts of the series of articles are the most anticipated for many, and for good reason. What is there, beyond the horizon, beyond pure Java? What do Java developers breathe in each project? Consider this a real, complete self-study guide for any average back-end engineer whose main programming language is Java. I intend to cover the hospital average as much as possible and describe not only the most popular frameworks, but also the solutions that are considered relevant at the moment. Naturally, there are a lot of tools, and understanding which are the most important and the best is a road to nowhere. Each of you looked at the “Jobs” section on DOU and found a stack of technologies that are constantly repeated from vacancy to vacancy. I understand that it’s impossible to describe everything, but coming up with a general framework is fine, so let’s try to follow this direction. Somehow in the past, on one of the projects, a rather interesting embarrassment occurred, which, I think, was and is repeated constantly from time to time for many in one area or another. The task was set to attach a render of one HTML page to the finished functionality simply to show the status of individual entities. As a result, my colleague decided to attach spring thymeleaf, which pulled part of the core dependencies of Spring itself, when no one used Spring. And this is all for one regular page, which simply shows the status of 2-3 entities. "I've never seen much point in using two lightsabers...it's a show off in my opinion" - Obi-Wan Kenobi. On the one hand, the developer solved the problem as quickly as possible, installed a framework with which he had experience using and integrated it into the project in a matter of hours. But on the other hand, our program has grown in size, so the simple question becomes: did he do the right thing? For such atomic tasks, when you know for sure that this thymeleaf/Spring MVC, etc. is bigger. It will not be used anywhere, it is better not to use it at all. I am always surprised by phrases like “Oh! Yes, we used Hibernate here! Look, everything is cool, ORM!”, and when asked the logical question whether it was possible to get by with regular JDBC here, they shrug their shoulders. There is ordinary architecture, which should be simple, which should be treated with trepidation, not cluttered with fashionable and super modern frameworks. As Obi-Wan said above, this is nothing more than showing off, although it is necessary to know how to use them. The young Javaist, in my opinion, is the most unlucky of all - so many specifications, so many libraries that need to be studied. Java EE alone has documentation through the roof. The question arises, what should a beginner take on, what should he learn next, what should he do after Horstmann? Simple answer: unfortunately, meet a lot of people. And we will start not with business frameworks, but with more mundane necessary things.Operating Systems
Linux
In addition to Windows and/or cozy Yosemite, you need to stretch your hands to Linux with a smile. For some projects, it is enough to be a user and know how to use the command line, for others - much more. Which way is best? There are simply tons of books/tutorials on the Internet. Start by installing Ubuntu or any other distribution you like and try using it as your main operating system for the next month or two. It will be much better if you start learning Java inside Linux by compiling and manipulating files using the terminal.![A guide for the future Java developer. Enterprise - part 1 - 2](https://cdn.javarush.com/images/article/35116f24-bf16-4ba7-8a6c-747c04c5a0e6/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 3](https://cdn.javarush.com/images/article/a82885cc-9c47-4f92-b24c-2b72ff21c101/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 4](https://cdn.javarush.com/images/article/93507150-934d-4c8d-9444-1bd2a56daa64/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 5](https://cdn.javarush.com/images/article/19d91ffe-0c93-4067-8e0c-b1f5fb109ca3/1024.jpeg)
Windows
In programmers' resumes there is a column: “Windows experience more than 10 years.” Of course, I congratulate you on the fact that you have been playing counter since you were 10 years old on Windows, but I ask you not to dig yourself a hole in advance at the interview, because on a project where you are working closely with IIS, batch/powershell, God forbid, the registry, the interview will not be really difficult, and besides the grin opposite the person sitting. Lida you will also receive a dose of humiliation. Do you need this? The answer suggests itself. Put aside your pirated Windows from the torrent and try installing it on some kind of Windows Server virtual machine. Study it not only from the user side and the JAVA_HOME installation. In this regard, an almost complete guide exists in the form of the book Mastering Windows Server 2012 R2 by Mark Minasi .![A guide for the future Java developer. Enterprise - part 1 - 6](https://cdn.javarush.com/images/article/a5820f30-dab2-4797-a996-c89bb371f2de/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 7](https://cdn.javarush.com/images/article/7006be31-3d3e-4603-8add-29bd3176d639/1024.jpeg)
Build Tools
Maven
What is the most important thing to understand in Maven? Here are the first steps and tasks:- Learn what Maven does in each phase, you can even memorize it. This is almost 80% success and will give you a clear picture.
- Create your own sandbox projects locally with a multi-module system, with explicit dependency management. Try to attach third-party libraries, try to create something using them.
- Play around with profile
- Understand plugin management and study the list of the most popular plugins on the official website.
- Explore how you can best use maven in your project. For example, parallel builds can significantly reduce build time.
![A guide for the future Java developer. Enterprise - part 1 - 8](https://cdn.javarush.com/images/article/8aed98e6-b239-405a-9505-a5fead47963a/1024.jpeg)
ANT
This tool looks much easier, so there’s not much to learn here. There are still projects where ANT is the only build tool. This is absolutely normal: ANT has proven itself to be a simple and straightforward build tool in the context of managing small atomic tasks (ant tasks). Of course, there are many plugins here, just like Maven. To get started with ANT, do the following:- Try manipulating files and folders
- Implement different orders for executing tasks. Based on this, learn dependencies and priority of tasks in ANT.
- Unpack and/or zip archive. In tasks, try playing with the contents of the archive and so on.
![A guide for the future Java developer. Enterprise - part 1 - 9](https://cdn.javarush.com/images/article/86960724-30f3-48cd-8b1b-ef0314f88649/1024.jpeg)
Gradle
For me, Gradle is closer to ANT than to Maven, but it can fully be called the half-brother of these two guys. It has a lifecycle similar to Maven, and the flexibility of the same tasks that ANT has. Well, the most important thing is that Gradle does not use XML and, moreover, you can do whatever you want with it if you are more or less familiar with Groovy. In general, quite a tasty thing. Don't be afraid to use Ant/Maven/Gradle in the context of your IDE. These tools are tightly integrated into Eclipse/IDEA, and using these tools in the context of the IDE is quite comfortable.Continuous Integration
Theory
These are angel programs that protect you from getting fired. In short, this is software that monitors changes in the code, builds and runs tests written for you. If everything is fine after each commit/merge, then the build glows with a pleasant green/blue light. As soon as you break something, the CI system will immediately report it. However, a little theory - this is classic! Continuous Integration: Improving Software Quality and Reducing Risk by Paul Duvall . (aka “Continuous Integration” in Russian)![A guide for the future Java developer. Enterprise - part 1 - 10](https://cdn.javarush.com/images/article/877e6e74-0123-40a9-8637-319546764d75/1024.jpeg)
Jenkins
Jenkins, aka Hudson. Open, friendly, easy to use application. To get more familiar with Jenkins, try the following:- Download it to your computer. Install and configure JDK, Maven, ANT and everything you need for the project.
- Create the first Job and specify the location of your project, for example, the main pom.xml. Run it, make sure you have some kind of test so that it is clearly visible.
- Learn to run your project with different settings and options.
- Attach different plugins and see how they work in conjunction with your project.
- Construct triggers for different jobs. Create a small pipeline.
- Explore the DSL and try integrating it with Jenkins.
- Set up a slave from another computer and/or make it a regular machine for running builds.
- Create nightly builds.
![A guide for the future Java developer. Enterprise - part 1 - 11](https://cdn.javarush.com/images/article/4137bb44-1e49-4adb-98f9-3a47b3db4057/1024.jpeg)
TeamCity
Yes, TeamCity is not free, but look how well it is integrated into the JetBrains ecosystem of products. Intellij Idea and TeamCity are a great union. By and large, if you are already familiar with Jenkins, TeamCity will not be a dark forest for you, and vice versa. Instead of slave - agents, the same triggers and so on. But unlike Jenkins, TeamCity boasts such amazing features as, for example, remote run, also known as pre-tested commit, much more visual statistics and much more. I really like the user guide on YouTube, which JetBrains itself made ( TeamCity User Guide (Part 1 of 9) - Introduction ). I find TeamCity to be intuitive and the documentation to be of a high standard. But if you think there is a book worth checking out, please leave it in the comments. Of course, I have listed only a small part of these CI systems, but we have everything limited in scope. Probably the best guide to learning is practice. I installed it on my computer, launched it, crashed/restored the builds and went to bed. And then you can safely bring me the record book (if you want :).Version Control System
There is no point in talking much about VCS. It's just something that should be, and without which project management would be like the Mesozoic era. Similar to CI systems, let's look at two of the most popular solutions: Git and SVN.Git
Our Git has proven itself to be a stable distributed version control system. Start learning from here and go through all the chapters with Git already configured. Then there is a wonderful series of interactive tutorials from Code School. There is also a short guide from them called Try Git: Code School . From books I can recommend Version Control with Git by Jon Loeliger![A guide for the future Java developer. Enterprise - part 1 - 12](https://cdn.javarush.com/images/article/76829290-9df3-4a4e-bb60-d452c70761e8/1024.jpeg)
SVN
Another equally popular VCS is SVN. This system cannot boast of distribution. Each of them has its own approaches, its own pros and cons. Be sure to read the interesting conversation between a newbie and an SVN user . There is a free book from read-bean.com with a Russian translation. A mini-course from TutorialsPoint will also be extremely useful . Don't miss the official Apache website subversion.apache.org . The most interesting client for me is the aforementioned TortoiseSVN. Among the books, one can highlight: Version Control with Subversion by Michael Pilato .![A guide for the future Java developer. Enterprise - part 1 - 13](https://cdn.javarush.com/images/article/c9466ee5-c523-4e9f-8324-50a11650f362/1024.jpeg)
Testing tools
It would be a good idea to understand in your small sandbox projects what unit tests, integration and regression testing are. JUnit The theory of unit tests is well described in the books from the previous article. In particular, Clean Code even describes junit as one of the popular libraries in this area. But when it comes to JUnit specifically, there's a great little book called Practical Unit Testing with JUnit and Mockito by Tomek Kaszanowski![A guide for the future Java developer. Enterprise - part 1 - 14](https://cdn.javarush.com/images/article/77ed1492-aa29-4847-be06-f37c36b3439d/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 15](https://cdn.javarush.com/images/article/8c881985-1c4d-4bec-a767-6cfaaa7edf72/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 16](https://cdn.javarush.com/images/article/e6072b2d-26c5-41cf-b50c-a3d27075b10a/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 17](https://cdn.javarush.com/images/article/78963359-7ba5-4240-a7ad-2a229234a6fd/1024.jpeg)
![A guide for the future Java developer. Enterprise - part 1 - 18](https://cdn.javarush.com/images/article/6f8e542f-6832-48e3-97e3-f2ff67a32c18/1024.jpeg)
3rd party libraries
It is important to be able to use popular libraries where necessary - they simplify the daily life of every Java developer. Popular solutions include the following: Joda Time. Offers to completely replace the inconvenient native Date and Time with the more convenient JodaTime. Here's one good reference . Please note that if you are already using Java 8, then JodaTime will not be of much help. The fact is that the new DateTime API has completely replaced this library, and in some places it even cleverly copied and pasted. According to the author's own article , every Joda class can be conveniently replaced with an analogue from java.time. Google Guava. In many ways, Java 8 even replaces Guava. The same Objects, Stream API, Java Predicate and many many other things suggest replacing it and not using it at all. I repeat, if you do not have Java 8, there is nothing better than this guide and your direct hands.Apache Commons
This monster is not so easy to deal with: about 40 libraries for all occasions, from the well-known commons.lang to xml validation, from DBUtils to commons.io . Naturally, you don’t need to get acquainted with everything, but Cookbook books and tutorials will be useful to have with you. For example, to understand what Apache Commons is all about, you can look through the Jakarta Commons Cookbook by Timothy O'Brein![A guide for the future Java developer. Enterprise - part 1 - 19](https://cdn.javarush.com/images/article/038c1ca8-7d58-4388-8b4d-c8b6d2fc2c30/1024.jpeg)
Conclusion
Enterprise is so vast that it would be stupid to start discussing JavaEE and other frameworks without everything that surrounds this Enterprise. Therefore, in the second part we will focus on each layer of the multitier architecture, consider services and so on. Thank you very much for your attention. End of the first part. Previous parts of the series:- A guide for the future Java developer. Java Basics
- A guide for the future Java developer. Elegant code