How to become a Java programmer
Hey. If you are reading this article, then most likely you have a question how to become a programmer. Perhaps you even decided to learn the Java programming language, but do not know where to start learning. I dare also to admit that many have asked themselves the question: Is it possible to learn Java in 1 year? What if I did not study as a programmer at a university? I even have a non-technical specialty. Will I be able to? How much time do I have to spend on this activity? What will have to learn? How to start learning? If you had at least one of these questions, then you are now in the right place.
It is not surprising that many people get lost at the very beginning, not knowing where to start, because there are so many languages around, a lot of programming books, various trainings, video courses and even individual mentoring. How to choose what is right for you and how to achieve results in adequate time? Let's talk about everything in order.
Before you begin any difficult task, which requires a lot of time and energy, you need to understand why it is for you. Each of us must answer three important questions for ourselves:
Why? - the most difficult question. It is the basis of motivation. You must clearly understand what your goal is and what you are aiming for. Money here should not be a key reason, but simply an important addition. If you like modern technologies, you like to create something, you can sit for hours with your favorite business, are ready to do it for free and you have logical thinking, then it is quite likely that these classes are just for you. You should be able to enjoy work. Only in this case is it possible to achieve really good results.
What? - this is a pretty logical question. What you need to do to succeed in this case. Here, also, there may be a question of which language to choose and what materials will be needed to study it.
How? - How to achieve significant results in adequate time.
If the first question everyone has to answer independently, then we can deal with the last two together.
Which language to choose?
Suppose that everything is good with motivation and we can move on to the next question. Before choosing any language, you need to understand whether there are vacancies in the labor market, whether they will be at the moment when you master the basic level and start looking for a job. The complexity of the programming language also plays a role. The more difficult the language, the more time you will need to master it. On the other hand, to choose what is easiest is not always good, because the competition can be higher here than in other categories. In order to determine the promise of a language, you need to analyze where it is used, how wide the scope of application is and how often new frameworks come out in your chosen language. Here a rating of programming languages can help us.
Examples of surveys you can find in abundance on the Internet. Here are just a few of them:
For example, according to the website tiobe.com , which regularly publishes a rating of programming languages, Java has been the leader for years already. The top five also C ++ and Python.
Now let's look at the number of vacancies and candidate responses in different languages. In order not to explain for a long time, I’ll just give a few links. For example, the site DOU.ua regularly publishes all sorts of statistics on vacancies, salaries, etc. For example, you can observe interesting trends in the growth of the number of vacancies by top languages and right there you can use different kinds of filters that show the ratio of the number of vacancies in different cities and in different languages. Data is available both in tabular and graphical form. Among the favorites here, as usual, Java, Python, C ++, .NET. Moreover, the ratio of the number of vacancies / responses for 2018 is best for C ++, 2-3 people per place. Unfortunately, I could not find similar statistics for other countries. But on HabréThere is a good article with infographics specifically on Java.
In general, you need to choose one of the top languages and then at the time of graduation you will have a good chance to find a job.
In my humble opinion, a good option for starting a career is Java. Not too difficult language, a large scope and a sufficient number of vacancies. It is about Java and will be the second half of our article. If I had to start it all now, then Python could be a good alternative, since it is now actively gaining popularity.
Java Ecosystem Overview
In order for you to have a better understanding of what you need to go through in order to become a Java programmer, let's make a small overview of the Java ecosystem. I suggest looking at the following illustration. It certainly does not cover all aspects, but will give you some insight.
In the center of the universe, as usual, we have the Java language itself. To be precise, Java Core. At the time of this writing, Java JDK 10 saw the light. Oracle changed the policy of working with Java versions and there is no such huge difference between versions as it was when exiting, for example, Java 8. It is this version that remains the most popular and frequently used the absolute majority of companies and projects. You can safely begin to learn the language with this version, and learn new chips, imposing them on the knowledge of the basics. The study of this part is perhaps the most difficult task for a beginner. We have to learn a new kind of activity and start thinking differently. All this is also superimposed on a large amount of material that needs to be learned. Most of those who are just starting to throw at this stage. It all depends on your motivation.
If the development of the Java language is normal, then you will need additional tools, such as Version Control System and a system for building projects. As a VCS I recommend using Git, which is the absolute leader among their own kind. All other systems, such as Subversion and Perforce, are a thing of the past. Plus you can use Github or GitLab repositories for your code for free. You are more likely to use Atlassian BitBucket in the enterprise. But this is just a shell. If you learn how to use Git, then everything else will be irrelevant. Atlassian is also a supplier of such products as Jira and Confluence, but for you it does not matter at the stage of study.
As for the tools for building projects, there are two options: Maven and Gradle. In my subjective opinion, Maven is preferable, but other developers may have their own opinion. In principle, both frameworks are equivalent.
After you have met with the above things, it is worth considering which way to go next. In the picture above, you can see four main directions of movement: Front-End (HTML, CSS, JS), Back-End (Hibernate, Spring, SQL), Android and Big Data. These four parts, though separated in the figure, are actually quite tightly connected. For example, if you decide to become a Full-Stack Java developer, then you will have to study well the Back-End part and have a general understanding of the basics of the Front-End part. From you should not expect that you will be engaged in the layout of the site, but you should know HTML. I should also note that in the Back-End section, Spring implies first of all Spring Core. From this part of the framework you need to start. Now it has grown to such an extent that it covers all aspects of Java development. As an alternative,
As for BigData, there is also a fairly large stack of technologies. Basically, they are all designed for distributed storage and distributed data processing using the Map-Reduce approach. The most ancient and most famous technology here is Hadoop.
I think that Android is not worth explaining. I can only say that in order to write applications for this mobile platform, you will have to learn Java.
As you can see, there are quite a lot of Java applications, so in the foreseeable future, having learned Java, you will not be left without work.
Where to begin? What to read?
Obviously, you need to start with the basics, i.e. with Java Core. Then Maven, Git, and then already the direction that you prefer.
Here you have three options. We do not consider the situation when you chose this specialty at the university. It still does not exclude the options described below.
Option One - Java Books
The most ancient, traditional and so far the most proven method. Advantages: most of the books from well-known publishers are written by professional authors, many of which have decades of experience in developing and teaching in prestigious Western universities. Also, these books are checked carefully by the publishers themselves, so the probability of errors is very small. Especially when the same book is republished over and over as the language is updated. After reading the basic books, you will have to move on to more advanced ones. There is little where you can find advanced programming topics covered with the same depth. Disadvantages: many books are written in a dry academic language and are more like reference books. Famous author Kay Horstmann himself has repeatedly admitted that he does not read these books completely, but only those chapters
Among the most popular and best books for newbies are the following (titles are in English, in cases where the book has not been translated into Russian or the translation has not been found):
- Java How to Program - Paul Datel and Harvey Daytel. This book has gone through a bunch of reprints and is perhaps the most comprehensive guide to Java. In addition to the language itself, the basics of the algorithms are also pretty well explained there.
- The Java philosophy - Bruce Ekkel - also earned an honorable place in the programmer’s library. Available and understandable explanations. Good for beginners.
- Head First Java, 2nd Edition - Bert Bates, Kathy Sierra is a book that has become popular thanks to the ability of authors to explain complex concepts with simple life examples. Not too deep in content, but still interesting.
- Java. Library professional. Volume 1.2 - Kay Horstmann. This reference book has also settled on the shelves of many Java developers for a long time. It is just from the category of those books from which separate chapters are read for solving problems, and not the whole book.
- Java 8. Beginner's Guide - Herbert Schildt. I did not read this book myself, but I heard some positive reviews. Read or not - decide for yourself.
- Data Structures and Algorithms in Java - Robert Lafore. One of the best books on data structures.
- Java. Effective programming - Joshua Bloch. A slightly more advanced book on java. It contains a huge amount of advice and recommendations on how to improve your code. Recently, the 3rd edition of this book. I strongly recommend reading.
- Java Concurrency in Practice - Brian Goetz. - The good old guide to multithreading in Java, which does not go out of fashion.
The last three books recommend reading to those who are already familiar with the basics of Java programming, but plans to develop further. Examples of books on various kinds of frameworks will not be given. They, too, have written quite a few.
Option two - video courses on programming and not only ...
Video courses and all sorts of video tutorials now began to gain great popularity. The idea itself is very good and I personally like it. This type of educational materials is especially well suited to visuals, people who best perceive information visually. Additionally, you can also use listening comprehension. One advantage is the affordable price. In addition, on YouTube you can find a huge number of free lessons, among which there are some very good ones. Among the shortcomings of the lessons on YouTube, I should note the frequent fragmentation and non-systematization, as well as the fact that the material in them is set out rather superficially. But even here there are exceptions in the good sense of the word.
Alternatives to YouTube lessons can be such sites:
Safari O'Reilly - a huge collection of books, video tutorials and webinars on various topics. The quality of materials is a major advantage. Books and video trainings are recorded by recognized professionals in the field. The main drawback here is the price. $ 400 per year if you pay immediately or $ 480 if you pay monthly. All materials are here in English. If you decide to subscribe, I recommend the materials prepared by O'Reilly itself, they are usually more qualitative than the lessons of other publishers.
Pluralsight is a good platform for video lessons. The choice of materials on topics is large, but they are mostly more superficial than in the previous case. All materials here are also in English. Subscription price is $ 29 per month, or 299 per year. Here, as in the previous case, access to the materials is still pay for the subscription. You can not just buy one or two courses forever.
Udemy is a large library of various courses. It differs in that the courses here are not only in English, but also in Russian. Pricing here is completely different from previous resources. Here you can buy a course and it will remain with you forever. When choosing a course for Udemy, you need to pay attention to the number of hours of video lessons, sound quality (usually several lectures are available without registration), feedback from other listeners. Here I want to recommend the course “Java. From simple to complex. By the ratio of quality (number of hours) to price, this is probably the most advantageous course for Udemy in Russian. By clicking on the link you get a fixed price with a 90% discount. Only 10 with a few dollars in 33 hours of excellent video content. In the course of preparation of the course, the author analyzed a large number of courses, books and educational materials, as well as seven years of experience in developing enterprise-level applications.
Option three - full-time courses
Another training option that can lead you to the cherished goal. It's all ambiguous. On the one hand, going to full-time courses you expect that they will show you and tell you everything you need. On the other hand, it will be necessary to study all the same. No teacher can just teach you, no matter how good he is. Here, as in all other places, it all depends on personal motivation and own ingenuity. So I say with confidence, there’s no way to get away from books and video lessons. The advantage may be that a good teacher will help you understand those things that you could not figure out on your own and speed up the learning process a little.
Here, as in the case of video courses, you need to carefully approach the choice. Just as in other areas, the demand here creates supply and it is quite expected that there will be many low-quality full-time courses on the market. The reasons for poor quality are different and not always the reason for the teacher. A frequent problem is that in order to increase the income of school-courses, too many students are recruited, and even the best trainer will not be able to devote enough time to each student. The larger the group, the more diverse the students will be in the group. In the end, the group is divided into stronger and weaker. In the end, you either hang around because the teacher has to explain the same thing several times or if most of the group has more experience than you do, you start to fall behind hopelessly. After a short time, interest is lost and it becomes clear that money is wasted. When choosing courses, pay attention to the reviews of those who have already completed the courses, the number of hours of the course, how many people are in a group. An important indicator is the presence of input testing and a description of the minimum requirements.
Which option to choose?
Here everyone should have their best option. According to the author, the best option is a combination of all three options to one degree or another. Definitely without books can not do. If you decide to go to full-time programming courses, then first of all you need to understand whether this occupation is suitable for you at all. If yes, then before you go there, read at least one book, watch a couple of video tutorials. First, you will clearly understand your or not. Secondly, having a minimal base, you can put the right questions and eventually take the maximum out of the course. Thirdly, you can go to a course where a student is required a little more than basic computer skills.
After you have a minimum set of knowledge, it would be good to find a mentor. Pleasure is not cheap, but if the mentor is good, he will save you a lot of time. Remember, a mentor is not a person who chews everything to you, this is the one to whom you come for advice, with specific questions, when they themselves did not find the answer.
How to practice?
Practice is the most important question. It involves not so much the ability to write code, as the ability to do it correctly. Many say that you need to contribute to an open source project or write your own. Here I must upset you. If you know not much more than how to write a Hello World program, nobody will allow you to commit to an open source project. In these projects, the approach is very similar to the approach to work in companies. There are tasks, the implementation of each of them involves a revue code. The task of the people responsible for the project is to fix the bugs, and not to produce new ones.
You need to start small. First, you will learn to write programs that you see in books or video lessons so that they simply work. Try to modify them a bit. Then go to the tasks in the same book. They will help you not only learn how to type programs quickly and without errors, but also think differently.
The next step is to start writing your little project. He must solve a practical problem, even if it is small. In the process of learning you will learn new material, algorithms and design patterns. All this should be used in your project. Can not apply here, start a new project.
In parallel, it is worth practicing to perform tasks on hackerrank resources . You can not only practice writing code, but also understand the mechanics of the platform. More and more companies are starting the process of hiring employees with tasks on this site and others like him.
At this point, it's time to get a repository on GitHub or GitLab. You should have a couple of normal projects with unit tests there that you are not ashamed to show your employer. Ask an experienced friend to do a revision code. This is a good practice for experienced developers, not just newbies. If there is no friend who knows well the language you are learning, hire a mentor for an hour or two. If you are told that everything is fine, you should be suspicious of such a code review. There is always room for discussion.
At this level, you will most likely be able to contribute to the open source. If there is no work yet, practice there. You experience, society benefits.
In parallel with the repository, it is time to prepare a resume and begin to hammer in the thresholds of companies. Do not forget to include links to projects in your repository. Pass as many interviews as possible. The ability to pass them is a very important skill that will bring you additional income as a result.
In conclusion, I wish you good luck. Remember, Facebook and Apple, too, were once small companies with someone in a garage or hostel. Just need to learn. It is not so important how many hours a day you study, like how many days in a row you do it.